aboutsummaryrefslogtreecommitdiff
path: root/ext/mpeg2dec/gstmpeg2dec.c
diff options
context:
space:
mode:
authorSebastian Dröge <slomo@circular-chaos.org>2013-09-24 16:51:18 +0200
committerSebastian Dröge <slomo@circular-chaos.org>2013-09-24 16:51:28 +0200
commit712ca5a1def2bee93419cd8aa1bdfe56344bfbb1 (patch)
treea33c2c278ae39b885630cea815337896fd65fcb7 /ext/mpeg2dec/gstmpeg2dec.c
parent3b5ddd551f1af1851749009c502bab634a41603d (diff)
parent083d79e7ec2d1d5cace3484a6095fcf6eb104e1c (diff)
Merge branch 'debian-experimental'
Diffstat (limited to 'ext/mpeg2dec/gstmpeg2dec.c')
-rw-r--r--ext/mpeg2dec/gstmpeg2dec.c47
1 files changed, 27 insertions, 20 deletions
diff --git a/ext/mpeg2dec/gstmpeg2dec.c b/ext/mpeg2dec/gstmpeg2dec.c
index 96a0b11..03c8b4e 100644
--- a/ext/mpeg2dec/gstmpeg2dec.c
+++ b/ext/mpeg2dec/gstmpeg2dec.c
@@ -13,8 +13,8 @@
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
*/
#ifdef HAVE_CONFIG_H
@@ -85,7 +85,7 @@ static gboolean gst_mpeg2dec_start (GstVideoDecoder * decoder);
static gboolean gst_mpeg2dec_stop (GstVideoDecoder * decoder);
static gboolean gst_mpeg2dec_set_format (GstVideoDecoder * decoder,
GstVideoCodecState * state);
-static gboolean gst_mpeg2dec_reset (GstVideoDecoder * decoder, gboolean hard);
+static gboolean gst_mpeg2dec_flush (GstVideoDecoder * decoder);
static GstFlowReturn gst_mpeg2dec_finish (GstVideoDecoder * decoder);
static GstFlowReturn gst_mpeg2dec_handle_frame (GstVideoDecoder * decoder,
GstVideoCodecFrame * frame);
@@ -118,7 +118,7 @@ gst_mpeg2dec_class_init (GstMpeg2decClass * klass)
video_decoder_class->close = GST_DEBUG_FUNCPTR (gst_mpeg2dec_close);
video_decoder_class->start = GST_DEBUG_FUNCPTR (gst_mpeg2dec_start);
video_decoder_class->stop = GST_DEBUG_FUNCPTR (gst_mpeg2dec_stop);
- video_decoder_class->reset = GST_DEBUG_FUNCPTR (gst_mpeg2dec_reset);
+ video_decoder_class->flush = GST_DEBUG_FUNCPTR (gst_mpeg2dec_flush);
video_decoder_class->set_format = GST_DEBUG_FUNCPTR (gst_mpeg2dec_set_format);
video_decoder_class->handle_frame =
GST_DEBUG_FUNCPTR (gst_mpeg2dec_handle_frame);
@@ -185,46 +185,53 @@ gst_mpeg2dec_close (GstVideoDecoder * decoder)
}
static gboolean
-gst_mpeg2dec_start (GstVideoDecoder * decoder)
+gst_mpeg2dec_set_format (GstVideoDecoder * decoder, GstVideoCodecState * state)
{
- return gst_mpeg2dec_reset (decoder, TRUE);
+ GstMpeg2dec *mpeg2dec = GST_MPEG2DEC (decoder);
+
+ /* Save input state to be used as reference for output state */
+ if (mpeg2dec->input_state)
+ gst_video_codec_state_unref (mpeg2dec->input_state);
+ mpeg2dec->input_state = gst_video_codec_state_ref (state);
+
+ return TRUE;
}
static gboolean
-gst_mpeg2dec_stop (GstVideoDecoder * decoder)
+gst_mpeg2dec_start (GstVideoDecoder * decoder)
{
GstMpeg2dec *mpeg2dec = GST_MPEG2DEC (decoder);
- if (mpeg2dec->input_state) {
- gst_video_codec_state_unref (mpeg2dec->input_state);
- mpeg2dec->input_state = NULL;
- }
- return gst_mpeg2dec_reset (decoder, TRUE);
+ mpeg2dec->discont_state = MPEG2DEC_DISC_NEW_PICTURE;
+
+ return TRUE;
}
static gboolean
-gst_mpeg2dec_set_format (GstVideoDecoder * decoder, GstVideoCodecState * state)
+gst_mpeg2dec_stop (GstVideoDecoder * decoder)
{
GstMpeg2dec *mpeg2dec = GST_MPEG2DEC (decoder);
- /* Save input state to be used as reference for output state */
+ mpeg2_reset (mpeg2dec->decoder, 0);
+ mpeg2_skip (mpeg2dec->decoder, 1);
+
+ gst_mpeg2dec_clear_buffers (mpeg2dec);
+
if (mpeg2dec->input_state)
gst_video_codec_state_unref (mpeg2dec->input_state);
- mpeg2dec->input_state = gst_video_codec_state_ref (state);
+ mpeg2dec->input_state = NULL;
return TRUE;
}
static gboolean
-gst_mpeg2dec_reset (GstVideoDecoder * decoder, gboolean hard)
+gst_mpeg2dec_flush (GstVideoDecoder * decoder)
{
GstMpeg2dec *mpeg2dec = GST_MPEG2DEC (decoder);
- GST_DEBUG_OBJECT (mpeg2dec, "%s", hard ? "hard" : "soft");
-
/* reset the initial video state */
mpeg2dec->discont_state = MPEG2DEC_DISC_NEW_PICTURE;
- mpeg2_reset (mpeg2dec->decoder, hard);
+ mpeg2_reset (mpeg2dec->decoder, 1);
mpeg2_skip (mpeg2dec->decoder, 1);
gst_mpeg2dec_clear_buffers (mpeg2dec);
@@ -998,7 +1005,7 @@ gst_mpeg2dec_handle_frame (GstVideoDecoder * decoder,
GST_VIDEO_DECODER_ERROR (decoder, 1, STREAM, DECODE,
("decoding error"), ("Bad sequence header"), ret);
gst_video_decoder_drop_frame (decoder, frame);
- gst_mpeg2dec_reset (decoder, 0);
+ gst_mpeg2dec_flush (decoder);
goto done;
}
break;