# HG changeset patch # User michael # Date 1111790829 0 # Node ID 83077e6742e7e5ba3326324408863ac9e7ef68f9 # Parent aec21cf429cb6450ad744f89d4a610b29e30fd07 various (de)muxer_lavf fixes diff -r aec21cf429cb -r 83077e6742e7 libmpdemux/demux_lavf.c --- a/libmpdemux/demux_lavf.c Fri Mar 25 21:17:21 2005 +0000 +++ b/libmpdemux/demux_lavf.c Fri Mar 25 22:47:09 2005 +0000 @@ -47,6 +47,8 @@ extern void print_wave_header(WAVEFORMATEX *h); extern void print_video_header(BITMAPINFOHEADER *h); +int64_t ff_gcd(int64_t a, int64_t b); + static int mp_open(URLContext *h, const char *filename, int flags){ return 0; } @@ -129,7 +131,7 @@ AVFormatContext *avfc; AVFormatParameters ap; lavf_priv_t *priv= demuxer->priv; - int i; + int i,g; char mp_filename[256]="mp:"; memset(&ap, 0, sizeof(AVFormatParameters)); @@ -193,6 +195,18 @@ codec->extradata_size); } sh_audio->wf= wf; + sh_audio->audio.dwSampleSize= codec->block_align; + if(codec->frame_size && codec->sample_rate){ + sh_audio->audio.dwScale=codec->frame_size; + sh_audio->audio.dwRate= codec->sample_rate; + }else{ + sh_audio->audio.dwScale= codec->block_align ? codec->block_align*8 : 8; + sh_audio->audio.dwRate = codec->bit_rate; + } + g= ff_gcd(sh_audio->audio.dwScale, sh_audio->audio.dwRate); + sh_audio->audio.dwScale /= g; + sh_audio->audio.dwRate /= g; +// printf("sca:%d rat:%d fs:%d sr:%d ba:%d\n", sh_audio->audio.dwScale, sh_audio->audio.dwRate, codec->frame_size, codec->sample_rate, codec->block_align); sh_audio->ds= demuxer->audio; sh_audio->format= codec->codec_tag; sh_audio->channels= codec->channels; diff -r aec21cf429cb -r 83077e6742e7 libmpdemux/muxer_lavf.c --- a/libmpdemux/muxer_lavf.c Fri Mar 25 21:17:21 2005 +0000 +++ b/libmpdemux/muxer_lavf.c Fri Mar 25 22:47:09 2005 +0000 @@ -161,7 +161,9 @@ ctx->sample_rate = stream->wf->nSamplesPerSec; // mp_msg(MSGT_MUXER, MSGL_INFO, "stream->h.dwSampleSize: %d\n", stream->h.dwSampleSize); ctx->channels = stream->wf->nChannels; - ctx->frame_size = 576; + if(stream->h.dwRate && (stream->h.dwScale * (int64_t)ctx->sample_rate) % stream->h.dwRate == 0) + ctx->frame_size= (stream->h.dwScale * (int64_t)ctx->sample_rate) / stream->h.dwRate; +// printf("ctx->block_align = stream->wf->nBlockAlign; %d=%d stream->wf->nAvgBytesPerSec:%d\n", ctx->block_align, stream->wf->nBlockAlign, stream->wf->nAvgBytesPerSec); ctx->block_align = stream->wf->nBlockAlign; } else if(stream->type == MUXER_TYPE_VIDEO) @@ -171,8 +173,8 @@ ctx->width = stream->bih->biWidth; ctx->height = stream->bih->biHeight; ctx->bit_rate = 800000; - ctx->frame_rate = (int) (10000 * stream->h.dwRate)/ stream->h.dwScale;; - ctx->frame_rate_base = 10000; + ctx->frame_rate = stream->h.dwRate; + ctx->frame_rate_base = stream->h.dwScale; } }