Correction d'un bug de synchro pour les images monotrames.
authorChristophe Massiot <massiot@videolan.org>
Sun, 27 Aug 2000 21:52:56 +0000 (21:52 +0000)
committerChristophe Massiot <massiot@videolan.org>
Sun, 27 Aug 2000 21:52:56 +0000 (21:52 +0000)
src/video_parser/vpar_headers.c
src/video_parser/vpar_synchro.c

index 18c9ccd..aba20b1 100644 (file)
@@ -164,33 +164,20 @@ static void __inline__ ReferenceUpdate( vpar_thread_t * p_vpar,
     if( i_coding_type != B_CODING_TYPE )
     {
         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 )
         {
-#ifdef POLUX_SYNCHRO
-            vout_DatePicture( p_vpar->p_vout, p_vpar->sequence.p_backward,
-                              vpar_SynchroDate( p_vpar ) );
-#endif
-#ifdef SAM_SYNCHRO
             vout_DatePicture( p_vpar->p_vout, p_vpar->sequence.p_backward,
                               vpar_SynchroDate( p_vpar ) );
-#endif
-#ifdef MEUUH_SYNCHRO
-            mtime_t     date;
-            date = vpar_SynchroDate( p_vpar );
-            vout_DatePicture( p_vpar->p_vout, p_vpar->sequence.p_backward,
-                              date );
-            if( p_vpar->synchro.i_coding_type == I_CODING_TYPE )
-                vpar_SynchroKludge( p_vpar, date );
-#endif
         }
         p_vpar->sequence.p_forward = p_vpar->sequence.p_backward;
         p_vpar->sequence.p_backward = p_newref;
         if( p_newref != NULL )
+        {
             vout_LinkPicture( p_vpar->p_vout, p_newref );
-#ifdef MEUUH_SYNCHRO
-        p_vpar->synchro.i_coding_type = i_coding_type;
-#endif
+        }
     }
     else if( p_newref != NULL )
     {
@@ -210,10 +197,14 @@ static void __inline__ ReferenceReplace( vpar_thread_t * p_vpar,
     if( i_coding_type != B_CODING_TYPE )
     {
         if( p_vpar->sequence.p_backward != NULL )
+        {
             vout_UnlinkPicture( p_vpar->p_vout, p_vpar->sequence.p_backward );
+        }
         p_vpar->sequence.p_backward = p_newref;
         if( p_newref != NULL )
+        {
             vout_LinkPicture( p_vpar->p_vout, p_newref );
+        }
     }
 }
 
@@ -613,7 +604,7 @@ static void PictureHeader( vpar_thread_t * p_vpar )
         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 field. */
+             * have decoded the first field. */
             b_parsable = (p_vpar->picture.p_picture != NULL);
         }
         else
@@ -623,21 +614,12 @@ static void PictureHeader( vpar_thread_t * p_vpar )
                                p_vpar->picture.i_coding_type, i_structure );
         }
     }
-#ifdef POLUX_SYNCHRO
-    else if( !p_vpar->picture.i_current_structure )
-    {
-        vpar_SynchroTrash( p_vpar, p_vpar->picture.i_coding_type, i_structure );
-    }
-#endif
 
     if( !b_parsable )
     {
         /* Update the reference pointers. */
         ReferenceUpdate( p_vpar, p_vpar->picture.i_coding_type, NULL );
-#ifndef POLUX_SYNCHRO
-        /* Warn Synchro we have trashed a picture. */
-        vpar_SynchroTrash( p_vpar, p_vpar->picture.i_coding_type, i_structure );
-#endif
+
         /* Update context. */
         if( i_structure != FRAME_STRUCTURE )
         {
@@ -648,9 +630,16 @@ static void PictureHeader( vpar_thread_t * p_vpar )
             }
             else
             {
+                /* The frame is complete. */
                 p_vpar->picture.i_current_structure = i_structure;
+                vpar_SynchroTrash( p_vpar, p_vpar->picture.i_coding_type, i_structure );
             }
         }
+        else
+        {
+            /* Warn Synchro we have trashed a picture. */
+            vpar_SynchroTrash( p_vpar, p_vpar->picture.i_coding_type, i_structure );
+        }
         p_vpar->picture.p_picture = NULL;
 
         return;
index dd75986..a9b06b2 100644 (file)
@@ -387,7 +387,9 @@ mtime_t vpar_SynchroDate( vpar_thread_t * p_vpar )
 
     return i_displaydate;
 #else
-
+    static s64 i_last_date = 0;
+//printf("%d: %lld\n", p_vpar->picture.i_coding_type, p_vpar->synchro.i_last_pts - i_last_date);
+//i_last_date = p_vpar->synchro.i_last_pts;
     return p_vpar->synchro.i_last_pts;
 
 #endif
@@ -395,125 +397,6 @@ mtime_t vpar_SynchroDate( vpar_thread_t * p_vpar )
 
 #endif
 
-#ifdef MEUUH_SYNCHRO
-
-/* synchro a deux balles backportee du decodeur de reference. NE MARCHE PAS
-AVEC LES IMAGES MONOTRAMES */
-
-boolean_t vpar_SynchroChoose( vpar_thread_t * p_vpar, int i_coding_type,
-                              int i_structure )
-{
-    switch (i_coding_type)
-    {
-    case B_CODING_TYPE:
-        if ((p_vpar->synchro.kludge_level <= p_vpar->synchro.kludge_nbp))
-        {
-            p_vpar->synchro.kludge_b++;
-            return( 0 );
-        }
-        if (p_vpar->synchro.kludge_b %
-             (p_vpar->synchro.kludge_nbb /
-                (p_vpar->synchro.kludge_level - p_vpar->synchro.kludge_nbp)))
-        {
-            p_vpar->synchro.kludge_b++;
-            return( 0 );
-        }
-        p_vpar->synchro.kludge_b++;
-        return( 1 );
-
-    case P_CODING_TYPE:
-        if (p_vpar->synchro.kludge_p++ >= p_vpar->synchro.kludge_level)
-        {
-            return( 0 );
-        }
-        return( 1 );
-
-    default:
-        return( 1 );
-    }
-}
-
-void vpar_SynchroTrash( vpar_thread_t * p_vpar, int i_coding_type,
-                        int i_structure )
-{
-    if (DECODER_FIFO_START(p_vpar->fifo)->b_has_pts && i_coding_type == I_CODING_TYPE)
-    {
-        p_vpar->synchro.kludge_nbframes = 0;
-        p_vpar->synchro.kludge_date = DECODER_FIFO_START(p_vpar->fifo)->i_pts;
-    }
-    else
-        p_vpar->synchro.kludge_nbframes++;
-    DECODER_FIFO_START(p_vpar->fifo)->b_has_pts = 0;
-}
-
-void vpar_SynchroDecode( vpar_thread_t * p_vpar, int i_coding_type,
-                            int i_structure )
-{
-    if (DECODER_FIFO_START(p_vpar->fifo)->b_has_pts && i_coding_type == I_CODING_TYPE)
-    {
-        p_vpar->synchro.kludge_nbframes = 0;
-        p_vpar->synchro.kludge_date = DECODER_FIFO_START(p_vpar->fifo)->i_pts;
-        DECODER_FIFO_START(p_vpar->fifo)->b_has_pts = 0;
-    }
-    else
-        p_vpar->synchro.kludge_nbframes++;
-}
-
-mtime_t vpar_SynchroDate( vpar_thread_t * p_vpar )
-{
-    return( p_vpar->synchro.kludge_date
-            + p_vpar->synchro.kludge_nbframes * 1000000
-                / (p_vpar->sequence.i_frame_rate ) * 1001 );
-}
-
-void vpar_SynchroEnd( vpar_thread_t * p_vpar )
-{
-}
-
-void vpar_SynchroKludge( vpar_thread_t * p_vpar, mtime_t date )
-{
-    mtime_t     show_date;
-    int         temp = p_vpar->synchro.kludge_level;
-
-    p_vpar->synchro.kludge_nbp = p_vpar->synchro.kludge_p ? p_vpar->synchro.kludge_p : 5;
-    p_vpar->synchro.kludge_nbb = p_vpar->synchro.kludge_b ? p_vpar->synchro.kludge_b : 6;
-    show_date = date - mdate();
-    p_vpar->synchro.kludge_p = 0;
-    p_vpar->synchro.kludge_b = 0;
-
-    if (show_date < (SYNC_DELAY - SYNC_TOLERATE) && show_date <= p_vpar->synchro.kludge_prevdate)
-    {
-        p_vpar->synchro.kludge_level--;
-        if (p_vpar->synchro.kludge_level < 0)
-            p_vpar->synchro.kludge_level = 0;
-        else if (p_vpar->synchro.kludge_level >
-                     p_vpar->synchro.kludge_nbp + p_vpar->synchro.kludge_nbb)
-            p_vpar->synchro.kludge_level = p_vpar->synchro.kludge_nbp + p_vpar->synchro.kludge_nbb;
-#ifdef DEBUG
-        if (temp != p_vpar->synchro.kludge_level)
-            intf_DbgMsg("vdec debug: Level changed from %d to %d (%Ld)\n",
-                        temp, p_vpar->synchro.kludge_level, show_date );
-#endif
-    }
-    else if (show_date > (SYNC_DELAY + SYNC_TOLERATE) && show_date >= p_vpar->synchro.kludge_prevdate)
-    {
-        p_vpar->synchro.kludge_level++;
-        if (p_vpar->synchro.kludge_level > p_vpar->synchro.kludge_nbp + p_vpar->synchro.kludge_nbb)
-            p_vpar->synchro.kludge_level = p_vpar->synchro.kludge_nbp + p_vpar->synchro.kludge_nbb;
-#ifdef DEBUG
-        if (temp != p_vpar->synchro.kludge_level)
-            intf_DbgMsg("vdec debug: Level changed from %d to %d (%Ld)\n",
-                        temp, p_vpar->synchro.kludge_level, show_date );
-#endif
-    }
-
-    p_vpar->synchro.kludge_prevdate = show_date;
-    if ((p_vpar->synchro.kludge_level - p_vpar->synchro.kludge_nbp) > p_vpar->synchro.kludge_nbb)
-        p_vpar->synchro.kludge_level = p_vpar->synchro.kludge_nbb + p_vpar->synchro.kludge_nbp;
-}
-
-#endif
-
 
 #ifdef POLUX_SYNCHRO