bmpenc: support for PIX_FMT_RGB444
authorPaul B Mahol <onemda@gmail.com>
Tue, 10 Jan 2012 00:42:20 +0000 (00:42 +0000)
committerPaul B Mahol <onemda@gmail.com>
Tue, 10 Jan 2012 18:00:37 +0000 (18:00 +0000)
libavcodec/bmpenc.c

index 9bd700b..55f8ea7 100644 (file)
@@ -28,6 +28,7 @@
 
 static const uint32_t monoblack_pal[] = { 0x000000, 0xFFFFFF };
 static const uint32_t rgb565_masks[]  = { 0xF800, 0x07E0, 0x001F };
+static const uint32_t rgb444_masks[]  = { 0x0F00, 0x00F0, 0x000F };
 
 static av_cold int bmp_encode_init(AVCodecContext *avctx){
     BMPContext *s = avctx->priv_data;
@@ -40,9 +41,8 @@ static av_cold int bmp_encode_init(AVCodecContext *avctx){
         avctx->bits_per_coded_sample = 24;
         break;
     case PIX_FMT_RGB555:
-        avctx->bits_per_coded_sample = 16;
-        break;
     case PIX_FMT_RGB565:
+    case PIX_FMT_RGB444:
         avctx->bits_per_coded_sample = 16;
         break;
     case PIX_FMT_RGB8:
@@ -79,6 +79,11 @@ static int bmp_encode_frame(AVCodecContext *avctx, unsigned char *buf, int buf_s
     p->pict_type= AV_PICTURE_TYPE_I;
     p->key_frame= 1;
     switch (avctx->pix_fmt) {
+    case PIX_FMT_RGB444:
+        compression = BMP_BITFIELDS;
+        pal = rgb444_masks; // abuse pal to hold color masks
+        pal_entries = 3;
+        break;
     case PIX_FMT_RGB565:
         compression = BMP_BITFIELDS;
         pal = rgb565_masks; // abuse pal to hold color masks
@@ -163,7 +168,7 @@ AVCodec ff_bmp_encoder = {
     .encode         = bmp_encode_frame,
     .pix_fmts = (const enum PixelFormat[]){
         PIX_FMT_BGR24,
-        PIX_FMT_RGB555, PIX_FMT_RGB565,
+        PIX_FMT_RGB555, PIX_FMT_RGB444, PIX_FMT_RGB565,
         PIX_FMT_RGB8, PIX_FMT_BGR8, PIX_FMT_RGB4_BYTE, PIX_FMT_BGR4_BYTE, PIX_FMT_GRAY8, PIX_FMT_PAL8,
         PIX_FMT_MONOBLACK,
         PIX_FMT_NONE},