vlc | branch: master | Francois Cartegnie <[email protected]> | Fri Apr 28 18:15:32 2017 +0200| [7305bf34d8a990f1e7f46cdebf0fbb05d2df5660] | committer: Francois Cartegnie
packetizer: dts: rewrite 18166 fix > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=7305bf34d8a990f1e7f46cdebf0fbb05d2df5660 --- modules/packetizer/dts.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/modules/packetizer/dts.c b/modules/packetizer/dts.c index cb2a4b95f0..2d4c9dbb7f 100644 --- a/modules/packetizer/dts.c +++ b/modules/packetizer/dts.c @@ -216,11 +216,8 @@ static block_t *PacketizeBlock( decoder_t *p_dec, block_t **pp_block ) return NULL; break; } - /* Even frame size is likely incorrect FSIZE #18166. - * Sync minus one byte, we can always sync 1 byte further */ - p_sys->i_input_size = p_sys->i_next_offset - = (p_sys->dts.i_frame_size % 2) ? p_sys->dts.i_frame_size - 1 - : p_sys->dts.i_frame_size; + + p_sys->i_input_size = p_sys->i_next_offset = p_sys->dts.i_frame_size; p_sys->i_state = STATE_NEXT_SYNC; case STATE_NEXT_SYNC: @@ -250,6 +247,17 @@ static block_t *PacketizeBlock( decoder_t *p_dec, block_t **pp_block ) if( !vlc_dts_header_IsSync( p_header, VLC_DTS_HEADER_SIZE ) ) { + /* Even frame size is likely incorrect FSIZE #18166 */ + if( (p_sys->dts.i_frame_size % 2) && p_sys->i_next_offset > 0 && + block_PeekOffsetBytes( &p_sys->bytestream, + p_sys->i_next_offset - 1, p_header, + VLC_DTS_HEADER_SIZE ) == 0 && + vlc_dts_header_IsSync( p_header, VLC_DTS_HEADER_SIZE ) ) + { + p_sys->i_input_size = p_sys->i_next_offset = p_sys->dts.i_frame_size - 1; + /* reenter */ + break; + } msg_Dbg( p_dec, "emulated sync word " "(no sync on following frame)" ); p_sys->i_state = STATE_NOSYNC; _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
