]> git.sesse.net Git - vlc/blobdiff - modules/codec/avcodec/audio.c
s/FFmpeg/libavcodec where applicable
[vlc] / modules / codec / avcodec / audio.c
index 9cafc381c642a7ee5834f0a6cd451b9431984c02..dabe25578ca3005e4d75649799df8ad401dcf668 100644 (file)
@@ -1,5 +1,5 @@
 /*****************************************************************************
- * 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"
@@ -137,7 +137,7 @@ static void InitDecoderConfig( decoder_t *p_dec, AVCodecContext *p_context )
 /*****************************************************************************
  * 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 )
@@ -150,8 +150,8 @@ int InitAudioDec( decoder_t *p_dec, AVCodecContext *p_context,
         return VLC_ENOMEM;
     }
 
-    p_codec->type = CODEC_TYPE_AUDIO;
-    p_context->codec_type = CODEC_TYPE_AUDIO;
+    p_codec->type = AVMEDIA_TYPE_AUDIO;
+    p_context->codec_type = AVMEDIA_TYPE_AUDIO;
     p_context->codec_id = i_codec_id;
     p_sys->p_context = p_context;
     p_sys->p_codec = p_codec;
@@ -221,11 +221,11 @@ int InitAudioDec( decoder_t *p_dec, AVCodecContext *p_context,
  * 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;
 
@@ -252,12 +252,13 @@ static aout_buffer_t *SplitBuffer( decoder_t *p_dec )
 /*****************************************************************************
  * 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;
 
     if( !pp_block || !*pp_block ) return NULL;
 
@@ -329,9 +330,12 @@ aout_buffer_t * DecodeAudio ( decoder_t *p_dec, block_t **pp_block )
             p_sys->p_output = av_realloc( p_sys->p_output, i_output );
         }
 
-        i_used = avcodec_decode_audio2( p_sys->p_context,
+        av_init_packet( &pkt );
+        pkt.data = p_block->p_buffer;
+        pkt.size = p_block->i_buffer;
+        i_used = avcodec_decode_audio3( p_sys->p_context,
                                        (int16_t*)p_sys->p_output, &i_output,
-                                       p_block->p_buffer, p_block->i_buffer );
+                                       &pkt );
 
         if( i_used < 0 || i_output < 0 )
         {
@@ -411,24 +415,24 @@ void GetVlcAudioFormat( vlc_fourcc_t *pi_codec, unsigned *pi_bits, int i_sample_
 {
     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;
@@ -438,26 +442,26 @@ void GetVlcAudioFormat( vlc_fourcc_t *pi_codec, unsigned *pi_bits, int i_sample_
 
 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 )