diff --git a/subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codecav1dec.c b/subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codecav1dec.c index f0f2573d90..27940d1af3 100644 --- a/subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codecav1dec.c +++ b/subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codecav1dec.c @@ -334,11 +334,8 @@ done: gst_video_codec_state_unref (self->output_state); self->output_state = - gst_video_decoder_set_output_state (GST_VIDEO_DECODER (self), - self->vinfo.finfo->format, self->render_width, - self->render_height, av1dec->input_state); - - self->output_state->caps = gst_video_info_to_caps (&self->output_state->info); + gst_v4l2_decoder_set_output_state (GST_VIDEO_DECODER (self), &self->vinfo, + self->render_width, self->render_height, av1dec->input_state); if (GST_VIDEO_DECODER_CLASS (parent_class)->negotiate (decoder)) { if (self->streaming) diff --git a/subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codech264dec.c b/subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codech264dec.c index 7327e76ba6..de5dbdac71 100644 --- a/subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codech264dec.c +++ b/subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codech264dec.c @@ -377,15 +377,12 @@ done: gst_video_codec_state_unref (self->output_state); self->output_state = - gst_video_decoder_set_output_state (GST_VIDEO_DECODER (self), - self->vinfo.finfo->format, self->display_width, - self->display_height, h264dec->input_state); + gst_v4l2_decoder_set_output_state (GST_VIDEO_DECODER (self), &self->vinfo, + self->display_width, self->display_height, h264dec->input_state); if (self->interlaced) self->output_state->info.interlace_mode = GST_VIDEO_INTERLACE_MODE_MIXED; - self->output_state->caps = gst_video_info_to_caps (&self->output_state->info); - if (GST_VIDEO_DECODER_CLASS (parent_class)->negotiate (decoder)) { if (self->streaming) return TRUE; diff --git a/subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codech265dec.c b/subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codech265dec.c index 13f0cd6214..c32ca9757f 100644 --- a/subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codech265dec.c +++ b/subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codech265dec.c @@ -411,11 +411,8 @@ done: gst_video_codec_state_unref (self->output_state); self->output_state = - gst_video_decoder_set_output_state (GST_VIDEO_DECODER (self), - self->vinfo.finfo->format, self->display_width, - self->display_height, h265dec->input_state); - - self->output_state->caps = gst_video_info_to_caps (&self->output_state->info); + gst_v4l2_decoder_set_output_state (GST_VIDEO_DECODER (self), &self->vinfo, + self->display_width, self->display_height, h265dec->input_state); if (GST_VIDEO_DECODER_CLASS (parent_class)->negotiate (decoder)) { if (self->streaming) diff --git a/subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codecmpeg2dec.c b/subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codecmpeg2dec.c index 2c08379450..749252a1ad 100644 --- a/subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codecmpeg2dec.c +++ b/subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codecmpeg2dec.c @@ -299,16 +299,13 @@ done: gst_video_codec_state_unref (self->output_state); self->output_state = - gst_video_decoder_set_output_state (GST_VIDEO_DECODER (self), - self->vinfo.finfo->format, self->width, - self->height, mpeg2dec->input_state); + gst_v4l2_decoder_set_output_state (GST_VIDEO_DECODER (self), &self->vinfo, + self->width, self->height, mpeg2dec->input_state); if (self->interlaced) self->output_state->info.interlace_mode = GST_VIDEO_INTERLACE_MODE_INTERLEAVED; - self->output_state->caps = gst_video_info_to_caps (&self->output_state->info); - if (GST_VIDEO_DECODER_CLASS (parent_class)->negotiate (decoder)) { if (self->streaming) return TRUE; diff --git a/subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codecvp8dec.c b/subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codecvp8dec.c index 38d9e71121..6d6f49a8ae 100644 --- a/subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codecvp8dec.c +++ b/subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codecvp8dec.c @@ -248,11 +248,8 @@ done: gst_video_codec_state_unref (self->output_state); self->output_state = - gst_video_decoder_set_output_state (GST_VIDEO_DECODER (self), - self->vinfo.finfo->format, self->width, - self->height, vp8dec->input_state); - - self->output_state->caps = gst_video_info_to_caps (&self->output_state->info); + gst_v4l2_decoder_set_output_state (GST_VIDEO_DECODER (self), &self->vinfo, + self->width, self->height, vp8dec->input_state); if (GST_VIDEO_DECODER_CLASS (parent_class)->negotiate (decoder)) { if (self->streaming) diff --git a/subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codecvp9dec.c b/subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codecvp9dec.c index 5ba3890bdf..45ef5ac686 100644 --- a/subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codecvp9dec.c +++ b/subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codecvp9dec.c @@ -518,11 +518,8 @@ done: gst_video_codec_state_unref (self->output_state); self->output_state = - gst_video_decoder_set_output_state (GST_VIDEO_DECODER (self), - self->vinfo.finfo->format, self->width, - self->height, vp9dec->input_state); - - self->output_state->caps = gst_video_info_to_caps (&self->output_state->info); + gst_v4l2_decoder_set_output_state (GST_VIDEO_DECODER (self), &self->vinfo, + self->width, self->height, vp9dec->input_state); if (GST_VIDEO_DECODER_CLASS (parent_class)->negotiate (decoder)) { if (self->streaming) diff --git a/subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2decoder.c b/subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2decoder.c index e0a992a94f..a9c7e2caa4 100644 --- a/subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2decoder.c +++ b/subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2decoder.c @@ -554,6 +554,23 @@ gst_v4l2_decoder_select_src_format (GstV4l2Decoder * self, GstCaps * caps, return TRUE; } +GstVideoCodecState * +gst_v4l2_decoder_set_output_state (GstVideoDecoder * decoder, + GstVideoInfo * vinfo, guint width, guint height, + GstVideoCodecState * reference) +{ + GstVideoCodecState *state; + + state = gst_video_decoder_set_output_state (decoder, vinfo->finfo->format, + width, height, reference); + + state->caps = gst_video_info_to_caps (&state->info); + + GST_DEBUG_OBJECT (decoder, "Setting caps: %" GST_PTR_FORMAT, state->caps); + + return state; +} + gint gst_v4l2_decoder_request_buffers (GstV4l2Decoder * self, GstPadDirection direction, guint num_buffers) diff --git a/subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2decoder.h b/subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2decoder.h index c96efa2d55..457985f4ab 100644 --- a/subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2decoder.h +++ b/subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2decoder.h @@ -74,6 +74,12 @@ gboolean gst_v4l2_decoder_select_src_format (GstV4l2Decoder * self, GstCaps * caps, GstVideoInfo * vinfo); +GstVideoCodecState * gst_v4l2_decoder_set_output_state (GstVideoDecoder * decoder, + GstVideoInfo * vinfo, + guint width, + guint height, + GstVideoCodecState * reference); + gint gst_v4l2_decoder_request_buffers (GstV4l2Decoder * self, GstPadDirection direction, guint num_buffers);