diff options
author | arpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2001-08-11 20:37:33 +0000 |
---|---|---|
committer | arpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2001-08-11 20:37:33 +0000 |
commit | 610912b8b54129d84685247c1fd03346a7c71260 (patch) | |
tree | 8a06f15745ef39d4b2ebe093fd0183cecfa5d8db /demux_avi.c | |
parent | 5a0968079511913417e54a0aaf11ef60aa0e01fa (diff) | |
download | mpv-610912b8b54129d84685247c1fd03346a7c71260.tar.bz2 mpv-610912b8b54129d84685247c1fd03346a7c71260.tar.xz |
AVI demuxer cleanups, fileformat-dependent stuff moved to priv_t
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@1486 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'demux_avi.c')
-rw-r--r-- | demux_avi.c | 286 |
1 files changed, 200 insertions, 86 deletions
diff --git a/demux_avi.c b/demux_avi.c index fa7b18acd4..2a52e7bad5 100644 --- a/demux_avi.c +++ b/demux_avi.c @@ -1,4 +1,4 @@ -// AVI file parser for DEMUXER v2.6 by A'rpi/ESP-team +// AVI file parser for DEMUXER v2.9 by A'rpi/ESP-team #include <stdio.h> #include <stdlib.h> @@ -16,11 +16,7 @@ extern int verbose; // defined in mplayer.c #include "codec-cfg.h" #include "stheader.h" -//static float avi_pts_frametime=1.0f/25.0f; -float avi_audio_pts=0; -float avi_video_pts=0; -//float avi_video_ftime=0.04; -int skip_video_frames=0; +#include "aviheader.h" // Select ds from ID demux_stream_t* demux_avi_select_stream(demuxer_t *demux,unsigned int id){ @@ -58,12 +54,9 @@ demux_stream_t* demux_avi_select_stream(demuxer_t *demux,unsigned int id){ return NULL; } -static float pts_correction=0.0; -static int pts_corrected=0; -static int pts_has_video=0; -static unsigned int pts_corr_bytes=0; static int demux_avi_read_packet(demuxer_t *demux,unsigned int id,unsigned int len,int idxpos,int flags){ + avi_priv_t *priv=demux->priv; int skip; float pts=0; demux_stream_t *ds=demux_avi_select_stream(demux,id); @@ -72,50 +65,50 @@ static int demux_avi_read_packet(demuxer_t *demux,unsigned int id,unsigned int l if(ds==demux->audio){ - if(pts_corrected==0){ -// printf("\rYYY-A A: %5.3f V: %5.3f \n",avi_audio_pts,avi_video_pts); - if(pts_has_video){ + if(priv->pts_corrected==0){ +// printf("\rYYY-A A: %5.3f V: %5.3f \n",priv->avi_audio_pts,priv->avi_video_pts); + if(priv->pts_has_video){ // we have video pts now - float delay=(float)pts_corr_bytes/((sh_audio_t*)(ds->sh))->wf->nAvgBytesPerSec; - printf("XXX initial v_pts=%5.3f a_pos=%d (%5.3f) \n",avi_audio_pts,pts_corr_bytes,delay); - //pts_correction=-avi_audio_pts+delay; - pts_correction=delay-avi_audio_pts; - avi_audio_pts+=pts_correction; - pts_corrected=1; + float delay=(float)priv->pts_corr_bytes/((sh_audio_t*)(ds->sh))->wf->nAvgBytesPerSec; + printf("XXX initial v_pts=%5.3f a_pos=%d (%5.3f) \n",priv->avi_audio_pts,priv->pts_corr_bytes,delay); + //priv->pts_correction=-priv->avi_audio_pts+delay; + priv->pts_correction=delay-priv->avi_audio_pts; + priv->avi_audio_pts+=priv->pts_correction; + priv->pts_corrected=1; } else - pts_corr_bytes+=len; + priv->pts_corr_bytes+=len; } - pts=avi_audio_pts; //+pts_correction; - avi_audio_pts=0; + pts=priv->avi_audio_pts; //+priv->pts_correction; + priv->avi_audio_pts=0; } else if(ds==demux->video){ // video - if(skip_video_frames>0){ + if(priv->skip_video_frames>0){ // drop frame (seeking) - --skip_video_frames; + --priv->skip_video_frames; ds=NULL; } else { - pts=avi_video_pts; + pts=priv->avi_video_pts; } // ezt a 2 sort lehet hogy fell kell majd cserelni: - //avi_video_pts+=avi_pts_frametime; - //avi_video_pts+=(float)avi_header.video.dwScale/(float)avi_header.video.dwRate; - //avi_video_pts+=((sh_video_t*)ds->sh)->frametime; + //priv->avi_video_pts+=avi_pts_frametime; + //priv->avi_video_pts+=(float)avi_header.video.dwScale/(float)avi_header.video.dwRate; + //priv->avi_video_pts+=((sh_video_t*)ds->sh)->frametime; // FIXME!!! #if 1 // printf("ds=0x%X\n",ds); // printf("packno=%d\n",ds->pack_no); // printf("### pack_no=%d\n",demux->video->pack_no+demux->video->packs); - avi_video_pts = (demux->video->pack_no+demux->video->packs) * + priv->avi_video_pts = (demux->video->pack_no+demux->video->packs) * (float)((sh_video_t*)demux->video->sh)->video.dwScale / (float)((sh_video_t*)demux->video->sh)->video.dwRate; #else - avi_video_pts+=(float)((sh_video_t*)(demux->video->sh))->video.dwScale/(float)((sh_video_t*)(demux->video->sh))->video.dwRate; -// avi_video_pts+=avi_video_ftime; + priv->avi_video_pts+=(float)((sh_video_t*)(demux->video->sh))->video.dwScale/(float)((sh_video_t*)(demux->video->sh))->video.dwRate; +// priv->avi_video_pts+=avi_video_ftime; #endif -// printf("\rYYY-V A: %5.3f V: %5.3f \n",avi_audio_pts,avi_video_pts); - avi_audio_pts=avi_video_pts+pts_correction; - pts_has_video=1; +// printf("\rYYY-V A: %5.3f V: %5.3f \n",priv->avi_audio_pts,priv->avi_video_pts); + priv->avi_audio_pts=priv->avi_video_pts+priv->pts_correction; + priv->pts_has_video=1; } @@ -134,13 +127,11 @@ static int demux_avi_read_packet(demuxer_t *demux,unsigned int id,unsigned int l return ds?1:0; } -//static int num_elementary_packets100=0; -//static int num_elementary_packets101=0; - // return value: // 0 = EOF or no stream found // 1 = successfully read a packet int demux_avi_fill_buffer(demuxer_t *demux){ +avi_priv_t *priv=demux->priv; unsigned int id=0; unsigned int len; int max_packs=128; @@ -157,14 +148,14 @@ do{ } if(stream_eof(demux->stream)) return 0; #endif - if(demux->idx_size>0 && demux->idx_pos<demux->idx_size){ + if(priv->idx_size>0 && priv->idx_pos<priv->idx_size){ unsigned int pos; - //if(demux->idx_pos<0) printf("Fatal! idx_pos=%d\n",demux->idx_pos); + //if(priv->idx_pos<0) printf("Fatal! idx_pos=%d\n",priv->idx_pos); - idx=&((AVIINDEXENTRY *)demux->idx)[demux->idx_pos++]; + idx=&((AVIINDEXENTRY *)priv->idx)[priv->idx_pos++]; - //printf("[%d]",demux->idx_pos);fflush(stdout); + //printf("[%d]",priv->idx_pos);fflush(stdout); //stream_seek(demux->stream,idx.dwChunkOffset); //printf("IDX pos=%X idx.pos=%X idx.size=%X idx.flags=%X\n",demux->filepos, @@ -178,7 +169,7 @@ do{ continue; // skip this chunk } - pos=idx->dwChunkOffset+demux->idx_offset; + pos=idx->dwChunkOffset+priv->idx_offset; if(pos<demux->movi_start || pos>=demux->movi_end){ printf("ChunkOffset out of range! idx=0x%X \n",pos); continue; @@ -222,8 +213,8 @@ do{ continue; } } - ret=demux_avi_read_packet(demux,id,len,demux->idx_pos-1,flags); - if(!ret && skip_video_frames<=0) + ret=demux_avi_read_packet(demux,id,len,priv->idx_pos-1,flags); + if(!ret && priv->skip_video_frames<=0) if(--max_packs==0){ demux->stream->eof=1; printf("demux: file doesn't contain the selected audio or video stream\n"); @@ -238,6 +229,7 @@ do{ // 0 = EOF or no stream found // 1 = successfully read a packet int demux_avi_fill_buffer_ni(demuxer_t *demux,demux_stream_t* ds){ +avi_priv_t *priv=demux->priv; unsigned int id=0; unsigned int len; int max_packs=128; @@ -249,14 +241,14 @@ do{ int idx_pos=0; demux->filepos=stream_tell(demux->stream); - if(ds==demux->video) idx_pos=demux->idx_pos_v++; else - if(ds==demux->audio) idx_pos=demux->idx_pos_a++; else - idx_pos=demux->idx_pos++; + if(ds==demux->video) idx_pos=priv->idx_pos_v++; else + if(ds==demux->audio) idx_pos=priv->idx_pos_a++; else + idx_pos=priv->idx_pos++; - if(demux->idx_size>0 && idx_pos<demux->idx_size){ + if(priv->idx_size>0 && idx_pos<priv->idx_size){ unsigned int pos; - idx=&((AVIINDEXENTRY *)demux->idx)[idx_pos]; -// idx=&demux->idx[idx_pos]; + idx=&((AVIINDEXENTRY *)priv->idx)[idx_pos]; +// idx=&priv->idx[idx_pos]; if(idx->dwFlags&AVIIF_LIST){ // LIST @@ -267,7 +259,7 @@ do{ continue; // skip this chunk } - pos=idx->dwChunkOffset+demux->idx_offset; + pos=idx->dwChunkOffset+priv->idx_offset; if(pos<demux->movi_start || pos>=demux->movi_end){ printf("ChunkOffset out of range! current=0x%X idx=0x%X \n",demux->filepos,pos); continue; @@ -299,7 +291,7 @@ do{ if(idx->dwFlags&AVIIF_KEYFRAME) flags=1; } else return 0; ret=demux_avi_read_packet(demux,id,len,idx_pos,flags); - if(!ret && skip_video_frames<=0) + if(!ret && priv->skip_video_frames<=0) if(--max_packs==0){ demux->stream->eof=1; printf("demux: file doesn't contain the selected audio or video stream\n"); @@ -314,13 +306,14 @@ do{ // 0 = EOF or no stream found // 1 = successfully read a packet int demux_avi_fill_buffer_nini(demuxer_t *demux,demux_stream_t* ds){ +avi_priv_t *priv=demux->priv; unsigned int id=0; unsigned int len; int ret=0; int *fpos=NULL; - if(ds==demux->video) fpos=&demux->idx_pos_v; else - if(ds==demux->audio) fpos=&demux->idx_pos_a; else + if(ds==demux->video) fpos=&priv->idx_pos_v; else + if(ds==demux->audio) fpos=&priv->idx_pos_a; else return 0; stream_seek(demux->stream,fpos[0]); @@ -343,7 +336,7 @@ do{ if(ds==demux_avi_select_stream(demux,id)){ // read it! - ret=demux_avi_read_packet(demux,id,len,demux->idx_pos-1,0); + ret=demux_avi_read_packet(demux,id,len,priv->idx_pos-1,0); } else { // skip it! int skip=(len+1)&(~1); // total bytes in this chunk @@ -355,9 +348,130 @@ do{ return 1; } -extern float initial_pts_delay; +extern int audio_id; +extern int video_id; +extern int index_mode; // -1=untouched 0=don't use index 1=use (geneate) index +extern int force_ni; +extern int pts_from_bps; + +demuxer_t* demux_open_avi(demuxer_t* demuxer){ + demux_stream_t *d_audio=demuxer->audio; + demux_stream_t *d_video=demuxer->video; + sh_audio_t *sh_audio=NULL; + sh_video_t *sh_video=NULL; + avi_priv_t* priv=malloc(sizeof(avi_priv_t)); + + // priv struct: + priv->avi_audio_pts=priv->avi_video_pts=0.0f; + priv->pts_correction=0.0f; + priv->skip_video_frames=0; + priv->pts_corr_bytes=0; + priv->pts_has_video=priv->pts_corrected=0; + demuxer->priv=(void*)priv; + + //---- AVI header: + read_avi_header(demuxer,(demuxer->stream->type!=STREAMTYPE_STREAM)?index_mode:-2); + stream_reset(demuxer->stream); + stream_seek(demuxer->stream,demuxer->movi_start); + priv->idx_pos=0; + priv->idx_pos_a=0; + priv->idx_pos_v=0; + if(priv->idx_size>0){ + // decide index format: + if(((AVIINDEXENTRY *)priv->idx)[0].dwChunkOffset<demuxer->movi_start) + priv->idx_offset=demuxer->movi_start-4; + else + priv->idx_offset=0; + if(verbose) printf("AVI index offset: %d\n",priv->idx_offset); + } +// demuxer->endpos=avi_header.movi_end; + + if(priv->idx_size>0){ + // check that file is non-interleaved: + int i; + int a_pos=-1; + int v_pos=-1; + for(i=0;i<priv->idx_size;i++){ + AVIINDEXENTRY* idx=&((AVIINDEXENTRY *)priv->idx)[i]; + demux_stream_t* ds=demux_avi_select_stream(demuxer,idx->ckid); + int pos=idx->dwChunkOffset+priv->idx_offset; + if(a_pos==-1 && ds==demuxer->audio){ + a_pos=pos; + if(v_pos!=-1) break; + } + if(v_pos==-1 && ds==demuxer->video){ + v_pos=pos; + if(a_pos!=-1) break; + } + } + if(v_pos==-1){ + fprintf(stderr,"AVI_NI: missing video stream!? contact the author, it may be a bug :(\n"); + return NULL; +// GUI_MSG( mplErrorAVINI ) +// exit(1); + } + if(a_pos==-1){ + printf("AVI_NI: No audio stream found -> nosound\n"); + sh_audio=NULL; + } else { + if(force_ni || abs(a_pos-v_pos)>0x100000){ // distance > 1MB + printf("%s NON-INTERLEAVED AVI file-format!\n",force_ni?"Forced":"Detected"); + demuxer->type=DEMUXER_TYPE_AVI_NI; // HACK!!!! + pts_from_bps=1; // force BPS sync! + } + } + } else { + // no index + if(force_ni){ + printf("Using NON-INTERLEAVED Broken AVI file-format!\n"); + demuxer->type=DEMUXER_TYPE_AVI_NINI; // HACK!!!! + priv->idx_pos_a= + priv->idx_pos_v=demuxer->movi_start; + pts_from_bps=1; // force BPS sync! + } + } + if(!ds_fill_buffer(d_video)){ + fprintf(stderr,"AVI: missing video stream!? contact the author, it may be a bug :(\n"); + return NULL; +// GUI_MSG( mplAVIErrorMissingVideoStream ) +// exit(1); + } + sh_video=d_video->sh;sh_video->ds=d_video; + if(audio_id!=-2){ + if(verbose) printf("AVI: Searching for audio stream (id:%d)\n",d_audio->id); + if(!ds_fill_buffer(d_audio)){ + printf("AVI: No Audio stream found... ->nosound\n"); + sh_audio=NULL; + } else { + sh_audio=d_audio->sh;sh_audio->ds=d_audio; + sh_audio->format=sh_audio->wf->wFormatTag; + } + } + // calc. FPS: + sh_video->fps=(float)sh_video->video.dwRate/(float)sh_video->video.dwScale; + sh_video->frametime=(float)sh_video->video.dwScale/(float)sh_video->video.dwRate; + // calculating video bitrate: + sh_video->i_bps=demuxer->movi_end-demuxer->movi_start-priv->idx_size*8; + if(sh_audio) sh_video->i_bps-=sh_audio->audio.dwLength; + if(verbose) printf("AVI video length=%d\n",sh_video->i_bps); + sh_video->i_bps=((float)sh_video->i_bps/(float)sh_video->video.dwLength)*sh_video->fps; + printf("VIDEO: [%.4s] %ldx%ld %dbpp %4.2f fps %5.1f kbps (%4.1f kbyte/s)\n", + (char *)&sh_video->bih->biCompression, + sh_video->bih->biWidth, + sh_video->bih->biHeight, + sh_video->bih->biBitCount, + sh_video->fps, + sh_video->i_bps*0.008f, + sh_video->i_bps/1024.0f ); + + return demuxer; + +} + +//extern float initial_pts_delay; void demux_seek_avi(demuxer_t *demuxer,float rel_seek_secs,int flags){ + avi_priv_t *priv=demuxer->priv; demux_stream_t *d_audio=demuxer->audio; demux_stream_t *d_video=demuxer->video; sh_audio_t *sh_audio=d_audio->sh; @@ -370,40 +484,40 @@ void demux_seek_avi(demuxer_t *demuxer,float rel_seek_secs,int flags){ int video_chunk_pos=d_video->pos; int i; - skip_video_frames=0; - avi_audio_pts=0; + priv->skip_video_frames=0; + priv->avi_audio_pts=0; // ------------ STEP 1: find nearest video keyframe chunk ------------ // find nearest video keyframe chunk pos: if(rel_seek_frames>0){ // seek forward - while(video_chunk_pos<demuxer->idx_size){ - int id=((AVIINDEXENTRY *)demuxer->idx)[video_chunk_pos].ckid; + while(video_chunk_pos<priv->idx_size){ + int id=((AVIINDEXENTRY *)priv->idx)[video_chunk_pos].ckid; if(avi_stream_id(id)==d_video->id){ // video frame - if((--rel_seek_frames)<0 && ((AVIINDEXENTRY *)demuxer->idx)[video_chunk_pos].dwFlags&AVIIF_KEYFRAME) break; + if((--rel_seek_frames)<0 && ((AVIINDEXENTRY *)priv->idx)[video_chunk_pos].dwFlags&AVIIF_KEYFRAME) break; } ++video_chunk_pos; } } else { // seek backward while(video_chunk_pos>=0){ - int id=((AVIINDEXENTRY *)demuxer->idx)[video_chunk_pos].ckid; + int id=((AVIINDEXENTRY *)priv->idx)[video_chunk_pos].ckid; if(avi_stream_id(id)==d_video->id){ // video frame - if((++rel_seek_frames)>0 && ((AVIINDEXENTRY *)demuxer->idx)[video_chunk_pos].dwFlags&AVIIF_KEYFRAME) break; + if((++rel_seek_frames)>0 && ((AVIINDEXENTRY *)priv->idx)[video_chunk_pos].dwFlags&AVIIF_KEYFRAME) break; } --video_chunk_pos; } } - demuxer->idx_pos_a=demuxer->idx_pos_v=demuxer->idx_pos=video_chunk_pos; + priv->idx_pos_a=priv->idx_pos_v=priv->idx_pos=video_chunk_pos; // re-calc video pts: d_video->pack_no=0; for(i=0;i<video_chunk_pos;i++){ - int id=((AVIINDEXENTRY *)demuxer->idx)[i].ckid; + int id=((AVIINDEXENTRY *)priv->idx)[i].ckid; if(avi_stream_id(id)==d_video->id) ++d_video->pack_no; } sh_video->num_frames=d_video->pack_no; - avi_video_pts=d_video->pack_no*(float)sh_video->video.dwScale/(float)sh_video->video.dwRate; + priv->avi_video_pts=d_video->pack_no*(float)sh_video->video.dwScale/(float)sh_video->video.dwRate; d_video->pos=video_chunk_pos; // ------------ STEP 2: seek audio, find the right chunk & pos ------------ @@ -419,28 +533,28 @@ void demux_seek_avi(demuxer_t *demuxer,float rel_seek_secs,int flags){ int skip_audio_bytes=0; int curr_audio_pos=-1; int audio_chunk_pos=-1; - int chunk_max=(demuxer->type==DEMUXER_TYPE_AVI)?video_chunk_pos:demuxer->idx_size; + int chunk_max=(demuxer->type==DEMUXER_TYPE_AVI)?video_chunk_pos:priv->idx_size; if(sh_audio->audio.dwSampleSize){ // constant rate audio stream #if 0 int align; - curr_audio_pos=(avi_video_pts) * sh_audio->wf->nAvgBytesPerSec; + curr_audio_pos=(priv->avi_video_pts) * sh_audio->wf->nAvgBytesPerSec; if(curr_audio_pos<0)curr_audio_pos=0; align=sh_audio->audio.dwSampleSize; if(sh_audio->wf->nBlockAlign>align) align=sh_audio->wf->nBlockAlign; curr_audio_pos/=align; curr_audio_pos*=align; #else - curr_audio_pos=(avi_video_pts)*(float)sh_audio->audio.dwRate/(float)sh_audio->audio.dwScale; + curr_audio_pos=(priv->avi_video_pts)*(float)sh_audio->audio.dwRate/(float)sh_audio->audio.dwScale; curr_audio_pos*=sh_audio->audio.dwSampleSize; #endif // find audio chunk pos: for(i=0;i<chunk_max;i++){ - int id=((AVIINDEXENTRY *)demuxer->idx)[i].ckid; + int id=((AVIINDEXENTRY *)priv->idx)[i].ckid; if(avi_stream_id(id)==d_audio->id){ - len=((AVIINDEXENTRY *)demuxer->idx)[i].dwChunkLength; + len=((AVIINDEXENTRY *)priv->idx)[i].dwChunkLength; audio_chunk_pos=i; ++d_audio->pack_no; if(d_audio->dpos<=curr_audio_pos && curr_audio_pos<(d_audio->dpos+len)){ //if(verbose)printf("break;\n"); @@ -453,14 +567,14 @@ void demux_seek_avi(demuxer_t *demuxer,float rel_seek_secs,int flags){ } else { // VBR audio - int chunks=(avi_video_pts)*(float)sh_audio->audio.dwRate/(float)sh_audio->audio.dwScale; + int chunks=(priv->avi_video_pts)*(float)sh_audio->audio.dwRate/(float)sh_audio->audio.dwScale; audio_chunk_pos=0; // find audio chunk pos: - for(i=0;i<demuxer->idx_size && chunks>0;i++){ - int id=((AVIINDEXENTRY *)demuxer->idx)[i].ckid; + for(i=0;i<priv->idx_size && chunks>0;i++){ + int id=((AVIINDEXENTRY *)priv->idx)[i].ckid; if(avi_stream_id(id)==d_audio->id){ - len=((AVIINDEXENTRY *)demuxer->idx)[i].dwChunkLength; + len=((AVIINDEXENTRY *)priv->idx)[i].dwChunkLength; if(i>chunk_max){ skip_audio_bytes+=len; } else { @@ -474,7 +588,7 @@ void demux_seek_avi(demuxer_t *demuxer,float rel_seek_secs,int flags){ //if(audio_chunk_pos>chunk_max) audio_chunk_pos=chunk_max; // printf("VBR seek: %5.3f -> chunk_no %d -> chunk_idx %d + skip %d \n", -// avi_video_pts, audio_chunk_pos, ); +// priv->avi_video_pts, audio_chunk_pos, ); } @@ -493,25 +607,25 @@ void demux_seek_avi(demuxer_t *demuxer,float rel_seek_secs,int flags){ if(demuxer->type==DEMUXER_TYPE_AVI){ // interleaved stream: if(audio_chunk_pos<video_chunk_pos){ - // calc skip_video_frames & adjust video pts counter: + // calc priv->skip_video_frames & adjust video pts counter: for(i=audio_chunk_pos;i<video_chunk_pos;i++){ - int id=((AVIINDEXENTRY *)demuxer->idx)[i].ckid; - if(avi_stream_id(id)==d_video->id) ++skip_video_frames; + int id=((AVIINDEXENTRY *)priv->idx)[i].ckid; + if(avi_stream_id(id)==d_video->id) ++priv->skip_video_frames; } // requires for correct audio pts calculation (demuxer): - avi_video_pts-=skip_video_frames*(float)sh_video->video.dwScale/(float)sh_video->video.dwRate; - demuxer->idx_pos_a=demuxer->idx_pos_v=demuxer->idx_pos=audio_chunk_pos; + priv->avi_video_pts-=priv->skip_video_frames*(float)sh_video->video.dwScale/(float)sh_video->video.dwRate; + priv->idx_pos_a=priv->idx_pos_v=priv->idx_pos=audio_chunk_pos; } } else { // non-interleaved stream: - demuxer->idx_pos_a=audio_chunk_pos; - demuxer->idx_pos_v=video_chunk_pos; - demuxer->idx_pos=(audio_chunk_pos<video_chunk_pos)?audio_chunk_pos:video_chunk_pos; + priv->idx_pos_a=audio_chunk_pos; + priv->idx_pos_v=video_chunk_pos; + priv->idx_pos=(audio_chunk_pos<video_chunk_pos)?audio_chunk_pos:video_chunk_pos; } if(verbose) printf("SEEK: idx=%d (a:%d v:%d) v.skip=%d a.skip=%d/%4.3f \n", - demuxer->idx_pos,audio_chunk_pos,video_chunk_pos, - skip_video_frames,skip_audio_bytes,skip_audio_secs); + priv->idx_pos,audio_chunk_pos,video_chunk_pos, + priv->skip_video_frames,skip_audio_bytes,skip_audio_secs); if(skip_audio_bytes){ demux_read_data(d_audio,NULL,skip_audio_bytes); |