vpxenc: add configure_encoder virtual method
authorMathieu Duponchelle <mathieu@centricular.com>
Fri, 28 Aug 2020 15:35:26 +0000 (17:35 +0200)
committerGStreamer Merge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Wed, 9 Sep 2020 18:05:31 +0000 (18:05 +0000)
For subclasses to expose format-specific properties

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/707>

ext/vpx/gstvpxenc.c
ext/vpx/gstvpxenc.h

index 7d8d240..b596d8c 100644 (file)
@@ -1776,6 +1776,13 @@ gst_vpx_enc_set_format (GstVideoEncoder * video_encoder,
         gst_vpx_error_name (status));
   }
 
+  if (vpx_enc_class->configure_encoder
+      && !vpx_enc_class->configure_encoder (encoder)) {
+    ret = FALSE;
+    g_mutex_unlock (&encoder->encoder_lock);
+    goto done;
+  }
+
   if (GST_VIDEO_INFO_FPS_D (info) == 0 || GST_VIDEO_INFO_FPS_N (info) == 0) {
     /* FIXME: Assume 25fps for unknown framerates. Better than reporting
      * that we introduce no latency while we actually do
@@ -1823,6 +1830,7 @@ gst_vpx_enc_set_format (GstVideoEncoder * video_encoder,
 
   gst_video_encoder_negotiate (GST_VIDEO_ENCODER (encoder));
 
+done:
   return ret;
 }
 
index fbf5476..f01e1ed 100644 (file)
@@ -61,7 +61,7 @@ struct _GstVPXEnc
 {
   GstVideoEncoder base_video_encoder;
 
-  /* < private > */
+  /* < protected > */
   vpx_codec_ctx_t encoder;
   GMutex encoder_lock;
 
@@ -120,6 +120,8 @@ struct _GstVPXEncClass
   vpx_codec_iface_t* (*get_algo) (GstVPXEnc *enc);
   /*enabled scaling*/
   gboolean (*enable_scaling) (GstVPXEnc *enc);
+  /*called from set_format with lock taken*/
+  gboolean (*configure_encoder) (GstVPXEnc *enc);
   /*set image format info*/
   void (*set_image_format) (GstVPXEnc *enc, vpx_image_t *image);
   /*get new simple caps*/