obs-ffmpeg: Use top-left chroma location for HDR
As specified in the HEVC spec. VLC now reports top-left instead of left.master
parent
3a43fc4a07
commit
a4083c56b5
|
@ -454,6 +454,10 @@ static void create_video_stream(struct ffmpeg_mux *ffm)
|
|||
context->color_trc = ffm->params.color_trc;
|
||||
context->colorspace = ffm->params.colorspace;
|
||||
context->color_range = ffm->params.color_range;
|
||||
context->chroma_sample_location =
|
||||
(ffm->params.colorspace == AVCOL_SPC_BT2020_NCL)
|
||||
? AVCHROMA_LOC_TOPLEFT
|
||||
: AVCHROMA_LOC_LEFT;
|
||||
context->extradata = extradata;
|
||||
context->extradata_size = ffm->video_header.size;
|
||||
context->time_base =
|
||||
|
|
|
@ -781,11 +781,17 @@ static bool init_encoder_hevc(struct nvenc_data *enc, obs_data_t *settings,
|
|||
vui_params->colourPrimaries = 9;
|
||||
vui_params->transferCharacteristics = 16;
|
||||
vui_params->colourMatrix = 9;
|
||||
vui_params->chromaSampleLocationFlag = 1;
|
||||
vui_params->chromaSampleLocationTop = 2;
|
||||
vui_params->chromaSampleLocationBot = 2;
|
||||
break;
|
||||
case VIDEO_CS_2100_HLG:
|
||||
vui_params->colourPrimaries = 9;
|
||||
vui_params->transferCharacteristics = 18;
|
||||
vui_params->colourMatrix = 9;
|
||||
vui_params->chromaSampleLocationFlag = 1;
|
||||
vui_params->chromaSampleLocationTop = 2;
|
||||
vui_params->chromaSampleLocationBot = 2;
|
||||
}
|
||||
|
||||
enc->bframes = bf;
|
||||
|
|
|
@ -193,6 +193,10 @@ static bool create_video_stream(struct ffmpeg_output *stream,
|
|||
context->color_primaries = data->config.color_primaries;
|
||||
context->color_trc = data->config.color_trc;
|
||||
context->colorspace = data->config.colorspace;
|
||||
context->chroma_sample_location =
|
||||
(data->config.colorspace == AVCOL_SPC_BT2020_NCL)
|
||||
? AVCHROMA_LOC_TOPLEFT
|
||||
: AVCHROMA_LOC_LEFT;
|
||||
context->thread_count = 0;
|
||||
|
||||
data->video->time_base = context->time_base;
|
||||
|
|
|
@ -152,6 +152,10 @@ static bool open_video_codec(struct ffmpeg_data *data)
|
|||
data->vframe->color_primaries = data->config.color_primaries;
|
||||
data->vframe->color_trc = data->config.color_trc;
|
||||
data->vframe->colorspace = data->config.colorspace;
|
||||
data->vframe->chroma_location =
|
||||
(data->config.colorspace == AVCOL_SPC_BT2020_NCL)
|
||||
? AVCHROMA_LOC_TOPLEFT
|
||||
: AVCHROMA_LOC_LEFT;
|
||||
|
||||
ret = av_frame_get_buffer(data->vframe, base_get_alignment());
|
||||
if (ret < 0) {
|
||||
|
@ -258,6 +262,10 @@ static bool create_video_stream(struct ffmpeg_data *data)
|
|||
context->color_primaries = data->config.color_primaries;
|
||||
context->color_trc = data->config.color_trc;
|
||||
context->colorspace = data->config.colorspace;
|
||||
context->chroma_sample_location =
|
||||
(data->config.colorspace == AVCOL_SPC_BT2020_NCL)
|
||||
? AVCHROMA_LOC_TOPLEFT
|
||||
: AVCHROMA_LOC_LEFT;
|
||||
context->thread_count = 0;
|
||||
|
||||
data->video->time_base = context->time_base;
|
||||
|
|
|
@ -45,8 +45,11 @@ bool ffmpeg_video_encoder_init_codec(struct ffmpeg_video_encoder *enc)
|
|||
enc->vframe->format = enc->context->pix_fmt;
|
||||
enc->vframe->width = enc->context->width;
|
||||
enc->vframe->height = enc->context->height;
|
||||
enc->vframe->colorspace = enc->context->colorspace;
|
||||
enc->vframe->color_range = enc->context->color_range;
|
||||
enc->vframe->color_primaries = enc->context->color_primaries;
|
||||
enc->vframe->color_trc = enc->context->color_trc;
|
||||
enc->vframe->colorspace = enc->context->colorspace;
|
||||
enc->vframe->chroma_location = enc->context->chroma_sample_location;
|
||||
|
||||
ret = av_frame_get_buffer(enc->vframe, base_get_alignment());
|
||||
if (ret < 0) {
|
||||
|
@ -96,11 +99,13 @@ void ffmpeg_video_encoder_update(struct ffmpeg_video_encoder *enc, int bitrate,
|
|||
enc->context->color_primaries = AVCOL_PRI_BT2020;
|
||||
enc->context->color_trc = AVCOL_TRC_SMPTE2084;
|
||||
enc->context->colorspace = AVCOL_SPC_BT2020_NCL;
|
||||
enc->context->chroma_sample_location = AVCHROMA_LOC_TOPLEFT;
|
||||
break;
|
||||
case VIDEO_CS_2100_HLG:
|
||||
enc->context->color_primaries = AVCOL_PRI_BT2020;
|
||||
enc->context->color_trc = AVCOL_TRC_ARIB_STD_B67;
|
||||
enc->context->colorspace = AVCOL_SPC_BT2020_NCL;
|
||||
enc->context->chroma_sample_location = AVCHROMA_LOC_TOPLEFT;
|
||||
}
|
||||
|
||||
if (keyint_sec)
|
||||
|
|
Loading…
Reference in New Issue