riffenc: do not fall back on AVCodecContext.frame_size for MP3
It will not be set unless the codec context is used as the encoding context, which is discouraged. For MP2, av_get_audio_frame_duration() will already set the frame size properly. For MP3, set the frame size explicitly.
This commit is contained in:
parent
91e8d2eb1f
commit
56dc46a189
@ -63,8 +63,6 @@ int ff_put_wav_header(AVIOContext *pb, AVCodecContext *enc)
|
|||||||
* fall back on using AVCodecContext.frame_size, which is not as reliable
|
* fall back on using AVCodecContext.frame_size, which is not as reliable
|
||||||
* for indicating packet duration. */
|
* for indicating packet duration. */
|
||||||
frame_size = av_get_audio_frame_duration(enc, enc->block_align);
|
frame_size = av_get_audio_frame_duration(enc, enc->block_align);
|
||||||
if (!frame_size)
|
|
||||||
frame_size = enc->frame_size;
|
|
||||||
|
|
||||||
waveformatextensible = (enc->channels > 2 && enc->channel_layout) ||
|
waveformatextensible = (enc->channels > 2 && enc->channel_layout) ||
|
||||||
enc->sample_rate > 48000 ||
|
enc->sample_rate > 48000 ||
|
||||||
@ -96,12 +94,10 @@ int ff_put_wav_header(AVIOContext *pb, AVCodecContext *enc)
|
|||||||
enc->bits_per_coded_sample, bps);
|
enc->bits_per_coded_sample, bps);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (enc->codec_id == AV_CODEC_ID_MP2 ||
|
if (enc->codec_id == AV_CODEC_ID_MP2) {
|
||||||
enc->codec_id == AV_CODEC_ID_MP3) {
|
|
||||||
/* This is wrong, but it seems many demuxers do not work if this
|
|
||||||
* is set correctly. */
|
|
||||||
blkalign = frame_size;
|
blkalign = frame_size;
|
||||||
// blkalign = 144 * enc->bit_rate/enc->sample_rate;
|
} else if (enc->codec_id == AV_CODEC_ID_MP3) {
|
||||||
|
blkalign = 576 * (enc->sample_rate <= 24000 ? 1 : 2);
|
||||||
} else if (enc->codec_id == AV_CODEC_ID_AC3) {
|
} else if (enc->codec_id == AV_CODEC_ID_AC3) {
|
||||||
blkalign = 3840; /* maximum bytes per frame */
|
blkalign = 3840; /* maximum bytes per frame */
|
||||||
} else if (enc->block_align != 0) { /* specified by the codec */
|
} else if (enc->block_align != 0) { /* specified by the codec */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user