vlc | branch: master | Francois Cartegnie <[email protected]> | Mon Sep 22 20:12:18 2014 +0200| [fa551675f5a01fd6bfbe72f670aba67ed061d4fa] | committer: Francois Cartegnie
packetizer: dirac: block sanitizing must clean reordering (fix #12051) > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=fa551675f5a01fd6bfbe72f670aba67ed061d4fa --- modules/packetizer/dirac.c | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/modules/packetizer/dirac.c b/modules/packetizer/dirac.c index 6deec71..71b0b11 100644 --- a/modules/packetizer/dirac.c +++ b/modules/packetizer/dirac.c @@ -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; } } _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
