[FFmpeg-devel] [PATCH 1/2] [avformat/mxf] Add core colorimetry support to MXF.

Michael Niedermayer michael at niedermayer.cc
Sat Sep 24 14:35:59 EEST 2016


On Fri, Sep 23, 2016 at 10:19:03PM -0700, Steven Robertson wrote:
> Signed-off-by: Steven Robertson <steven at strobe.cc>
> ---
>  libavformat/mxf.c    | 33 +++++++++++++++++++++++++++++++++
>  libavformat/mxf.h    |  3 +++
>  libavformat/mxfdec.c | 29 +++++++++++++++++++++++++++++
>  libavformat/mxfenc.c | 36 +++++++++++++++++++++++++++++++-----
>  4 files changed, 96 insertions(+), 5 deletions(-)

breaks fate
make: *** [fate-copy-trac4914] Error 1
make: *** [fate-lavf-mxf_opatom_audio] Error 1
make: *** [fate-lavf-mxf] Error 1
make: *** [fate-lavf-mxf_d10] Error 1
make: *** [fate-lavf-mxf_opatom] Error 1

[...]
> @@ -2085,6 +2100,20 @@ static int mxf_parse_structural_metadata(MXFContext *mxf)
>                      }
>                  }
>              }
> +
> +            color_primaries_ul = mxf_get_codec_ul(ff_mxf_color_primaries_uls,
> +                                                  &descriptor->color_primaries_ul);
> +            if (color_primaries_ul->uid[0])
> +              st->codecpar->color_primaries = color_primaries_ul->id;
> +            color_space_ul = mxf_get_codec_ul(ff_mxf_coding_equations_uls,
> +                                              &descriptor->color_space_ul);
> +            if (color_space_ul->uid[0])
> +              st->codecpar->color_space = color_space_ul->id;
> +            color_trc_ul = mxf_get_codec_ul(ff_mxf_transfer_characteristics_uls,
> +                                            &descriptor->color_trc_ul);
> +            if (color_trc_ul->uid[0])
> +              st->codecpar->color_trc = color_trc_ul->id;
> +
>              st->need_parsing = AVSTREAM_PARSE_HEADERS;
>              if (material_track->sequence->origin) {
>                  av_dict_set_int(&st->metadata, "material_track_origin", material_track->sequence->origin, 0);
> diff --git a/libavformat/mxfenc.c b/libavformat/mxfenc.c
> index 7733ef8..eb77f3a 100644
> --- a/libavformat/mxfenc.c
> +++ b/libavformat/mxfenc.c
> @@ -415,9 +415,12 @@ static const MXFLocalTagPair mxf_local_tag_batch[] = {
>      { 0x3202, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x01,0x04,0x01,0x05,0x02,0x01,0x00,0x00,0x00}}, /* Stored Height */
>      { 0x3209, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x01,0x04,0x01,0x05,0x01,0x0C,0x00,0x00,0x00}}, /* Display Width */
>      { 0x3208, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x01,0x04,0x01,0x05,0x01,0x0B,0x00,0x00,0x00}}, /* Display Height */
> +    { 0x3210, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x04,0x01,0x02,0x01,0x01,0x01,0x02,0x00}}, /* Transfer Characteristic */
>      { 0x320B, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x01,0x04,0x01,0x05,0x01,0x0E,0x00,0x00,0x00}}, /* Presentation Y offset */
>      { 0x320E, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x01,0x04,0x01,0x01,0x01,0x01,0x00,0x00,0x00}}, /* Aspect Ratio */
>      { 0x3201, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x04,0x01,0x06,0x01,0x00,0x00,0x00,0x00}}, /* Picture Essence Coding */
> +    { 0x321A, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x04,0x01,0x02,0x01,0x01,0x03,0x01,0x00}}, /* Coding Equations */
> +    { 0x3219, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x09,0x04,0x01,0x02,0x01,0x01,0x06,0x01,0x00}}, /* Color Primaries */
>      { 0x3212, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x04,0x01,0x03,0x01,0x06,0x00,0x00,0x00}}, /* Field Dominance (Opt) */
>      { 0x3215, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x05,0x04,0x05,0x01,0x13,0x00,0x00,0x00,0x00}}, /* Signal Standard */
>      // CDCI Picture Essence Descriptor

> @@ -576,11 +579,10 @@ static void mxf_free(AVFormatContext *s)
>      }
>  }
>  
> -static const MXFCodecUL *mxf_get_data_definition_ul(int type)
> +static const MXFCodecUL *mxf_get_ul_by_id(const MXFCodecUL *uls, int id)
>  {
> -    const MXFCodecUL *uls = ff_mxf_data_definition_uls;
>      while (uls->uid[0]) {
> -        if (type == uls->id)
> +        if (id == uls->id)
>              break;
>          uls++;
>      }
> @@ -835,7 +837,7 @@ static void mxf_write_common_fields(AVFormatContext *s, AVStream *st)
>      if (st == mxf->timecode_track)
>          avio_write(pb, smpte_12m_timecode_track_data_ul, 16);
>      else {
> -        const MXFCodecUL *data_def_ul = mxf_get_data_definition_ul(st->codecpar->codec_type);
> +        const MXFCodecUL *data_def_ul = mxf_get_ul_by_id(ff_mxf_data_definition_uls, st->codecpar->codec_type);
>          avio_write(pb, data_def_ul->uid, 16);
>      }
>  

refactoring the code to make it more generic belongs in a seperate
patch


> @@ -1011,6 +1013,9 @@ static void mxf_write_cdci_common(AVFormatContext *s, AVStream *st, const UID ke
>  {
>      MXFStreamContext *sc = st->priv_data;
>      AVIOContext *pb = s->pb;
> +    const MXFCodecUL* color_trc_ul;
> +    const MXFCodecUL* color_primaries_ul;
> +    const MXFCodecUL* color_space_ul;
>      int stored_height = (st->codecpar->height+15)/16*16;
>      int display_height;
>      int f1, f2;
> @@ -1020,6 +1025,16 @@ static void mxf_write_cdci_common(AVFormatContext *s, AVStream *st, const UID ke
>      if (sc->signal_standard)
>          desc_size += 5;
>  
> +    color_trc_ul = mxf_get_ul_by_id(ff_mxf_transfer_characteristics_uls, st->codecpar->color_trc);
> +    if (color_trc_ul->uid[0])
> +      desc_size += 20;
> +    color_primaries_ul = mxf_get_ul_by_id(ff_mxf_color_primaries_uls, st->codecpar->color_primaries);
> +    if (color_primaries_ul->uid[0])
> +      desc_size += 20;
> +    color_space_ul = mxf_get_ul_by_id(ff_mxf_coding_equations_uls, st->codecpar->color_space);
> +    if (color_space_ul->uid[0])
> +      desc_size += 20;

inconsistent indention

[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Republics decline into democracies and democracies degenerate into
despotisms. -- Aristotle
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: Digital signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20160924/e5fd76cf/attachment.sig>


More information about the ffmpeg-devel mailing list