]> git.sesse.net Git - vlc/commitdiff
Avancement du debuggage du motion.
authorJean-Marc Dressler <polux@videolan.org>
Wed, 19 Jan 2000 01:57:57 +0000 (01:57 +0000)
committerJean-Marc Dressler <polux@videolan.org>
Wed, 19 Jan 2000 01:57:57 +0000 (01:57 +0000)
--Meuuh+Stef+Polux+Jimmy

src/video_decoder/vdec_motion.c
src/video_decoder/video_decoder.c
src/video_parser/video_fifo.c
src/video_parser/vpar_blocks.c
src/video_parser/vpar_headers.c
src/video_parser/vpar_motion.c
src/video_parser/vpar_synchro.c

index 312db933a866b3f93928e4d424ff1329ff12281f..5eb640133b4e68fe2216ad02988bed8c13996558 100644 (file)
@@ -79,8 +79,11 @@ static void __inline__ MotionComponent( yuv_data_t * p_src, yuv_data_t * p_dest,
             {
                 for( i_x = 0; i_x < i_width; i_x += 8 )
                 {
-                     memcpy( &p_dest[i_x], &p_src[i_x], 8 * sizeof(yuv_data_t) );
-               }
+                     for( i_x1 = 0; i_x1 < 8; i_x1++ )
+                     {
+                         p_dest[i_x+i_x1] = p_src[i_x+i_x1];
+                     }
+                }
                 p_dest += i_x_step;
                 p_src += i_x_step;
             }
@@ -219,7 +222,6 @@ static void __inline__ MotionComponent( yuv_data_t * p_src, yuv_data_t * p_dest,
             }
         }
         break;
-
     }
 }
 
@@ -445,6 +447,7 @@ void vdec_MotionFrameDMV( macroblock_t * p_mb )
  *****************************************************************************/
 void vdec_Motion420( macroblock_t * p_mb, motion_arg_t * p_motion )
 {
+    p_motion->i_mv_x = p_motion->i_mv_y = 0;
     /* Luminance */
     MotionComponent( /* source */
                      p_motion->p_source->p_y
@@ -495,6 +498,7 @@ void vdec_Motion420( macroblock_t * p_mb, motion_arg_t * p_motion )
                      (p_motion->b_average << 2)
                        | (((p_motion->i_mv_y/2) & 1) << 1)
                        | ((p_motion->i_mv_x/2) & 1) );
+
 }
 
 /*****************************************************************************
index b8d4bb4bdd9afffa8e766e27871f6f400cf8b9c6..d48ab8af166ab63495b1c633465332ed72a9dab9 100644 (file)
@@ -302,7 +302,7 @@ static void DecodeMacroblock( vdec_thread_t *p_vdec, macroblock_t * p_mb )
 void vdec_AddBlock( vdec_thread_t * p_vdec, dctelem_t * p_block, yuv_data_t * p_data, int i_incr )
 {
     int i_x, i_y;
-    
     for( i_y = 0; i_y < 8; i_y++ )
     {
         for( i_x = 0; i_x < 8; i_x++ )
index 930d23cb6430c3bed33e60e9387e108934cba74e..363d2ab7355418a7951eef54c1b5897be05fac93 100644 (file)
@@ -155,14 +155,14 @@ fprintf(stderr, "Image decodee\n");
         vpar_SynchroEnd( p_fifo->p_vpar );
      
         /* Unlink referenced pictures */
-/*        if( p_mb->p_forward != NULL )
+        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 );
-        }*/
+        }
     }
 
     /* Release the macroblock_t structure */
@@ -197,14 +197,14 @@ fprintf(stderr, "Image trashee\n");
         vpar_SynchroEnd( p_fifo->p_vpar );
 
         /* Unlink referenced pictures */
-/*        if( p_mb->p_forward != NULL )
+        if( p_mb->p_forward != NULL )
         {
-                vout_UnlinkPicture( p_fifo->p_vpar->p_vout, p_mb->p_forward );
+            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 );
-        }*/
+        }
     }
 
     /* Release the macroblock_t structure */
index 7709bde73b44f165247879a5ff0dce57278f4dc4..b5f5e714869ed6e4cdf14041c230432766a9e56a 100644 (file)
@@ -587,11 +587,14 @@ static __inline__ void InitMacroblock( vpar_thread_t * p_vpar,
     p_mb->pf_chroma_motion = pf_chroma_motion[p_vpar->sequence.i_chroma_format];
     p_mb->b_P_coding_type = ( p_vpar->picture.i_coding_type == P_CODING_TYPE );
 
-    p_mb->p_forward = p_vpar->sequence.p_forward;
-    p_mb->p_backward = p_vpar->sequence.p_backward;
+    if( (p_vpar->picture.i_coding_type == P_CODING_TYPE) ||
+        (p_vpar->picture.i_coding_type == B_CODING_TYPE) )
+       p_mb->p_forward = p_vpar->sequence.p_forward;
+    if( p_vpar->picture.i_coding_type == B_CODING_TYPE )
+        p_mb->p_backward = p_vpar->sequence.p_backward;
 
     p_mb->i_addb_l_stride = (p_mb->i_l_stride = p_vpar->picture.i_l_stride) - 8;
-    p_mb->i_addb_c_stride = (p_mb->i_c_stride = p_vpar->picture.i_c_stride) - 9;
+    p_mb->i_addb_c_stride = (p_mb->i_c_stride = p_vpar->picture.i_c_stride) - 8;
 
     /* Update macroblock real position. */
     p_vpar->mb.i_l_x += 16;
@@ -754,7 +757,7 @@ i_count++;
         static int          pi_dc_dct_reinit[4] = {128,256,512,1024};
         static f_motion_t   pf_motion_skipped[4] = {NULL, vdec_MotionFieldField,
                                 vdec_MotionFieldField, vdec_MotionFrameFrame};
-
+fprintf(stderr, "On sauuuute !\n");
         /* Reset DC predictors (7.2.1). */
         p_vpar->slice.pi_dc_dct_pred[0] = p_vpar->slice.pi_dc_dct_pred[1]
             = p_vpar->slice.pi_dc_dct_pred[2]
@@ -785,6 +788,7 @@ i_count++;
 
         /* Motion type is picture structure. */
         p_mb->pf_motion = pf_motion_skipped[p_vpar->picture.i_structure];
+        p_mb->i_mb_type = MB_MOTION_FORWARD;
 
         /* Set the field we use for motion compensation */
         p_mb->ppi_field_select[0][0] = p_mb->ppi_field_select[0][1]
@@ -946,6 +950,12 @@ if( 0 )
         /* Reset MV predictors. */
         memset( p_vpar->slice.pppi_pmv, 0, 8*sizeof(int) );
     }
+
+    if( p_mb->b_P_coding_type && !(p_vpar->mb.i_mb_type & (MB_MOTION_FORWARD|MB_INTRA)) )
+    {
+        p_mb->i_mb_type |= MB_MOTION_FORWARD;
+    }
+    
  if( 0 )        
     //i_count == 249)
     // i_count != *pi_mb_address)
index 7f64638189e675325e3d7567323fca4f969763e6..3bd32a36f74fce135e318c3b9b271306a57ef4df 100644 (file)
@@ -614,23 +614,23 @@ static void PictureHeader( vpar_thread_t * p_vpar )
         intf_DbgMsg("vpar debug: odd number of field picture.\n");
     }
 
-    if( p_vpar->picture.i_current_structure )
+    /* Do we have the reference pictures ? */
+    b_parsable = !(((p_vpar->picture.i_coding_type == P_CODING_TYPE) &&
+                    (p_vpar->sequence.p_backward == NULL)) ||
+                     /* p_backward will become p_forward later */
+                   ((p_vpar->picture.i_coding_type == B_CODING_TYPE) &&
+                    (p_vpar->sequence.p_forward == NULL ||
+                     p_vpar->sequence.p_backward == NULL)));
+
+    if( b_parsable )
     {
-        /* Second field of a frame. We will decode it if, and only if we
-         * have decoded the first frame. */
-        b_parsable = (p_vpar->picture.p_picture != NULL);
-    }
-    else
-    {
-        /* Do we have the reference pictures ? */
-        b_parsable = !((p_vpar->picture.i_coding_type == P_CODING_TYPE) &&
-                       (p_vpar->sequence.p_backward == NULL)) ||
-                        /* p_backward will become p_forward later */
-                      ((p_vpar->picture.i_coding_type == B_CODING_TYPE) &&
-                       (p_vpar->sequence.p_forward == NULL ||
-                        p_vpar->sequence.p_backward == NULL));
-
-        if( b_parsable )
+        if( p_vpar->picture.i_current_structure )
+        {
+            /* Second field of a frame. We will decode it if, and only if we
+            * have decoded the first frame. */
+            b_parsable = (p_vpar->picture.p_picture != NULL);
+        }
+        else
         {
             /* Does synchro say we have enough time to decode it ? */
             b_parsable = vpar_SynchroChoose( p_vpar,
@@ -688,6 +688,7 @@ static void PictureHeader( vpar_thread_t * p_vpar )
 
         P_picture->i_deccount = p_vpar->sequence.i_mb_size;
         memset( p_vpar->picture.pp_mb, 0, MAX_MB );
+memset( P_picture->p_data, 0, (p_vpar->sequence.i_mb_size*384));
 
         /* Update the reference pointers. */
         ReferenceUpdate( p_vpar, p_vpar->picture.i_coding_type, P_picture );
@@ -761,16 +762,16 @@ fprintf(stderr, "Image parsee (%d)\n", p_vpar->picture.i_coding_type);
 
         /* Link referenced pictures for the decoder 
          * They are unlinked in vpar_ReleaseMacroblock() & vpar_DestroyMacroblock() */
-#if 0
-        if( p_vpar->sequence.p_forward != NULL )
+        if( p_vpar->picture.i_coding_type == P_CODING_TYPE ||
+            p_vpar->picture.i_coding_type == B_CODING_TYPE )
         {
             vout_LinkPicture( p_vpar->p_vout, p_vpar->sequence.p_forward );
         }
-        if( p_vpar->sequence.p_backward != NULL )
+        if( p_vpar->picture.i_coding_type == B_CODING_TYPE )
         {
             vout_LinkPicture( p_vpar->p_vout, p_vpar->sequence.p_backward );
         } 
-#endif
+
         /* Send signal to the video_decoder. */
         vlc_mutex_lock( &p_vpar->vfifo.lock );
         vlc_cond_signal( &p_vpar->vfifo.wait );
index 0892ee2cab11cc15ff208ab2400af8ee89cd27e6..8e04ff093d3b5d5b6ce0678dd8eeeb9983181815 100644 (file)
@@ -104,13 +104,13 @@ static __inline__ void vpar_DecodeMotionVector( int * pi_prediction, int i_r_siz
     i_limit = 16 << i_r_size;
     i_vector = *pi_prediction >> i_full_pel;
 
-    if( i_motion_code < 0 )
+    if( i_motion_code > 0 )
     {
         i_vector += ((i_motion_code-1) << i_r_size) + i_motion_residual + 1;
         if( i_vector >= i_limit )
             i_vector -= i_limit << 1;
     }
-    else if( i_motion_code > 0 )
+    else if( i_motion_code < 0 )
     {
         i_vector -= ((-i_motion_code-1) << i_r_size) + i_motion_residual + 1;
         if( i_vector < i_limit )
index 4c8d6bc0351cf08d07495ee13955fb145c76b249..7ad27e7cc62a0d6975ff690e1a891d8dc2b104fa 100644 (file)
@@ -148,7 +148,7 @@ void vpar_SynchroUpdateStructures( vpar_thread_t * p_vpar,
 boolean_t vpar_SynchroChoose( vpar_thread_t * p_vpar, int i_coding_type,
                               int i_structure )
 {
-    return( 1 );
+//    return( 1 );
     return( i_coding_type == I_CODING_TYPE || i_coding_type == P_CODING_TYPE );
     //return( i_coding_type == I_CODING_TYPE );
 }
@@ -171,7 +171,7 @@ mtime_t vpar_SynchroDecode( vpar_thread_t * p_vpar, int i_coding_type,
 {
     vpar_SynchroUpdateStructures (p_vpar, i_coding_type);
 
-    return mdate() + 3000000;
+    return mdate() + 700000;
 }
 
 /*****************************************************************************