vlc | branch: master | Francois Cartegnie <[email protected]> | Thu Aug 24 14:19:56 2017 +0200| [2cdb7a234e23d8c37e2f2ac7a3a10c9afb1cb409] | committer: Francois Cartegnie
codec: faad: handle mid/back pair repeats Previous faad2 contribs fix was incorrect. Fix has to be done in decoder module. This reverts commit 85f0e45b2304afa64ace2e3f0ddc19ad8b5accfb. > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=2cdb7a234e23d8c37e2f2ac7a3a10c9afb1cb409 --- contrib/src/faad2/faad2-fix-4channels-groups.patch | 25 ----------------- contrib/src/faad2/rules.mak | 1 - modules/codec/faad.c | 31 ++++++++++++++++++++++ 3 files changed, 31 insertions(+), 26 deletions(-) diff --git a/contrib/src/faad2/faad2-fix-4channels-groups.patch b/contrib/src/faad2/faad2-fix-4channels-groups.patch deleted file mode 100644 index 3ac27c71ca..0000000000 --- a/contrib/src/faad2/faad2-fix-4channels-groups.patch +++ /dev/null @@ -1,25 +0,0 @@ -diff -Naur faad2/libfaad/decoder.c faad2_patched/libfaad/decoder.c ---- faad2/libfaad/decoder.c 2017-08-23 12:31:12.495650331 +0200 -+++ faad2_patched/libfaad/decoder.c 2017-08-23 12:30:44.755816954 +0200 -@@ -600,6 +601,21 @@ - hInfo->num_lfe_channels = hDecoder->pce.num_lfe_channels; - total += hInfo->num_lfe_channels; - -+ /* Patch when channels are declared as 1 + 4 */ -+ if(total <= 8) -+ { -+ if(hInfo->num_front_channels < 2 && hInfo->num_side_channels > 3) -+ { -+ hInfo->num_front_channels += 2; -+ hInfo->num_side_channels -= 2; -+ } -+ if(hInfo->num_side_channels < 2 && hInfo->num_back_channels > 3) -+ { -+ hInfo->num_side_channels += 2; -+ hInfo->num_back_channels -= 2; -+ } -+ } -+ - chdir = hInfo->num_front_channels; - if (chdir & 1) - { diff --git a/contrib/src/faad2/rules.mak b/contrib/src/faad2/rules.mak index 48bd86d4e6..4a4467b714 100644 --- a/contrib/src/faad2/rules.mak +++ b/contrib/src/faad2/rules.mak @@ -24,7 +24,6 @@ endif $(APPLY) $(SRC)/faad2/faad2-fix-71wPCEmapping.patch $(APPLY) $(SRC)/faad2/faad2-fix-cpe-reconstruction.patch $(APPLY) $(SRC)/faad2/faad2-add-define.patch - $(APPLY) $(SRC)/faad2/faad2-fix-4channels-groups.patch cd $(UNPACK_DIR) && $(CC) -iquote . -E - </dev/null || sed -i 's/-iquote /-I/' libfaad/Makefile.am $(MOVE) diff --git a/modules/codec/faad.c b/modules/codec/faad.c index 1711ab4596..f134f4e320 100644 --- a/modules/codec/faad.c +++ b/modules/codec/faad.c @@ -478,6 +478,37 @@ static int DecodeBlock( decoder_t *p_dec, block_t *p_block ) } } #endif + /* Handle > 1 local pair 5.1 setups. + In case of more than 1 channel pair per area, faad will have repeats + in channels sequence. We need to remap to available surround channels. + Front > Middle > Rear: + In case of 4 middle, it maps to 2F 2M if no previous front. + In case of 4 rear, it maps to 2M 2R if no previous rear. + */ + unsigned i_faadused = 0; + for( unsigned i=0; i<frame.channels; i++ ) + if( frame.channel_position[i] > 0 ) + i_faadused |= 1 << frame.channel_position[i]; + + for( size_t i=3; i<frame.channels; i++ ) + { + if( frame.channel_position[i - 3] == frame.channel_position[i - 1] && + frame.channel_position[i - 2] == frame.channel_position[i] && + frame.channel_position[i - 1] >= SIDE_CHANNEL_LEFT && + frame.channel_position[i - 1] <= BACK_CHANNEL_CENTER && + frame.channel_position[i - 1] >= SIDE_CHANNEL_LEFT && + frame.channel_position[i - 1] <= BACK_CHANNEL_CENTER ) + { + if( ( (1 << (frame.channel_position[i - 3] - 2)) & i_faadused ) == 0 && + ( (1 << (frame.channel_position[i - 2] - 2)) & i_faadused ) == 0 ) + { + frame.channel_position[i - 3] -= 2; + frame.channel_position[i - 2] -= 2; + i_faadused |= 1 << frame.channel_position[i - 3]; + i_faadused |= 1 << frame.channel_position[i - 2]; + } + } + } /* Convert frame.channel_position to our own channel values */ p_dec->fmt_out.audio.i_physical_channels = 0; _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
