summaryrefslogtreecommitdiff
path: root/libavcodec/videotoolbox.c
diff options
context:
space:
mode:
authorrcombs <rcombs@rcombs.me>2021-11-13 01:02:26 -0600
committerrcombs <rcombs@rcombs.me>2021-11-28 16:40:43 -0600
commitf0952f87bcfd905f21ce6cefa8e14a127fb00c8a (patch)
tree85f94ba69b204259570409ffe21850a1276e800b /libavcodec/videotoolbox.c
parentb0c07f293883c5c37b5b1dbfabfca0d695250a60 (diff)
lavc/videotoolbox: select 4:2:2 and 4:4:4 formats when applicable
Diffstat (limited to 'libavcodec/videotoolbox.c')
-rw-r--r--libavcodec/videotoolbox.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/libavcodec/videotoolbox.c b/libavcodec/videotoolbox.c
index 010f553e57..57b37bf3bf 100644
--- a/libavcodec/videotoolbox.c
+++ b/libavcodec/videotoolbox.c
@@ -1064,9 +1064,35 @@ static enum AVPixelFormat videotoolbox_best_pixel_format(AVCodecContext *avctx)
return AV_PIX_FMT_NV12; // same as av_videotoolbox_alloc_context()
int depth = descriptor->comp[0].depth;
+
+#if HAVE_KCVPIXELFORMATTYPE_444YPCBCR16BIPLANARVIDEORANGE
+ if (depth > 10)
+ return descriptor->log2_chroma_w == 0 ? AV_PIX_FMT_P416 : AV_PIX_FMT_P216;
+#endif
+
+#if HAVE_KCVPIXELFORMATTYPE_444YPCBCR10BIPLANARVIDEORANGE
+ if (descriptor->log2_chroma_w == 0) {
+#if HAVE_KCVPIXELFORMATTYPE_444YPCBCR8BIPLANARVIDEORANGE
+ if (depth <= 8)
+ return AV_PIX_FMT_NV24;
+#endif
+ return AV_PIX_FMT_P410;
+ }
+#endif
+#if HAVE_KCVPIXELFORMATTYPE_422YPCBCR10BIPLANARVIDEORANGE
+ if (descriptor->log2_chroma_h == 0) {
+#if HAVE_KCVPIXELFORMATTYPE_422YPCBCR8BIPLANARVIDEORANGE
+ if (depth <= 8)
+ return AV_PIX_FMT_NV16;
+#endif
+ return AV_PIX_FMT_P210;
+ }
+#endif
+#if HAVE_KCVPIXELFORMATTYPE_420YPCBCR10BIPLANARVIDEORANGE
if (depth > 8) {
return AV_PIX_FMT_P010;
}
+#endif
return AV_PIX_FMT_NV12;
}