fftools/ffmpeg_dec: move sub2video submission to ffmpeg_filter

This code is a sub2video analogue of ifilter_send_frame(), so it
properly belongs to the filtering code.

Note that using sub2video with more than one target for a given input
subtitle stream is currently broken and this commit does not change
that. It will be addressed in following commits.
This commit is contained in:
Anton Khirnov
2023-05-23 13:00:12 +02:00
parent 3d35b73b2a
commit 5d530e3a72
4 changed files with 41 additions and 16 deletions

View File

@@ -336,7 +336,6 @@ static void sub2video_flush(InputStream *ist)
int process_subtitle(InputStream *ist, AVSubtitle *subtitle, int *got_output)
{
int ret = 0;
int free_sub = 1;
if (ist->fix_sub_duration) {
int end = 1;
@@ -361,18 +360,13 @@ int process_subtitle(InputStream *ist, AVSubtitle *subtitle, int *got_output)
if (!*got_output)
return ret;
if (ist->sub2video.frame) {
sub2video_update(ist, INT64_MIN, subtitle);
} else if (ist->nb_filters) {
if (!ist->sub2video.sub_queue)
ist->sub2video.sub_queue = av_fifo_alloc2(8, sizeof(AVSubtitle), AV_FIFO_FLAG_AUTO_GROW);
if (!ist->sub2video.sub_queue)
report_and_exit(AVERROR(ENOMEM));
ret = av_fifo_write(ist->sub2video.sub_queue, subtitle, 1);
if (ret < 0)
exit_program(1);
free_sub = 0;
for (int i = 0; i < ist->nb_filters; i++) {
ret = ifilter_sub2video(ist->filters[i], subtitle);
if (ret < 0) {
av_log(ist, AV_LOG_ERROR, "Error sending a subtitle for filtering: %s\n",
av_err2str(ret));
goto out;
}
}
if (!subtitle->num_rects)
@@ -387,8 +381,7 @@ int process_subtitle(InputStream *ist, AVSubtitle *subtitle, int *got_output)
}
out:
if (free_sub)
avsubtitle_free(subtitle);
avsubtitle_free(subtitle);
return ret;
}