]> git.sesse.net Git - vlc/commitdiff
Fixed handling of STATE_INVALID states.
authorChristophe Massiot <massiot@videolan.org>
Sat, 3 May 2003 22:25:44 +0000 (22:25 +0000)
committerChristophe Massiot <massiot@videolan.org>
Sat, 3 May 2003 22:25:44 +0000 (22:25 +0000)
modules/codec/libmpeg2.c

index abaddd9d6f117a2c2ecbe8188e0c12d7b5dea145..f380548ea25819625ef12020195c34c0817d913f 100755 (executable)
@@ -2,7 +2,7 @@
  * libmpeg2.c: mpeg2 video decoder module making use of libmpeg2.
  *****************************************************************************
  * Copyright (C) 1999-2001 VideoLAN
- * $Id: libmpeg2.c,v 1.14 2003/04/22 23:31:07 gbazin Exp $
+ * $Id: libmpeg2.c,v 1.15 2003/05/03 22:25:44 massiot Exp $
  *
  * Authors: Gildas Bazin <gbazin@netcourrier.com>
  *
@@ -337,8 +337,25 @@ static int RunDecoder( decoder_fifo_t *p_fifo )
             break;
 
         case STATE_INVALID:
+        {
+            uint8_t *buf[3];
+            buf[0] = buf[1] = buf[2] = NULL;
+
             msg_Warn( p_dec->p_fifo, "invalid picture encountered" );
+            vout_SynchroReset( p_dec->p_synchro );
+            mpeg2_skip( p_dec->p_mpeg2dec, 1 );
+            mpeg2_set_buf( p_dec->p_mpeg2dec, buf, NULL );
+            if ( p_dec->p_info->current_fbuf != NULL )
+                 p_dec->p_picture_to_destroy
+                    = p_dec->p_info->current_fbuf->id;
+            if( p_dec->p_info->discard_fbuf &&
+                p_dec->p_info->discard_fbuf->id )
+            {
+                p_pic = (picture_t *)p_dec->p_info->discard_fbuf->id;
+                vout_UnlinkPicture( p_dec->p_vout, p_pic );
+            }
             break;
+        }
 
         default:
             break;