diff options
author | Anton Khirnov <anton@khirnov.net> | 2012-02-12 09:32:40 +0100 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2012-02-17 20:46:37 +0100 |
commit | f0366fec5604983a1d8dc62a22f7ad6757e78f3b (patch) | |
tree | f9a60babf13588e7684f6cf1271f372111d15456 | |
parent | f2a4559c77ebce36b575e75fad102d2e9f02bb5a (diff) | |
download | ffmpeg-f0366fec5604983a1d8dc62a22f7ad6757e78f3b.tar.gz |
xwdenc: switch to encode2().
-rw-r--r-- | libavcodec/xwdenc.c | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/libavcodec/xwdenc.c b/libavcodec/xwdenc.c index 5bfdaf780a..67fac81619 100644 --- a/libavcodec/xwdenc.c +++ b/libavcodec/xwdenc.c @@ -24,6 +24,7 @@ #include "libavutil/pixdesc.h" #include "avcodec.h" #include "bytestream.h" +#include "internal.h" #include "xwd.h" #define WINDOW_NAME "lavcxwdenc" @@ -38,16 +39,15 @@ static av_cold int xwd_encode_init(AVCodecContext *avctx) return 0; } -static int xwd_encode_frame(AVCodecContext *avctx, uint8_t *buf, - int buf_size, void *data) +static int xwd_encode_frame(AVCodecContext *avctx, AVPacket *pkt, + const AVFrame *p, int *got_packet) { - AVFrame *p = data; enum PixelFormat pix_fmt = avctx->pix_fmt; uint32_t pixdepth, bpp, bpad, ncolors = 0, lsize, vclass, be = 0; uint32_t rgb[3] = { 0 }; uint32_t header_size; - int i, out_size; - uint8_t *ptr; + int i, out_size, ret; + uint8_t *ptr, *buf; pixdepth = av_get_bits_per_pixel(&av_pix_fmt_descriptors[pix_fmt]); if (av_pix_fmt_descriptors[pix_fmt].flags & PIX_FMT_BE) @@ -146,10 +146,11 @@ static int xwd_encode_frame(AVCodecContext *avctx, uint8_t *buf, header_size = XWD_HEADER_SIZE + WINDOW_NAME_SIZE; out_size = header_size + ncolors * XWD_CMAP_SIZE + avctx->height * lsize; - if (buf_size < out_size) { + if ((ret = ff_alloc_packet(pkt, out_size)) < 0) { av_log(avctx, AV_LOG_ERROR, "output buffer too small\n"); - return AVERROR(ENOMEM); + return ret; } + buf = pkt->data; avctx->coded_frame->key_frame = 1; avctx->coded_frame->pict_type = AV_PICTURE_TYPE_I; @@ -204,7 +205,9 @@ static int xwd_encode_frame(AVCodecContext *avctx, uint8_t *buf, ptr += p->linesize[0]; } - return out_size; + pkt->flags |= AV_PKT_FLAG_KEY; + *got_packet = 1; + return 0; } static av_cold int xwd_encode_close(AVCodecContext *avctx) @@ -219,7 +222,7 @@ AVCodec ff_xwd_encoder = { .type = AVMEDIA_TYPE_VIDEO, .id = CODEC_ID_XWD, .init = xwd_encode_init, - .encode = xwd_encode_frame, + .encode2 = xwd_encode_frame, .close = xwd_encode_close, .pix_fmts = (const enum PixelFormat[]) { PIX_FMT_BGRA, PIX_FMT_RGBA, |