[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