Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
parsers: mpeg2video - implement packet backlog
  • Loading branch information
perexg committed Feb 17, 2016
1 parent cdb8826 commit e3c6b41
Showing 1 changed file with 22 additions and 5 deletions.
27 changes: 22 additions & 5 deletions src/parsers/parsers.c
Expand Up @@ -982,6 +982,11 @@ parse_pes_header(service_t *t, elementary_stream_t *st,
return -1;
}

/**
*
* MPEG2 video parser
*
*/

/**
* MPEG2VIDEO frame duration table (in 90kHz clock domain)
Expand Down Expand Up @@ -1143,7 +1148,6 @@ parser_global_data_move(elementary_stream_t *st, const uint8_t *data, size_t len
st->es_buf.sb_ptr -= len;
}


/**
* MPEG2VIDEO specific reassembly
*
Expand Down Expand Up @@ -1210,6 +1214,8 @@ parse_mpeg2video(service_t *t, elementary_stream_t *st, size_t len,
if(parse_mpeg2video_seq_start(t, st, &bs) != PARSER_APPEND)
return PARSER_RESET;
parser_global_data_move(st, buf, len);
if (!st->es_priv)
st->es_priv = malloc(1); /* starting mark */
}
return PARSER_DROP;

Expand Down Expand Up @@ -1264,7 +1270,12 @@ parse_mpeg2video(service_t *t, elementary_stream_t *st, size_t len,
}
pkt->pkt_duration = st->es_frame_duration;

parser_deliver(t, st, pkt);
if (st->es_priv) {
if (!TAILQ_EMPTY(&st->es_backlog))
parser_do_backlog(t, st, NULL, pkt ? pkt->pkt_meta : NULL);
parser_deliver(t, st, pkt);
} else if (config.parser_backlog)
parser_backlog(t, st, pkt);
st->es_curpkt = NULL;

return PARSER_RESET;
Expand All @@ -1290,7 +1301,9 @@ parse_mpeg2video(service_t *t, elementary_stream_t *st, size_t len,


/**
*
* H.264 (AVC) parser
*
*/
static void
parse_h264_backlog(service_t *t, elementary_stream_t *st, th_pkt_t *pkt)
Expand Down Expand Up @@ -1514,7 +1527,9 @@ parse_h264(service_t *t, elementary_stream_t *st, size_t len,
}

/**
*
* H.265 (HEVC) parser
*
*/
static int
parse_hevc(service_t *t, elementary_stream_t *st, size_t len,
Expand Down Expand Up @@ -1900,9 +1915,10 @@ parser_do_backlog(service_t *t, elementary_stream_t *st,
size_t metalen;

tvhtrace("parser",
"pkt bcklog %2d %-12s - backlog flush start -",
"pkt bcklog %2d %-12s - backlog flush start - (meta %ld)",
st->es_index,
streaming_component_type2txt(st->es_type));
streaming_component_type2txt(st->es_type),
meta ? (long)pktbuf_len(meta) : -1);
TAILQ_FOREACH(sm, &st->es_backlog, sm_link) {
pkt = sm->sm_data;
if (pkt->pkt_meta) {
Expand Down Expand Up @@ -1945,7 +1961,8 @@ parser_do_backlog(service_t *t, elementary_stream_t *st,
meta = NULL;
}

pkt_cb(t, st, pkt);
if (pkt_cb)
pkt_cb(t, st, pkt);

if (absdts == PTS_UNSET) {
absdts = pkt->pkt_dts;
Expand Down

0 comments on commit e3c6b41

Please sign in to comment.