On Wed, May 17, 2017 at 09:49:38PM -0300, James Almer wrote: > As defined in "VP Codec ISO Media File Format Binding v1.0" > https://github.com/webmproject/vp9-dash/blob/master/VPCodecISOMediaFileFormatBinding.md > > Signed-off-by: James Almer <jamr...@gmail.com> > --- > libavformat/movenc.c | 37 +++++++++++++++++++++++++++++++++++++ > 1 file changed, 37 insertions(+) > > diff --git a/libavformat/movenc.c b/libavformat/movenc.c > index a6c0662cd0..cd436df7a4 100644 > --- a/libavformat/movenc.c > +++ b/libavformat/movenc.c > @@ -42,6 +42,7 @@ > #include "libavutil/avstring.h" > #include "libavutil/intfloat.h" > #include "libavutil/mathematics.h" > +#include "libavutil/mastering_display_metadata.h" > #include "libavutil/libm.h" > #include "libavutil/opt.h" > #include "libavutil/dict.h" > @@ -1118,6 +1119,41 @@ static int mov_write_vpcc_tag(AVFormatContext *s, > AVIOContext *pb, MOVTrack *tra > return update_size(pb, pos); > } > > +static int mov_write_smdm_tag(AVFormatContext *s, AVIOContext *pb, MOVTrack > *track) > +{ > + int size = 0; > + int64_t pos; > + const AVMasteringDisplayMetadata *mastering = > + (const AVMasteringDisplayMetadata *) > av_stream_get_side_data(track->st, > + > AV_PKT_DATA_MASTERING_DISPLAY_METADATA, > + &size); > + if (!size) > + return 0; > + > + if (!mastering->has_primaries || !mastering->has_luminance) { > + av_log(s, AV_LOG_WARNING, "Incomplete Mastering Display metadata. > Both luminance " > + "and display primaries are needed\n"); > + return 0; > + } > + > + pos = avio_tell(pb); > + > + avio_wb32(pb, 0); > + ffio_wfourcc(pb, "SmDm"); > + avio_wb32(pb, 0); /* version & flags */
> + avio_wb16(pb, lrint(av_q2d(mastering->display_primaries[0][0]) * (1 << > 16))); > + avio_wb16(pb, lrint(av_q2d(mastering->display_primaries[0][1]) * (1 << > 16))); > + avio_wb16(pb, lrint(av_q2d(mastering->display_primaries[1][0]) * (1 << > 16))); > + avio_wb16(pb, lrint(av_q2d(mastering->display_primaries[1][1]) * (1 << > 16))); > + avio_wb16(pb, lrint(av_q2d(mastering->display_primaries[2][0]) * (1 << > 16))); > + avio_wb16(pb, lrint(av_q2d(mastering->display_primaries[2][1]) * (1 << > 16))); > + avio_wb16(pb, lrint(av_q2d(mastering->white_point[0]) * (1 << > 16))); > + avio_wb16(pb, lrint(av_q2d(mastering->white_point[1]) * (1 << > 16))); > + avio_wb32(pb, lrint(av_q2d(mastering->max_luminance) * (1 << > 8))); > + avio_wb32(pb, lrint(av_q2d(mastering->min_luminance) * (1 << > 14))); These may need range checks. Our API doesnt seem to define limits, so they might fall outside the 16/32 bit range used to store them, unless i miss something [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB I have never wished to cater to the crowd; for what I know they do not approve, and what they approve I do not know. -- Epicurus
signature.asc
Description: Digital signature
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel