summaryrefslogtreecommitdiff
path: root/src/internal/subtitle/renderers/kitsubass.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/internal/subtitle/renderers/kitsubass.c')
-rw-r--r--src/internal/subtitle/renderers/kitsubass.c33
1 files changed, 27 insertions, 6 deletions
diff --git a/src/internal/subtitle/renderers/kitsubass.c b/src/internal/subtitle/renderers/kitsubass.c
index 7db72dd..c229406 100644
--- a/src/internal/subtitle/renderers/kitsubass.c
+++ b/src/internal/subtitle/renderers/kitsubass.c
@@ -2,6 +2,7 @@
#include <stdlib.h>
#include <SDL_surface.h>
+#include <libavcodec/version.h>
#include "kitchensink/kiterror.h"
#include "kitchensink/internal/utils/kitlog.h"
@@ -40,7 +41,7 @@ static void Kit_ProcessAssImage(SDL_Surface *surface, const ASS_Image *img) {
}
}
-static void ren_render_ass_cb(Kit_SubtitleRenderer *ren, void *src, double start_pts, double end_pts) {
+static void ren_render_ass_cb(Kit_SubtitleRenderer *ren, void *src, double pts, double start, double end) {
assert(ren != NULL);
assert(src != NULL);
@@ -48,11 +49,26 @@ static void ren_render_ass_cb(Kit_SubtitleRenderer *ren, void *src, double start
AVSubtitle *sub = src;
// Read incoming subtitle packets to libASS
+ long long start_ms = (start + pts) * 1000;
+ long long end_ms = end * 1000;
if(Kit_LockDecoderOutput(ren->dec) == 0) {
for(int r = 0; r < sub->num_rects; r++) {
if(sub->rects[r]->ass == NULL)
continue;
- ass_process_data(ass_ren->track, sub->rects[r]->ass, strlen(sub->rects[r]->ass));
+ if(LIBAVCODEC_VERSION_INT < AV_VERSION_INT(57,25,100)) {
+ ass_process_data(
+ ass_ren->track,
+ sub->rects[r]->ass,
+ strlen(sub->rects[r]->ass));
+ } else {
+ // This requires the sub_text_format codec_opt set for ffmpeg
+ ass_process_chunk(
+ ass_ren->track,
+ sub->rects[r]->ass,
+ strlen(sub->rects[r]->ass),
+ start_ms,
+ end_ms);
+ }
}
Kit_UnlockDecoderOutput(ren->dec);
}
@@ -150,7 +166,12 @@ Kit_SubtitleRenderer* Kit_CreateASSSubtitleRenderer(Kit_Decoder *dec, int video_
// Read fonts from attachment streams and give them to libass
for(int j = 0; j < dec->format_ctx->nb_streams; j++) {
AVStream *st = dec->format_ctx->streams[j];
- if(st->codec->codec_type == AVMEDIA_TYPE_ATTACHMENT && attachment_is_font(st)) {
+#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(57, 48, 101)
+ AVCodecContext *codec = st->codec;
+#else
+ AVCodecParameters *codec = st->codecpar;
+#endif
+ if(codec->codec_type == AVMEDIA_TYPE_ATTACHMENT && attachment_is_font(st)) {
const AVDictionaryEntry *tag = av_dict_get(
st->metadata,
"filename",
@@ -159,9 +180,9 @@ Kit_SubtitleRenderer* Kit_CreateASSSubtitleRenderer(Kit_Decoder *dec, int video_
if(tag) {
ass_add_font(
state->libass_handle,
- tag->value,
- (char*)st->codec->extradata,
- st->codec->extradata_size);
+ tag->value,
+ (char*)codec->extradata,
+ codec->extradata_size);
}
}
}