* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
+#include <string.h>
+
+#include "libavutil/internal.h"
#include "libavutil/intreadwrite.h"
#include "libavutil/pixdesc.h"
#include "avcodec.h"
#include "rle.h"
#include "targa.h"
-typedef struct TargaContext {
- AVFrame picture;
-} TargaContext;
-
/**
* RLE compress the image, with maximum size of out_size
* @param outbuf Output buffer
AV_WL16(pkt->data+12, avctx->width);
AV_WL16(pkt->data+14, avctx->height);
/* image descriptor byte: origin is always top-left, bits 0-3 specify alpha */
- pkt->data[17] = 0x20 | (avctx->pix_fmt == PIX_FMT_BGRA ? 8 : 0);
+ pkt->data[17] = 0x20 | (avctx->pix_fmt == AV_PIX_FMT_BGRA ? 8 : 0);
switch(avctx->pix_fmt) {
- case PIX_FMT_GRAY8:
+ case AV_PIX_FMT_GRAY8:
pkt->data[2] = TGA_BW; /* uncompressed grayscale image */
pkt->data[16] = 8; /* bpp */
break;
- case PIX_FMT_RGB555LE:
+ case AV_PIX_FMT_RGB555LE:
pkt->data[2] = TGA_RGB; /* uncompresses true-color image */
pkt->data[16] = 16; /* bpp */
break;
- case PIX_FMT_BGR24:
+ case AV_PIX_FMT_BGR24:
pkt->data[2] = TGA_RGB; /* uncompressed true-color image */
pkt->data[16] = 24; /* bpp */
break;
- case PIX_FMT_BGRA:
+ case AV_PIX_FMT_BGRA:
pkt->data[2] = TGA_RGB; /* uncompressed true-color image */
pkt->data[16] = 32; /* bpp */
break;
static av_cold int targa_encode_init(AVCodecContext *avctx)
{
- TargaContext *s = avctx->priv_data;
+ avctx->coded_frame = av_frame_alloc();
+ if (!avctx->coded_frame)
+ return AVERROR(ENOMEM);
+
+ avctx->coded_frame->key_frame = 1;
+ avctx->coded_frame->pict_type = AV_PICTURE_TYPE_I;
- avcodec_get_frame_defaults(&s->picture);
- s->picture.key_frame= 1;
- s->picture.pict_type = AV_PICTURE_TYPE_I;
- avctx->coded_frame= &s->picture;
+ return 0;
+}
+static av_cold int targa_encode_close(AVCodecContext *avctx)
+{
+ av_frame_free(&avctx->coded_frame);
return 0;
}
AVCodec ff_targa_encoder = {
.name = "targa",
+ .long_name = NULL_IF_CONFIG_SMALL("Truevision Targa image"),
.type = AVMEDIA_TYPE_VIDEO,
- .id = CODEC_ID_TARGA,
- .priv_data_size = sizeof(TargaContext),
+ .id = AV_CODEC_ID_TARGA,
.init = targa_encode_init,
+ .close = targa_encode_close,
.encode2 = targa_encode_frame,
- .pix_fmts = (const enum PixelFormat[]){
- PIX_FMT_BGR24, PIX_FMT_BGRA, PIX_FMT_RGB555LE, PIX_FMT_GRAY8,
- PIX_FMT_NONE
+ .pix_fmts = (const enum AVPixelFormat[]){
+ AV_PIX_FMT_BGR24, AV_PIX_FMT_BGRA, AV_PIX_FMT_RGB555LE, AV_PIX_FMT_GRAY8,
+ AV_PIX_FMT_NONE
},
- .long_name= NULL_IF_CONFIG_SMALL("Truevision Targa image"),
};