correct pcm in flv handling
Originally committed as revision 3968 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
58aa2b1d35
commit
923bd441fe
@ -60,7 +60,7 @@ static int flv_read_header(AVFormatContext *s,
|
|||||||
static int flv_read_packet(AVFormatContext *s, AVPacket *pkt)
|
static int flv_read_packet(AVFormatContext *s, AVPacket *pkt)
|
||||||
{
|
{
|
||||||
int ret, i, type, size, pts, flags, is_audio;
|
int ret, i, type, size, pts, flags, is_audio;
|
||||||
AVStream *st;
|
AVStream *st = NULL;
|
||||||
|
|
||||||
for(;;){
|
for(;;){
|
||||||
url_fskip(&s->pb, 4); /* size of previous packet */
|
url_fskip(&s->pb, 4); /* size of previous packet */
|
||||||
@ -122,7 +122,12 @@ static int flv_read_packet(AVFormatContext *s, AVPacket *pkt)
|
|||||||
else
|
else
|
||||||
st->codec.sample_rate = (44100<<((flags>>2)&3))>>3;
|
st->codec.sample_rate = (44100<<((flags>>2)&3))>>3;
|
||||||
switch(flags >> 4){/* 0: uncompressed 1: ADPCM 2: mp3 5: Nellymoser 8kHz mono 6: Nellymoser*/
|
switch(flags >> 4){/* 0: uncompressed 1: ADPCM 2: mp3 5: Nellymoser 8kHz mono 6: Nellymoser*/
|
||||||
|
case 0: if (flags&2) st->codec.codec_id = CODEC_ID_PCM_S16BE;
|
||||||
|
else st->codec.codec_id = CODEC_ID_PCM_S8; break;
|
||||||
case 2: st->codec.codec_id = CODEC_ID_MP3; break;
|
case 2: st->codec.codec_id = CODEC_ID_MP3; break;
|
||||||
|
// this is not listed at FLV but at SWF, strange...
|
||||||
|
case 3: if (flags&2) st->codec.codec_id = CODEC_ID_PCM_S16LE;
|
||||||
|
else st->codec.codec_id = CODEC_ID_PCM_S8; break;
|
||||||
default:
|
default:
|
||||||
st->codec.codec_tag= (flags >> 4);
|
st->codec.codec_tag= (flags >> 4);
|
||||||
}
|
}
|
||||||
|
@ -35,7 +35,7 @@ static void put_be24(ByteIOContext *pb, int value)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int get_audio_flags(AVCodecContext *enc){
|
static int get_audio_flags(AVCodecContext *enc){
|
||||||
int flags = 0x02;
|
int flags = 0;
|
||||||
|
|
||||||
switch (enc->sample_rate) {
|
switch (enc->sample_rate) {
|
||||||
case 44100:
|
case 44100:
|
||||||
@ -61,8 +61,16 @@ static int get_audio_flags(AVCodecContext *enc){
|
|||||||
|
|
||||||
switch(enc->codec_id){
|
switch(enc->codec_id){
|
||||||
case CODEC_ID_MP3:
|
case CODEC_ID_MP3:
|
||||||
flags |= 0x20;
|
flags |= 0x20 | 0x2;
|
||||||
break;
|
break;
|
||||||
|
case CODEC_ID_PCM_S8:
|
||||||
|
break;
|
||||||
|
case CODEC_ID_PCM_S16BE:
|
||||||
|
flags |= 0x60 | 0x2;
|
||||||
|
break;
|
||||||
|
case CODEC_ID_PCM_S16LE:
|
||||||
|
flags |= 0x2;
|
||||||
|
break;
|
||||||
case 0:
|
case 0:
|
||||||
flags |= enc->codec_tag<<4;
|
flags |= enc->codec_tag<<4;
|
||||||
break;
|
break;
|
||||||
@ -155,8 +163,8 @@ static int flv_write_packet(AVFormatContext *s, AVPacket *pkt)
|
|||||||
put_be32(pb,flv->reserved);
|
put_be32(pb,flv->reserved);
|
||||||
put_byte(pb,flags);
|
put_byte(pb,flags);
|
||||||
put_buffer(pb, pkt->data, size);
|
put_buffer(pb, pkt->data, size);
|
||||||
put_be32(pb,size+1+11); // reserved
|
put_be32(pb,size+1+11); // previous tag size
|
||||||
|
|
||||||
put_flush_packet(pb);
|
put_flush_packet(pb);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user