obs-ffmpeg: Improve color space handling

Add support for VIDEO_CS_SRGB.

Use SMPTE 170M for 601 instead of undef/BT470BG. This is the
American/Chromium way of handling 601.

Add color metadata to the container file as well via ffmpeg-mux.
This commit is contained in:
jpark37
2020-01-25 10:29:38 -08:00
parent a69151e204
commit 37f01b35f6
6 changed files with 129 additions and 21 deletions

View File

@@ -429,9 +429,25 @@ static bool init_encoder(struct nvenc_data *enc, obs_data_t *settings)
vui_params->videoSignalTypePresentFlag = 1;
vui_params->videoFullRangeFlag = (voi->range == VIDEO_RANGE_FULL);
vui_params->colourDescriptionPresentFlag = 1;
vui_params->colourMatrix = (voi->colorspace == VIDEO_CS_709) ? 1 : 5;
vui_params->colourPrimaries = 1;
vui_params->transferCharacteristics = 1;
switch (voi->colorspace) {
case VIDEO_CS_DEFAULT:
case VIDEO_CS_601:
vui_params->colourPrimaries = 6;
vui_params->transferCharacteristics = 6;
vui_params->colourMatrix = 6;
break;
case VIDEO_CS_709:
vui_params->colourPrimaries = 1;
vui_params->transferCharacteristics = 1;
vui_params->colourMatrix = 1;
break;
case VIDEO_CS_SRGB:
vui_params->colourPrimaries = 1;
vui_params->transferCharacteristics = 13;
vui_params->colourMatrix = 1;
break;
}
enc->bframes = bf > 0;