[FFmpeg-devel] [PATCH] fix reading first mpegps packet
Arne de Bruijn
mail at arnedebruijn.nl
Sat Sep 17 14:59:00 CEST 2011
Hi,
The first packet of mpeg pes files (starting with 00 00 01 e0) is ignored by
ffmpeg because the sofdec-detection in mpegps_read_header eats the first
byte. This patch adds a seek to prevent this problem (apparently the
existing code tries to solve this by modifying m->header_state but this
doesn't help since m->header_state is overwritten at the start of
mpegps_read_pes_header).
diff --git a/libavformat/mpeg.c b/libavformat/mpeg.c
index dc5d264..115c2e9 100644
--- a/libavformat/mpeg.c
+++ b/libavformat/mpeg.c
@@ -106,6 +106,7 @@ static int mpegps_read_header(AVFormatContext *s,
MpegDemuxContext *m = s->priv_data;
const char *sofdec = "Sofdec";
int v, i = 0;
+ int64_t last_pos = avio_tell(s->pb);
m->header_state = 0xff;
s->ctx_flags |= AVFMTCTX_NOHEADER;
@@ -119,6 +120,9 @@ static int mpegps_read_header(AVFormatContext *s,
m->sofdec = (m->sofdec == 6) ? 1 : 0;
+ if (!m->sofdec)
+ avio_seek(s->pb, last_pos, SEEK_SET);
+
/* no need to do more */
return 0;
}
More information about the ffmpeg-devel
mailing list