diff options
author | Sebastian Dröge <slomo@circular-chaos.org> | 2013-09-24 16:51:18 +0200 |
---|---|---|
committer | Sebastian Dröge <slomo@circular-chaos.org> | 2013-09-24 16:51:28 +0200 |
commit | 712ca5a1def2bee93419cd8aa1bdfe56344bfbb1 (patch) | |
tree | a33c2c278ae39b885630cea815337896fd65fcb7 /ext/mpeg2dec/gstmpeg2dec.c | |
parent | 3b5ddd551f1af1851749009c502bab634a41603d (diff) | |
parent | 083d79e7ec2d1d5cace3484a6095fcf6eb104e1c (diff) |
Merge branch 'debian-experimental'
Diffstat (limited to 'ext/mpeg2dec/gstmpeg2dec.c')
-rw-r--r-- | ext/mpeg2dec/gstmpeg2dec.c | 47 |
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; |