diff --git a/ext/vpx/gstvpxenc.c b/ext/vpx/gstvpxenc.c index 7d8d240bae..b596d8c7e0 100644 --- a/ext/vpx/gstvpxenc.c +++ b/ext/vpx/gstvpxenc.c @@ -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; } diff --git a/ext/vpx/gstvpxenc.h b/ext/vpx/gstvpxenc.h index fbf5476ba0..f01e1edbc7 100644 --- a/ext/vpx/gstvpxenc.h +++ b/ext/vpx/gstvpxenc.h @@ -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*/