[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