]> git.sesse.net Git - vlc/commitdiff
Le video parser compile mais n'est pas termine, n'est-ce pas stef ? ;)
authorJean-Marc Dressler <polux@videolan.org>
Tue, 11 Jan 2000 21:32:58 +0000 (21:32 +0000)
committerJean-Marc Dressler <polux@videolan.org>
Tue, 11 Jan 2000 21:32:58 +0000 (21:32 +0000)
src/video_parser/video_fifo.c
src/video_parser/vpar_headers.c
src/video_parser/vpar_motion.c

index 681a3410e8b3bd8bdff4c277ed79e602ea71cacc..a7c119201eaa2fe23cce02418db656e675cc45f9 100644 (file)
@@ -133,24 +133,6 @@ void vpar_DecodeMacroblock( video_fifo_t * p_fifo, macroblock_t * p_mb )
  *****************************************************************************/
 void vpar_ReleaseMacroblock( video_fifo_t * p_fifo, macroblock_t * p_mb )
 {
-    /* Unlink referenced pictures */
-    if( p_mb->p_forw_top != NULL )
-    {
-       vout_UnlinkPicture( p_fifo->p_vpar->p_vout, p_mb->p_forw_top );
-    }
-    if( p_mb->p_backw_top != NULL )
-    {
-        vout_UnlinkPicture( p_fifo->p_vpar->p_vout, p_mb->p_backw_top );
-    }
-    if( p_mb->p_forw_bot != NULL )
-    {
-        vout_UnlinkPicture( p_fifo->p_vpar->p_vout, p_mb->p_forw_bot );
-    }
-    if( p_mb->p_backw_bot != NULL )
-    {
-        vout_UnlinkPicture( p_fifo->p_vpar->p_vout, p_mb->p_backw_bot );
-    }
-
     /* Unlink picture buffer */
     vlc_mutex_lock( &p_mb->p_picture->lock_deccount );
     p_mb->p_picture->i_deccount--;
@@ -161,7 +143,17 @@ void vpar_ReleaseMacroblock( video_fifo_t * p_fifo, macroblock_t * p_mb )
 
         /* Warn Synchro for its records. */
         vpar_SynchroEnd( p_fifo->p_vpar );
-    }
+     
+        /* Unlink referenced pictures */
+        if( p_mb->p_forward != NULL )
+        {
+               vout_UnlinkPicture( p_fifo->p_vpar->p_vout, p_mb->p_forward );
+        }
+        if( p_mb->p_backward != NULL )
+        {
+            vout_UnlinkPicture( p_fifo->p_vpar->p_vout, p_mb->p_backward );
+        }
+   }
     vlc_mutex_unlock( & p_mb->p_picture->lock_deccount );
 
     /* Release the macroblock_t structure */
@@ -177,24 +169,6 @@ void vpar_ReleaseMacroblock( video_fifo_t * p_fifo, macroblock_t * p_mb )
  *****************************************************************************/
 void vpar_DestroyMacroblock( video_fifo_t * p_fifo, macroblock_t * p_mb )
 {
-    /* Unlink referenced pictures */
-    if( p_mb->p_forw_top != NULL )
-    {
-        vout_UnlinkPicture( p_fifo->p_vpar->p_vout, p_mb->p_forw_top );
-    }
-    if( p_mb->p_backw_top != NULL )
-    {
-        vout_UnlinkPicture( p_fifo->p_vpar->p_vout, p_mb->p_backw_top );
-    }
-    if( p_mb->p_forw_bot != NULL )
-    {
-        vout_UnlinkPicture( p_fifo->p_vpar->p_vout, p_mb->p_forw_bot );
-    }
-    if( p_mb->p_backw_bot != NULL )
-    {
-        vout_UnlinkPicture( p_fifo->p_vpar->p_vout, p_mb->p_backw_bot );
-    }
-
     /* Release the macroblock_t structure */
 #define P_buffer p_fifo->p_vpar->vbuffer
     vlc_mutex_lock( &P_buffer.lock );
index c66f3ce20243fe475ca470d00f560c98d50e918c..eaff8a413becac54a367c4231c8784930494b28f 100644 (file)
@@ -652,10 +652,10 @@ static void PictureHeader( vpar_thread_t * p_vpar )
     {
         /* This is a new frame. Get a structure from the video_output. */
         P_picture = vout_CreatePicture( p_vpar->p_vout,
-                                        SPLITTED_YUV_PICTURE,
+                                        99+p_vpar->sequence.i_chroma_format, /*???*/
                                         p_vpar->sequence.i_width,
                                         p_vpar->sequence.i_height,
-                                        p_vpar->sequence.i_chroma_format );
+                                        p_vpar->sequence.i_width*sizeof(yuv_data_t) );
 
         /* Initialize values. */
         P_picture->date = vpar_SynchroDecode( p_vpar,
@@ -710,7 +710,18 @@ static void PictureHeader( vpar_thread_t * p_vpar )
         /* Decode slice data. */
         SliceHeader( p_vpar, &i_mb_address, i_mb_base, i_dummy & 255 );
     }
-
+    
+    /* Link referenced pictures for the decoder 
+     * They are unlinked in vpar_ReleaseMacroblock() & vpar_DestroyMacroblock() */
+    if( p_vpar->sequence.p_forward != NULL )
+    {
+           vout_LinkPicture( p_vpar->p_vout, p_vpar->sequence.p_forward );
+    }
+    if( p_vpar->sequence.p_backward != NULL )
+    {
+        vout_LinkPicture( p_vpar->p_vout, p_vpar->sequence.p_backward );
+    }
+    
     if( p_vpar->picture.b_error )
     {
         /* Trash picture. */
@@ -722,13 +733,23 @@ static void PictureHeader( vpar_thread_t * p_vpar )
         ReferenceReplace( p_vpar, p_vpar->picture.i_coding_type, NULL );
         vout_DestroyPicture( p_vpar->p_vout, P_picture );
 
+        /* Unlink referenced pictures */
+        if(  p_vpar->sequence.p_forward != NULL  )
+        {
+               vout_UnlinkPicture( p_vpar->p_vout, p_vpar->sequence.p_forward );
+        }
+        if( p_vpar->sequence.p_backward != NULL )
+        {
+            vout_UnlinkPicture( p_vpar->p_vout, p_vpar->sequence.p_backward );
+        }
+
         /* Prepare context for the next picture. */
         P_picture = NULL;
     }
     else if( p_vpar->picture.i_current_structure == FRAME_STRUCTURE )
     {
         /* Frame completely parsed. */
-        P_picture.i_deccount = p_vpar->sequence.i_mb_size;
+        P_picture->i_deccount = p_vpar->sequence.i_mb_size;
         for( i_mb = 0; i_mb < p_vpar->sequence.i_mb_size; i_mb++ )
         {
             vpar_DecodeMacroblock( &p_vpar->vfifo, p_vpar->picture.pp_mb[i_mb] );
index b0761c770a51a48a9f603d6bf74dc3c3ed4054fd..0f23fdf8fad96f54da2cc7f796a171f3a4c4363c 100644 (file)
@@ -86,6 +86,7 @@ static __inline__ int vpar_MotionCode( vpar_thread_t * p_vpar )
 
    if( (i_code -= 12) < 0 )
    {
+       p_vpar->picture.b_error = 1;
        intf_DbgMsg( "vpar debug: Invalid motion_vector code\n" );
        return 0;
    }