audio_filter/converter/dtstospdif.c: Fix odd frame sized DTS conversion to SPDIF. Patch by Julien Robert <jul at mac.com>. (Reported to fix most of the current DTS issues).

This commit is contained in:
Pierre d'Herbemont 2007-12-30 04:25:04 +00:00
parent 1b26ff77b0
commit 7b087611c2
2 changed files with 12 additions and 3 deletions

1
THANKS
View File

@ -122,6 +122,7 @@ Jonas Larsen <jonas at vrt.dk> - Danish translation
Jouni Kähkönen - Finnish translation
Julien Blache <jb at technologeek.org> - disc ejection code
Julien Plissonneau Duquène - JACK audio input module 
Julien Robert <jul at mac.com> - DTS to SPDIF fixes.
Kang Jeong-Hee <keizie at gmail dot com> - Korean translation
Kenneth Ostby <kenneo -at- idi -dot- ntnu -dot- no> - Audioscrobbler plugin
Kenneth Self <kens at campoz DoT. fslife _dOt co dOT- uk> - BDA capture plugin

View File

@ -156,6 +156,7 @@ static void DoWork( aout_instance_t * p_aout, aout_filter_t * p_filter,
for( i_frame = 0; i_frame < 3; i_frame++ )
{
uint16_t i_length_padded = i_length;
byte_t * p_out = p_out_buf->p_buffer + (i_frame * i_fz);
byte_t * p_in = p_filter->p_sys->p_buf + (i_frame * i_length);
@ -170,7 +171,7 @@ static void DoWork( aout_instance_t * p_aout, aout_filter_t * p_filter,
if( p_filter->output.i_format == VLC_FOURCC('s','p','d','b') )
{
p_filter->p_libvlc->pf_memcpy( p_out, p_sync_be, 6 );
p_out[5] = i_ac5_spdif_type;
p_out[4] = i_ac5_spdif_type;
p_out[6] = (( i_length ) >> 5 ) & 0xFF;
p_out[7] = ( i_length << 3 ) & 0xFF;
}
@ -202,6 +203,13 @@ static void DoWork( aout_instance_t * p_aout, aout_filter_t * p_filter,
p_tmp += 2; p_in += 2;
}
#endif
/* If i_length is odd, we have to adjust swapping a bit.. */
if( i_length & 1 )
{
p_out[8+i_length-1] = 0;
p_out[8+i_length] = p_in[i_length-1];
i_length_padded++;
}
}
else
{
@ -210,8 +218,8 @@ static void DoWork( aout_instance_t * p_aout, aout_filter_t * p_filter,
if( i_fz > i_length + 8 )
{
p_filter->p_libvlc->pf_memset( p_out + 8 + i_length, 0,
i_fz - i_length - 8 );
p_filter->p_libvlc->pf_memset( p_out + 8 + i_length_padded, 0,
i_fz - i_length_padded - 8 );
}
}