mirror of https://code.videolan.org/videolan/vlc
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:
parent
1b26ff77b0
commit
7b087611c2
1
THANKS
1
THANKS
|
@ -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
|
||||
|
|
|
@ -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 );
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue