mirror of
https://github.com/obsproject/obs-studio.git
synced 2026-01-29 08:31:54 -05:00
mac-videotoolbox: Add ProRes 4444 (XQ) support
Also leverage P216/P416 pixel formats to retain precision.
This commit is contained in:
@@ -17,6 +17,8 @@ UseBFrames="Use B-Frames"
|
||||
RateControl="Rate Control"
|
||||
ColorFormatUnsupported="The selected color format is not supported by the selected Apple VT encoder. Select a compatible color format in Settings -> Advanced or use a different encoder."
|
||||
ProResCodec="ProRes Codec"
|
||||
ProRes4444XQ="ProRes 4444 XQ"
|
||||
ProRes4444="ProRes 4444"
|
||||
ProRes422Proxy="ProRes 422 Proxy"
|
||||
ProRes422LT="ProRes 422 LT"
|
||||
ProRes422="ProRes 422"
|
||||
|
||||
@@ -72,6 +72,10 @@ static const char *codec_type_to_print_fmt(CMVideoCodecType codec_type)
|
||||
return "h264";
|
||||
case kCMVideoCodecType_HEVC:
|
||||
return "hevc";
|
||||
case kCMVideoCodecType_AppleProRes4444XQ:
|
||||
return "ap4x";
|
||||
case kCMVideoCodecType_AppleProRes4444:
|
||||
return "ap4h";
|
||||
case kCMVideoCodecType_AppleProRes422Proxy:
|
||||
return "apco";
|
||||
case kCMVideoCodecType_AppleProRes422LT:
|
||||
@@ -685,9 +689,22 @@ static bool set_video_format(struct vt_encoder *enc, enum video_format format,
|
||||
? kCVPixelFormatType_420YpCbCr10BiPlanarFullRange
|
||||
: kCVPixelFormatType_420YpCbCr10BiPlanarVideoRange;
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
case VIDEO_FORMAT_P216:
|
||||
if (!full_range) {
|
||||
enc->vt_pix_fmt =
|
||||
kCVPixelFormatType_422YpCbCr16BiPlanarVideoRange;
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
case VIDEO_FORMAT_P416:
|
||||
if (!full_range) {
|
||||
enc->vt_pix_fmt =
|
||||
kCVPixelFormatType_444YpCbCr16BiPlanarVideoRange;
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
@@ -1354,32 +1371,44 @@ static obs_properties_t *vt_properties_prores(void *unused, void *data)
|
||||
for (size_t i = 0; i < size; ++i) {
|
||||
|
||||
switch (encoder_list[i].codec_type) {
|
||||
case kCMVideoCodecType_AppleProRes422Proxy:
|
||||
case kCMVideoCodecType_AppleProRes4444XQ:
|
||||
codec_availability_flags |= (1 << 0);
|
||||
break;
|
||||
case kCMVideoCodecType_AppleProRes422LT:
|
||||
case kCMVideoCodecType_AppleProRes4444:
|
||||
codec_availability_flags |= (1 << 1);
|
||||
break;
|
||||
case kCMVideoCodecType_AppleProRes422:
|
||||
case kCMVideoCodecType_AppleProRes422Proxy:
|
||||
codec_availability_flags |= (1 << 2);
|
||||
break;
|
||||
case kCMVideoCodecType_AppleProRes422HQ:
|
||||
case kCMVideoCodecType_AppleProRes422LT:
|
||||
codec_availability_flags |= (1 << 3);
|
||||
break;
|
||||
case kCMVideoCodecType_AppleProRes422:
|
||||
codec_availability_flags |= (1 << 4);
|
||||
break;
|
||||
case kCMVideoCodecType_AppleProRes422HQ:
|
||||
codec_availability_flags |= (1 << 5);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (codec_availability_flags & (1 << 0))
|
||||
obs_property_list_add_int(p, obs_module_text("ProRes4444XQ"),
|
||||
kCMVideoCodecType_AppleProRes4444XQ);
|
||||
if (codec_availability_flags & (1 << 1))
|
||||
obs_property_list_add_int(p, obs_module_text("ProRes4444"),
|
||||
kCMVideoCodecType_AppleProRes4444);
|
||||
if (codec_availability_flags & (1 << 2))
|
||||
obs_property_list_add_int(
|
||||
p, obs_module_text("ProRes422Proxy"),
|
||||
kCMVideoCodecType_AppleProRes422Proxy);
|
||||
if (codec_availability_flags & (1 << 1))
|
||||
if (codec_availability_flags & (1 << 3))
|
||||
obs_property_list_add_int(p, obs_module_text("ProRes422LT"),
|
||||
kCMVideoCodecType_AppleProRes422LT);
|
||||
if (codec_availability_flags & (1 << 2))
|
||||
if (codec_availability_flags & (1 << 4))
|
||||
obs_property_list_add_int(p, obs_module_text("ProRes422"),
|
||||
kCMVideoCodecType_AppleProRes422);
|
||||
if (codec_availability_flags & (1 << 3))
|
||||
if (codec_availability_flags & (1 << 5))
|
||||
obs_property_list_add_int(p, obs_module_text("ProRes422HQ"),
|
||||
kCMVideoCodecType_AppleProRes422HQ);
|
||||
|
||||
@@ -1561,6 +1590,8 @@ void obs_module_post_load(void)
|
||||
codec_type);
|
||||
break;
|
||||
|
||||
case kCMVideoCodecType_AppleProRes4444XQ:
|
||||
case kCMVideoCodecType_AppleProRes4444:
|
||||
case kCMVideoCodecType_AppleProRes422Proxy:
|
||||
case kCMVideoCodecType_AppleProRes422LT:
|
||||
case kCMVideoCodecType_AppleProRes422HQ:
|
||||
|
||||
Reference in New Issue
Block a user