summaryrefslogtreecommitdiffstats
path: root/libmpcodecs/dec_audio.c
diff options
context:
space:
mode:
authorarpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-04-01 17:58:04 +0000
committerarpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-04-01 17:58:04 +0000
commitaff40c7823d8bcbe1c1d2c259601150bdeffa998 (patch)
tree98dbf28ee8afa11095544a0cb68b22921d34cba1 /libmpcodecs/dec_audio.c
parente8236a8ab65e16a8d131f16ce6b892b71299ca02 (diff)
downloadmpv-aff40c7823d8bcbe1c1d2c259601150bdeffa998.tar.bz2
mpv-aff40c7823d8bcbe1c1d2c259601150bdeffa998.tar.xz
audio input buffer allocation/free cleanup
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@5459 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libmpcodecs/dec_audio.c')
-rw-r--r--libmpcodecs/dec_audio.c44
1 files changed, 31 insertions, 13 deletions
diff --git a/libmpcodecs/dec_audio.c b/libmpcodecs/dec_audio.c
index 835e5b870f..352ee4f89a 100644
--- a/libmpcodecs/dec_audio.c
+++ b/libmpcodecs/dec_audio.c
@@ -40,6 +40,14 @@ int init_audio(sh_audio_t *sh_audio)
}
printf("Selecting Audio Decoder: [%s] %s\n",mpadec->info->short_name,mpadec->info->name);
+
+ // reset in/out buffer size/pointer:
+ sh_audio->a_buffer_size=0;
+ sh_audio->a_buffer=NULL;
+ sh_audio->a_in_buffer_size=0;
+ sh_audio->a_in_buffer=NULL;
+
+ // Set up some common usefull defaults. ad->preinit() can override these:
sh_audio->samplesize=2;
#ifdef WORDS_BIGENDIAN
@@ -48,15 +56,11 @@ int init_audio(sh_audio_t *sh_audio)
sh_audio->sample_format=AFMT_S16_LE;
#endif
sh_audio->samplerate=0;
- sh_audio->o_bps=0;
+ sh_audio->i_bps=0; // input rate (bytes/sec)
+ sh_audio->o_bps=0; // output rate (bytes/sec)
- sh_audio->a_buffer_size=0;
- sh_audio->a_buffer=NULL;
-
- sh_audio->a_in_buffer_len=0;
-
- /* setup required min. in/out buffer size:*/
sh_audio->audio_out_minsize=8192;/* default size, maybe not enough for Win32/ACM*/
+ sh_audio->audio_in_minsize=0;
if(!mpadec->preinit(sh_audio))
{
@@ -64,6 +68,16 @@ int init_audio(sh_audio_t *sh_audio)
return 0;
}
+/* allocate audio in buffer: */
+ if(sh_audio->audio_in_minsize>0){
+ sh_audio->a_in_buffer_size=sh_audio->audio_in_minsize;
+ mp_msg(MSGT_DECAUDIO,MSGL_V,"dec_audio: Allocating %d bytes for input buffer\n",
+ sh_audio->a_in_buffer_size);
+ sh_audio->a_in_buffer=malloc(sh_audio->a_in_buffer_size);
+ memset(sh_audio->a_in_buffer,0,sh_audio->a_in_buffer_size);
+ sh_audio->a_in_buffer_len=0;
+ }
+
/* allocate audio out buffer: */
sh_audio->a_buffer_size=sh_audio->audio_out_minsize+MAX_OUTBURST; /* worst case calc.*/
@@ -79,30 +93,34 @@ int init_audio(sh_audio_t *sh_audio)
sh_audio->a_buffer_len=0;
if(!mpadec->init(sh_audio)){
- printf("ADecoder init failed :(\n");
+ mp_msg(MSGT_DECAUDIO,MSGL_WARN,"ADecoder init failed :(\n");
+ uninit_audio(sh_audio); // free buffers
return 0;
}
+
sh_audio->inited=1;
if(!sh_audio->channels || !sh_audio->samplerate){
mp_msg(MSGT_DECAUDIO,MSGL_WARN,MSGTR_UnknownAudio);
- if(sh_audio->a_buffer) free(sh_audio->a_buffer);
- sh_audio->a_buffer=NULL;
+ uninit_audio(sh_audio); // free buffers
return 0;
}
if(!sh_audio->o_bps)
sh_audio->o_bps=sh_audio->channels*sh_audio->samplerate*sh_audio->samplesize;
- return sh_audio->codec->driver;
+
+ return 1;
}
void uninit_audio(sh_audio_t *sh_audio)
{
+ if(sh_audio->a_buffer) free(sh_audio->a_buffer);
+ sh_audio->a_buffer=NULL;
+ if(sh_audio->a_in_buffer) free(sh_audio->a_in_buffer);
+ sh_audio->a_in_buffer=NULL;
if(!sh_audio->inited) return;
mp_msg(MSGT_DECAUDIO,MSGL_V,"uninit audio: %d \n",sh_audio->codec->driver);
mpadec->uninit(sh_audio);
- if(sh_audio->a_buffer) free(sh_audio->a_buffer);
- sh_audio->a_buffer=NULL;
sh_audio->inited=0;
}