From 15eb8639c61ac71ed1c40b3da0ea8c65b9133b8f Mon Sep 17 00:00:00 2001 From: reimar Date: Thu, 30 Nov 2006 17:48:00 +0000 Subject: [PATCH] Move initialization of sh_audio/sh_video members to aviheader where possible so that all a_streams[]/v_streams[] are initialized and switching becomes simpler. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@21403 b3059339-0415-0410-9bf9-f77b7e298cf2 --- libmpdemux/aviheader.c | 8 ++++++-- libmpdemux/demux_avi.c | 10 ---------- 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/libmpdemux/aviheader.c b/libmpdemux/aviheader.c index 089daef7e0..56534189e1 100644 --- a/libmpdemux/aviheader.c +++ b/libmpdemux/aviheader.c @@ -195,10 +195,12 @@ while(1){ if(h.fccType==streamtypeVIDEO){ sh_video=new_sh_video(demuxer,stream_id); memcpy(&sh_video->video,&h,sizeof(h)); + sh_video->stream_delay = (float)sh_video->video.dwStart * sh_video->video.dwScale/sh_video->video.dwRate; } else if(h.fccType==streamtypeAUDIO){ sh_audio=new_sh_audio(demuxer,stream_id); memcpy(&sh_audio->audio,&h,sizeof(h)); + sh_audio->stream_delay = (float)sh_audio->audio.dwStart * sh_audio->audio.dwScale/sh_audio->audio.dwRate; } last_fccType=h.fccType; if( mp_msg_test(MSGT_HEADER,MSGL_V) ) print_strh(&h,MSGL_V); @@ -264,8 +266,8 @@ while(1){ sh_video->bih->biSize=chunksize; if( mp_msg_test(MSGT_HEADER,MSGL_V) ) print_video_header(sh_video->bih,MSGL_V); chunksize=0; -// 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; + 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; // if(demuxer->video->id==-1) demuxer->video->id=stream_id; // IdxFix: idxfix_videostream=stream_id; @@ -316,6 +318,8 @@ while(1){ wf_size < sizeof(WAVEFORMATEX)+sh_audio->wf->cbSize) { sh_audio->wf=realloc(sh_audio->wf, sizeof(WAVEFORMATEX)+sh_audio->wf->cbSize); } + sh_audio->format=sh_audio->wf->wFormatTag; + sh_audio->i_bps=sh_audio->wf->nAvgBytesPerSec; chunksize=0; if( mp_msg_test(MSGT_HEADER,MSGL_V) ) print_wave_header(sh_audio->wf,MSGL_V); ++priv->audio_streams; diff --git a/libmpdemux/demux_avi.c b/libmpdemux/demux_avi.c index f2b9a038c1..b2e9556dc7 100644 --- a/libmpdemux/demux_avi.c +++ b/libmpdemux/demux_avi.c @@ -499,12 +499,8 @@ static demuxer_t* demux_open_avi(demuxer_t* demuxer){ d_audio->sh=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 audio/video bitrate: if(priv->idx_size>0){ @@ -546,7 +542,6 @@ static demuxer_t* demux_open_avi(demuxer_t* demuxer){ if(sh_audio){ if(sh_audio->wf->nAvgBytesPerSec && sh_audio->audio.dwSampleSize!=1){ asize=(float)sh_audio->wf->nAvgBytesPerSec*sh_audio->audio.dwLength*sh_audio->audio.dwScale/sh_audio->audio.dwRate; - sh_audio->i_bps=sh_audio->wf->nAvgBytesPerSec; } else { asize=sh_audio->audio.dwLength; sh_audio->i_bps=(float)asize/(sh_video->frametime*priv->numberofframes); @@ -557,11 +552,6 @@ static demuxer_t* demux_open_avi(demuxer_t* demuxer){ sh_video->i_bps=(float)vsize/(sh_video->frametime*priv->numberofframes); } - if (sh_video) - sh_video->stream_delay = (float)sh_video->video.dwStart * sh_video->video.dwScale/sh_video->video.dwRate; - if (sh_audio) - sh_audio->stream_delay = (float)sh_audio->audio.dwStart * sh_audio->audio.dwScale/sh_audio->audio.dwRate; - return demuxer; }