pct = read_bits(bs, 3);
if(pct < PKT_I_FRAME || pct > PKT_B_FRAME)
- return 1; /* Illegal picture_coding_type */
+ return PARSER_RESET; /* Illegal picture_coding_type */
*frametype = pct;
int width, height, aspect, duration;
if(bs->len < 61)
- return 1;
+ return PARSER_RESET;
width = read_bits(bs, 12);
height = read_bits(bs, 12);
#endif
parser_set_stream_vparam(st, width, height, duration);
- return 0;
+ return PARSER_APPEND;
}
const uint8_t *buf = st->es_buf.sb_data + sc_offset;
bitstream_t bs;
int frametype;
+ th_pkt_t *pkt;
if(next_startcode == 0x1e0)
return PARSER_HEADER;
return PARSER_RESET;
parse_pes_header(t, st, buf + 6, len - 6);
- return 1;
+ return PARSER_RESET;
case 0x00:
/* Picture start code */
if(st->es_curpkt != NULL)
pkt_ref_dec(st->es_curpkt);
- st->es_curpkt = pkt_alloc(NULL, 0, st->es_curpts, st->es_curdts);
- st->es_curpkt->pkt_frametype = frametype;
- st->es_curpkt->pkt_duration = st->es_frame_duration;
- st->es_curpkt->pkt_commercial = t->s_tt_commercial_advice;
+ pkt = pkt_alloc(NULL, 0, st->es_curpts, st->es_curdts);
+ pkt->pkt_frametype = frametype;
+ pkt->pkt_duration = st->es_frame_duration;
+ pkt->pkt_commercial = t->s_tt_commercial_advice;
+
+ st->es_curpkt = pkt;
/* If we know the frame duration, increase DTS accordingly */
if(st->es_curdts != PTS_UNSET)
case 0xb3:
/* Sequence start code */
if(!st->es_buf.sb_err) {
- if(parse_mpeg2video_seq_start(t, st, &bs))
+ if(parse_mpeg2video_seq_start(t, st, &bs) != PARSER_APPEND)
return PARSER_RESET;
parser_global_data_move(st, buf, len);
}
case 0xb5:
if(len < 5)
- return 1;
+ return PARSER_RESET;
switch(buf[4] >> 4) {
case 0x1:
// Sequence Extension
size_t metalen = 0;
if(pkt == NULL) {
/* no packet, may've been discarded by sanity checks here */
- return 1;
+ return PARSER_RESET;
}
if(st->es_global_data) {