vah264enc: Packed headers can be zero.
authorVíctor Manuel Jáquez Leal <vjaquez@igalia.com>
Tue, 9 Aug 2022 10:28:43 +0000 (12:28 +0200)
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Wed, 10 Aug 2022 04:31:27 +0000 (04:31 +0000)
A driver can report back no packed header support (VA_ENC_PACKED_HEADER_NONE).
This patch removes that false verification.

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

subprojects/gst-plugins-bad/sys/va/gstvaencoder.c
subprojects/gst-plugins-bad/sys/va/gstvaencoder.h
subprojects/gst-plugins-bad/sys/va/gstvah264enc.c

index 94f6f72..19d96c1 100644 (file)
@@ -756,31 +756,33 @@ gst_va_encoder_get_rtformat (GstVaEncoder * self,
   return attrib.value;
 }
 
-guint32
+gboolean
 gst_va_encoder_get_packed_headers (GstVaEncoder * self, VAProfile profile,
-    VAEntrypoint entrypoint)
+    VAEntrypoint entrypoint, guint * packed_headers)
 {
   VAStatus status;
   VADisplay dpy;
   VAConfigAttrib attrib = {.type = VAConfigAttribEncPackedHeaders };
 
   if (profile == VAProfileNone)
-    return 0;
+    return FALSE;
 
   dpy = gst_va_display_get_va_dpy (self->display);
   status = vaGetConfigAttributes (dpy, profile, entrypoint, &attrib, 1);
   if (status != VA_STATUS_SUCCESS) {
     GST_ERROR_OBJECT (self, "Failed to query packed headers: %s",
         vaErrorStr (status));
-    return 0;
+    return FALSE;
   }
 
   if (attrib.value == VA_ATTRIB_NOT_SUPPORTED) {
     GST_WARNING_OBJECT (self, "Driver does not support any packed headers");
-    return 0;
+    return FALSE;
   }
 
-  return attrib.value;
+  if (packed_headers)
+    *packed_headers = attrib.value;
+  return TRUE;
 }
 
 /* Add packed header such as SPS, PPS, SEI, etc. If adding slice header,
index dd46fd9..dad7630 100644 (file)
@@ -80,9 +80,10 @@ gboolean              gst_va_encoder_has_trellis          (GstVaEncoder * self,
 guint32               gst_va_encoder_get_rtformat         (GstVaEncoder * self,
                                                            VAProfile profile,
                                                            VAEntrypoint entrypoint);
-guint32               gst_va_encoder_get_packed_headers   (GstVaEncoder * self,
+gboolean               gst_va_encoder_get_packed_headers  (GstVaEncoder * self,
                                                            VAProfile profile,
-                                                           VAEntrypoint entrypoint);
+                                                           VAEntrypoint entrypoint,
+                                                           guint32 * packed_headers);
 gboolean              gst_va_encoder_get_rate_control_enum (GstVaEncoder * self,
                                                             GEnumValue ratectl[16]);
 gboolean              gst_va_encoder_add_param            (GstVaEncoder * self,
index 076bcab..33dfc24 100644 (file)
@@ -1258,10 +1258,8 @@ _init_packed_headers (GstVaH264Enc * self)
 
   self->packed_headers = 0;
 
-  packed_headers = gst_va_encoder_get_packed_headers (base->encoder,
-      base->profile, base->entrypoint);
-
-  if (packed_headers == 0)
+  if (!gst_va_encoder_get_packed_headers (base->encoder, base->profile,
+          base->entrypoint, &packed_headers))
     return FALSE;
 
   if (desired_packed_headers & ~packed_headers) {