[Ffmpeg-cvslog] CVS: ffmpeg/libavformat flvdec.c,1.20,1.21
Michael Niedermayer CVS
michael
Tue Jul 19 16:26:44 CEST 2005
- Previous message: [Ffmpeg-cvslog] CVS: ffmpeg/libavcodec avcodec.h,1.409,1.410
- Next message: [Ffmpeg-cvslog] CVS: ffmpeg/libavformat flvenc.c, 1.17, 1.18 flvdec.c, 1.21, 1.22 avio.h, 1.20, 1.21 aviobuf.c, 1.28, 1.29 mov.c, 1.89, 1.90
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Update of /cvsroot/ffmpeg/ffmpeg/libavformat
In directory mail:/var2/tmp/cvs-serv15992
Modified Files:
flvdec.c
Log Message:
extract duration if available
Index: flvdec.c
===================================================================
RCS file: /cvsroot/ffmpeg/ffmpeg/libavformat/flvdec.c,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -d -r1.20 -r1.21
--- flvdec.c 17 Jul 2005 22:24:35 -0000 1.20
+++ flvdec.c 19 Jul 2005 14:26:41 -0000 1.21
@@ -58,7 +58,7 @@
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, next;
AVStream *st = NULL;
for(;;){
@@ -74,19 +74,59 @@
if(size == 0)
continue;
-
+
+ next= size + url_ftell(&s->pb);
+
if (type == 8) {
is_audio=1;
flags = get_byte(&s->pb);
- size--;
} else if (type == 9) {
is_audio=0;
flags = get_byte(&s->pb);
- size--;
+ } else if (type == 18 && size > 13+1+4) {
+ url_fskip(&s->pb, 13); //onMetaData blah
+ if(get_byte(&s->pb) == 8){
+ url_fskip(&s->pb, 4);
+ }
+ while(url_ftell(&s->pb) + 5 < next){
+ char tmp[128];
+ int type, len;
+ double d= 0;
+
+ len= get_be16(&s->pb);
+ if(len >= sizeof(tmp) || !len)
+ break;
+ get_buffer(&s->pb, tmp, len);
+ tmp[len]=0;
+
+ type= get_byte(&s->pb);
+ if(type==0){
+ d= av_int2dbl(get_be64(&s->pb));
+ }else if(type==2){
+ len= get_be16(&s->pb);
+ if(len >= sizeof(tmp))
+ break;
+ url_fskip(&s->pb, len);
+ }else if(type==8){
+ //array
+ break;
+ }else if(type==11){
+ d= av_int2dbl(get_be64(&s->pb));
+ get_be16(&s->pb);
+ }
+
+ if(!strcmp(tmp, "duration")){
+ s->duration = d*AV_TIME_BASE;
+ }else if(!strcmp(tmp, "videodatarate")){
+ }else if(!strcmp(tmp, "audiodatarate")){
+ }
+ }
+ url_fseek(&s->pb, next, SEEK_SET);
+ continue;
} else {
/* skip packet */
av_log(s, AV_LOG_ERROR, "skipping flv packet: type %d, size %d, flags %d\n", type, size, flags);
- url_fskip(&s->pb, size);
+ url_fseek(&s->pb, next, SEEK_SET);
continue;
}
@@ -109,7 +149,7 @@
||(st->discard >= AVDISCARD_BIDIR && ((flags >> 4)==3 && !is_audio))
|| st->discard >= AVDISCARD_ALL
){
- url_fskip(&s->pb, size);
+ url_fseek(&s->pb, next, SEEK_SET);
continue;
}
break;
@@ -147,7 +187,7 @@
}
}
- ret= av_get_packet(&s->pb, pkt, size);
+ ret= av_get_packet(&s->pb, pkt, size - 1);
if (ret <= 0) {
return AVERROR_IO;
}
- Previous message: [Ffmpeg-cvslog] CVS: ffmpeg/libavcodec avcodec.h,1.409,1.410
- Next message: [Ffmpeg-cvslog] CVS: ffmpeg/libavformat flvenc.c, 1.17, 1.18 flvdec.c, 1.21, 1.22 avio.h, 1.20, 1.21 aviobuf.c, 1.28, 1.29 mov.c, 1.89, 1.90
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the ffmpeg-cvslog
mailing list