mirror of https://git.ffmpeg.org/ffmpeg.git
compute rects duration in ASS decoder
Signed-off-by: Aurelien Jacobs <aurel@gnuage.org>
This commit is contained in:
parent
3ee8ca9b08
commit
6873cf9bc8
|
@ -21,6 +21,7 @@
|
|||
|
||||
#include "avcodec.h"
|
||||
#include "ass.h"
|
||||
#include "ass_split.h"
|
||||
|
||||
static av_cold int ass_decode_init(AVCodecContext *avctx)
|
||||
{
|
||||
|
@ -29,6 +30,7 @@ static av_cold int ass_decode_init(AVCodecContext *avctx)
|
|||
return AVERROR(ENOMEM);
|
||||
memcpy(avctx->subtitle_header, avctx->extradata, avctx->extradata_size);
|
||||
avctx->subtitle_header_size = avctx->extradata_size;
|
||||
avctx->priv_data = ff_ass_split(avctx->extradata);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -39,7 +41,9 @@ static int ass_decode_frame(AVCodecContext *avctx, void *data, int *got_sub_ptr,
|
|||
int len, size = avpkt->size;
|
||||
|
||||
while (size > 0) {
|
||||
len = ff_ass_add_rect(data, ptr, 0, 0/* FIXME: duration */, 1);
|
||||
ASSDialog *dialog = ff_ass_split_dialog(avctx->priv_data, ptr, 0, NULL);
|
||||
int duration = dialog->end - dialog->start;
|
||||
len = ff_ass_add_rect(data, ptr, 0, duration, 1);
|
||||
if (len < 0)
|
||||
return len;
|
||||
ptr += len;
|
||||
|
@ -50,6 +54,13 @@ static int ass_decode_frame(AVCodecContext *avctx, void *data, int *got_sub_ptr,
|
|||
return avpkt->size;
|
||||
}
|
||||
|
||||
static int ass_decode_close(AVCodecContext *avctx)
|
||||
{
|
||||
ff_ass_split_free(avctx->priv_data);
|
||||
avctx->priv_data = NULL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
AVCodec ff_ass_decoder = {
|
||||
.name = "ass",
|
||||
.long_name = NULL_IF_CONFIG_SMALL("Advanced SubStation Alpha subtitle"),
|
||||
|
@ -57,4 +68,5 @@ AVCodec ff_ass_decoder = {
|
|||
.id = CODEC_ID_SSA,
|
||||
.init = ass_decode_init,
|
||||
.decode = ass_decode_frame,
|
||||
.close = ass_decode_close,
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue