[FFmpeg-devel] [PATCH] ffprobe: generalize writer subsection nesting model

Clément Bœsch ubitux at gmail.com
Wed Sep 19 00:34:44 CEST 2012


On Tue, Sep 18, 2012 at 01:45:33PM +0200, Stefano Sabatini wrote:
> On date Tuesday 2012-09-18 01:52:14 +0200, Michael Niedermayer encoded:
> > On Tue, Sep 18, 2012 at 12:43:55AM +0200, Stefano Sabatini wrote:
> > > On date Tuesday 2012-09-18 00:38:39 +0200, Stefano Sabatini encoded:
> > > > Discard unflexible structure based on the root/chapter/section structure
> > > > in favor of a generalized concept of section.
> > > > 
> > > > This should allow to represent sections at generic level of nesting, and
> > > > allow subsections printing selection.
> > > > 
> > > > Also, slightly simplify the code.
> > > > ---
> > > >  ffprobe.c |  515 +++++++++++++++++++++++++++++--------------------------------
> > > >  1 files changed, 242 insertions(+), 273 deletions(-)
> > > 
> > > Note: I tested the patch against a local fate test for each
> > > writer. The test file was generated with:
> > > 
> > > ffmpeg  -f lavfi -i "aevalsrc=sin(400*PI*2*t)::d=0.5[out0]; testsrc=d=0.5[out1]; testsrc=s=100x100:d=0.5[out2]" \
> > >    -flags +bitexact  -map 0:0 -map 0:1 -map 0:2 \ 
> > >    -metadata "title=ffprobe test file" \
> > >    -metadata "comment='A comment wih XML & JSON special chars': <tag value=\"x\">" \

Could you put some UTF-8 as well? ♥ or ☭ or whatever…

> > >    -y tests/data/fate/ffprobe-test.nut
> > > 
> > > and I'm not sure if it is best to auto-generate it when fate is run or
> > > I should just push the generated file to the samples FATE collection.
> > 
> > some points to consider:
> > how large are the files?
> > how much time is spend by generating them?
> 
> > is it worth to test the creation of the files too?
> 
> Maybe, but this would also add a dependency on lavfi for testing
> ffprobe. On the bright side this would allow easy modifications of the
> generated file (e.g. for adding streams/metadata).
> 
> See patch attached (which needs review as I don't have deep knowledge
> of the fate system).
> -- 
> FFmpeg = Fascinating and Fancy Mega Puristic Ephemeral Genius

> From a1c6594526e821462b2e69b28d1278668dfd3909 Mon Sep 17 00:00:00 2001
> From: Stefano Sabatini <stefasab at gmail.com>
> Date: Mon, 17 Sep 2012 21:08:46 +0200
> Subject: [PATCH] fate: add fate-ffprobe test
> 
> ---
>  tests/Makefile                 |   13 +
>  tests/fate/ffprobe.mak         |   33 +
>  tests/ref/fate/ffprobe_compact |  101 +++
>  tests/ref/fate/ffprobe_csv     |  101 +++
>  tests/ref/fate/ffprobe_default | 1732 +++++++++++++++++++++++++++++++++++++++
>  tests/ref/fate/ffprobe_flat    | 1530 +++++++++++++++++++++++++++++++++++
>  tests/ref/fate/ffprobe_ini     | 1735 ++++++++++++++++++++++++++++++++++++++++
>  tests/ref/fate/ffprobe_json    | 1625 +++++++++++++++++++++++++++++++++++++
>  tests/ref/fate/ffprobe_xml     |  113 +++
>  9 files changed, 6983 insertions(+), 0 deletions(-)
>  create mode 100644 tests/fate/ffprobe.mak
>  create mode 100644 tests/ref/fate/ffprobe_compact
>  create mode 100644 tests/ref/fate/ffprobe_csv
>  create mode 100644 tests/ref/fate/ffprobe_default
>  create mode 100644 tests/ref/fate/ffprobe_flat
>  create mode 100644 tests/ref/fate/ffprobe_ini
>  create mode 100644 tests/ref/fate/ffprobe_json
>  create mode 100644 tests/ref/fate/ffprobe_xml
> 
> diff --git a/tests/Makefile b/tests/Makefile
> index 81ce3e1..1e849c3 100644
> --- a/tests/Makefile
> +++ b/tests/Makefile
> @@ -32,6 +32,15 @@ tests/data/vsynth2.yuv: tests/rotozoom$(HOSTEXESUF) | tests/data
>  
>  tests/data/%.sw tests/data/asynth% tests/data/vsynth%.yuv tests/vsynth%/00.pgm: TAG = GEN
>  
> +FFPROBE_TEST_CMD = ffmpeg$(EXESUF) -f lavfi -i "aevalsrc=sin(400*PI*2*t)::d=0.5[out0]; testsrc=d=0.5[out1]; testsrc=s=100x100:d=0.5[out2]" \
> +	  -flags +bitexact -map 0:0 -map 0:1 -map 0:2 \
> +	  -metadata "title=ffprobe test file" \
> +	  -metadata "comment='A comment wih XML & JSON special chars': <tag value=\"x\">" \
> +	  -y
> +
> +tests/data/ffprobe-test.nut:
> +	$(M)$(FFPROBE_TEST_CMD) $@
> +
>  include $(SRC_PATH)/tests/fate/acodec.mak
>  include $(SRC_PATH)/tests/fate/vcodec.mak
>  
> @@ -53,6 +62,7 @@ include $(SRC_PATH)/tests/fate/dfa.mak
>  include $(SRC_PATH)/tests/fate/dpcm.mak
>  include $(SRC_PATH)/tests/fate/ea.mak
>  include $(SRC_PATH)/tests/fate/filter.mak
> +include $(SRC_PATH)/tests/fate/ffprobe.mak

ffprobe before filter if my memory isn't playing tricks with me

>  include $(SRC_PATH)/tests/fate/flac.mak
>  include $(SRC_PATH)/tests/fate/fft.mak
>  include $(SRC_PATH)/tests/fate/h264.mak
> @@ -103,9 +113,12 @@ FATE_EXTERN += $(FATE_EXTERN-yes)
>  
>  FATE += $(FATE-yes)
>  FATE += $(FATE_LIBAVUTIL)
> +FATE += $(FATE_FFPROBE)
>  
>  $(FATE_FFMPEG) $(FATE_LAVF_FATE) $(FATE_SAMPLES_AVCONV) $(FATE_SAMPLES_FFMPEG): ffmpeg$(EXESUF)
>  
> +$(FATE_FFPROBE): ffprobe$(EXESUF)
> +
>  $(FATE_LAVF):  $(AREF) $(VREF)
>  $(FATE_LAVFI): $(VREF) libavfilter/filtfmts-test$(EXESUF)
>  $(FATE_SEEK):  fate-acodec fate-vsynth2 fate-lavf libavformat/seek-test$(EXESUF)
> diff --git a/tests/fate/ffprobe.mak b/tests/fate/ffprobe.mak
> new file mode 100644
> index 0000000..56f283b
> --- /dev/null
> +++ b/tests/fate/ffprobe.mak
> @@ -0,0 +1,33 @@
> +FFPROBE_TEST_FILE=tests/data/ffprobe-test.nut
> +FFPROBE_COMMAND=ffprobe$(EXESUF) -show_streams -show_packets -show_format -show_frames $(FFPROBE_TEST_FILE)
> +
> +FATE_FFPROBE += fate-ffprobe_compact
> +fate-ffprobe_compact: $(FFPROBE_TEST_FILE)
> +fate-ffprobe_compact: CMD = run $(FFPROBE_COMMAND) -of compact
> +

Can't you define a "ffprobefmt" command in fate-run.sh instead?

> +FATE_FFPROBE += fate-ffprobe_csv
> +fate-ffprobe_compact: $(FFPROBE_TEST_FILE)
> +fate-ffprobe_csv: CMD = run $(FFPROBE_COMMAND) -of csv
> +
> +FATE_FFPROBE += fate-ffprobe_default
> +fate-ffprobe_compact: $(FFPROBE_TEST_FILE)
> +fate-ffprobe_default: CMD = run $(FFPROBE_COMMAND) -of default
> +
> +FATE_FFPROBE += fate-ffprobe_flat
> +fate-ffprobe_compact: $(FFPROBE_TEST_FILE)
> +fate-ffprobe_flat: CMD = run $(FFPROBE_COMMAND) -of flat
> +
> +FATE_FFPROBE += fate-ffprobe_ini
> +fate-ffprobe_compact: $(FFPROBE_TEST_FILE)
> +fate-ffprobe_ini: CMD = run $(FFPROBE_COMMAND) -of ini
> +
> +FATE_FFPROBE += fate-ffprobe_json
> +fate-ffprobe_compact: $(FFPROBE_TEST_FILE)
> +fate-ffprobe_json: CMD = run $(FFPROBE_COMMAND) -of json
> +
> +FATE_FFPROBE += fate-ffprobe_xml
> +fate-ffprobe_compact: $(FFPROBE_TEST_FILE)
> +fate-ffprobe_xml: CMD = run $(FFPROBE_COMMAND) -of xml
> +
> +fate-ffprobe: $(FATE_FFPROBE)
> +

[...]

The references look quite huge... Couldn't you make them contain only 3-4
frames? (maybe using -frames:v instead of a duration at the generation
step)

Thanks for this!

-- 
Clément B.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 490 bytes
Desc: not available
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20120919/c9783fa4/attachment.asc>


More information about the ffmpeg-devel mailing list