GST_LOG_OBJECT (decoder, "finish frame %p", frame);
+ GST_VIDEO_DECODER_STREAM_LOCK (decoder);
+
if (G_UNLIKELY (priv->output_state_changed || (priv->output_state
&& gst_pad_check_reconfigure (decoder->srcpad))))
gst_video_decoder_negotiate (decoder);
- GST_VIDEO_DECODER_STREAM_LOCK (decoder);
-
gst_video_decoder_prepare_finish_frame (decoder, frame, FALSE);
priv->processed++;
g_return_val_if_fail (num_bytes != 0, GST_FLOW_ERROR);
g_return_val_if_fail (frame->output_buffer == NULL, GST_FLOW_ERROR);
+ GST_VIDEO_DECODER_STREAM_LOCK (decoder);
if (G_UNLIKELY (decoder->priv->output_state_changed
|| (decoder->priv->output_state
&& gst_pad_check_reconfigure (decoder->srcpad))))
gst_video_decoder_negotiate (decoder);
GST_LOG_OBJECT (decoder, "alloc buffer size %d", num_bytes);
- GST_VIDEO_DECODER_STREAM_LOCK (decoder);
flow_ret = gst_buffer_pool_acquire_buffer (decoder->priv->pool,
&frame->output_buffer, NULL);
GST_VIDEO_ENCODER_STREAM_LOCK (encoder);
- if (G_UNLIKELY (priv->output_state_changed))
+ if (G_UNLIKELY (priv->output_state_changed || (priv->output_state
+ && gst_pad_check_reconfigure (encoder->srcpad))))
gst_video_encoder_set_src_caps (encoder);
+
if (G_UNLIKELY (priv->output_state == NULL))
goto no_output_state;