sizeof AVMasteringDisplayMetadata isn't part of ABI.
Unified · Split
| @@ -1248,15 +1248,22 @@ static int flv_update_video_color_info(AVFormatContext *s, AVStream *st) · 1247 unmodified lines | |||
| 1248 | } | 1248 | } |
| 1249 | 1249 | ||
| 1250 | if (has_mastering_primaries || has_mastering_luminance) { | 1250 | if (has_mastering_primaries || has_mastering_luminance) { |
| 1251 | AVMasteringDisplayMetadata *metadata; | 1251 | size_t size = 0; |
| 1252 | AVPacketSideData *sd = av_packet_side_data_new(&st->codecpar->coded_side_data, | 1252 | AVMasteringDisplayMetadata *metadata = av_mastering_display_metadata_alloc_size(&size); |
| 1253 | AVPacketSideData *sd; | ||
| 1254 | |||
| 1255 | if (!metadata) | ||
| 1256 | return AVERROR(ENOMEM); | ||
| 1257 | |||
| 1258 | sd = av_packet_side_data_add(&st->codecpar->coded_side_data, | ||
| 1253 | &st->codecpar->nb_coded_side_data, | 1259 | &st->codecpar->nb_coded_side_data, |
| 1254 | AV_PKT_DATA_MASTERING_DISPLAY_METADATA, | 1260 | AV_PKT_DATA_MASTERING_DISPLAY_METADATA, |
| 1255 | sizeof(AVMasteringDisplayMetadata), 0); | 1261 | metadata, size, 0); |
| 1256 | if (!sd) | 1262 | if (!sd) { |
| 1263 | av_freep(&metadata); | ||
| 1257 | return AVERROR(ENOMEM); | 1264 | return AVERROR(ENOMEM); |
| 1258 | metadata = (AVMasteringDisplayMetadata*)sd->data; | 1265 | } |
| 1259 | memset(metadata, 0, sizeof(AVMasteringDisplayMetadata)); | 1266 | |
| 1260 | // hdrCll | 1267 | // hdrCll |
| 1261 | if (has_mastering_luminance) { | 1268 | if (has_mastering_luminance) { |
| 1262 | metadata->max_luminance = av_d2q(mastering_meta->max_luminance, INT_MAX); | 1269 | metadata->max_luminance = av_d2q(mastering_meta->max_luminance, INT_MAX); |