Mercurial > mplayer.hg
comparison libmpdemux/demux_avi.c @ 18393:09b64c87b29a
Fix calculation of stream sizes when they are too big for a 32-bit variable
author | pacman |
---|---|
date | Sat, 06 May 2006 06:23:23 +0000 |
parents | cea08919336b |
children | c25a7de1c47c |
comparison
equal
deleted
inserted
replaced
18392:b10d4b3cb9ec | 18393:09b64c87b29a |
---|---|
563 sh_video->frametime=(float)sh_video->video.dwScale/(float)sh_video->video.dwRate; | 563 sh_video->frametime=(float)sh_video->video.dwScale/(float)sh_video->video.dwRate; |
564 | 564 |
565 // calculating audio/video bitrate: | 565 // calculating audio/video bitrate: |
566 if(priv->idx_size>0){ | 566 if(priv->idx_size>0){ |
567 // we have index, let's count 'em! | 567 // we have index, let's count 'em! |
568 size_t vsize=0; | 568 int64_t vsize=0; |
569 size_t asize=0; | 569 int64_t asize=0; |
570 size_t vsamples=0; | 570 size_t vsamples=0; |
571 size_t asamples=0; | 571 size_t asamples=0; |
572 int i; | 572 int i; |
573 for(i=0;i<priv->idx_size;i++){ | 573 for(i=0;i<priv->idx_size;i++){ |
574 int id=avi_stream_id(((AVIINDEXENTRY *)priv->idx)[i].ckid); | 574 int id=avi_stream_id(((AVIINDEXENTRY *)priv->idx)[i].ckid); |
580 else if(sh_audio && sh_audio->ds->id == id) { | 580 else if(sh_audio && sh_audio->ds->id == id) { |
581 asize+=len; | 581 asize+=len; |
582 asamples+=(len+priv->audio_block_size-1)/priv->audio_block_size; | 582 asamples+=(len+priv->audio_block_size-1)/priv->audio_block_size; |
583 } | 583 } |
584 } | 584 } |
585 mp_msg(MSGT_DEMUX,MSGL_V,"AVI video size=%u (%u) audio size=%u (%u)\n",vsize,vsamples,asize,asamples); | 585 mp_msg(MSGT_DEMUX,MSGL_V,"AVI video size=%"PRId64" (%u) audio size=%"PRId64" (%u)\n",vsize,vsamples,asize,asamples); |
586 priv->numberofframes=vsamples; | 586 priv->numberofframes=vsamples; |
587 sh_video->i_bps=((float)vsize/(float)vsamples)*(float)sh_video->video.dwRate/(float)sh_video->video.dwScale; | 587 sh_video->i_bps=((float)vsize/(float)vsamples)*(float)sh_video->video.dwRate/(float)sh_video->video.dwScale; |
588 if(sh_audio) sh_audio->i_bps=((float)asize/(float)asamples)*(float)sh_audio->audio.dwRate/(float)sh_audio->audio.dwScale; | 588 if(sh_audio) sh_audio->i_bps=((float)asize/(float)asamples)*(float)sh_audio->audio.dwRate/(float)sh_audio->audio.dwScale; |
589 } else { | 589 } else { |
590 // guessing, results may be inaccurate: | 590 // guessing, results may be inaccurate: |
591 size_t vsize; | 591 int64_t vsize; |
592 size_t asize=0; | 592 int64_t asize=0; |
593 | 593 |
594 if((priv->numberofframes=sh_video->video.dwLength)<=1) | 594 if((priv->numberofframes=sh_video->video.dwLength)<=1) |
595 // bad video header, try to get number of frames from audio | 595 // bad video header, try to get number of frames from audio |
596 if(sh_audio && sh_audio->wf->nAvgBytesPerSec) priv->numberofframes=sh_video->fps*sh_audio->audio.dwLength/sh_audio->audio.dwRate*sh_audio->audio.dwScale; | 596 if(sh_audio && sh_audio->wf->nAvgBytesPerSec) priv->numberofframes=sh_video->fps*sh_audio->audio.dwLength/sh_audio->audio.dwRate*sh_audio->audio.dwScale; |
597 if(priv->numberofframes<=1){ | 597 if(priv->numberofframes<=1){ |
607 asize=sh_audio->audio.dwLength; | 607 asize=sh_audio->audio.dwLength; |
608 sh_audio->i_bps=(float)asize/(sh_video->frametime*priv->numberofframes); | 608 sh_audio->i_bps=(float)asize/(sh_video->frametime*priv->numberofframes); |
609 } | 609 } |
610 } | 610 } |
611 vsize=demuxer->movi_end-demuxer->movi_start-asize-8*priv->numberofframes; | 611 vsize=demuxer->movi_end-demuxer->movi_start-asize-8*priv->numberofframes; |
612 mp_msg(MSGT_DEMUX,MSGL_V,"AVI video size=%d (%u) audio size=%d\n",vsize,priv->numberofframes,asize); | 612 mp_msg(MSGT_DEMUX,MSGL_V,"AVI video size=%"PRId64" (%u) audio size=%"PRId64"\n",vsize,priv->numberofframes,asize); |
613 sh_video->i_bps=(float)vsize/(sh_video->frametime*priv->numberofframes); | 613 sh_video->i_bps=(float)vsize/(sh_video->frametime*priv->numberofframes); |
614 } | 614 } |
615 | 615 |
616 if (sh_video) | 616 if (sh_video) |
617 sh_video->stream_delay = (float)sh_video->video.dwStart * sh_video->video.dwScale/sh_video->video.dwRate; | 617 sh_video->stream_delay = (float)sh_video->video.dwStart * sh_video->video.dwScale/sh_video->video.dwRate; |