diff --git a/libavformat/flvenc.c b/libavformat/flvenc.c index 3bef887b0e..7f86036e73 100644 --- a/libavformat/flvenc.c +++ b/libavformat/flvenc.c @@ -34,6 +34,45 @@ static void put_be24(ByteIOContext *pb, int value) put_byte(pb, (value>> 0) & 0xFF ); } +static int get_audio_flags(AVCodecContext *enc){ + int flags = 0x02; + + switch (enc->sample_rate) { + case 44100: + flags |= 0x0C; + break; + case 22050: + flags |= 0x08; + break; + case 11025: + flags |= 0x04; + break; + case 8000: //nellymoser only + case 5512: //not mp3 + flags |= 0x00; + break; + default: + return -1; + } + + if (enc->channels > 1) { + flags |= 0x01; + } + + switch(enc->codec_id){ + case CODEC_ID_MP3: + flags |= 0x20; + break; + case 0: + flags |= enc->codec_tag<<4; + break; + default: + return -1; + } + + return flags; +} + static int flv_write_header(AVFormatContext *s) { ByteIOContext *pb = &s->pb; @@ -60,6 +99,8 @@ static int flv_write_header(AVFormatContext *s) put_be32(pb,11); // size flv->reserved=5; } + if(enc->codec_type == CODEC_TYPE_AUDIO && get_audio_flags(enc)<0) + return -1; } return 0; @@ -99,41 +140,8 @@ static int flv_write_packet(AVFormatContext *s, AVPacket *pkt) flv->hasVideo = 1; } else { assert(enc->codec_type == CODEC_TYPE_AUDIO); - flags = 0x02; - - switch (enc->sample_rate) { - case 44100: - flags |= 0x0C; - break; - case 22050: - flags |= 0x08; - break; - case 11025: - flags |= 0x04; - break; - case 8000: //nellymoser only - case 5512: //not mp3 - flags |= 0x00; - break; - default: - assert(0); - } - - if (enc->channels > 1) { - flags |= 0x01; - } + flags = get_audio_flags(enc); - switch(enc->codec_id){ - case CODEC_ID_MP3: - flags |= 0x20; - break; - case 0: - flags |= enc->codec_tag<<4; - break; - default: - assert(0); - } - assert(size); put_byte(pb, 8);