diff --git a/plugins/obs-ffmpeg/ffmpeg-mux/ffmpeg-mux.c b/plugins/obs-ffmpeg/ffmpeg-mux/ffmpeg-mux.c index 42401820a..fbebd5a85 100644 --- a/plugins/obs-ffmpeg/ffmpeg-mux/ffmpeg-mux.c +++ b/plugins/obs-ffmpeg/ffmpeg-mux/ffmpeg-mux.c @@ -423,8 +423,18 @@ static void create_video_stream(struct ffmpeg_mux *ffm) if (ffm->params.max_luminance > 0) { AVMasteringDisplayMetadata *const mastering = av_mastering_display_metadata_alloc(); + mastering->display_primaries[0][0] = av_make_q(17, 25); + mastering->display_primaries[0][1] = av_make_q(8, 25); + mastering->display_primaries[1][0] = av_make_q(53, 200); + mastering->display_primaries[1][1] = av_make_q(69, 100); + mastering->display_primaries[2][0] = av_make_q(3, 20); + mastering->display_primaries[2][1] = av_make_q(3, 50); + mastering->white_point[0] = av_make_q(3127, 10000); + mastering->white_point[1] = av_make_q(329, 1000); + mastering->min_luminance = av_make_q(0, 1); mastering->max_luminance = av_make_q(ffm->params.max_luminance, 1); + mastering->has_primaries = 1; mastering->has_luminance = 1; av_stream_add_side_data(ffm->video_stream, AV_PKT_DATA_MASTERING_DISPLAY_METADATA, diff --git a/plugins/obs-ffmpeg/obs-ffmpeg-mux.c b/plugins/obs-ffmpeg/obs-ffmpeg-mux.c index 6d40401ac..aafeab98c 100644 --- a/plugins/obs-ffmpeg/obs-ffmpeg-mux.c +++ b/plugins/obs-ffmpeg/obs-ffmpeg-mux.c @@ -163,7 +163,8 @@ static void add_video_encoder_params(struct ffmpeg_muxer *stream, : AVCOL_RANGE_MPEG; const int max_luminance = - (trc == AVCOL_TRC_SMPTE2084) + ((trc == AVCOL_TRC_SMPTE2084) || + (trc == AVCOL_TRC_ARIB_STD_B67)) ? (int)obs_get_video_hdr_nominal_peak_level() : 0; diff --git a/plugins/obs-ffmpeg/obs-ffmpeg-output.c b/plugins/obs-ffmpeg/obs-ffmpeg-output.c index ea0dd12af..a1b6e4198 100644 --- a/plugins/obs-ffmpeg/obs-ffmpeg-output.c +++ b/plugins/obs-ffmpeg/obs-ffmpeg-output.c @@ -223,11 +223,22 @@ static bool create_video_stream(struct ffmpeg_data *data) data->config.video_encoder)) return false; - if (data->config.color_trc == AVCOL_TRC_SMPTE2084) { + if ((data->config.color_trc == AVCOL_TRC_SMPTE2084) || + (data->config.color_trc == AVCOL_TRC_ARIB_STD_B67)) { AVMasteringDisplayMetadata *const mastering = av_mastering_display_metadata_alloc(); + mastering->display_primaries[0][0] = av_make_q(17, 25); + mastering->display_primaries[0][1] = av_make_q(8, 25); + mastering->display_primaries[1][0] = av_make_q(53, 200); + mastering->display_primaries[1][1] = av_make_q(69, 100); + mastering->display_primaries[2][0] = av_make_q(3, 20); + mastering->display_primaries[2][1] = av_make_q(3, 50); + mastering->white_point[0] = av_make_q(3127, 10000); + mastering->white_point[1] = av_make_q(329, 1000); + mastering->min_luminance = av_make_q(0, 1); mastering->max_luminance = av_make_q( (int)obs_get_video_hdr_nominal_peak_level(), 1); + mastering->has_primaries = 1; mastering->has_luminance = 1; av_stream_add_side_data(data->video, AV_PKT_DATA_MASTERING_DISPLAY_METADATA,