mirror of
https://github.com/obsproject/obs-studio.git
synced 2024-09-20 13:08:50 +02:00
obs-ffmpeg: Add content light levels for HDR
YouTube wants it, and more metadata can only improve compatibility.
This commit is contained in:
parent
b45ad961c3
commit
80f6cff742
@ -420,7 +420,17 @@ static void create_video_stream(struct ffmpeg_mux *ffm)
|
||||
#endif
|
||||
ffm->video_stream->avg_frame_rate = av_inv_q(context->time_base);
|
||||
|
||||
if (ffm->params.max_luminance > 0) {
|
||||
const int max_luminance = ffm->params.max_luminance;
|
||||
if (max_luminance > 0) {
|
||||
size_t content_size;
|
||||
AVContentLightMetadata *const content =
|
||||
av_content_light_metadata_alloc(&content_size);
|
||||
content->MaxCLL = max_luminance;
|
||||
content->MaxFALL = max_luminance;
|
||||
av_stream_add_side_data(ffm->video_stream,
|
||||
AV_PKT_DATA_CONTENT_LIGHT_LEVEL,
|
||||
(uint8_t *)content, content_size);
|
||||
|
||||
AVMasteringDisplayMetadata *const mastering =
|
||||
av_mastering_display_metadata_alloc();
|
||||
mastering->display_primaries[0][0] = av_make_q(17, 25);
|
||||
@ -432,8 +442,7 @@ static void create_video_stream(struct ffmpeg_mux *ffm)
|
||||
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->max_luminance = av_make_q(max_luminance, 1);
|
||||
mastering->has_primaries = 1;
|
||||
mastering->has_luminance = 1;
|
||||
av_stream_add_side_data(ffm->video_stream,
|
||||
|
@ -225,6 +225,18 @@ static bool create_video_stream(struct ffmpeg_data *data)
|
||||
|
||||
if ((data->config.color_trc == AVCOL_TRC_SMPTE2084) ||
|
||||
(data->config.color_trc == AVCOL_TRC_ARIB_STD_B67)) {
|
||||
const int hdr_nominal_peak_level =
|
||||
(int)obs_get_video_hdr_nominal_peak_level();
|
||||
|
||||
size_t content_size;
|
||||
AVContentLightMetadata *const content =
|
||||
av_content_light_metadata_alloc(&content_size);
|
||||
content->MaxCLL = hdr_nominal_peak_level;
|
||||
content->MaxFALL = hdr_nominal_peak_level;
|
||||
av_stream_add_side_data(data->video,
|
||||
AV_PKT_DATA_CONTENT_LIGHT_LEVEL,
|
||||
(uint8_t *)content, content_size);
|
||||
|
||||
AVMasteringDisplayMetadata *const mastering =
|
||||
av_mastering_display_metadata_alloc();
|
||||
mastering->display_primaries[0][0] = av_make_q(17, 25);
|
||||
@ -236,8 +248,7 @@ static bool create_video_stream(struct ffmpeg_data *data)
|
||||
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->max_luminance = av_make_q(hdr_nominal_peak_level, 1);
|
||||
mastering->has_primaries = 1;
|
||||
mastering->has_luminance = 1;
|
||||
av_stream_add_side_data(data->video,
|
||||
|
Loading…
Reference in New Issue
Block a user