obs-ffmpeg: Set P3-D65 metadata for HDR
Want to avoid receiver gamut remapping from Rec. 2100 to P3. Fix min luminance appearing as NaN by switching from 0/0 to 0/1. Also set max luminance for HLG because why not.
This commit is contained in:
parent
3eb85c548f
commit
2e8ea0acdc
@ -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,
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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,
|
||||
|
Loading…
x
Reference in New Issue
Block a user