Skip to content
Snippets Groups Projects
Commit b2984add authored by Baptiste Coudurier's avatar Baptiste Coudurier
Browse files

do not parse full header for private streams

Originally committed as revision 19075 to svn://svn.ffmpeg.org/ffmpeg/trunk
parent 617c4616
No related branches found
No related tags found
No related merge requests found
...@@ -128,13 +128,15 @@ struct MpegTSContext { ...@@ -128,13 +128,15 @@ struct MpegTSContext {
enum MpegTSState { enum MpegTSState {
MPEGTS_HEADER = 0, MPEGTS_HEADER = 0,
MPEGTS_PESHEADER,
MPEGTS_PESHEADER_FILL, MPEGTS_PESHEADER_FILL,
MPEGTS_PAYLOAD, MPEGTS_PAYLOAD,
MPEGTS_SKIP, MPEGTS_SKIP,
}; };
/* enough for PES header + length */ /* enough for PES header + length */
#define PES_START_SIZE 9 #define PES_START_SIZE 6
#define PES_HEADER_SIZE 9
#define MAX_PES_HEADER_SIZE (9 + 255) #define MAX_PES_HEADER_SIZE (9 + 255)
struct PESContext { struct PESContext {
...@@ -951,8 +953,7 @@ static int mpegts_push_data(MpegTSFilter *filter, ...@@ -951,8 +953,7 @@ static int mpegts_push_data(MpegTSFilter *filter,
code != 0x1f0 && code != 0x1f1 && /* ECM, EMM */ code != 0x1f0 && code != 0x1f1 && /* ECM, EMM */
code != 0x1ff && code != 0x1f2 && /* program_stream_directory, DSMCC_stream */ code != 0x1ff && code != 0x1f2 && /* program_stream_directory, DSMCC_stream */
code != 0x1f8) { /* ITU-T Rec. H.222.1 type E stream */ code != 0x1f8) { /* ITU-T Rec. H.222.1 type E stream */
pes->state = MPEGTS_PESHEADER_FILL; pes->state = MPEGTS_PESHEADER;
pes->pes_header_size = pes->header[8] + 9;
} else { } else {
pes->state = MPEGTS_PAYLOAD; pes->state = MPEGTS_PAYLOAD;
pes->data_index = 0; pes->data_index = 0;
...@@ -968,6 +969,21 @@ static int mpegts_push_data(MpegTSFilter *filter, ...@@ -968,6 +969,21 @@ static int mpegts_push_data(MpegTSFilter *filter,
break; break;
/**********************************************/ /**********************************************/
/* PES packing parsing */ /* PES packing parsing */
case MPEGTS_PESHEADER:
len = PES_HEADER_SIZE - pes->data_index;
if (len < 0)
return -1;
if (len > buf_size)
len = buf_size;
memcpy(pes->header + pes->data_index, p, len);
pes->data_index += len;
p += len;
buf_size -= len;
if (pes->data_index == PES_HEADER_SIZE) {
pes->pes_header_size = pes->header[8] + 9;
pes->state = MPEGTS_PESHEADER_FILL;
}
break;
case MPEGTS_PESHEADER_FILL: case MPEGTS_PESHEADER_FILL:
len = pes->pes_header_size - pes->data_index; len = pes->pes_header_size - pes->data_index;
if (len < 0) if (len < 0)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment