]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
profile: fix the transcoded stream sharing
authorJaroslav Kysela <perex@perex.cz>
Sun, 3 Sep 2017 12:48:56 +0000 (14:48 +0200)
committerJaroslav Kysela <perex@perex.cz>
Sun, 3 Sep 2017 12:49:10 +0000 (14:49 +0200)
src/profile.c
src/transcoding/transcode/context.c

index 2fede24645a826aa59e47cb9c4a4a5a01afded54..fade0c869f82e6fbad6a0a354e5d5bc3e9d44438 100644 (file)
@@ -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;
     }
index 5543defbdcba3e9b27659c7485fb7cb199f80c11..24cd6adf505c9d572a1949785c1664cb52473103 100644 (file)
@@ -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;
 }