summaryrefslogtreecommitdiffstats
path: root/dec_audio.c
diff options
context:
space:
mode:
authorarpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2>2001-07-16 12:53:48 +0000
committerarpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2>2001-07-16 12:53:48 +0000
commit0d9927622266413e9d9914788f6e412365da0783 (patch)
tree2330ecacbb33ca0706aba858e0592b5eceb13c05 /dec_audio.c
parent4fb4b7b31467559e44f4382d60e8b675f3df2d83 (diff)
downloadmpv-0d9927622266413e9d9914788f6e412365da0783.tar.bz2
mpv-0d9927622266413e9d9914788f6e412365da0783.tar.xz
some cleanup - fixed warnings, removed old stuff, moved audio resync to dec_audio
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@1328 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'dec_audio.c')
-rw-r--r--dec_audio.c39
1 files changed, 31 insertions, 8 deletions
diff --git a/dec_audio.c b/dec_audio.c
index 22f9ab6cf9..54911ac583 100644
--- a/dec_audio.c
+++ b/dec_audio.c
@@ -32,6 +32,10 @@ int fakemono=0;
#include "loader/DirectShow/DS_AudioDec.h"
#endif
+extern int init_acm_audio_codec(sh_audio_t *sh_audio);
+extern int acm_decode_audio(sh_audio_t *sh_audio, void* a_buffer,int minlen,int maxlen);
+
+
static sh_audio_t* dec_audio_sh=NULL;
// AC3 decoder buffer callback:
@@ -51,15 +55,9 @@ int mplayer_audio_read(char *buf,int size){
return len;
}
-
int init_audio(sh_audio_t *sh_audio){
-
int driver=sh_audio->codec->driver;
-extern int init_acm_audio_codec(sh_audio_t *sh_audio);
-//extern int acm_decode_audio(sh_audio_t *sh_audio, void* a_buffer,int len);
-extern int acm_decode_audio(sh_audio_t *sh_audio, void* a_buffer,int minlen,int maxlen);
-
sh_audio->samplesize=2;
#if WORDS_BIGENDIAN
sh_audio->sample_format=AFMT_S16_BE;
@@ -344,8 +342,7 @@ int decode_audio(sh_audio_t *sh_audio,unsigned char *buf,int minlen,int maxlen){
#ifdef USE_DIRECTSHOW
case 7: // DirectShow
- { int ret;
- int size_in=0;
+ { int size_in=0;
int size_out=0;
int srcsize=DS_AudioDecoder_GetSrcSize(maxlen);
if(verbose>2)printf("DShow says: srcsize=%d (buffsize=%d) out_size=%d\n",srcsize,sh_audio->a_in_buffer_size,maxlen);
@@ -373,4 +370,30 @@ int decode_audio(sh_audio_t *sh_audio,unsigned char *buf,int minlen,int maxlen){
return len;
}
+void resync_audio_stream(sh_audio_t *sh_audio){
+ switch(sh_audio->codec->driver){
+ case 1:
+ MP3_DecodeFrame(NULL,-2); // resync
+ MP3_DecodeFrame(NULL,-2); // resync
+ MP3_DecodeFrame(NULL,-2); // resync
+ break;
+ case 3:
+ ac3_bitstream_reset(); // reset AC3 bitstream buffer
+ // if(verbose){ printf("Resyncing AC3 audio...");fflush(stdout);}
+ sh_audio->ac3_frame=ac3_decode_frame(); // resync
+ // if(verbose) printf(" OK!\n");
+ break;
+ case 4:
+ case 7:
+ sh_audio->a_in_buffer_len=0; // reset ACM/DShow audio buffer
+ break;
+ }
+}
+void skip_audio_frame(sh_audio_t *sh_audio){
+ switch(sh_audio->codec->driver){
+ case 1: MP3_DecodeFrame(NULL,-2);break; // skip MPEG frame
+ case 3: sh_audio->ac3_frame=ac3_decode_frame();break; // skip AC3 frame
+ default: ds_fill_buffer(sh_audio->ds); // skip PCM frame
+ }
+}