From a2a3c81c852d36c84f6ed46f7607fd0d06d99e99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Manuel=20J=C3=A1quez=20Leal?= Date: Tue, 26 Oct 2021 09:23:42 +0200 Subject: [PATCH] va: Move back parent_object to each element. Using GstBaseDec hack to access the parent_object of each element in the element itself is a bit fragile. It would be better to keep its own parent object as the usual global variable. It would make it resistant to code changes. The GstBaseDec macro to access the parent object now it's internal to base decoder. Part-of: --- subprojects/gst-plugins-bad/sys/va/gstvaav1dec.c | 9 ++++++--- subprojects/gst-plugins-bad/sys/va/gstvabasedec.c | 1 + subprojects/gst-plugins-bad/sys/va/gstvabasedec.h | 1 - subprojects/gst-plugins-bad/sys/va/gstvah264dec.c | 9 ++++++--- subprojects/gst-plugins-bad/sys/va/gstvah265dec.c | 9 ++++++--- subprojects/gst-plugins-bad/sys/va/gstvampeg2dec.c | 9 ++++++--- subprojects/gst-plugins-bad/sys/va/gstvavp8dec.c | 9 ++++++--- subprojects/gst-plugins-bad/sys/va/gstvavp9dec.c | 9 ++++++--- 8 files changed, 37 insertions(+), 19 deletions(-) diff --git a/subprojects/gst-plugins-bad/sys/va/gstvaav1dec.c b/subprojects/gst-plugins-bad/sys/va/gstvaav1dec.c index 9e83b8aa87..790c69cfa1 100644 --- a/subprojects/gst-plugins-bad/sys/va/gstvaav1dec.c +++ b/subprojects/gst-plugins-bad/sys/va/gstvaav1dec.c @@ -80,6 +80,8 @@ struct _GstVaAV1Dec gboolean need_negotiation; }; +static GstElementClass *parent_class = NULL; + /* *INDENT-OFF* */ static const gchar *src_caps_str = GST_VIDEO_CAPS_MAKE_WITH_FEATURES (GST_CAPS_FEATURE_MEMORY_VA, @@ -135,8 +137,7 @@ gst_va_av1_dec_negotiate (GstVideoDecoder * decoder) GST_INFO_OBJECT (self, "Negotiated caps %" GST_PTR_FORMAT, base->output_state->caps); - return GST_VIDEO_DECODER_CLASS (GST_VA_BASE_DEC_GET_PARENT_CLASS - (decoder))->negotiate (decoder); + return GST_VIDEO_DECODER_CLASS (parent_class)->negotiate (decoder); } static GstCaps * @@ -880,7 +881,7 @@ static void gst_va_av1_dec_dispose (GObject * object) { gst_va_base_dec_close (GST_VIDEO_DECODER (object)); - G_OBJECT_CLASS (GST_VA_BASE_DEC_GET_PARENT_CLASS (object))->dispose (object); + G_OBJECT_CLASS (parent_class)->dispose (object); } static void @@ -908,6 +909,8 @@ gst_va_av1_dec_class_init (gpointer g_class, gpointer class_data) sink_doc_caps = gst_caps_from_string (sink_caps_str); src_doc_caps = gst_caps_from_string (src_caps_str); + parent_class = g_type_class_peek_parent (g_class); + gst_va_base_dec_class_init (GST_VA_BASE_DEC_CLASS (g_class), AV1, cdata->render_device_path, cdata->sink_caps, cdata->src_caps, src_doc_caps, sink_doc_caps); diff --git a/subprojects/gst-plugins-bad/sys/va/gstvabasedec.c b/subprojects/gst-plugins-bad/sys/va/gstvabasedec.c index 3c012d9dbe..09a3bd6a79 100644 --- a/subprojects/gst-plugins-bad/sys/va/gstvabasedec.c +++ b/subprojects/gst-plugins-bad/sys/va/gstvabasedec.c @@ -27,6 +27,7 @@ #include "gstvavideoformat.h" #define GST_CAT_DEFAULT (base->debug_category) +#define GST_VA_BASE_DEC_GET_PARENT_CLASS(obj) (GST_VA_BASE_DEC_GET_CLASS(obj)->parent_decoder_class) static gboolean gst_va_base_dec_open (GstVideoDecoder * decoder) diff --git a/subprojects/gst-plugins-bad/sys/va/gstvabasedec.h b/subprojects/gst-plugins-bad/sys/va/gstvabasedec.h index 5f53b4aa37..4d855cb3f3 100644 --- a/subprojects/gst-plugins-bad/sys/va/gstvabasedec.h +++ b/subprojects/gst-plugins-bad/sys/va/gstvabasedec.h @@ -37,7 +37,6 @@ G_BEGIN_DECLS #define GST_VA_BASE_DEC(obj) ((GstVaBaseDec *)(obj)) #define GST_VA_BASE_DEC_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), G_TYPE_FROM_INSTANCE (obj), GstVaBaseDecClass)) #define GST_VA_BASE_DEC_CLASS(klass) ((GstVaBaseDecClass *)(klass)) -#define GST_VA_BASE_DEC_GET_PARENT_CLASS(obj) (GST_VA_BASE_DEC_GET_CLASS(obj)->parent_decoder_class) typedef struct _GstVaBaseDec GstVaBaseDec; typedef struct _GstVaBaseDecClass GstVaBaseDecClass; diff --git a/subprojects/gst-plugins-bad/sys/va/gstvah264dec.c b/subprojects/gst-plugins-bad/sys/va/gstvah264dec.c index 476686c47d..a41bdd3900 100644 --- a/subprojects/gst-plugins-bad/sys/va/gstvah264dec.c +++ b/subprojects/gst-plugins-bad/sys/va/gstvah264dec.c @@ -88,6 +88,8 @@ struct _GstVaH264Dec gboolean interlaced; }; +static GstElementClass *parent_class = NULL; + /* *INDENT-OFF* */ static const gchar *src_caps_str = GST_VIDEO_CAPS_MAKE_WITH_FEATURES (GST_CAPS_FEATURE_MEMORY_VA, @@ -857,8 +859,7 @@ gst_va_h264_dec_negotiate (GstVideoDecoder * decoder) GST_INFO_OBJECT (self, "Negotiated caps %" GST_PTR_FORMAT, base->output_state->caps); - return GST_VIDEO_DECODER_CLASS (GST_VA_BASE_DEC_GET_PARENT_CLASS - (decoder))->negotiate (decoder); + return GST_VIDEO_DECODER_CLASS (parent_class)->negotiate (decoder); } static void @@ -869,7 +870,7 @@ gst_va_h264_dec_dispose (GObject * object) gst_va_base_dec_close (GST_VIDEO_DECODER (object)); g_clear_pointer (&self->ref_list, g_array_unref); - G_OBJECT_CLASS (GST_VA_BASE_DEC_GET_PARENT_CLASS (object))->dispose (object); + G_OBJECT_CLASS (parent_class)->dispose (object); } static void @@ -898,6 +899,8 @@ gst_va_h264_dec_class_init (gpointer g_class, gpointer class_data) sink_doc_caps = gst_caps_from_string (sink_caps_str); src_doc_caps = gst_caps_from_string (src_caps_str); + parent_class = g_type_class_peek_parent (g_class); + gst_va_base_dec_class_init (GST_VA_BASE_DEC_CLASS (g_class), H264, cdata->render_device_path, cdata->sink_caps, cdata->src_caps, src_doc_caps, sink_doc_caps); diff --git a/subprojects/gst-plugins-bad/sys/va/gstvah265dec.c b/subprojects/gst-plugins-bad/sys/va/gstvah265dec.c index 51158650da..cecc512a6a 100644 --- a/subprojects/gst-plugins-bad/sys/va/gstvah265dec.c +++ b/subprojects/gst-plugins-bad/sys/va/gstvah265dec.c @@ -103,6 +103,8 @@ struct _GstVaH265Dec gboolean need_negotiation; }; +static GstElementClass *parent_class = NULL; + /* *INDENT-OFF* */ static const gchar *src_caps_str = GST_VIDEO_CAPS_MAKE_WITH_FEATURES (GST_CAPS_FEATURE_MEMORY_VA, @@ -1239,8 +1241,7 @@ gst_va_h265_dec_negotiate (GstVideoDecoder * decoder) GST_INFO_OBJECT (self, "Negotiated caps %" GST_PTR_FORMAT, base->output_state->caps); - return GST_VIDEO_DECODER_CLASS (GST_VA_BASE_DEC_GET_PARENT_CLASS - (decoder))->negotiate (decoder); + return GST_VIDEO_DECODER_CLASS (parent_class)->negotiate (decoder); } static void @@ -1250,7 +1251,7 @@ gst_va_h265_dec_dispose (GObject * object) gst_va_base_dec_close (GST_VIDEO_DECODER (object)); - G_OBJECT_CLASS (GST_VA_BASE_DEC_GET_PARENT_CLASS (object))->dispose (object); + G_OBJECT_CLASS (parent_class)->dispose (object); } static void @@ -1279,6 +1280,8 @@ gst_va_h265_dec_class_init (gpointer g_class, gpointer class_data) sink_doc_caps = gst_caps_from_string (sink_caps_str); src_doc_caps = gst_caps_from_string (src_caps_str); + parent_class = g_type_class_peek_parent (g_class); + gst_va_base_dec_class_init (GST_VA_BASE_DEC_CLASS (g_class), HEVC, cdata->render_device_path, cdata->sink_caps, cdata->src_caps, src_doc_caps, sink_doc_caps); diff --git a/subprojects/gst-plugins-bad/sys/va/gstvampeg2dec.c b/subprojects/gst-plugins-bad/sys/va/gstvampeg2dec.c index 6b25b114bb..16c5e560d8 100644 --- a/subprojects/gst-plugins-bad/sys/va/gstvampeg2dec.c +++ b/subprojects/gst-plugins-bad/sys/va/gstvampeg2dec.c @@ -76,6 +76,8 @@ struct _GstVaMpeg2Dec GstMpegVideoSequenceHdr seq; }; +static GstElementClass *parent_class = NULL; + /* *INDENT-OFF* */ static const gchar *src_caps_str = GST_VIDEO_CAPS_MAKE_WITH_FEATURES (GST_CAPS_FEATURE_MEMORY_VA, @@ -130,8 +132,7 @@ gst_va_mpeg2_dec_negotiate (GstVideoDecoder * decoder) GST_INFO_OBJECT (self, "Negotiated caps %" GST_PTR_FORMAT, base->output_state->caps); - return GST_VIDEO_DECODER_CLASS (GST_VA_BASE_DEC_GET_PARENT_CLASS - (decoder))->negotiate (decoder); + return GST_VIDEO_DECODER_CLASS (parent_class)->negotiate (decoder); } static VAProfile @@ -606,7 +607,7 @@ static void gst_va_mpeg2_dec_dispose (GObject * object) { gst_va_base_dec_close (GST_VIDEO_DECODER (object)); - G_OBJECT_CLASS (GST_VA_BASE_DEC_GET_PARENT_CLASS (object))->dispose (object); + G_OBJECT_CLASS (parent_class)->dispose (object); } static void @@ -634,6 +635,8 @@ gst_va_mpeg2_dec_class_init (gpointer g_class, gpointer class_data) sink_doc_caps = gst_caps_from_string (sink_caps_str); src_doc_caps = gst_caps_from_string (src_caps_str); + parent_class = g_type_class_peek_parent (g_class); + gst_va_base_dec_class_init (GST_VA_BASE_DEC_CLASS (g_class), MPEG2, cdata->render_device_path, cdata->sink_caps, cdata->src_caps, src_doc_caps, sink_doc_caps); diff --git a/subprojects/gst-plugins-bad/sys/va/gstvavp8dec.c b/subprojects/gst-plugins-bad/sys/va/gstvavp8dec.c index c8f2001741..a23d101e51 100644 --- a/subprojects/gst-plugins-bad/sys/va/gstvavp8dec.c +++ b/subprojects/gst-plugins-bad/sys/va/gstvavp8dec.c @@ -75,6 +75,8 @@ struct _GstVaVp8Dec gboolean need_negotiation; }; +static GstElementClass *parent_class = NULL; + /* *INDENT-OFF* */ static const gchar *src_caps_str = GST_VIDEO_CAPS_MAKE_WITH_FEATURES (GST_CAPS_FEATURE_MEMORY_VA, @@ -126,8 +128,7 @@ gst_va_vp8_dec_negotiate (GstVideoDecoder * decoder) GST_INFO_OBJECT (self, "Negotiated caps %" GST_PTR_FORMAT, base->output_state->caps); - return GST_VIDEO_DECODER_CLASS (GST_VA_BASE_DEC_GET_PARENT_CLASS - (decoder))->negotiate (decoder); + return GST_VIDEO_DECODER_CLASS (parent_class)->negotiate (decoder); } static VAProfile @@ -472,7 +473,7 @@ static void gst_va_vp8_dec_dispose (GObject * object) { gst_va_base_dec_close (GST_VIDEO_DECODER (object)); - G_OBJECT_CLASS (GST_VA_BASE_DEC_GET_PARENT_CLASS (object))->dispose (object); + G_OBJECT_CLASS (parent_class)->dispose (object); } static void @@ -500,6 +501,8 @@ gst_va_vp8_dec_class_init (gpointer g_class, gpointer class_data) sink_doc_caps = gst_caps_from_string (sink_caps_str); src_doc_caps = gst_caps_from_string (src_caps_str); + parent_class = g_type_class_peek_parent (g_class); + gst_va_base_dec_class_init (GST_VA_BASE_DEC_CLASS (g_class), VP8, cdata->render_device_path, cdata->sink_caps, cdata->src_caps, src_doc_caps, sink_doc_caps); diff --git a/subprojects/gst-plugins-bad/sys/va/gstvavp9dec.c b/subprojects/gst-plugins-bad/sys/va/gstvavp9dec.c index ee583df092..be88f2816f 100644 --- a/subprojects/gst-plugins-bad/sys/va/gstvavp9dec.c +++ b/subprojects/gst-plugins-bad/sys/va/gstvavp9dec.c @@ -74,6 +74,8 @@ struct _GstVaVp9Dec gboolean need_negotiation; }; +static GstElementClass *parent_class = NULL; + /* *INDENT-OFF* */ static const gchar *src_caps_str = GST_VIDEO_CAPS_MAKE_WITH_FEATURES (GST_CAPS_FEATURE_MEMORY_VA, @@ -612,15 +614,14 @@ gst_va_vp9_dec_negotiate (GstVideoDecoder * decoder) GST_INFO_OBJECT (self, "Negotiated caps %" GST_PTR_FORMAT, base->output_state->caps); - return GST_VIDEO_DECODER_CLASS (GST_VA_BASE_DEC_GET_PARENT_CLASS - (decoder))->negotiate (decoder); + return GST_VIDEO_DECODER_CLASS (parent_class)->negotiate (decoder); } static void gst_va_vp9_dec_dispose (GObject * object) { gst_va_base_dec_close (GST_VIDEO_DECODER (object)); - G_OBJECT_CLASS (GST_VA_BASE_DEC_GET_PARENT_CLASS (object))->dispose (object); + G_OBJECT_CLASS (parent_class)->dispose (object); } static void @@ -648,6 +649,8 @@ gst_va_vp9_dec_class_init (gpointer g_class, gpointer class_data) sink_doc_caps = gst_caps_from_string (sink_caps_str); src_doc_caps = gst_caps_from_string (src_caps_str); + parent_class = g_type_class_peek_parent (g_class); + gst_va_base_dec_class_init (GST_VA_BASE_DEC_CLASS (g_class), VP9, cdata->render_device_path, cdata->sink_caps, cdata->src_caps, src_doc_caps, sink_doc_caps);