diff options
author | arpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2001-07-29 00:39:47 +0000 |
---|---|---|
committer | arpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2001-07-29 00:39:47 +0000 |
commit | 67df6a8622697ab8f90e8b644bb15663fe8a8fd8 (patch) | |
tree | 479a5e878ee8e850afe3d1e6afc68606fa2bf02a /dec_audio.c | |
parent | d2fdc3a30f3056b94a9bba002af08165e81df437 (diff) | |
download | mpv-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.c | 27 |
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 } } |