|
|
|
@ -209,32 +209,33 @@ void ff_put_bmp_header(AVIOContext *pb, AVCodecContext *enc, |
|
|
|
|
avio_w8(pb, 0); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void ff_parse_specific_params(AVCodecContext *stream, int *au_rate, |
|
|
|
|
void ff_parse_specific_params(AVStream *st, int *au_rate, |
|
|
|
|
int *au_ssize, int *au_scale) |
|
|
|
|
{ |
|
|
|
|
AVCodecContext *codec = st->codec; |
|
|
|
|
int gcd; |
|
|
|
|
int audio_frame_size; |
|
|
|
|
|
|
|
|
|
/* We use the known constant frame size for the codec if known, otherwise
|
|
|
|
|
* fall back on using AVCodecContext.frame_size, which is not as reliable |
|
|
|
|
* for indicating packet duration. */ |
|
|
|
|
audio_frame_size = av_get_audio_frame_duration(stream, 0); |
|
|
|
|
audio_frame_size = av_get_audio_frame_duration(codec, 0); |
|
|
|
|
if (!audio_frame_size) |
|
|
|
|
audio_frame_size = stream->frame_size; |
|
|
|
|
audio_frame_size = codec->frame_size; |
|
|
|
|
|
|
|
|
|
*au_ssize = stream->block_align; |
|
|
|
|
if (audio_frame_size && stream->sample_rate) { |
|
|
|
|
*au_ssize = codec->block_align; |
|
|
|
|
if (audio_frame_size && codec->sample_rate) { |
|
|
|
|
*au_scale = audio_frame_size; |
|
|
|
|
*au_rate = stream->sample_rate; |
|
|
|
|
} else if (stream->codec_type == AVMEDIA_TYPE_VIDEO || |
|
|
|
|
stream->codec_type == AVMEDIA_TYPE_DATA || |
|
|
|
|
stream->codec_type == AVMEDIA_TYPE_SUBTITLE) { |
|
|
|
|
*au_scale = stream->time_base.num; |
|
|
|
|
*au_rate = stream->time_base.den; |
|
|
|
|
*au_rate = codec->sample_rate; |
|
|
|
|
} else if (codec->codec_type == AVMEDIA_TYPE_VIDEO || |
|
|
|
|
codec->codec_type == AVMEDIA_TYPE_DATA || |
|
|
|
|
codec->codec_type == AVMEDIA_TYPE_SUBTITLE) { |
|
|
|
|
*au_scale = codec->time_base.num; |
|
|
|
|
*au_rate = codec->time_base.den; |
|
|
|
|
} else { |
|
|
|
|
*au_scale = stream->block_align ? stream->block_align * 8 : 8; |
|
|
|
|
*au_rate = stream->bit_rate ? stream->bit_rate : |
|
|
|
|
8 * stream->sample_rate; |
|
|
|
|
*au_scale = codec->block_align ? codec->block_align * 8 : 8; |
|
|
|
|
*au_rate = codec->bit_rate ? codec->bit_rate : |
|
|
|
|
8 * codec->sample_rate; |
|
|
|
|
} |
|
|
|
|
gcd = av_gcd(*au_scale, *au_rate); |
|
|
|
|
*au_scale /= gcd; |
|
|
|
|