diff options
author | Zohar Kelrich <lumimies@gmail.com> | 2011-07-24 11:13:50 +0300 |
---|---|---|
committer | Luca Barbato <lu_zero@gentoo.org> | 2011-08-02 02:43:22 +0200 |
commit | ce9e31655e5b8f8db3bb4f13f436fc836062a514 (patch) | |
tree | 09e6700d741f0dc232ba924c7022e38671f36aa0 /libavformat | |
parent | c64f80b0e85ad138fca300f05278263bd713d27a (diff) | |
download | ffmpeg-ce9e31655e5b8f8db3bb4f13f436fc836062a514.tar.gz |
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')
-rw-r--r-- | libavformat/mpegts.c | 11 |
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; |