From 66e9e302394553fca0ebb6d25bb211cbdb4887f0 Mon Sep 17 00:00:00 2001 From: Ivo van Poorten Date: Mon, 7 Jan 2008 23:32:57 +0000 Subject: [PATCH] Move parsing of MPEG-PES timestamp to mpeg.h (as an inline function) so it 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 | 15 +++++---------- libavformat/mpeg.h | 9 +++++++++ 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/libavformat/mpeg.c b/libavformat/mpeg.c index 3101c2a30f..d044d07f41 100644 --- a/libavformat/mpeg.c +++ b/libavformat/mpeg.c @@ -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; + uint8_t buf[5]; - 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; + 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, diff --git a/libavformat/mpeg.h b/libavformat/mpeg.h index 053b1590ea..9283101d10 100644 --- a/libavformat/mpeg.h +++ b/libavformat/mpeg.h @@ -57,4 +57,13 @@ 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 */