+ if (IS_KLV_KEY(uid, mxf_mastering_display_prefix)) {
+ if (!descriptor->mastering) {
+ descriptor->mastering = av_mastering_display_metadata_alloc();
+ if (!descriptor->mastering)
+ return AVERROR(ENOMEM);
+ }
+ if (IS_KLV_KEY(uid, mxf_mastering_display_uls[0])) {
+ for (int i = 0; i < 3; i++) {
+ /* Order: large x, large y, other (i.e. RGB) */
+ descriptor->mastering->display_primaries[i][0] = av_make_q(avio_rb16(pb), FF_MXF_MASTERING_CHROMA_DEN);
+ descriptor->mastering->display_primaries[i][1] = av_make_q(avio_rb16(pb), FF_MXF_MASTERING_CHROMA_DEN);
+ }
+ /* Check we have seen mxf_mastering_display_white_point_chromaticity */
+ if (descriptor->mastering->white_point[0].den != 0)
+ descriptor->mastering->has_primaries = 1;
+ }
+ if (IS_KLV_KEY(uid, mxf_mastering_display_uls[1])) {
+ descriptor->mastering->white_point[0] = av_make_q(avio_rb16(pb), FF_MXF_MASTERING_CHROMA_DEN);
+ descriptor->mastering->white_point[1] = av_make_q(avio_rb16(pb), FF_MXF_MASTERING_CHROMA_DEN);
+ /* Check we have seen mxf_mastering_display_primaries */
+ if (descriptor->mastering->display_primaries[0][0].den != 0)
+ descriptor->mastering->has_primaries = 1;
+ }
+ if (IS_KLV_KEY(uid, mxf_mastering_display_uls[2])) {
+ descriptor->mastering->max_luminance = av_make_q(avio_rb32(pb), FF_MXF_MASTERING_LUMA_DEN);
+ /* Check we have seen mxf_mastering_display_minimum_luminance */
+ if (descriptor->mastering->min_luminance.den != 0)
+ descriptor->mastering->has_luminance = 1;
+ }
+ if (IS_KLV_KEY(uid, mxf_mastering_display_uls[3])) {
+ descriptor->mastering->min_luminance = av_make_q(avio_rb32(pb), FF_MXF_MASTERING_LUMA_DEN);
+ /* Check we have seen mxf_mastering_display_maximum_luminance */
+ if (descriptor->mastering->max_luminance.den != 0)
+ descriptor->mastering->has_luminance = 1;
+ }
+ }
+ if (IS_KLV_KEY(uid, mxf_apple_coll_prefix)) {
+ if (!descriptor->coll) {
+ descriptor->coll = av_content_light_metadata_alloc(&descriptor->coll_size);
+ if (!descriptor->coll)
+ return AVERROR(ENOMEM);
+ }
+ if (IS_KLV_KEY(uid, mxf_apple_coll_max_cll)) {
+ descriptor->coll->MaxCLL = avio_rb16(pb);
+ }
+ if (IS_KLV_KEY(uid, mxf_apple_coll_max_fall)) {
+ descriptor->coll->MaxFALL = avio_rb16(pb);
+ }
+ }