From 525875727aa91998c238fc13fe4477b60527741b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Mon, 27 Jun 2011 09:41:40 +0200 Subject: [PATCH] basevideo: Add the caps to the GstVideoState and clean up caps/codec_data properly Having access to the caps in ::set_format can be useful if non-standard caps fields like the h264 alignment must be accessed. --- gst-libs/gst/video/gstbasevideocodec.c | 3 +++ gst-libs/gst/video/gstbasevideocodec.h | 1 + gst-libs/gst/video/gstbasevideodecoder.c | 4 ++++ 3 files changed, 8 insertions(+) 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);