CFSTR ("RequireHardwareAcceleratedVideoDecoder");
#endif
-#define VIDEO_SRC_CAPS_FORMATS "{ NV12, AYUV64, RGBA64_LE, ARGB64_BE }"
+#define VIDEO_SRC_CAPS_FORMATS "{ NV12, AYUV64, ARGB64_BE }"
#define VIDEO_SRC_CAPS_NATIVE \
GST_VIDEO_CAPS_MAKE(VIDEO_SRC_CAPS_FORMATS) ";" \
base_class_init if you intend to subclass this class. */
gst_element_class_add_static_pad_template (element_class,
&gst_vtdec_sink_template);
- gst_element_class_add_pad_template (element_class,
- gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS,
- gst_caps_from_string (VIDEO_SRC_CAPS)));
+
+ {
+ GstCaps *caps = gst_caps_from_string (VIDEO_SRC_CAPS);
+ /* RGBA64_LE is kCVPixelFormatType_64RGBALE, only available on macOS 11.3+ */
+ if (GST_VTUTIL_HAVE_64ARGBALE)
+ caps = gst_vtutil_caps_append_video_format (caps, "RGBA64_LE");
+ gst_element_class_add_pad_template (element_class,
+ gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS, caps));
+ }
gst_element_class_set_static_metadata (element_class,
"Apple VideoToolbox decoder",
break;
case GST_VIDEO_FORMAT_AYUV64:
case GST_VIDEO_FORMAT_ARGB64_BE:
- case GST_VIDEO_FORMAT_RGBA64_LE:
if (prores)
return vfmt;
break;
+ case GST_VIDEO_FORMAT_RGBA64_LE:
+ if (GST_VTUTIL_HAVE_64ARGBALE) {
+ if (prores)
+ return vfmt;
+ } else {
+ /* Codepath will never be hit on macOS older than Big Sur (11.3) */
+ g_warn_if_reached ();
+ }
+ break;
default:
break;
}
cv_format = kCVPixelFormatType_64ARGB;
break;
case GST_VIDEO_FORMAT_RGBA64_LE:
- cv_format = kCVPixelFormatType_64RGBALE;
+ if (GST_VTUTIL_HAVE_64ARGBALE)
+ cv_format = kCVPixelFormatType_64RGBALE;
+ else
+ /* Codepath will never be hit on macOS older than Big Sur (11.3) */
+ g_warn_if_reached ();
break;
default:
g_warn_if_reached ();
#else
static GstStaticCaps sink_caps =
GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE
- ("{ AYUV64, UYVY, NV12, I420, RGBA64_LE, ARGB64_BE }"));
+ ("{ AYUV64, UYVY, NV12, I420, ARGB64_BE }"));
#endif
+
static void
gst_vtenc_base_init (GstVTEncClass * klass)
{
g_free (longname);
g_free (description);
- gst_element_class_add_pad_template (element_class,
- gst_pad_template_new ("sink", GST_PAD_SINK, GST_PAD_ALWAYS,
- gst_static_caps_get (&sink_caps));
+ {
+ GstCaps *caps = gst_static_caps_get (&sink_caps);
+ /* RGBA64_LE is kCVPixelFormatType_64RGBALE, only available on macOS 11.3+ */
+ if (GST_VTUTIL_HAVE_64ARGBALE)
+ caps = gst_vtutil_caps_append_video_format (caps, "RGBA64_LE");
+ gst_element_class_add_pad_template (element_class,
+ gst_pad_template_new ("sink", GST_PAD_SINK, GST_PAD_ALWAYS, caps));
+ }
src_caps = gst_caps_new_simple (codec_details->mimetype,
pixel_format_type = kCVPixelFormatType_4444AYpCbCr16;
break;
case GST_VIDEO_FORMAT_RGBA64_LE:
- pixel_format_type = kCVPixelFormatType_64RGBALE;
+ if (GST_VTUTIL_HAVE_64ARGBALE)
+ pixel_format_type = kCVPixelFormatType_64RGBALE;
+ else
+ /* Codepath will never be hit on macOS older than Big Sur (11.3) */
+ g_assert_not_reached ();
break;
case GST_VIDEO_FORMAT_I420:
pixel_format_type = kCVPixelFormatType_420YpCbCr8Planar;
g_assert_not_reached ();
}
}
+
+GstCaps *
+gst_vtutil_caps_append_video_format (GstCaps * caps, const char *vfmt)
+{
+ GstStructure *s;
+ GValueArray *arr;
+ GValue val = G_VALUE_INIT;
+
+ caps = gst_caps_make_writable (caps);
+ s = gst_caps_get_structure (caps, 0);
+ gst_structure_get_list (s, "format", &arr);
+
+ g_value_init (&val, G_TYPE_STRING);
+
+ g_value_set_string (&val, vfmt);
+ G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
+ arr = g_value_array_append (arr, &val);
+ G_GNUC_END_IGNORE_DEPRECATIONS;
+
+ g_value_unset (&val);
+
+ gst_structure_set_list (s, "format", arr);
+ return caps;
+}
#define __GST_VTUTIL_H__
#include <glib.h>
+#include <gst/gst.h>
#include <CoreFoundation/CoreFoundation.h>
#include <CoreMedia/CoreMedia.h>
* each variant, so we use a dummy type for details->format_id */
#define GST_kCMVideoCodecType_Some_AppleProRes 1
+// kCVPixelFormatType_64RGBALE is only available for 11.3 +.
+// See https://developer.apple.com/documentation/corevideo/1563591-pixel_format_identifiers/kcvpixelformattype_64rgbale
+#if defined(MAC_OS_X_VERSION_MAX_ALLOWED) && MAC_OS_X_VERSION_MAX_ALLOWED < 110300
+#define kCVPixelFormatType_64RGBALE 'l64r'
+#endif
+#define GST_VTUTIL_HAVE_64ARGBALE __builtin_available(macOS 11.3, *)
+
G_BEGIN_DECLS
gchar * gst_vtutil_object_to_string (CFTypeRef obj);
CMVideoCodecType gst_vtutil_codec_type_from_prores_variant (const char * variant);
const char * gst_vtutil_codec_type_to_prores_variant (CMVideoCodecType codec_type);
+GstCaps * gst_vtutil_caps_append_video_format (GstCaps * caps,
+ const char * vfmt);
+
G_END_DECLS
#endif /* __GST_VTUTIL_H__ */