Exemple #1
0
static int srt_decode_frame(AVCodecContext *avctx,
                            void *data, int *got_sub_ptr, AVPacket *avpkt)
{
    AVSubtitle *sub = data;
    int ts_start, ts_end, x1 = -1, y1 = -1, x2 = -1, y2 = -1;
    char buffer[2048];
    const char *ptr = avpkt->data;
    const char *end = avpkt->data + avpkt->size;

    if (avpkt->size <= 0)
        return avpkt->size;

    ff_ass_init(sub);

    while (ptr < end && *ptr) {
        ptr = read_ts(ptr, &ts_start, &ts_end, &x1, &y1, &x2, &y2);
        if (!ptr)
            break;
        ptr = srt_to_ass(avctx, buffer, buffer+sizeof(buffer), ptr,
                         x1, y1, x2, y2);
        ff_ass_add_rect(sub, buffer, ts_start, ts_end, 0);
    }

    *got_sub_ptr = sub->num_rects > 0;
    return avpkt->size;
}
Exemple #2
0
static int ass_decode_frame(AVCodecContext *avctx, void *data, int *got_sub_ptr,
                            AVPacket *avpkt)
{
    const char *ptr = avpkt->data;
    int len, size = avpkt->size;

    ff_ass_init(data);

    while (size > 0) {
        len = ff_ass_add_rect(data, ptr, 0, 0/* FIXME: duration */, 1);
        if (len < 0)
            return len;
        ptr  += len;
        size -= len;
    }

    *got_sub_ptr = avpkt->size > 0;
    return avpkt->size;
}