static void Interleave32( int32_t *p_out, const int32_t * const *pp_in,
int i_nb_channels, int i_samples );
+static void Interleave24( int8_t *p_out, const int32_t * const *pp_in,
+ int i_nb_channels, int i_samples );
static void Interleave16( int16_t *p_out, const int32_t * const *pp_in,
int i_nb_channels, int i_samples );
/*****************************************************************************
* Module descriptor
*****************************************************************************/
-vlc_module_begin();
+vlc_module_begin ()
- set_category( CAT_INPUT );
- set_subcategory( SUBCAT_INPUT_ACODEC );
- add_shortcut( "flac" );
+ set_category( CAT_INPUT )
+ set_subcategory( SUBCAT_INPUT_ACODEC )
+ add_shortcut( "flac" )
#ifdef USE_LIBFLAC
- set_description( N_("Flac audio decoder") );
- set_capability( "decoder", 100 );
- set_callbacks( OpenDecoder, CloseDecoder );
+ set_description( N_("Flac audio decoder") )
+ set_capability( "decoder", 100 )
+ set_callbacks( OpenDecoder, CloseDecoder )
- add_submodule();
- set_description( N_("Flac audio encoder") );
- set_capability( "encoder", 100 );
- set_callbacks( OpenEncoder, CloseEncoder );
+ add_submodule ()
+ set_description( N_("Flac audio encoder") )
+ set_capability( "encoder", 100 )
+ set_callbacks( OpenEncoder, CloseEncoder )
- add_submodule();
+ add_submodule ()
#endif
- set_description( N_("Flac audio packetizer") );
- set_capability( "packetizer", 100 );
- set_callbacks( OpenPacketizer, CloseDecoder );
+ set_description( N_("Flac audio packetizer") )
+ set_capability( "packetizer", 100 )
+ set_callbacks( OpenPacketizer, CloseDecoder )
-vlc_module_end();
+vlc_module_end ()
/*****************************************************************************
* OpenDecoder: probe the decoder and return score
p_sys->i_state = STATE_NOSYNC;
block_BytestreamFlush( &p_sys->bytestream );
}
-// aout_DateSet( &p_sys->end_date, 0 );
+ aout_DateSet( &p_sys->end_date, 0 );
block_Release( *pp_block );
return NULL;
}
decoder_sys_t *p_sys = p_dec->p_sys;
p_sys->p_aout_buffer =
- p_dec->pf_aout_buffer_new( p_dec, frame->header.blocksize );
+ decoder_NewAudioBuffer( p_dec, frame->header.blocksize );
if( p_sys->p_aout_buffer == NULL )
return FLAC__STREAM_DECODER_WRITE_STATUS_CONTINUE;
Interleave16( (int16_t *)p_sys->p_aout_buffer->p_buffer, buffer,
frame->header.channels, frame->header.blocksize );
break;
+ case 24:
+ Interleave24( (int8_t *)p_sys->p_aout_buffer->p_buffer, buffer,
+ frame->header.channels, frame->header.blocksize );
+ break;
default:
Interleave32( (int32_t *)p_sys->p_aout_buffer->p_buffer, buffer,
frame->header.channels, frame->header.blocksize );
case 16:
p_dec->fmt_out.i_codec = AOUT_FMT_S16_NE;
break;
+ case 24:
+ p_dec->fmt_out.i_codec = AOUT_FMT_S24_NE;
+ break;
default:
msg_Dbg( p_dec, "strange bit/sample value: %d",
metadata->data.stream_info.bits_per_sample );
}
}
}
+
+static void Interleave24( int8_t *p_out, const int32_t * const *pp_in,
+ int i_nb_channels, int i_samples )
+{
+ int i, j;
+ for ( j = 0; j < i_samples; j++ )
+ {
+ for ( i = 0; i < i_nb_channels; i++ )
+ {
+#ifdef WORDS_BIGENDIAN
+ p_out[3*(j * i_nb_channels + i)+0] = (pp_in[i][j] >> 16) & 0xff;
+ p_out[3*(j * i_nb_channels + i)+1] = (pp_in[i][j] >> 8 ) & 0xff;
+ p_out[3*(j * i_nb_channels + i)+2] = (pp_in[i][j] >> 0 ) & 0xff;
+#else
+ p_out[3*(j * i_nb_channels + i)+2] = (pp_in[i][j] >> 16) & 0xff;
+ p_out[3*(j * i_nb_channels + i)+1] = (pp_in[i][j] >> 8 ) & 0xff;
+ p_out[3*(j * i_nb_channels + i)+0] = (pp_in[i][j] >> 0 ) & 0xff;
+#endif
+ }
+ }
+}
+
static void Interleave16( int16_t *p_out, const int32_t * const *pp_in,
int i_nb_channels, int i_samples )
{