History

lavc/vaapi_encode_av1: Insert HDR_MDCV metadata if have

Only look for HDR_MDVC on key frame on the output.

Haihao Xiang committed 2 years ago

Commit 0bdf71a1 parent 7f3ba6b1 file · +46 −0Browse files

Showing the changes to libavcodec (1 of 1 file). Show all

Unified · Split

libavcodec/vaapi_encode_av1.c+46−0
@@ -23,6 +23,7 @@ · 22 unmodified lines
2323
2424 #include "libavutil/pixdesc.h"
2525 #include "libavutil/opt.h"
26+#include "libavutil/mastering_display_metadata.h"
2627
2728 #include "cbs_av1.h"
2829 #include "put_bits.h"
@@ -663,6 +664,51 @@ static int vaapi_encode_av1_init_picture_params(AVCodecContext *avctx, · 634 unmodified lines
663664
664665 priv->nb_mh = 0;
665666
667+ if (pic->type == PICTURE_TYPE_IDR) {
668+ AVFrameSideData *sd =
669+ av_frame_get_side_data(pic->input_image,
670+ AV_FRAME_DATA_MASTERING_DISPLAY_METADATA);
671+ if (sd) {
672+ AVMasteringDisplayMetadata *mdm =
673+ (AVMasteringDisplayMetadata *)sd->data;
674+ if (mdm->has_primaries && mdm->has_luminance) {
675+ AV1RawOBU *obu = &priv->mh[priv->nb_mh++];
676+ AV1RawMetadata *md = &obu->obu.metadata;
677+ AV1RawMetadataHDRMDCV *mdcv = &md->metadata.hdr_mdcv;
678+ const int chroma_den = 1 << 16;
679+ const int max_luma_den = 1 << 8;
680+ const int min_luma_den = 1 << 14;
681+
682+ memset(obu, 0, sizeof(*obu));
683+ obu->header.obu_type = AV1_OBU_METADATA;
684+ md->metadata_type = AV1_METADATA_TYPE_HDR_MDCV;
685+
686+ for (i = 0; i < 3; i++) {
687+ mdcv->primary_chromaticity_x[i] =
688+ av_rescale(mdm->display_primaries[i][0].num, chroma_den,
689+ mdm->display_primaries[i][0].den);
690+ mdcv->primary_chromaticity_y[i] =
691+ av_rescale(mdm->display_primaries[i][1].num, chroma_den,
692+ mdm->display_primaries[i][1].den);
693+ }
694+
695+ mdcv->white_point_chromaticity_x =
696+ av_rescale(mdm->white_point[0].num, chroma_den,
697+ mdm->white_point[0].den);
698+ mdcv->white_point_chromaticity_y =
699+ av_rescale(mdm->white_point[1].num, chroma_den,
700+ mdm->white_point[1].den);
701+
702+ mdcv->luminance_max =
703+ av_rescale(mdm->max_luminance.num, max_luma_den,
704+ mdm->max_luminance.den);
705+ mdcv->luminance_min =
706+ av_rescale(mdm->min_luminance.num, min_luma_den,
707+ mdm->min_luminance.den);
708+ }
709+ }
710+ }
711+
666712 end:
667713 ff_cbs_fragment_reset(obu);
668714 return ret;

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t