| Index: source/patched-ffmpeg-mt/libavcodec/targaenc.c | 
| =================================================================== | 
| --- source/patched-ffmpeg-mt/libavcodec/targaenc.c	(revision 65184) | 
| +++ source/patched-ffmpeg-mt/libavcodec/targaenc.c	(working copy) | 
| @@ -22,6 +22,7 @@ | 
| #include "libavutil/intreadwrite.h" | 
| #include "avcodec.h" | 
| #include "rle.h" | 
| +#include "targa.h" | 
|  | 
| typedef struct TargaContext { | 
| AVFrame picture; | 
| @@ -81,12 +82,12 @@ | 
|  | 
| if(avctx->width > 0xffff || avctx->height > 0xffff) { | 
| av_log(avctx, AV_LOG_ERROR, "image dimensions too large\n"); | 
| -        return -1; | 
| +        return AVERROR(EINVAL); | 
| } | 
| picsize = avpicture_get_size(avctx->pix_fmt, avctx->width, avctx->height); | 
| if(buf_size < picsize + 45) { | 
| av_log(avctx, AV_LOG_ERROR, "encoded frame too large\n"); | 
| -        return -1; | 
| +        return AVERROR(EINVAL); | 
| } | 
|  | 
| p->pict_type= FF_I_TYPE; | 
| @@ -96,24 +97,30 @@ | 
| memset(outbuf, 0, 12); | 
| AV_WL16(outbuf+12, avctx->width); | 
| AV_WL16(outbuf+14, avctx->height); | 
| -    outbuf[17] = 0x20;           /* origin is top-left. no alpha */ | 
| +    /* image descriptor byte: origin is always top-left, bits 0-3 specify alpha */ | 
| +    outbuf[17] = 0x20 | (avctx->pix_fmt == PIX_FMT_BGRA ? 8 : 0); | 
|  | 
| -    /* TODO: support alpha channel */ | 
| switch(avctx->pix_fmt) { | 
| case PIX_FMT_GRAY8: | 
| -        outbuf[2] = 3;           /* uncompressed grayscale image */ | 
| +        outbuf[2] = TGA_BW;      /* uncompressed grayscale image */ | 
| outbuf[16] = 8;          /* bpp */ | 
| break; | 
| case PIX_FMT_RGB555LE: | 
| -        outbuf[2] = 2;           /* uncompresses true-color image */ | 
| +        outbuf[2] = TGA_RGB;     /* uncompresses true-color image */ | 
| outbuf[16] = 16;         /* bpp */ | 
| break; | 
| case PIX_FMT_BGR24: | 
| -        outbuf[2] = 2;           /* uncompressed true-color image */ | 
| +        outbuf[2] = TGA_RGB;     /* uncompressed true-color image */ | 
| outbuf[16] = 24;         /* bpp */ | 
| break; | 
| +    case PIX_FMT_BGRA: | 
| +        outbuf[2] = TGA_RGB;     /* uncompressed true-color image */ | 
| +        outbuf[16] = 32;         /* bpp */ | 
| +        break; | 
| default: | 
| -        return -1; | 
| +        av_log(avctx, AV_LOG_ERROR, "Pixel format '%s' not supported.\n", | 
| +               avcodec_get_pix_fmt_name(avctx->pix_fmt)); | 
| +        return AVERROR(EINVAL); | 
| } | 
| bpp = outbuf[16] >> 3; | 
|  | 
| @@ -158,6 +165,6 @@ | 
| .priv_data_size = sizeof(TargaContext), | 
| .init = targa_encode_init, | 
| .encode = targa_encode_frame, | 
| -    .pix_fmts= (const enum PixelFormat[]){PIX_FMT_BGR24, PIX_FMT_RGB555LE, PIX_FMT_GRAY8, PIX_FMT_NONE}, | 
| +    .pix_fmts= (const enum PixelFormat[]){PIX_FMT_BGR24, PIX_FMT_BGRA, PIX_FMT_RGB555LE, PIX_FMT_GRAY8, PIX_FMT_NONE}, | 
| .long_name= NULL_IF_CONFIG_SMALL("Truevision Targa image"), | 
| }; | 
|  |