various (de)muxer_lavf fixes

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@15012 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
michael 2005-03-25 22:47:09 +00:00
parent f76031552b
commit 7beeedc331
2 changed files with 20 additions and 4 deletions

View File

@ -47,6 +47,8 @@ typedef struct lavf_priv_t{
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 @@ int demux_open_lavf(demuxer_t *demuxer){
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 @@ int demux_open_lavf(demuxer_t *demuxer){
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;

View File

@ -161,7 +161,9 @@ static void fix_parameters(muxer_stream_t *stream, void *sh)
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 @@ static void fix_parameters(muxer_stream_t *stream, void *sh)
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;
}
}