@@ -2422,9 +2422,8 @@ static int transcode_subtitles(InputStream *ist, AVPacket *pkt, int *got_output,
goto out;
ist->frames_decoded++;
-
- render_avsub_ass(ist, &subtitle);
+ int rendered = 0;
for (i = 0; i < nb_output_streams; i++) {
OutputStream *ost = output_streams[i];
@@ -2432,6 +2431,15 @@ static int transcode_subtitles(InputStream *ist, AVPacket *pkt, int *got_output,
|| ost->enc->type != AVMEDIA_TYPE_SUBTITLE)
continue;
+ if (avcodec_descriptor_get(ost->enc_ctx->codec_id)->props & AV_CODEC_PROP_BITMAP_SUB)
+ if (avcodec_descriptor_get(ist->dec_ctx->codec_id)->props & AV_CODEC_PROP_TEXT_SUB)
+ if (!rendered) {
+ render_avsub_ass(ist, &subtitle);
+ for (int r = 0; r < subtitle.num_rects; r++)
+ subtitle.rects[r]->type = SUBTITLE_BITMAP;
+ rendered = 1;
+ }
+
do_subtitle_out(output_files[ost->file_index], ost, &subtitle);
}
@@ -307,7 +307,6 @@ void render_avsub_ass(InputStream *ist, AVSubtitle *sub)
rect->data[0][y_rect * rect->w + x_rect] = color;
}
}
- rect->type = SUBTITLE_BITMAP;
ass_free_track(track);
}