mirror of
https://gitee.com/openharmony/third_party_ffmpeg
synced 2024-11-23 11:19:55 +00:00
ffmpeg: sub2video: use start and end time.
Until now, the end_display_time was ignored, making single packets subtitles (like dvdsub) stay indefinitely. start_display_time was also ignored, but is it almost always 0.
This commit is contained in:
parent
e69e780cde
commit
0f236345fb
20
ffmpeg.c
20
ffmpeg.c
@ -209,17 +209,29 @@ static void sub2video_update(InputStream *ist, AVSubtitle *sub)
|
||||
AVFilterBufferRef *ref = ist->sub2video.ref;
|
||||
int8_t *dst;
|
||||
int dst_linesize;
|
||||
int i;
|
||||
int64_t pts = av_rescale_q(sub->pts, AV_TIME_BASE_Q, ist->st->time_base);
|
||||
int num_rects, i;
|
||||
int64_t pts, end_pts;
|
||||
|
||||
if (!ref)
|
||||
return;
|
||||
if (sub) {
|
||||
pts = av_rescale_q(sub->pts + sub->start_display_time * 1000,
|
||||
AV_TIME_BASE_Q, ist->st->time_base);
|
||||
end_pts = av_rescale_q(sub->pts + sub->end_display_time * 1000,
|
||||
AV_TIME_BASE_Q, ist->st->time_base);
|
||||
num_rects = sub->num_rects;
|
||||
} else {
|
||||
pts = ist->sub2video.end_pts;
|
||||
end_pts = INT64_MAX;
|
||||
num_rects = 0;
|
||||
}
|
||||
dst = ref->data [0];
|
||||
dst_linesize = ref->linesize[0];
|
||||
memset(dst, 0, h * dst_linesize);
|
||||
for (i = 0; i < sub->num_rects; i++)
|
||||
for (i = 0; i < num_rects; i++)
|
||||
sub2video_copy_rect(dst, dst_linesize, w, h, sub->rects[i]);
|
||||
sub2video_push_ref(ist, pts);
|
||||
ist->sub2video.end_pts = end_pts;
|
||||
}
|
||||
|
||||
static void sub2video_heartbeat(InputStream *ist, int64_t pts)
|
||||
@ -242,6 +254,8 @@ static void sub2video_heartbeat(InputStream *ist, int64_t pts)
|
||||
/* do not send the heartbeat frame if the subtitle is already ahead */
|
||||
if (pts2 <= ist2->sub2video.last_pts)
|
||||
continue;
|
||||
if (pts2 >= ist2->sub2video.end_pts)
|
||||
sub2video_update(ist2, NULL);
|
||||
for (j = 0, nb_reqs = 0; j < ist2->nb_filters; j++)
|
||||
nb_reqs += av_buffersrc_get_nb_failed_requests(ist2->filters[j]->filter);
|
||||
if (nb_reqs)
|
||||
|
Loading…
Reference in New Issue
Block a user