From 2facb50c81364f1f0faa62a7da879447e848ee93 Mon Sep 17 00:00:00 2001 From: John Stebbins Date: Mon, 9 May 2016 08:03:18 -0700 Subject: [PATCH] muxavformat: fix last subtitle persistence in mp4 libav doesn't seems to honor the duration of the subtitle AVPacket. It is required to send an "empty" subtitle packet to terminate all subtitles, including the last one. --- libhb/muxavformat.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/libhb/muxavformat.c b/libhb/muxavformat.c index 7aa9b654a..ef72130b6 100644 --- a/libhb/muxavformat.c +++ b/libhb/muxavformat.c @@ -1051,7 +1051,29 @@ static int avformatMux(hb_mux_object_t *m, hb_mux_data_t *track, hb_buffer_t *bu buf = tmp; } if (buf == NULL) + { + if (job->mux == HB_MUX_AV_MP4 && track->type == MUX_TYPE_SUBTITLE) + { + // Write a final "empty" subtitle to terminate the last + // subtitle that was written + if (track->duration > 0) + { + AVPacket empty_pkt; + uint8_t empty[2] = {0,0}; + + av_init_packet(&empty_pkt); + empty_pkt.data = empty; + empty_pkt.size = 2; + empty_pkt.dts = track->duration; + empty_pkt.pts = track->duration; + empty_pkt.duration = 90; + empty_pkt.convergence_duration = empty_pkt.duration; + empty_pkt.stream_index = track->st->index; + av_interleaved_write_frame(m->oc, &empty_pkt); + } + } return 0; + } if (track->type == MUX_TYPE_VIDEO && (job->mux & HB_MUX_MASK_MKV) && buf->s.renderOffset < 0) -- 2.40.0