vlc | branch: master | Francois Cartegnie <[email protected]> | Thu May 4 13:51:42 2017 +0200| [d96b177f5c661e56a750cf9cdf36fc9ee551f6f4] | committer: Francois Cartegnie
codec: faad2: hotfix unpatched 3F3R 6.1 channel repeat > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=d96b177f5c661e56a750cf9cdf36fc9ee551f6f4 --- modules/codec/faad.c | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/modules/codec/faad.c b/modules/codec/faad.c index fa82b0ccc8..3dff00b390 100644 --- a/modules/codec/faad.c +++ b/modules/codec/faad.c @@ -458,12 +458,27 @@ static int DecodeBlock( decoder_t *p_dec, block_t *p_block ) } /* Hotfix channels misdetection/repetition for FDK 7.1 */ - const uint8_t fdk71config[] = { 1, 2, 3, 6, 7, 6, 7, 9 }; - if( frame.channels == 8 && !memcmp( frame.channel_position, fdk71config, 8 ) ) + struct { - msg_Warn( p_dec, "Patching for FDK encoded 7.1 4 Front channel repeat bug" ); - frame.channel_position[3] = 4; - frame.channel_position[4] = 5; + const uint8_t chans; + const uint8_t faulty[8]; + const uint8_t fixed[8]; + } const channel_repeat_fixes[] = { + { 7, { 2, 3, 2, 3, 2, 3, 6 }, { 1, 2, 3, 6, 7, 8, 9 } }, /* 3F 3R LFE #18273 */ + { 8, { 1, 2, 3, 6, 7, 6, 7, 9 }, { 1, 2, 3, 6, 7, 4, 5, 9 } }, /* FDK encoded 7.1 */ + }; + + for( size_t i=0; i<ARRAY_SIZE(channel_repeat_fixes); i++ ) + { + if( channel_repeat_fixes[i].chans == frame.channels && + !memcmp( frame.channel_position, channel_repeat_fixes[i].faulty, + channel_repeat_fixes[i].chans ) ) + { + msg_Warn( p_dec, "Patching for Front channel repeat bug" ); + memcpy( frame.channel_position, channel_repeat_fixes[i].fixed, + channel_repeat_fixes[i].chans ); + break; + } } /* Convert frame.channel_position to our own channel values */ _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
