From: Jaroslav Kysela Date: Wed, 12 Sep 2018 10:45:29 +0000 (+0200) Subject: mkv: set keyframe flag for all audio tracks, fixes #5151 X-Git-Tag: v4.2.7~47 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=51c9e401828f0b2b84adafa2655b25b3cea74990;p=thirdparty%2Ftvheadend.git mkv: set keyframe flag for all audio tracks, fixes #5151 --- diff --git a/src/muxer/muxer_mkv.c b/src/muxer/muxer_mkv.c index 3bb4ed04b..c75b69be7 100644 --- a/src/muxer/muxer_mkv.c +++ b/src/muxer/muxer_mkv.c @@ -977,7 +977,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 = SCT_ISVIDEO(pkt->pkt_type); + const int video = t->tracktype == 1; + const int audio = t->tracktype == 2; int keyframe = 0, skippable = 0; if (video) { @@ -1060,6 +1061,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); diff --git a/src/packet.h b/src/packet.h index feb33c21e..8558d2f5e 100644 --- a/src/packet.h +++ b/src/packet.h @@ -68,6 +68,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; diff --git a/src/parsers/parsers.c b/src/parsers/parsers.c index 0d5cb04ec..90e41cf65 100644 --- a/src/parsers/parsers.c +++ b/src/parsers/parsers.c @@ -529,6 +529,7 @@ makeapkt(service_t *t, elementary_stream_t *st, const void *buf, pkt->pkt_commercial = t->s_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;