movdec: Set frame_size for AMR

Earlier, sc->samples_per_frame was used for setting the frame size,
but all files don't have that set properly. The frame size is a
known constant for these codecs.

If frame_size isn't set, the mov/3gp muxer refuses to mux it.

This fixes stream copy of audio from
https://roundup.libav.org/file1248/Video_With_AMR-NB_Audio.3gp
to another 3gp file (roundup issue 2468).

Signed-off-by: Martin Storsjö <martin@martin.st>
This commit is contained in:
Carl Eugen Hoyos 2011-11-03 20:20:58 +01:00 committed by Martin Storsjö
parent 717401aff2
commit 237f13290b
1 changed files with 8 additions and 6 deletions

View File

@ -1291,14 +1291,16 @@ int ff_mov_read_stsd_entries(MOVContext *c, AVIOContext *pb, int entries)
st->codec->channels= 1; /* really needed */
break;
case CODEC_ID_AMR_NB:
case CODEC_ID_AMR_WB:
st->codec->frame_size= sc->samples_per_frame;
st->codec->channels= 1; /* really needed */
/* force sample rate for amr, stsd in 3gp does not store sample rate */
if (st->codec->codec_id == CODEC_ID_AMR_NB)
st->codec->sample_rate = 8000;
else if (st->codec->codec_id == CODEC_ID_AMR_WB)
st->codec->sample_rate = 16000;
st->codec->sample_rate = 8000;
/* force frame_size, too, samples_per_frame isn't always set properly */
st->codec->frame_size = 160;
break;
case CODEC_ID_AMR_WB:
st->codec->channels = 1;
st->codec->sample_rate = 16000;
st->codec->frame_size = 320;
break;
case CODEC_ID_MP2:
case CODEC_ID_MP3: