aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2015-04-29 22:24:09 +0200
committerMichael Niedermayer <michaelni@gmx.at>2015-05-19 20:57:34 +0200
commit3d296c0ec1d517260a658f02b5404def689918ab (patch)
tree72ca3fc1e652d06ad07049b102b157b55e07ad04
parent52242a387b36fc05bf5fa65c4905927543b43ba7 (diff)
downloadffmpeg-3d296c0ec1d517260a658f02b5404def689918ab.tar.gz
avformat/mpegts: Factorize version checking code out
Signed-off-by: Michael Niedermayer <michaelni@gmx.at> (cherry picked from commit 4e8d01f20ce82b49f47c704a461c5d30866affaf) Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r--libavformat/mpegts.c22
1 files changed, 14 insertions, 8 deletions
diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c
index 455615ff2b..62ecd64559 100644
--- a/libavformat/mpegts.c
+++ b/libavformat/mpegts.c
@@ -568,6 +568,16 @@ typedef struct SectionHeader {
uint8_t last_sec_num;
} SectionHeader;
+static int skip_identical(const SectionHeader *h, MpegTSSectionFilter *tssf)
+{
+ if (h->version == tssf->last_ver)
+ return 1;
+
+ tssf->last_ver = h->version;
+
+ return 0;
+}
+
static inline int get8(const uint8_t **pp, const uint8_t *p_end)
{
const uint8_t *p;
@@ -1455,9 +1465,8 @@ static void m4sl_cb(MpegTSFilter *filter, const uint8_t *section,
return;
if (h.tid != M4OD_TID)
return;
- if (h.version == tssf->last_ver)
+ if (skip_identical(&h, tssf))
return;
- tssf->last_ver = h.version;
mp4_read_od(s, p, (unsigned) (p_end - p), mp4_descr, &mp4_descr_count,
MAX_MP4_DESCR_COUNT);
@@ -1749,9 +1758,8 @@ static void pmt_cb(MpegTSFilter *filter, const uint8_t *section, int section_len
p = section;
if (parse_section_header(h, &p, p_end) < 0)
return;
- if (h->version == tssf->last_ver)
+ if (skip_identical(h, tssf))
return;
- tssf->last_ver = h->version;
av_dlog(ts->stream, "sid=0x%x sec_num=%d/%d\n",
h->id, h->sec_num, h->last_sec_num);
@@ -1917,9 +1925,8 @@ static void pat_cb(MpegTSFilter *filter, const uint8_t *section, int section_len
if (ts->skip_changes)
return;
- if (h->version == tssf->last_ver)
+ if (skip_identical(h, tssf))
return;
- tssf->last_ver = h->version;
ts->stream->ts_id = h->id;
clear_programs(ts);
@@ -1990,9 +1997,8 @@ static void sdt_cb(MpegTSFilter *filter, const uint8_t *section, int section_len
return;
if (ts->skip_changes)
return;
- if (h->version == tssf->last_ver)
+ if (skip_identical(h, tssf))
return;
- tssf->last_ver = h->version;
onid = get16(&p, p_end);
if (onid < 0)