Move parsing of MPEG-PES timestamp to mpeg.h (as an inline function) so it
authorIvo van Poorten <ivop@euronet.nl>
Mon, 7 Jan 2008 23:32:57 +0000 (23:32 +0000)
committerIvo van Poorten <ivop@euronet.nl>
Mon, 7 Jan 2008 23:32:57 +0000 (23:32 +0000)
can easily be reused by other demuxers for formats that encapsulate MPEG-PES.

Originally committed as revision 11451 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavformat/mpeg.c
libavformat/mpeg.h

index 3101c2a..d044d07 100644 (file)
@@ -120,17 +120,12 @@ static int mpegps_read_header(AVFormatContext *s,
 
 static int64_t get_pts(ByteIOContext *pb, int c)
 {
-    int64_t pts;
-    int val;
-
-    if (c < 0)
-        c = get_byte(pb);
-    pts = (int64_t)(c & 0x0e) << 29;
-    val = get_be16(pb);
-    pts |= (int64_t)(val >> 1) << 15;
-    val = get_be16(pb);
-    pts |= (int64_t)(val >> 1);
-    return pts;
+    uint8_t buf[5];
+
+    buf[0] = c<0 ? get_byte(pb) : c;
+    get_buffer(pb, buf+1, 4);
+
+    return ff_parse_pes_pts(buf);
 }
 
 static int find_next_start_code(ByteIOContext *pb, int *size_ptr,
index 053b159..9283101 100644 (file)
 
 static const int lpcm_freq_tab[4] = { 48000, 96000, 44100, 32000 };
 
+/**
+ * Parse MPEG-PES five-byte timestamp
+ */
+static inline int64_t ff_parse_pes_pts(uint8_t *buf) {
+    return (int64_t)(*buf & 0x0e) << 29 |
+            (AV_RB16(buf+1) >> 1) << 15 |
+             AV_RB16(buf+3) >> 1;
+}
+
 #endif /* FFMPEG_MPEG_H */