summaryrefslogtreecommitdiffstats
path: root/libhb
diff options
context:
space:
mode:
Diffstat (limited to 'libhb')
-rw-r--r--libhb/decpgssub.c18
-rw-r--r--libhb/sync.c20
2 files changed, 28 insertions, 10 deletions
diff --git a/libhb/decpgssub.c b/libhb/decpgssub.c
index 7ea2a0122..3df1cc439 100644
--- a/libhb/decpgssub.c
+++ b/libhb/decpgssub.c
@@ -379,7 +379,8 @@ static int decsubWork( hb_work_object_t * w, hb_buffer_t ** buf_in,
out->sequence = in->sequence;
}
out->s.renderOffset = AV_NOPTS_VALUE;
- out->s.start = out->s.stop = pts;
+ out->s.stop = AV_NOPTS_VALUE;
+ out->s.start = pts;
}
else
{
@@ -393,13 +394,14 @@ static int decsubWork( hb_work_object_t * w, hb_buffer_t ** buf_in,
out = hb_frame_buffer_init(AV_PIX_FMT_YUVA420P,
rect->w, rect->h);
- out->s.frametype = HB_FRAME_SUBTITLE;
- out->s.id = in->s.id;
- out->sequence = in->sequence;
- out->s.start = pts;
- out->s.stop = pts;
- out->f.x = rect->x;
- out->f.y = rect->y;
+ out->s.frametype = HB_FRAME_SUBTITLE;
+ out->s.id = in->s.id;
+ out->sequence = in->sequence;
+ out->s.start = pts;
+ out->s.stop = AV_NOPTS_VALUE;
+ out->s.renderOffset = AV_NOPTS_VALUE;
+ out->f.x = rect->x;
+ out->f.y = rect->y;
uint8_t *lum = out->plane[0].data;
uint8_t *chromaU = out->plane[1].data;
diff --git a/libhb/sync.c b/libhb/sync.c
index 84eb1eac5..7181e444a 100644
--- a/libhb/sync.c
+++ b/libhb/sync.c
@@ -220,7 +220,11 @@ static void InitSubtitle( hb_job_t * job, hb_sync_video_t * sync, int i )
// Merge overlapping subtitles since mpv tx3g does not support them
sync->subtitle_sanitizer[i].merge = 1;
}
- if (subtitle->config.dest == PASSTHRUSUB)
+ // PGS subtitles don't need to be linked because there are explicit
+ // "clear" subtitle packets that indicate the end time of the
+ // previous subtitle
+ if (subtitle->config.dest == PASSTHRUSUB &&
+ subtitle->source != PGSSUB)
{
// Fill in stop time when it is missing
sync->subtitle_sanitizer[i].link = 1;
@@ -320,7 +324,7 @@ static hb_buffer_t * mergeSubtitles(subtitle_sanitizer_t *sanitizer, int end)
{
b = a->next;
- if (b != NULL && !sanitizer->merge)
+ if (!sanitizer->merge)
{
sanitizer->list_current = a->next;
if (sanitizer->list_current == NULL)
@@ -406,6 +410,18 @@ static hb_buffer_t * sanitizeSubtitle(
if (!sanitizer->link && !sanitizer->merge)
{
+ if (sub != NULL)
+ {
+ if (sub->s.stop != AV_NOPTS_VALUE)
+ sub->s.duration = sub->s.stop - sub->s.start;
+ else
+ sub->s.duration = 0;
+ sub->s.start -= pv->common->video_pts_slip;
+ if (sub->s.stop != AV_NOPTS_VALUE)
+ sub->s.stop -= pv->common->video_pts_slip;
+ if (sub->s.renderOffset != AV_NOPTS_VALUE)
+ sub->s.renderOffset -= pv->common->video_pts_slip;
+ }
return sub;
}