diff options
author | arpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2002-04-01 17:58:04 +0000 |
---|---|---|
committer | arpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2002-04-01 17:58:04 +0000 |
commit | aff40c7823d8bcbe1c1d2c259601150bdeffa998 (patch) | |
tree | 98dbf28ee8afa11095544a0cb68b22921d34cba1 /libmpcodecs/dec_audio.c | |
parent | e8236a8ab65e16a8d131f16ce6b892b71299ca02 (diff) | |
download | mpv-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.c | 44 |
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; } |