From c4706ed219762aa8f5baba0b705977f2024b0ced Mon Sep 17 00:00:00 2001 From: =?utf8?q?V=C3=ADctor=20Manuel=20J=C3=A1quez=20Leal?= Date: Tue, 9 Aug 2022 12:28:43 +0200 Subject: [PATCH] vah264enc: Packed headers can be zero. A driver can report back no packed header support (VA_ENC_PACKED_HEADER_NONE). This patch removes that false verification. Part-of: --- subprojects/gst-plugins-bad/sys/va/gstvaencoder.c | 14 ++++++++------ subprojects/gst-plugins-bad/sys/va/gstvaencoder.h | 5 +++-- subprojects/gst-plugins-bad/sys/va/gstvah264enc.c | 6 ++---- 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/subprojects/gst-plugins-bad/sys/va/gstvaencoder.c b/subprojects/gst-plugins-bad/sys/va/gstvaencoder.c index 94f6f72..19d96c1 100644 --- a/subprojects/gst-plugins-bad/sys/va/gstvaencoder.c +++ b/subprojects/gst-plugins-bad/sys/va/gstvaencoder.c @@ -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, diff --git a/subprojects/gst-plugins-bad/sys/va/gstvaencoder.h b/subprojects/gst-plugins-bad/sys/va/gstvaencoder.h index dd46fd9..dad7630 100644 --- a/subprojects/gst-plugins-bad/sys/va/gstvaencoder.h +++ b/subprojects/gst-plugins-bad/sys/va/gstvaencoder.h @@ -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, diff --git a/subprojects/gst-plugins-bad/sys/va/gstvah264enc.c b/subprojects/gst-plugins-bad/sys/va/gstvah264enc.c index 076bcab..33dfc24 100644 --- a/subprojects/gst-plugins-bad/sys/va/gstvah264enc.c +++ b/subprojects/gst-plugins-bad/sys/va/gstvah264enc.c @@ -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) { -- 2.7.4