|
|
|
@ -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; |
|
|
|
|