diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2012-02-24 04:13:27 +0100 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2012-02-24 04:13:27 +0100 |
commit | 3be7917894a9da50c11f61ae7b49855435096883 (patch) | |
tree | 9c3047e350c65341b5e216956dc64556862638fd /libavcodec/proresenc_anatoliy.c | |
parent | 73f8f7e839417a25cb59df71232714d5a06e002c (diff) | |
download | ffmpeg-3be7917894a9da50c11f61ae7b49855435096883.tar.gz |
proresenc_anatoliy: switch to encode2
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec/proresenc_anatoliy.c')
-rw-r--r-- | libavcodec/proresenc_anatoliy.c | 33 |
1 files changed, 24 insertions, 9 deletions
diff --git a/libavcodec/proresenc_anatoliy.c b/libavcodec/proresenc_anatoliy.c index 00857dd0b6..1d85b1d309 100644 --- a/libavcodec/proresenc_anatoliy.c +++ b/libavcodec/proresenc_anatoliy.c @@ -484,14 +484,25 @@ static int prores_encode_picture(AVCodecContext *avctx, AVFrame *pic, return sl_data - buf; } -static int prores_encode_frame(AVCodecContext *avctx, unsigned char *buf, - int buf_size, void *data) +static int prores_encode_frame(AVCodecContext *avctx, AVPacket *pkt, + const AVFrame *pict, int *got_packet) { - AVFrame *pic = data; - + ProresContext* ctx = avctx->priv_data; int header_size = 148; - int pic_size = prores_encode_picture(avctx, pic, buf + header_size + 8, - buf_size - header_size - 8); + uint8_t *buf; + int pic_size, ret; + int frame_size = FFALIGN(avctx->width, 16) * FFALIGN(avctx->height, 16)*16 + 500 + FF_MIN_BUFFER_SIZE; //FIXME choose tighter limit + + + if (!pkt->data && + (ret = av_new_packet(pkt, frame_size + FF_MIN_BUFFER_SIZE)) < 0) { + av_log(avctx, AV_LOG_ERROR, "Error getting output packet.\n"); + return ret; + } + + buf = pkt->data; + pic_size = prores_encode_picture(avctx, pict, buf + header_size + 8, + pkt->size - header_size - 8); bytestream_put_be32(&buf, pic_size + 8 + header_size); bytestream_put_buffer(&buf, "icpf", 4); @@ -513,7 +524,11 @@ static int prores_encode_frame(AVCodecContext *avctx, unsigned char *buf, bytestream_put_buffer(&buf, QMAT_LUMA[avctx->profile], 64); bytestream_put_buffer(&buf, QMAT_CHROMA[avctx->profile], 64); - return pic_size + 8 + header_size; + pkt->flags |= AV_PKT_FLAG_KEY; + pkt->size = pic_size + 8 + header_size; + *got_packet = 1; + + return 0; } static void scale_mat(const uint8_t* src, int* dst, int scale) @@ -591,7 +606,7 @@ AVCodec ff_prores_anatoliy_encoder = { .priv_data_size = sizeof(ProresContext), .init = prores_encode_init, .close = prores_encode_close, - .encode = prores_encode_frame, + .encode2 = prores_encode_frame, .pix_fmts = (const enum PixelFormat[]){PIX_FMT_YUV422P10, PIX_FMT_NONE}, .long_name = NULL_IF_CONFIG_SMALL("Apple ProRes"), .profiles = profiles @@ -604,7 +619,7 @@ AVCodec ff_prores_encoder = { .priv_data_size = sizeof(ProresContext), .init = prores_encode_init, .close = prores_encode_close, - .encode = prores_encode_frame, + .encode2 = prores_encode_frame, .pix_fmts = (const enum PixelFormat[]){PIX_FMT_YUV422P10, PIX_FMT_NONE}, .long_name = NULL_IF_CONFIG_SMALL("Apple ProRes"), .profiles = profiles |