summaryrefslogtreecommitdiffstats
path: root/dec_audio.c
diff options
context:
space:
mode:
authorarpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2>2001-07-29 00:39:47 +0000
committerarpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2>2001-07-29 00:39:47 +0000
commit67df6a8622697ab8f90e8b644bb15663fe8a8fd8 (patch)
tree479a5e878ee8e850afe3d1e6afc68606fa2bf02a /dec_audio.c
parentd2fdc3a30f3056b94a9bba002af08165e81df437 (diff)
downloadmpv-67df6a8622697ab8f90e8b644bb15663fe8a8fd8.tar.bz2
mpv-67df6a8622697ab8f90e8b644bb15663fe8a8fd8.tar.xz
some cleanup, asf/mpg seek precision improved
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@1409 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'dec_audio.c')
-rw-r--r--dec_audio.c27
1 files changed, 23 insertions, 4 deletions
diff --git a/dec_audio.c b/dec_audio.c
index 54911ac583..7acd29e816 100644
--- a/dec_audio.c
+++ b/dec_audio.c
@@ -372,28 +372,47 @@ int decode_audio(sh_audio_t *sh_audio,unsigned char *buf,int minlen,int maxlen){
void resync_audio_stream(sh_audio_t *sh_audio){
switch(sh_audio->codec->driver){
- case 1:
+ case 1: // MPEG
MP3_DecodeFrame(NULL,-2); // resync
MP3_DecodeFrame(NULL,-2); // resync
MP3_DecodeFrame(NULL,-2); // resync
break;
- case 3:
+ case 3: // AC3
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:
+ case 4: // ACM
+ case 7: // DShow
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
+ case 4:
+ case 7: {
+ int skip=sh_audio->wf->nBlockAlign;
+ if(skip<16){
+ skip=(sh_audio->wf->nAvgBytesPerSec/16)&(~7);
+ if(skip<16) skip=16;
+ }
+ demux_read_data(sh_audio->ds,NULL,skip);
+ break;
+ }
+ case 2: // AVI PCM
+ case 8: // DVD PCM
+ case 5: {// aLaw
+ int skip=sh_audio->i_bps/16;
+ skip=skip&(~3);
+ demux_read_data(sh_audio->ds,NULL,skip);
+ break;
+ }
default: ds_fill_buffer(sh_audio->ds); // skip PCM frame
}
}