+ else
+ {
+ aout_buffer_t *p_aout_buffer;
+ p_aout_buffer = p_dec->pf_aout_buffer_new( p_dec, i_frame_length );
+ if( p_aout_buffer == NULL ) return NULL;
+
+ p_aout_buffer->start_date = aout_DateGet( &p_sys->end_date );
+ p_aout_buffer->end_date =
+ aout_DateIncrement( &p_sys->end_date, i_frame_length );
+
+ p_block->p_buffer += LPCM_HEADER_LEN;
+ p_block->i_buffer -= LPCM_HEADER_LEN;
+
+ /* 20/24 bits LPCM use special packing */
+ if( i_bitspersample == 24 )
+ {
+ uint8_t *p_out = p_aout_buffer->p_buffer;
+
+ while( p_block->i_buffer / 12 )
+ {
+ /* Sample 1 */
+ p_out[0] = p_block->p_buffer[0];
+ p_out[1] = p_block->p_buffer[1];
+ p_out[2] = p_block->p_buffer[8];
+ /* Sample 2 */
+ p_out[3] = p_block->p_buffer[2];
+ p_out[4] = p_block->p_buffer[3];
+ p_out[5] = p_block->p_buffer[9];
+ /* Sample 3 */
+ p_out[6] = p_block->p_buffer[4];
+ p_out[7] = p_block->p_buffer[5];
+ p_out[8] = p_block->p_buffer[10];
+ /* Sample 4 */
+ p_out[9] = p_block->p_buffer[6];
+ p_out[10] = p_block->p_buffer[7];
+ p_out[11] = p_block->p_buffer[11];