avc_parse_nal_units_buf(const uint8_t *buf_in, uint8_t **buf, int *size)
{
sbuf_t sb;
+
sbuf_init(&sb);
+
avc_parse_nal_units(&sb, buf_in, *size);
- free(*buf);
*buf = sb.sb_data;
*size = sb.sb_ptr;
return 0;
/* check for h264 start code */
if (RB32(data) == 0x00000001 ||
RB24(data) == 0x000001) {
- uint8_t *buf=NULL, *end, *start;
+ uint8_t *buf, *end, *start;
uint32_t *sps_size_array=0, *pps_size_array=0;
uint32_t pps_count=0,sps_count=0;
uint8_t **sps_array=0, **pps_array=0;
th_pkt_t *
avc_convert_pkt(th_pkt_t *src)
{
- th_pkt_t *pkt = malloc(sizeof(th_pkt_t));
+ sbuf_t payload, headers;
+ th_pkt_t *pkt = malloc(sizeof(*pkt));
+
*pkt = *src;
pkt->pkt_refcount = 1;
pkt->pkt_meta = NULL;
- pkt->pkt_payload = NULL;
+
+ sbuf_init(&payload);
if (src->pkt_meta) {
- sbuf_t headers;
sbuf_init(&headers);
-
isom_write_avcc(&headers, pktbuf_ptr(src->pkt_meta),
- pktbuf_len(src->pkt_meta));
+ pktbuf_len(src->pkt_meta));
pkt->pkt_meta = pktbuf_make(headers.sb_data, headers.sb_ptr);
}
- sbuf_t payload;
- sbuf_init(&payload);
-
if(src->pkt_meta)
avc_parse_nal_units(&payload, pktbuf_ptr(src->pkt_meta),
- pktbuf_len(src->pkt_meta));
+ pktbuf_len(src->pkt_meta));
avc_parse_nal_units(&payload, pktbuf_ptr(src->pkt_payload),
- pktbuf_len(src->pkt_payload));
+ pktbuf_len(src->pkt_payload));
pkt->pkt_payload = pktbuf_make(payload.sb_data, payload.sb_ptr);
return pkt;
if (st->es_incomplete)
return 4;
th_pkt_t *pkt = st->es_curpkt;
- size_t metalen = 0;
if(pkt != NULL) {
if(st->es_global_data) {
pkt->pkt_meta = pktbuf_make(st->es_global_data,
- metalen = st->es_global_data_len);
+ st->es_global_data_len);
st->es_global_data = NULL;
st->es_global_data_len = 0;
}
- if (metalen) {
- pkt->pkt_payload = pktbuf_alloc(NULL, metalen + st->es_buf.sb_ptr - 4);
- memcpy(pktbuf_ptr(pkt->pkt_payload), pktbuf_ptr(pkt->pkt_meta), metalen);
- memcpy(pktbuf_ptr(pkt->pkt_payload) + metalen, st->es_buf.sb_data, st->es_buf.sb_ptr - 4);
- sbuf_reset(&st->es_buf, 16000);
- } else {
- pkt->pkt_payload = pktbuf_make(st->es_buf.sb_data,
- st->es_buf.sb_ptr - 4);
- sbuf_steal_data(&st->es_buf);
- }
-
+ pkt->pkt_payload = pktbuf_make(st->es_buf.sb_data,
+ st->es_buf.sb_ptr - 4);
+ sbuf_steal_data(&st->es_buf);
parser_deliver(t, st, pkt, st->es_buf.sb_err);
st->es_curpkt = NULL;
if (!prch->prch_ts_delta)
goto deliver;
th_pkt_t *pkt = sm->sm_data;
- if (prch->prch_ts_delta == PTS_UNSET) {
+ if (prch->prch_ts_delta == PTS_UNSET)
prch->prch_ts_delta = MAX(0, pkt->pkt_dts - 10000);
- printf("ts delta: %li\n", (long)prch->prch_ts_delta);
- }
/*
* time correction here
*/
dst = prch->prch_timeshift = timeshift_create(dst, timeshift_period);
#endif
+ dst = prch->prch_gh = globalheaders_create(dst);
+
if (profile_sharer_create(prsh, prch, dst))
goto fail;
props.tp_bandwidth = profile_transcode_bandwidth(pro);
strncpy(props.tp_language, pro->pro_language ?: "", 3);
+ dst = prch->prch_gh = globalheaders_create(dst);
+
#if ENABLE_TIMESHIFT
if (timeshift_period > 0)
dst = prch->prch_timeshift = timeshift_create(dst, timeshift_period);
prch->prch_sq.sq_maxsize = qsize;
- prch->prch_gh = globalheaders_create(&prch->prch_sq.sq_st);
-
- r = profile_transcode_work(prch, prch->prch_gh, 0, 0);
+ r = profile_transcode_work(prch, &prch->prch_sq.sq_st, 0, 0);
if (r) {
profile_chain_close(prch);
return r;