Browse Source

compute rects duration in ASS decoder

Signed-off-by: Aurelien Jacobs <aurel@gnuage.org>
tags/n0.8
Aurelien Jacobs 15 years ago
parent
commit
6873cf9bc8
1 changed files with 13 additions and 1 deletions
  1. +13
    -1
      libavcodec/assdec.c

+ 13
- 1
libavcodec/assdec.c View File

@@ -21,6 +21,7 @@


#include "avcodec.h" #include "avcodec.h"
#include "ass.h" #include "ass.h"
#include "ass_split.h"


static av_cold int ass_decode_init(AVCodecContext *avctx) 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); return AVERROR(ENOMEM);
memcpy(avctx->subtitle_header, avctx->extradata, avctx->extradata_size); memcpy(avctx->subtitle_header, avctx->extradata, avctx->extradata_size);
avctx->subtitle_header_size = avctx->extradata_size; avctx->subtitle_header_size = avctx->extradata_size;
avctx->priv_data = ff_ass_split(avctx->extradata);
return 0; return 0;
} }


@@ -39,7 +41,9 @@ static int ass_decode_frame(AVCodecContext *avctx, void *data, int *got_sub_ptr,
int len, size = avpkt->size; int len, size = avpkt->size;


while (size > 0) { 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) if (len < 0)
return len; return len;
ptr += len; ptr += len;
@@ -50,6 +54,13 @@ static int ass_decode_frame(AVCodecContext *avctx, void *data, int *got_sub_ptr,
return avpkt->size; 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 = { AVCodec ff_ass_decoder = {
.name = "ass", .name = "ass",
.long_name = NULL_IF_CONFIG_SMALL("Advanced SubStation Alpha subtitle"), .long_name = NULL_IF_CONFIG_SMALL("Advanced SubStation Alpha subtitle"),
@@ -57,4 +68,5 @@ AVCodec ff_ass_decoder = {
.id = CODEC_ID_SSA, .id = CODEC_ID_SSA,
.init = ass_decode_init, .init = ass_decode_init,
.decode = ass_decode_frame, .decode = ass_decode_frame,
.close = ass_decode_close,
}; };

Loading…
Cancel
Save