[FFmpeg-cvslog] avformat/mov: don't rescale mastering display values from the SmDm atom
James Almer
git at videolan.org
Mon Feb 11 21:59:51 EET 2019
ffmpeg | branch: master | James Almer <jamrial at gmail.com> | Sat Feb 9 20:14:14 2019 -0300| [00fd38f1846a3c889b6ec645107eaea415b99840] | committer: James Almer
avformat/mov: don't rescale mastering display values from the SmDm atom
Simplifies code.
Reviewed-by: Michael Niedermayer <michaelni at gmx.at>
Signed-off-by: James Almer <jamrial at gmail.com>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=00fd38f1846a3c889b6ec645107eaea415b99840
---
libavformat/mov.c | 24 ++++++++++--------------
1 file changed, 10 insertions(+), 14 deletions(-)
diff --git a/libavformat/mov.c b/libavformat/mov.c
index cc91beb7f9..d889c26b78 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -5288,9 +5288,7 @@ static int mov_read_vpcc(MOVContext *c, AVIOContext *pb, MOVAtom atom)
static int mov_read_smdm(MOVContext *c, AVIOContext *pb, MOVAtom atom)
{
MOVStreamContext *sc;
- const int chroma_den = 50000;
- const int luma_den = 10000;
- int i, j, version;
+ int i, version;
if (c->fc->nb_streams < 1)
return AVERROR_INVALIDDATA;
@@ -5313,17 +5311,15 @@ static int mov_read_smdm(MOVContext *c, AVIOContext *pb, MOVAtom atom)
if (!sc->mastering)
return AVERROR(ENOMEM);
- for (i = 0; i < 3; i++)
- for (j = 0; j < 2; j++)
- sc->mastering->display_primaries[i][j] =
- av_make_q(lrint(((double)avio_rb16(pb) / (1 << 16)) * chroma_den), chroma_den);
- for (i = 0; i < 2; i++)
- sc->mastering->white_point[i] =
- av_make_q(lrint(((double)avio_rb16(pb) / (1 << 16)) * chroma_den), chroma_den);
- sc->mastering->max_luminance =
- av_make_q(lrint(((double)avio_rb32(pb) / (1 << 8)) * luma_den), luma_den);
- sc->mastering->min_luminance =
- av_make_q(lrint(((double)avio_rb32(pb) / (1 << 14)) * luma_den), luma_den);
+ for (i = 0; i < 3; i++) {
+ sc->mastering->display_primaries[i][0] = av_make_q(avio_rb16(pb), 1 << 16);
+ sc->mastering->display_primaries[i][1] = av_make_q(avio_rb16(pb), 1 << 16);
+ }
+ sc->mastering->white_point[0] = av_make_q(avio_rb16(pb), 1 << 16);
+ sc->mastering->white_point[1] = av_make_q(avio_rb16(pb), 1 << 16);
+
+ sc->mastering->max_luminance = av_make_q(avio_rb32(pb), 1 << 8);
+ sc->mastering->min_luminance = av_make_q(avio_rb32(pb), 1 << 14);
sc->mastering->has_primaries = 1;
sc->mastering->has_luminance = 1;
More information about the ffmpeg-cvslog
mailing list