/*****************************************************************************
- * audio.c: audio decoder using ffmpeg library
+ * audio.c: audio decoder using libavcodec library
*****************************************************************************
* Copyright (C) 1999-2003 the VideoLAN team
* $Id$
#include <vlc_codec.h>
#include <vlc_avcodec.h>
-/* ffmpeg header */
-#ifdef HAVE_LIBAVCODEC_AVCODEC_H
-# include <libavcodec/avcodec.h>
-#else
-# include <avcodec.h>
+#include <libavcodec/avcodec.h>
+#include <libavutil/mem.h>
+
+#if LIBAVUTIL_VERSION_INT >= ((50<<16)+(38<<8)+0)
+# include "libavutil/audioconvert.h"
#endif
#include "avcodec.h"
/*****************************************************************************
* InitAudioDec: initialize audio decoder
*****************************************************************************
- * The ffmpeg codec will be opened, some memory allocated.
+ * The avcodec codec will be opened, some memory allocated.
*****************************************************************************/
int InitAudioDec( decoder_t *p_dec, AVCodecContext *p_context,
AVCodec *p_codec, int i_codec_id, const char *psz_namecodec )
* SplitBuffer: Needed because aout really doesn't like big audio chunk and
* wma produces easily > 30000 samples...
*****************************************************************************/
-static aout_buffer_t *SplitBuffer( decoder_t *p_dec )
+static block_t *SplitBuffer( decoder_t *p_dec )
{
decoder_sys_t *p_sys = p_dec->p_sys;
int i_samples = __MIN( p_sys->i_samples, 4096 );
- aout_buffer_t *p_buffer;
+ block_t *p_buffer;
if( i_samples == 0 ) return NULL;
/*****************************************************************************
* DecodeAudio: Called to decode one frame
*****************************************************************************/
-aout_buffer_t * DecodeAudio ( decoder_t *p_dec, block_t **pp_block )
+block_t * DecodeAudio ( decoder_t *p_dec, block_t **pp_block )
{
decoder_sys_t *p_sys = p_dec->p_sys;
int i_used, i_output;
- aout_buffer_t *p_buffer;
+ block_t *p_buffer;
block_t *p_block;
AVPacket pkt;
{
switch( i_sample_fmt )
{
- case SAMPLE_FMT_U8:
+ case AV_SAMPLE_FMT_U8:
*pi_codec = VLC_CODEC_U8;
*pi_bits = 8;
break;
- case SAMPLE_FMT_S32:
+ case AV_SAMPLE_FMT_S32:
*pi_codec = VLC_CODEC_S32N;
*pi_bits = 32;
break;
- case SAMPLE_FMT_FLT:
+ case AV_SAMPLE_FMT_FLT:
*pi_codec = VLC_CODEC_FL32;
*pi_bits = 32;
break;
- case SAMPLE_FMT_DBL:
+ case AV_SAMPLE_FMT_DBL:
*pi_codec = VLC_CODEC_FL64;
*pi_bits = 64;
break;
- case SAMPLE_FMT_S16:
+ case AV_SAMPLE_FMT_S16:
default:
*pi_codec = VLC_CODEC_S16N;
*pi_bits = 16;
static const uint64_t pi_channels_map[][2] =
{
- { CH_FRONT_LEFT, AOUT_CHAN_LEFT },
- { CH_FRONT_RIGHT, AOUT_CHAN_RIGHT },
- { CH_FRONT_CENTER, AOUT_CHAN_CENTER },
- { CH_LOW_FREQUENCY, AOUT_CHAN_LFE },
- { CH_BACK_LEFT, AOUT_CHAN_REARLEFT },
- { CH_BACK_RIGHT, AOUT_CHAN_REARRIGHT },
- { CH_FRONT_LEFT_OF_CENTER, 0 },
- { CH_FRONT_RIGHT_OF_CENTER, 0 },
- { CH_BACK_CENTER, AOUT_CHAN_REARCENTER },
- { CH_SIDE_LEFT, AOUT_CHAN_MIDDLELEFT },
- { CH_SIDE_RIGHT, AOUT_CHAN_MIDDLERIGHT },
- { CH_TOP_CENTER, 0 },
- { CH_TOP_FRONT_LEFT, 0 },
- { CH_TOP_FRONT_CENTER, 0 },
- { CH_TOP_FRONT_RIGHT, 0 },
- { CH_TOP_BACK_LEFT, 0 },
- { CH_TOP_BACK_CENTER, 0 },
- { CH_TOP_BACK_RIGHT, 0 },
- { CH_STEREO_LEFT, 0 },
- { CH_STEREO_RIGHT, 0 },
+ { AV_CH_FRONT_LEFT, AOUT_CHAN_LEFT },
+ { AV_CH_FRONT_RIGHT, AOUT_CHAN_RIGHT },
+ { AV_CH_FRONT_CENTER, AOUT_CHAN_CENTER },
+ { AV_CH_LOW_FREQUENCY, AOUT_CHAN_LFE },
+ { AV_CH_BACK_LEFT, AOUT_CHAN_REARLEFT },
+ { AV_CH_BACK_RIGHT, AOUT_CHAN_REARRIGHT },
+ { AV_CH_FRONT_LEFT_OF_CENTER, 0 },
+ { AV_CH_FRONT_RIGHT_OF_CENTER, 0 },
+ { AV_CH_BACK_CENTER, AOUT_CHAN_REARCENTER },
+ { AV_CH_SIDE_LEFT, AOUT_CHAN_MIDDLELEFT },
+ { AV_CH_SIDE_RIGHT, AOUT_CHAN_MIDDLERIGHT },
+ { AV_CH_TOP_CENTER, 0 },
+ { AV_CH_TOP_FRONT_LEFT, 0 },
+ { AV_CH_TOP_FRONT_CENTER, 0 },
+ { AV_CH_TOP_FRONT_RIGHT, 0 },
+ { AV_CH_TOP_BACK_LEFT, 0 },
+ { AV_CH_TOP_BACK_CENTER, 0 },
+ { AV_CH_TOP_BACK_RIGHT, 0 },
+ { AV_CH_STEREO_LEFT, 0 },
+ { AV_CH_STEREO_RIGHT, 0 },
};
static void SetupOutputFormat( decoder_t *p_dec, bool b_trust )