vtenc: Fix checking for certain CPU variants when running in VMs
authorPiotr Brzeziński <piotr@centricular.com>
Tue, 28 Feb 2023 14:26:45 +0000 (15:26 +0100)
committerTim-Philipp Müller <tim@centricular.com>
Tue, 28 Feb 2023 17:31:54 +0000 (17:31 +0000)
These checks were introduced to prevent exposing ARGB64/RGBA64 in the caps
when running on M1 Pro/Max with macOS <13 because of a bug in VideoToolbox.
Unfortunately, the initial buffer size of 15 is too short when running
in a VM - the CPU brand string there looks like "Apple M1 Pro (Virtual)",
which due to its length causes sysctlbyname to return -1, resulting in
broken formats still showing up in the caps.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4082>

subprojects/gst-plugins-bad/sys/applemedia/vtenc.c

index c8babd8..782cdb0 100644 (file)
@@ -234,8 +234,8 @@ gst_vtenc_base_init (GstVTEncClass * klass)
 #ifndef HAVE_IOS
     gboolean enable_argb = TRUE;
     int retval;
-    char cpu_name[15];
-    size_t cpu_len = 15;
+    char cpu_name[30];
+    size_t cpu_len = 30;
 
     if (__builtin_available (macOS 13.0, *)) {
       /* Can't negate a __builtin_available check */
@@ -247,8 +247,12 @@ gst_vtenc_base_init (GstVTEncClass * klass)
 
       if (retval == 0 &&
           (strstr (cpu_name, "M1 Pro") != NULL ||
-              strstr (cpu_name, "M1 Max") != NULL))
+              strstr (cpu_name, "M1 Max") != NULL)) {
+        GST_WARNING
+            ("Disabling ARGB64/RGBA64 caps due to a bug in VideoToolbox "
+            "on M1 Pro/Max running macOS < 13.0.");
         enable_argb = FALSE;
+      }
     }
 
     if (enable_argb) {