diff --git a/gst-libs/gst/video/gstbasevideocodec.c b/gst-libs/gst/video/gstbasevideocodec.c index f2d4ee6ca6..c605b39bf0 100644 --- a/gst-libs/gst/video/gstbasevideocodec.c +++ b/gst-libs/gst/video/gstbasevideocodec.c @@ -114,6 +114,9 @@ gst_base_video_codec_reset (GstBaseVideoCodec * base_video_codec) base_video_codec->bytes = 0; base_video_codec->time = 0; + + gst_buffer_replace (&base_video_codec->state.codec_data, NULL); + gst_caps_replace (&base_video_codec->state.caps, NULL); } static void diff --git a/gst-libs/gst/video/gstbasevideocodec.h b/gst-libs/gst/video/gstbasevideocodec.h index e9431e20ab..2fa6015d97 100644 --- a/gst-libs/gst/video/gstbasevideocodec.h +++ b/gst-libs/gst/video/gstbasevideocodec.h @@ -86,6 +86,7 @@ typedef struct _GstBaseVideoCodecClass GstBaseVideoCodecClass; struct _GstVideoState { + GstCaps *caps; GstVideoFormat format; int width, height; int fps_n, fps_d; diff --git a/gst-libs/gst/video/gstbasevideodecoder.c b/gst-libs/gst/video/gstbasevideodecoder.c index 81c84beb99..4f1e8e1555 100644 --- a/gst-libs/gst/video/gstbasevideodecoder.c +++ b/gst-libs/gst/video/gstbasevideodecoder.c @@ -255,8 +255,12 @@ gst_base_video_decoder_sink_setcaps (GstPad * pad, GstCaps * caps) state = &GST_BASE_VIDEO_CODEC (base_video_decoder)->state; + gst_buffer_replace (&state->codec_data, NULL); + gst_caps_replace (&state->caps, NULL); memset (state, 0, sizeof (GstVideoState)); + state->caps = gst_caps_ref (caps); + structure = gst_caps_get_structure (caps, 0); gst_video_format_parse_caps (caps, NULL, &state->width, &state->height);