mirror of https://git.ffmpeg.org/ffmpeg.git
cbr audio muxing fix
Originally committed as revision 3661 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
70122f2902
commit
359fa0febc
|
@ -127,6 +127,23 @@ static int pcm_encode_init(AVCodecContext *avctx)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
switch(avctx->codec->id) {
|
||||||
|
case CODEC_ID_PCM_S16LE:
|
||||||
|
case CODEC_ID_PCM_S16BE:
|
||||||
|
case CODEC_ID_PCM_U16LE:
|
||||||
|
case CODEC_ID_PCM_U16BE:
|
||||||
|
avctx->block_align = 2 * avctx->channels;
|
||||||
|
break;
|
||||||
|
case CODEC_ID_PCM_S8:
|
||||||
|
case CODEC_ID_PCM_U8:
|
||||||
|
case CODEC_ID_PCM_MULAW:
|
||||||
|
case CODEC_ID_PCM_ALAW:
|
||||||
|
avctx->block_align = avctx->channels;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
avctx->coded_frame= avcodec_alloc_frame();
|
avctx->coded_frame= avcodec_alloc_frame();
|
||||||
avctx->coded_frame->key_frame= 1;
|
avctx->coded_frame->key_frame= 1;
|
||||||
|
|
||||||
|
|
|
@ -251,33 +251,24 @@ void put_bmp_header(ByteIOContext *pb, AVCodecContext *enc, const CodecTag *tags
|
||||||
put_byte(pb, 0);
|
put_byte(pb, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void parse_specific_params(AVCodecContext *stream, int *au_byterate, int *au_ssize, int *au_scale)
|
static void parse_specific_params(AVCodecContext *stream, int *au_rate, int *au_ssize, int *au_scale)
|
||||||
{
|
{
|
||||||
switch(stream->codec_id) {
|
int gcd;
|
||||||
case CODEC_ID_PCM_S16LE:
|
|
||||||
*au_scale = *au_ssize = 2*stream->channels;
|
*au_ssize= stream->block_align;
|
||||||
*au_byterate = *au_ssize * stream->sample_rate;
|
if(stream->frame_size && stream->sample_rate){
|
||||||
break;
|
*au_scale=stream->frame_size;
|
||||||
case CODEC_ID_PCM_U8:
|
*au_rate= stream->sample_rate;
|
||||||
case CODEC_ID_PCM_ALAW:
|
}else if(stream->codec_type == CODEC_TYPE_VIDEO){
|
||||||
case CODEC_ID_PCM_MULAW:
|
*au_scale= stream->frame_rate_base;
|
||||||
*au_scale = *au_ssize = stream->channels;
|
*au_rate = stream->frame_rate;
|
||||||
*au_byterate = *au_ssize * stream->sample_rate;
|
}else{
|
||||||
break;
|
*au_scale= stream->block_align ? stream->block_align*8 : 8;
|
||||||
case CODEC_ID_MP2:
|
*au_rate = stream->bit_rate;
|
||||||
*au_ssize = 1;
|
|
||||||
*au_scale = 1;
|
|
||||||
*au_byterate = stream->bit_rate / 8;
|
|
||||||
case CODEC_ID_MP3:
|
|
||||||
*au_ssize = 1;
|
|
||||||
*au_scale = 1;
|
|
||||||
*au_byterate = stream->bit_rate / 8;
|
|
||||||
default:
|
|
||||||
*au_ssize = 1;
|
|
||||||
*au_scale = 1;
|
|
||||||
*au_byterate = stream->bit_rate / 8;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
gcd= ff_gcd(*au_scale, *au_rate);
|
||||||
|
*au_scale /= gcd;
|
||||||
|
*au_rate /= gcd;
|
||||||
}
|
}
|
||||||
|
|
||||||
static offset_t avi_start_new_riff(AVIContext *avi, ByteIOContext *pb,
|
static offset_t avi_start_new_riff(AVIContext *avi, ByteIOContext *pb,
|
||||||
|
@ -595,18 +586,12 @@ static int avi_write_idx1(AVFormatContext *s)
|
||||||
if (avi->frames_hdr_strm[n] != 0) {
|
if (avi->frames_hdr_strm[n] != 0) {
|
||||||
stream = &s->streams[n]->codec;
|
stream = &s->streams[n]->codec;
|
||||||
url_fseek(pb, avi->frames_hdr_strm[n], SEEK_SET);
|
url_fseek(pb, avi->frames_hdr_strm[n], SEEK_SET);
|
||||||
if (stream->codec_type == CODEC_TYPE_VIDEO) {
|
parse_specific_params(stream, &au_byterate, &au_ssize, &au_scale);
|
||||||
put_le32(pb, stream->frame_number);
|
if (au_ssize == 0) {
|
||||||
if (nb_frames < stream->frame_number)
|
put_le32(pb, stream->frame_number);
|
||||||
nb_frames = stream->frame_number;
|
nb_frames += stream->frame_number;
|
||||||
} else {
|
} else {
|
||||||
if (stream->codec_id == CODEC_ID_MP2 || stream->codec_id == CODEC_ID_MP3) {
|
put_le32(pb, avi->audio_strm_length[n] / au_ssize);
|
||||||
put_le32(pb, stream->frame_number);
|
|
||||||
nb_frames += stream->frame_number;
|
|
||||||
} else {
|
|
||||||
parse_specific_params(stream, &au_byterate, &au_ssize, &au_scale);
|
|
||||||
put_le32(pb, avi->audio_strm_length[n] / au_ssize);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -71,7 +71,7 @@ int put_wav_header(ByteIOContext *pb, AVCodecContext *enc)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (enc->codec_id == CODEC_ID_MP2 || enc->codec_id == CODEC_ID_MP3) {
|
if (enc->codec_id == CODEC_ID_MP2 || enc->codec_id == CODEC_ID_MP3) {
|
||||||
blkalign = 1;
|
blkalign = enc->frame_size; //this is wrong, but seems many demuxers dont work if this is set correctly
|
||||||
//blkalign = 144 * enc->bit_rate/enc->sample_rate;
|
//blkalign = 144 * enc->bit_rate/enc->sample_rate;
|
||||||
} else if (enc->block_align != 0) { /* specified by the codec */
|
} else if (enc->block_align != 0) { /* specified by the codec */
|
||||||
blkalign = enc->block_align;
|
blkalign = enc->block_align;
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
ffmpeg regression test
|
ffmpeg regression test
|
||||||
580b53ca26eb2184b928967b8e7d18a7 *./data/b-libav.avi
|
8517e7c83227074b8d632477fda310d5 *./data/b-libav.avi
|
||||||
342282 ./data/b-libav.avi
|
342282 ./data/b-libav.avi
|
||||||
./data/b-libav.avi CRC=001a3415
|
./data/b-libav.avi CRC=001a3415
|
||||||
80f85b6dce1da8310a49bb4607a34f06 *./data/b-libav.asf
|
c83444a0e8ef47b6af1d868d1bb21696 *./data/b-libav.asf
|
||||||
342967 ./data/b-libav.asf
|
342967 ./data/b-libav.asf
|
||||||
./data/b-libav.asf CRC=750f18c7
|
./data/b-libav.asf CRC=750f18c7
|
||||||
1cbf838e659d7fc3d3e33f4187b91f6c *./data/b-libav.rm
|
1cbf838e659d7fc3d3e33f4187b91f6c *./data/b-libav.rm
|
||||||
|
|
Loading…
Reference in New Issue