Commit 7b087611 authored by Pierre d'Herbemont's avatar Pierre d'Herbemont

audio_filter/converter/dtstospdif.c: Fix odd frame sized DTS conversion to...

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).
parent 1b26ff77
...@@ -122,6 +122,7 @@ Jonas Larsen <jonas at vrt.dk> - Danish translation ...@@ -122,6 +122,7 @@ Jonas Larsen <jonas at vrt.dk> - Danish translation
Jouni Kähkönen - Finnish translation Jouni Kähkönen - Finnish translation
Julien Blache <jb at technologeek.org> - disc ejection code Julien Blache <jb at technologeek.org> - disc ejection code
Julien Plissonneau Duquène - JACK audio input module  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 Kang Jeong-Hee <keizie at gmail dot com> - Korean translation
Kenneth Ostby <kenneo -at- idi -dot- ntnu -dot- no> - Audioscrobbler plugin 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 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, ...@@ -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++ ) 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_out = p_out_buf->p_buffer + (i_frame * i_fz);
byte_t * p_in = p_filter->p_sys->p_buf + (i_frame * i_length); 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, ...@@ -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') ) 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_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[6] = (( i_length ) >> 5 ) & 0xFF;
p_out[7] = ( i_length << 3 ) & 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, ...@@ -202,6 +203,13 @@ static void DoWork( aout_instance_t * p_aout, aout_filter_t * p_filter,
p_tmp += 2; p_in += 2; p_tmp += 2; p_in += 2;
} }
#endif #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 else
{ {
...@@ -210,8 +218,8 @@ static void DoWork( aout_instance_t * p_aout, aout_filter_t * p_filter, ...@@ -210,8 +218,8 @@ static void DoWork( aout_instance_t * p_aout, aout_filter_t * p_filter,
if( i_fz > i_length + 8 ) if( i_fz > i_length + 8 )
{ {
p_filter->p_libvlc->pf_memset( p_out + 8 + i_length, 0, p_filter->p_libvlc->pf_memset( p_out + 8 + i_length_padded, 0,
i_fz - i_length - 8 ); i_fz - i_length_padded - 8 );
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment