]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
mkv: set keyframe flag for all audio tracks, fixes #5151
authorJaroslav Kysela <perex@perex.cz>
Wed, 12 Sep 2018 10:45:29 +0000 (12:45 +0200)
committerJaroslav Kysela <perex@perex.cz>
Wed, 12 Sep 2018 10:45:29 +0000 (12:45 +0200)
src/muxer/muxer_mkv.c
src/packet.h
src/parsers/parsers.c

index f965e91a9fdb28ca1c8276d3fc4d4c32c9223b9f..73ff9b0d540772498fb7fa1d1976477b2908847c 100644 (file)
@@ -1010,7 +1010,8 @@ mk_write_frame_i(mk_muxer_t *mk, mk_track_t *t, th_pkt_t *pkt)
 {
   int64_t pts = pkt->pkt_pts, delta, nxt;
   unsigned char c_delta_flags[3];
-  int video = t->tracktype == 1;
+  const int video = t->tracktype == 1;
+  const int audio = t->tracktype == 2;
   int keyframe = 0, skippable = 0;
 
   if (video) {
@@ -1093,6 +1094,7 @@ mk_write_frame_i(mk_muxer_t *mk, mk_track_t *t, th_pkt_t *pkt)
 
   c_delta_flags[0] = delta >> 8;
   c_delta_flags[1] = delta;
+  if (audio && pkt->a.pkt_keyframe) keyframe = 1;
   c_delta_flags[2] = (keyframe << 7) | skippable;
   htsbuf_append(mk->cluster, c_delta_flags, 3);
   htsbuf_append(mk->cluster, data, len);
index 1911f3431c2555fc545d068c3b8f9c479c2ef7a2..3b2bed91eb3c49db834ce23d63a2e7cf7ce5f278 100644 (file)
@@ -70,6 +70,7 @@ typedef struct th_pkt {
       uint16_t pkt_aspect_den;
     } v;
     struct {
+      uint8_t pkt_keyframe;
       uint8_t pkt_channels;
       uint8_t pkt_sri;
       uint8_t pkt_ext_sri;
index 670614bf22f9ba5ad60d8dfec72090f73187c284..48be9cf186ba27dd33784c621bb989c90191b542 100644 (file)
@@ -527,6 +527,7 @@ makeapkt(parser_t *t, parser_es_t *st, const void *buf,
 
   pkt->pkt_commercial = t->prs_tt_commercial_advice;
   pkt->pkt_duration = duration;
+  pkt->a.pkt_keyframe = 1;
   pkt->a.pkt_channels = channels;
   pkt->a.pkt_sri = sri;
   pkt->pkt_err = st->es_buf_a.sb_err;