vlc | branch: master | Rémi Denis-Courmont <[email protected]> | Thu Nov 22 23:25:33 2012 +0200| [1af9cda50cea036c94a98f4507dab30ac3607c2e] | committer: Rémi Denis-Courmont
AES3: decode to native endian (and revert earlier accidental changes) > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=1af9cda50cea036c94a98f4507dab30ac3607c2e --- modules/codec/aes3.c | 82 +++++++++++++++++++++++++++++--------------------- 1 file changed, 48 insertions(+), 34 deletions(-) diff --git a/modules/codec/aes3.c b/modules/codec/aes3.c index 33af926..d59ba48 100644 --- a/modules/codec/aes3.c +++ b/modules/codec/aes3.c @@ -157,52 +157,64 @@ static block_t *Decode( decoder_t *p_dec, block_t **pp_block ) p_block->i_buffer -= AES3_HEADER_LEN; p_block->p_buffer += AES3_HEADER_LEN; +#ifdef WORDS_BIGENGIAN +# define LOB 2 +# define HIB 0 +#else +# define LOB 0 +# define HIB 2 +#endif +#define MIB 1 if( i_bits == 24 ) { - uint32_t *p_out = p_aout_buffer->p_buffer; + uint8_t *p_out = p_aout_buffer->p_buffer; while( p_block->i_buffer / 7 ) { - p_out[0] = reverse[p_block->p_buffer[0]]; - p_out[1] = reverse[p_block->p_buffer[1]]; - p_out[2] = reverse[p_block->p_buffer[2]]; - - p_out[3] = (reverse[p_block->p_buffer[3]] >> 4) - | ((reverse[p_block->p_buffer[4]] << 4) & 0xf0); - p_out[4] = (reverse[p_block->p_buffer[4]] >> 4) - | ((reverse[p_block->p_buffer[5]] << 4) & 0xf0); - p_out[5] = (reverse[p_block->p_buffer[5]] >> 4) - | ((reverse[p_block->p_buffer[6]] << 4) & 0xf0); + p_out[LOB] = reverse[p_block->p_buffer[0]]; + p_out[MIB] = reverse[p_block->p_buffer[1]]; + p_out[HIB] = reverse[p_block->p_buffer[2]]; + p_out += 3; + + p_out[LOB] = (reverse[p_block->p_buffer[3]] >> 4) + | ((reverse[p_block->p_buffer[4]] << 4) & 0xf0); + p_out[MIB] = (reverse[p_block->p_buffer[4]] >> 4) + | ((reverse[p_block->p_buffer[5]] << 4) & 0xf0); + p_out[HIB] = (reverse[p_block->p_buffer[5]] >> 4) + | ((reverse[p_block->p_buffer[6]] << 4) & 0xf0); + p_out += 3; p_block->i_buffer -= 7; p_block->p_buffer += 7; - p_out += 6; } } else if( i_bits == 20 ) { - uint32_t *p_out = p_aout_buffer->p_buffer; + uint8_t *p_out = p_aout_buffer->p_buffer; while( p_block->i_buffer / 6 ) { - p_out[0] = ((reverse[p_block->p_buffer[0]] << 4) & 0xf0); - p_out[1] = (reverse[p_block->p_buffer[0]] >> 4) - | ((reverse[p_block->p_buffer[1]] << 4) & 0xf0); - p_out[2] = (reverse[p_block->p_buffer[1]] >> 4) - | ((reverse[p_block->p_buffer[2]] << 4) & 0xf0); - - p_out[3] = ((reverse[p_block->p_buffer[3]] << 4) & 0xf0); - p_out[4] = (reverse[p_block->p_buffer[3]] >> 4) - | ((reverse[p_block->p_buffer[4]] << 4) & 0xf0); - p_out[5] = (reverse[p_block->p_buffer[4]] >> 4) - | ((reverse[p_block->p_buffer[5]] << 4) & 0xf0); + p_out[LOB] = ((reverse[p_block->p_buffer[0]] << 4) & 0xf0); + p_out[MIB] = (reverse[p_block->p_buffer[0]] >> 4) + | ((reverse[p_block->p_buffer[1]] << 4) & 0xf0); + p_out[HIB] = (reverse[p_block->p_buffer[1]] >> 4) + | ((reverse[p_block->p_buffer[2]] << 4) & 0xf0); + p_out += 3; + + p_out[LOB] = ((reverse[p_block->p_buffer[3]] << 4) & 0xf0); + p_out[MIB] = (reverse[p_block->p_buffer[3]] >> 4) + | ((reverse[p_block->p_buffer[4]] << 4) & 0xf0); + p_out[HIB] = (reverse[p_block->p_buffer[4]] >> 4) + | ((reverse[p_block->p_buffer[5]] << 4) & 0xf0); + p_out += 3; p_block->i_buffer -= 6; p_block->p_buffer += 6; - p_out += 6; } } +#undef HIB +#define HIB (!(LOB)) else { uint8_t *p_out = p_aout_buffer->p_buffer; @@ -211,17 +223,18 @@ static block_t *Decode( decoder_t *p_dec, block_t **pp_block ) while( p_block->i_buffer / 5 ) { - p_out[0] = reverse[p_block->p_buffer[0]]; - p_out[1] = reverse[p_block->p_buffer[1]]; + p_out[LOB] = reverse[p_block->p_buffer[0]]; + p_out[HIB] = reverse[p_block->p_buffer[1]]; + p_out += 2; - p_out[2] = (reverse[p_block->p_buffer[2]] >> 4) - | ((reverse[p_block->p_buffer[3]] << 4) & 0xf0); - p_out[3] = (reverse[p_block->p_buffer[3]] >> 4) - | ((reverse[p_block->p_buffer[4]] << 4) & 0xf0); + p_out[LOB] = (reverse[p_block->p_buffer[2]] >> 4) + | ((reverse[p_block->p_buffer[3]] << 4) & 0xf0); + p_out[HIB] = (reverse[p_block->p_buffer[3]] >> 4) + | ((reverse[p_block->p_buffer[4]] << 4) & 0xf0); + p_out += 2; p_block->i_buffer -= 5; p_block->p_buffer += 5; - p_out += 4; } } @@ -372,8 +385,9 @@ static block_t *Parse( decoder_t *p_dec, int *pi_frame_length, int *pi_bits, } else { - p_dec->fmt_out.i_codec = i_bits == 16 ? VLC_CODEC_S16N : VLC_CODEC_S32N; - p_dec->fmt_out.audio.i_bitspersample = i_bits == 16 ? 16 : 32; + p_dec->fmt_out.i_codec = i_bits == 16 ? VLC_CODEC_S16N + : VLC_CODEC_S24N; + p_dec->fmt_out.audio.i_bitspersample = i_bits == 16 ? 16 : 24; } p_dec->fmt_out.audio.i_channels = i_channels; _______________________________________________ vlc-commits mailing list [email protected] http://mailman.videolan.org/listinfo/vlc-commits
