]> git.sesse.net Git - vlc/commitdiff
packetizer: dirac: block sanitizing must clean reordering (fix #12051)
authorFrancois Cartegnie <fcvlcdev@free.fr>
Mon, 22 Sep 2014 18:12:18 +0000 (20:12 +0200)
committerFrancois Cartegnie <fcvlcdev@free.fr>
Mon, 22 Sep 2014 18:20:05 +0000 (20:20 +0200)
modules/packetizer/dirac.c

index 6deec7136671fdfedcb4bc591b38b7bfa77f1b03..71b0b11a129601debc73663c68fe9bec88f6993f 100644 (file)
@@ -1179,6 +1179,34 @@ static int dirac_TimeGenPush( decoder_t *p_dec, block_t *p_block_in )
     return 0;
 }
 
+
+static void dirac_ReorderDequeueAndReleaseBlock( decoder_t *p_dec, block_t *p_block )
+{
+    decoder_sys_t *p_sys = p_dec->p_sys;
+    /* Check if that block is present in reorder queue and release it
+       if needed */
+    struct dirac_reorder_entry **pp_at = &p_sys->reorder_buf.p_head;
+    for( ; *pp_at; pp_at = &(*pp_at)->p_next )
+    {
+        /* backup address in case we remove member */
+        struct dirac_reorder_entry *p_entry = *pp_at;
+        if ( p_entry->p_eu == p_block )
+        {
+            /* unlink member */
+            *pp_at = (*pp_at)->p_next;
+
+            /* Add to empty reorder entry list*/
+            p_entry->p_next = p_sys->reorder_buf.p_empty;
+            p_sys->reorder_buf.p_empty = p_entry;
+
+            p_sys->reorder_buf.u_size--;
+            break;
+        }
+    }
+
+    block_Release( p_block );
+}
+
 /*****************************************************************************
  * Packetize: form dated encapsulation units from anything
  *****************************************************************************/
@@ -1307,7 +1335,7 @@ static block_t *Packetize( decoder_t *p_dec, block_t **pp_block )
             block_t *p_block_next = p_block->p_next;
             if( p_block->i_pts > VLC_TS_INVALID && p_block->i_dts > VLC_TS_INVALID )
                 break;
-            block_Release( p_block );
+            dirac_ReorderDequeueAndReleaseBlock( p_dec, p_block );
             p_sys->p_outqueue = p_block = p_block_next;
         }
     }