[FFmpeg-devel] [PATCH] ffprobe: Add support for color_trc/color_pri/chroma_loc

Stefano Sabatini stefasab at gmail.com
Sun Oct 19 13:40:38 CEST 2014


On date Friday 2014-10-10 05:29:00 +0200, Michael Niedermayer encoded:
> Idea from: a2c00d22e71d13b72828147be86aa9e961c6cae6
> Signed-off-by: Michael Niedermayer <michaelni at gmx.at>
> ---
>  doc/ffprobe.xsd                |    3 +++
>  ffprobe.c                      |   16 ++++++++++++++++
>  tests/ref/fate/ffprobe_compact |    4 ++--
>  tests/ref/fate/ffprobe_csv     |    4 ++--
>  tests/ref/fate/ffprobe_default |    6 ++++++
>  tests/ref/fate/ffprobe_flat    |    6 ++++++
>  tests/ref/fate/ffprobe_ini     |    6 ++++++
>  7 files changed, 41 insertions(+), 4 deletions(-)
> 
> diff --git a/doc/ffprobe.xsd b/doc/ffprobe.xsd
> index 84b3810..2cbb9c2 100644
> --- a/doc/ffprobe.xsd
> +++ b/doc/ffprobe.xsd
> @@ -167,6 +167,9 @@
>        <xsd:attribute name="level"                type="xsd:int"/>
>        <xsd:attribute name="color_range"          type="xsd:string"/>
>        <xsd:attribute name="color_space"          type="xsd:string"/>
> +      <xsd:attribute name="color_trc"            type="xsd:string"/>
> +      <xsd:attribute name="color_pri"            type="xsd:string"/>
> +      <xsd:attribute name="chroma_loc"           type="xsd:string"/>
>        <xsd:attribute name="timecode"             type="xsd:string"/>
>  
>        <!-- audio attributes -->
> diff --git a/ffprobe.c b/ffprobe.c
> index 304ec8e..df10493 100644
> --- a/ffprobe.c
> +++ b/ffprobe.c
> @@ -2118,6 +2118,22 @@ static int show_stream(WriterContext *w, AVFormatContext *fmt_ctx, int stream_id
>              s = av_get_colorspace_name(dec_ctx->colorspace);
>              if (s) print_str    ("color_space", s);
>              else   print_str_opt("color_space", "unknown");
> +
> +            if (dec_ctx->color_trc != AVCOL_TRC_UNSPECIFIED)
> +                print_str("color_trc", av_color_transfer_name(dec_ctx->color_trc));
> +            else
> +                print_str_opt("color_trc", av_color_transfer_name(dec_ctx->color_trc));
> +
> +            if (dec_ctx->color_primaries != AVCOL_PRI_UNSPECIFIED)
> +                print_str("color_pri", av_color_primaries_name(dec_ctx->color_primaries));
> +            else
> +                print_str_opt("color_pri", av_color_primaries_name(dec_ctx->color_primaries));
> +
> +            if (dec_ctx->chroma_sample_location != AVCHROMA_LOC_UNSPECIFIED)
> +                print_str("chroma_loc", av_chroma_location_name(dec_ctx->chroma_sample_location));
> +            else
> +                print_str_opt("chroma_loc", av_chroma_location_name(dec_ctx->chroma_sample_location));

Alternatively, more descriptive names (color_transfer,
color_primaries, chroma_location).

> +
>              if (dec_ctx->timecode_frame_start >= 0) {
>                  char tcbuf[AV_TIMECODE_STR_SIZE];
>                  av_timecode_make_mpeg_tc_string(tcbuf, dec_ctx->timecode_frame_start);
> diff --git a/tests/ref/fate/ffprobe_compact b/tests/ref/fate/ffprobe_compact
> index 3db868d..cc34011 100644
> --- a/tests/ref/fate/ffprobe_compact
> +++ b/tests/ref/fate/ffprobe_compact
> @@ -27,6 +27,6 @@ frame|media_type=video|key_frame=1|pkt_pts=6144|pkt_pts_time=0.120000|pkt_dts=61
>  packet|codec_type=video|stream_index=2|pts=6144|pts_time=0.120000|dts=6144|dts_time=0.120000|duration=2048|duration_time=0.040000|convergence_duration=N/A|convergence_duration_time=N/A|size=30000|pos=1024801|flags=K
>  frame|media_type=video|key_frame=1|pkt_pts=6144|pkt_pts_time=0.120000|pkt_dts=6144|pkt_dts_time=0.120000|best_effort_timestamp=6144|best_effort_timestamp_time=0.120000|pkt_duration=2048|pkt_duration_time=0.040000|pkt_pos=1024801|pkt_size=30000|width=100|height=100|pix_fmt=rgb24|sample_aspect_ratio=1:1|pict_type=I|coded_picture_number=0|display_picture_number=0|interlaced_frame=0|top_field_first=0|repeat_pict=0
>  stream|index=0|codec_name=pcm_s16le|profile=unknown|codec_type=audio|codec_time_base=1/44100|codec_tag_string=PSD[16]|codec_tag=0x10445350|sample_fmt=s16|sample_rate=44100|channels=1|channel_layout=unknown|bits_per_sample=16|id=N/A|r_frame_rate=0/0|avg_frame_rate=0/0|time_base=1/44100|start_pts=0|start_time=0.000000|duration_ts=N/A|duration=N/A|bit_rate=705600|max_bit_rate=N/A|bits_per_raw_sample=N/A|nb_frames=N/A|nb_read_frames=6|nb_read_packets=6|disposition:default=0|disposition:dub=0|disposition:original=0|disposition:comment=0|disposition:lyrics=0|disposition:karaoke=0|disposition:forced=0|disposition:hearing_impaired=0|disposition:visual_impaired=0|disposition:clean_effects=0|disposition:attached_pic=0|tag:E=mc²|tag:encoder=Lavc pcm_s16le
> -stream|index=1|codec_name=rawvideo|profile=unknown|codec_type=video|codec_time_base=1/51200|codec_tag_string=RGB[24]|codec_tag=0x18424752|width=320|height=240|has_b_frames=0|sample_aspect_ratio=1:1|display_aspect_ratio=4:3|pix_fmt=rgb24|level=-99|color_range=N/A|color_space=unknown|timecode=N/A|id=N/A|r_frame_rate=25/1|avg_frame_rate=25/1|time_base=1/51200|start_pts=0|start_time=0.000000|duration_ts=N/A|duration=N/A|bit_rate=N/A|max_bit_rate=N/A|bits_per_raw_sample=N/A|nb_frames=N/A|nb_read_frames=4|nb_read_packets=4|disposition:default=0|disposition:dub=0|disposition:original=0|disposition:comment=0|disposition:lyrics=0|disposition:karaoke=0|disposition:forced=0|disposition:hearing_impaired=0|disposition:visual_impaired=0|disposition:clean_effects=0|disposition:attached_pic=0|tag:title=foobar|tag:duration_ts=field-and-tags-conflict-attempt|tag:encoder=Lavc rawvideo
> -stream|index=2|codec_name=rawvideo|profile=unknown|codec_type=video|codec_time_base=1/51200|codec_tag_string=RGB[24]|codec_tag=0x18424752|width=100|height=100|has_b_frames=0|sample_aspect_ratio=1:1|display_aspect_ratio=1:1|pix_fmt=rgb24|level=-99|color_range=N/A|color_space=unknown|timecode=N/A|id=N/A|r_frame_rate=25/1|avg_frame_rate=25/1|time_base=1/51200|start_pts=0|start_time=0.000000|duration_ts=N/A|duration=N/A|bit_rate=N/A|max_bit_rate=N/A|bits_per_raw_sample=N/A|nb_frames=N/A|nb_read_frames=4|nb_read_packets=4|disposition:default=0|disposition:dub=0|disposition:original=0|disposition:comment=0|disposition:lyrics=0|disposition:karaoke=0|disposition:forced=0|disposition:hearing_impaired=0|disposition:visual_impaired=0|disposition:clean_effects=0|disposition:attached_pic=0|tag:encoder=Lavc rawvideo
> +stream|index=1|codec_name=rawvideo|profile=unknown|codec_type=video|codec_time_base=1/51200|codec_tag_string=RGB[24]|codec_tag=0x18424752|width=320|height=240|has_b_frames=0|sample_aspect_ratio=1:1|display_aspect_ratio=4:3|pix_fmt=rgb24|level=-99|color_range=N/A|color_space=unknown|color_trc=unknown|color_pri=unknown|chroma_loc=unspecified|timecode=N/A|id=N/A|r_frame_rate=25/1|avg_frame_rate=25/1|time_base=1/51200|start_pts=0|start_time=0.000000|duration_ts=N/A|duration=N/A|bit_rate=N/A|max_bit_rate=N/A|bits_per_raw_sample=N/A|nb_frames=N/A|nb_read_frames=4|nb_read_packets=4|disposition:default=0|disposition:dub=0|disposition:original=0|disposition:comment=0|disposition:lyrics=0|disposition:karaoke=0|disposition:forced=0|disposition:hearing_impaired=0|disposition:visual_impaired=0|disposition:clean_effects=0|disposition:attached_pic=0|tag:title=foobar|tag:duration_ts=field-and-tags-conflict-attempt|tag:encoder=Lavc rawvideo
> +stream|index=2|codec_name=rawvideo|profile=unknown|codec_type=video|codec_time_base=1/51200|codec_tag_string=RGB[24]|codec_tag=0x18424752|width=100|height=100|has_b_frames=0|sample_aspect_ratio=1:1|display_aspect_ratio=1:1|pix_fmt=rgb24|level=-99|color_range=N/A|color_space=unknown|color_trc=unknown|color_pri=unknown|chroma_loc=unspecified|timecode=N/A|id=N/A|r_frame_rate=25/1|avg_frame_rate=25/1|time_base=1/51200|start_pts=0|start_time=0.000000|duration_ts=N/A|duration=N/A|bit_rate=N/A|max_bit_rate=N/A|bits_per_raw_sample=N/A|nb_frames=N/A|nb_read_frames=4|nb_read_packets=4|disposition:default=0|disposition:dub=0|disposition:original=0|disposition:comment=0|disposition:lyrics=0|disposition:karaoke=0|disposition:forced=0|disposition:hearing_impaired=0|disposition:visual_impaired=0|disposition:clean_effects=0|disposition:attached_pic=0|tag:encoder=Lavc rawvideo
>  format|filename=tests/data/ffprobe-test.nut|nb_streams=3|nb_programs=0|format_name=nut|start_time=0.000000|duration=0.120000|size=1054882|bit_rate=70325466|probe_score=100|tag:title=ffprobe test file|tag:comment='A comment with CSV, XML & JSON special chars': <tag value="x">|tag:comment2=I ♥ Üñîçød€
> diff --git a/tests/ref/fate/ffprobe_csv b/tests/ref/fate/ffprobe_csv
> index 935f22e..78060da 100644
> --- a/tests/ref/fate/ffprobe_csv
> +++ b/tests/ref/fate/ffprobe_csv
> @@ -27,6 +27,6 @@ frame,video,1,6144,0.120000,6144,0.120000,6144,0.120000,2048,0.040000,794377,230
>  packet,video,2,6144,0.120000,6144,0.120000,2048,0.040000,N/A,N/A,30000,1024801,K
>  frame,video,1,6144,0.120000,6144,0.120000,6144,0.120000,2048,0.040000,1024801,30000,100,100,rgb24,1:1,I,0,0,0,0,0
>  stream,0,pcm_s16le,unknown,audio,1/44100,PSD[16],0x10445350,s16,44100,1,unknown,16,N/A,0/0,0/0,1/44100,0,0.000000,N/A,N/A,705600,N/A,N/A,N/A,6,6,0,0,0,0,0,0,0,0,0,0,0,mc²,Lavc pcm_s16le
> -stream,1,rawvideo,unknown,video,1/51200,RGB[24],0x18424752,320,240,0,1:1,4:3,rgb24,-99,N/A,unknown,N/A,N/A,25/1,25/1,1/51200,0,0.000000,N/A,N/A,N/A,N/A,N/A,N/A,4,4,0,0,0,0,0,0,0,0,0,0,0,foobar,field-and-tags-conflict-attempt,Lavc rawvideo
> -stream,2,rawvideo,unknown,video,1/51200,RGB[24],0x18424752,100,100,0,1:1,1:1,rgb24,-99,N/A,unknown,N/A,N/A,25/1,25/1,1/51200,0,0.000000,N/A,N/A,N/A,N/A,N/A,N/A,4,4,0,0,0,0,0,0,0,0,0,0,0,Lavc rawvideo
> +stream,1,rawvideo,unknown,video,1/51200,RGB[24],0x18424752,320,240,0,1:1,4:3,rgb24,-99,N/A,unknown,unknown,unknown,unspecified,N/A,N/A,25/1,25/1,1/51200,0,0.000000,N/A,N/A,N/A,N/A,N/A,N/A,4,4,0,0,0,0,0,0,0,0,0,0,0,foobar,field-and-tags-conflict-attempt,Lavc rawvideo
> +stream,2,rawvideo,unknown,video,1/51200,RGB[24],0x18424752,100,100,0,1:1,1:1,rgb24,-99,N/A,unknown,unknown,unknown,unspecified,N/A,N/A,25/1,25/1,1/51200,0,0.000000,N/A,N/A,N/A,N/A,N/A,N/A,4,4,0,0,0,0,0,0,0,0,0,0,0,Lavc rawvideo
>  format,tests/data/ffprobe-test.nut,3,0,nut,0.000000,0.120000,1054882,70325466,100,ffprobe test file,"'A comment with CSV, XML & JSON special chars': <tag value=""x"">",I ♥ Üñîçød€
> diff --git a/tests/ref/fate/ffprobe_default b/tests/ref/fate/ffprobe_default
> index e29e4ab..235fb38 100644
> --- a/tests/ref/fate/ffprobe_default
> +++ b/tests/ref/fate/ffprobe_default
> @@ -566,6 +566,9 @@ pix_fmt=rgb24
>  level=-99
>  color_range=N/A
>  color_space=unknown
> +color_trc=unknown
> +color_pri=unknown
> +chroma_loc=unspecified
>  timecode=N/A
>  id=N/A
>  r_frame_rate=25/1
> @@ -613,6 +616,9 @@ pix_fmt=rgb24
>  level=-99
>  color_range=N/A
>  color_space=unknown
> +color_trc=unknown
> +color_pri=unknown
> +chroma_loc=unspecified
>  timecode=N/A
>  id=N/A
>  r_frame_rate=25/1
> diff --git a/tests/ref/fate/ffprobe_flat b/tests/ref/fate/ffprobe_flat
> index 289c535..6911c7b 100644
> --- a/tests/ref/fate/ffprobe_flat
> +++ b/tests/ref/fate/ffprobe_flat
> @@ -507,6 +507,9 @@ streams.stream.1.pix_fmt="rgb24"
>  streams.stream.1.level=-99
>  streams.stream.1.color_range="N/A"
>  streams.stream.1.color_space="unknown"
> +streams.stream.1.color_trc="unknown"
> +streams.stream.1.color_pri="unknown"
> +streams.stream.1.chroma_loc="unspecified"
>  streams.stream.1.timecode="N/A"
>  streams.stream.1.id="N/A"
>  streams.stream.1.r_frame_rate="25/1"
> @@ -552,6 +555,9 @@ streams.stream.2.pix_fmt="rgb24"
>  streams.stream.2.level=-99
>  streams.stream.2.color_range="N/A"
>  streams.stream.2.color_space="unknown"
> +streams.stream.2.color_trc="unknown"
> +streams.stream.2.color_pri="unknown"
> +streams.stream.2.chroma_loc="unspecified"

LGTM even if I don't know why there is no consistency between enum
names and strings.

[...]
-- 
FFmpeg = Forgiving Formidable Majestic Plastic Enhanced God


More information about the ffmpeg-devel mailing list