From bb01a3f021d742b8b9615ec26c12a49d464b0053 Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Wed, 10 Mar 2004 03:45:14 +0000 Subject: guess framerate Originally committed as revision 2866 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavformat/flvdec.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) (limited to 'libavformat/flvdec.c') diff --git a/libavformat/flvdec.c b/libavformat/flvdec.c index 29772f75bc..560cb2860b 100644 --- a/libavformat/flvdec.c +++ b/libavformat/flvdec.c @@ -40,11 +40,15 @@ static int flv_probe(AVProbeData *p) return 0; } +#define FRAME_RATE_UNKNOWN 31415 //yes i know its beatifull + static int flv_read_header(AVFormatContext *s, AVFormatParameters *ap) { int offset, flags; AVStream *st; + + s->ctx_flags |= AVFMTCTX_NOHEADER; //ok we have a header but theres no fps, codec type, sample_rate, ... av_set_pts_info(s, 24, 1, 1000); /* 24 bit pts in ms */ @@ -57,8 +61,9 @@ static int flv_read_header(AVFormatContext *s, return AVERROR_NOMEM; st->codec.codec_type = CODEC_TYPE_VIDEO; st->codec.codec_id = CODEC_ID_FLV1; - st->codec.frame_rate= ap->frame_rate; - st->codec.frame_rate_base= ap->frame_rate_base; + st->codec.frame_rate= FRAME_RATE_UNKNOWN; +// st->codec.frame_rate= ap->frame_rate; +// st->codec.frame_rate_base= ap->frame_rate_base; } if ((flags & 4)) { @@ -118,11 +123,17 @@ static int flv_read_packet(AVFormatContext *s, AVPacket *pkt) } goto skip; found: - if(type == 8){ + if(type == 8 && st->codec.sample_rate == 0){ st->codec.channels = (flags&1)+1; st->codec.sample_rate = (44100<<((flags>>2)&3))>>3; } + //guess the frame rate + if(type==9 && st->codec.frame_rate == FRAME_RATE_UNKNOWN && pts){ + st->codec.frame_rate_base=1; + st->codec.frame_rate= (1000 + pts/2)/pts; + } + if (av_new_packet(pkt, size) < 0) return -EIO; -- cgit v1.2.3