From ce9e31655e5b8f8db3bb4f13f436fc836062a514 Mon Sep 17 00:00:00 2001 From: Zohar Kelrich Date: Sun, 24 Jul 2011 11:13:50 +0300 Subject: [PATCH] mpegts: Mark corrupted packets Signed-off-by: Zohar Kelrich Signed-off-by: Luca Barbato --- libavformat/mpegts.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c index f3b76aa264..d4688aebfd 100644 --- a/libavformat/mpegts.c +++ b/libavformat/mpegts.c @@ -164,6 +164,7 @@ typedef struct PESContext { enum MpegTSState state; /* used to get the format */ int data_index; + int flags; /**< copied to the AVPacket flags */ int total_size; int pes_header_size; int extended_stream_id; @@ -635,12 +636,14 @@ static void new_pes_packet(PESContext *pes, AVPacket *pkt) pkt->dts = pes->dts; /* store position of first TS packet of this PES packet */ pkt->pos = pes->ts_packet_pos; + pkt->flags = pes->flags; /* reset pts values */ pes->pts = AV_NOPTS_VALUE; pes->dts = AV_NOPTS_VALUE; pes->buffer = NULL; pes->data_index = 0; + pes->flags = 0; } /* return non zero if a packet could be constructed */ @@ -808,6 +811,7 @@ static int mpegts_push_data(MpegTSFilter *filter, // pes packet size is < ts size packet and pes data is padded with 0xff // not sure if this is legal in ts but see issue #2392 buf_size = pes->total_size; + pes->flags |= AV_PKT_FLAG_CORRUPT; } memcpy(pes->buffer+pes->data_index, p, buf_size); pes->data_index += buf_size; @@ -1283,6 +1287,13 @@ static int handle_packet(MpegTSContext *ts, const uint8_t *packet) || expected_cc == cc; tss->last_cc = cc; + if (!cc_ok) { + av_log(NULL, AV_LOG_WARNING, "Continuity Check Failed\n"); + if(tss->type == MPEGTS_PES) { + PESContext *pc = tss->u.pes_filter.opaque; + pc->flags |= AV_PKT_FLAG_CORRUPT; + } + } if (!has_payload) return 0; -- 2.11.0