summaryrefslogtreecommitdiff
path: root/libavformat/mpegts.c
diff options
context:
space:
mode:
authorZohar Kelrich <lumimies@gmail.com>2011-07-24 11:13:50 +0300
committerLuca Barbato <lu_zero@gentoo.org>2011-08-02 02:43:22 +0200
commitce9e31655e5b8f8db3bb4f13f436fc836062a514 (patch)
tree09e6700d741f0dc232ba924c7022e38671f36aa0 /libavformat/mpegts.c
parentc64f80b0e85ad138fca300f05278263bd713d27a (diff)
mpegts: Mark corrupted packets
Signed-off-by: Zohar Kelrich <lumimies@gmail.com> Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
Diffstat (limited to 'libavformat/mpegts.c')
-rw-r--r--libavformat/mpegts.c11
1 files changed, 11 insertions, 0 deletions
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;