From: Jaroslav Kysela Date: Sun, 3 Sep 2017 12:48:56 +0000 (+0200) Subject: profile: fix the transcoded stream sharing X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=2b958d8807d493a378c6ab4cc685d0b59ddda440;p=thirdparty%2Ftvheadend.git profile: fix the transcoded stream sharing --- diff --git a/src/profile.c b/src/profile.c index 2fede2464..fade0c869 100644 --- a/src/profile.c +++ b/src/profile.c @@ -768,6 +768,7 @@ profile_sharer_deliver(profile_chain_t *prch, streaming_message_t *sm) n->pkt_pcr -= prch->prch_ts_delta; sm->sm_data = n; } else { + pkt_trace(LS_PROFILE, pkt, "packet drop (delta %"PRId64")", prch->prch_ts_delta); streaming_msg_free(sm); return; } diff --git a/src/transcoding/transcode/context.c b/src/transcoding/transcode/context.c index 5543defbd..24cd6adf5 100644 --- a/src/transcoding/transcode/context.c +++ b/src/transcoding/transcode/context.c @@ -155,14 +155,18 @@ _context_encode(TVHContext *self, AVFrame *avframe) static int _context_meta(TVHContext *self, AVPacket *avpkt, th_pkt_t *pkt) { + if ((avpkt->flags & AV_PKT_FLAG_KEY) == 0) + return 0; if (self->require_meta) { if (self->helper && self->helper->meta) { self->require_meta = self->helper->meta(self, avpkt, pkt); + if (self->require_meta == 0) + self->require_meta = 1; } else if (self->oavctx->extradata_size) { pkt->pkt_meta = pktbuf_alloc(self->oavctx->extradata, self->oavctx->extradata_size); - self->require_meta = (pkt->pkt_meta) ? 0 : -1; + self->require_meta = (pkt->pkt_meta) ? 1 : -1; } } return (self->require_meta < 0) ? -1 : 0; @@ -279,6 +283,9 @@ tvh_context_pack(TVHContext *self, AVPacket *avpkt) _context_wrap(self, avpkt, pkt)) { TVHPKT_CLEAR(pkt); } + // FIXME: ugly hack + if (pkt->pkt_pcr == 0) + pkt->pkt_pcr = pkt->pkt_dts; return pkt; }