Browse code

Add initial support for 12-bit color mode. Patch by Janusz Krzysztofik jkrzyszt tis icnet pl Original thread: Subject: [FFmpeg-devel] [PATCH v2] Add initial support for 12-bit color mode. Date: Mon, 1 Mar 2010 02:05:07 +0100

Originally committed as revision 22220 to svn://svn.ffmpeg.org/ffmpeg/trunk

Janusz Krzysztofik authored on 2010/03/05 17:26:23
Showing 3 changed files
... ...
@@ -240,6 +240,18 @@ static const PixFmtInfo pix_fmt_info[PIX_FMT_NB] = {
240 240
         .pixel_type = FF_PIXEL_PACKED,
241 241
         .depth = 5,
242 242
     },
243
+    [PIX_FMT_RGB444BE] = {
244
+        .nb_channels = 3,
245
+        .color_type = FF_COLOR_RGB,
246
+        .pixel_type = FF_PIXEL_PACKED,
247
+        .depth = 4,
248
+    },
249
+    [PIX_FMT_RGB444LE] = {
250
+        .nb_channels = 3,
251
+        .color_type = FF_COLOR_RGB,
252
+        .pixel_type = FF_PIXEL_PACKED,
253
+        .depth = 4,
254
+    },
243 255
 
244 256
     /* gray / mono formats */
245 257
     [PIX_FMT_GRAY16BE] = {
... ...
@@ -316,6 +328,18 @@ static const PixFmtInfo pix_fmt_info[PIX_FMT_NB] = {
316 316
         .pixel_type = FF_PIXEL_PACKED,
317 317
         .depth = 5,
318 318
     },
319
+    [PIX_FMT_BGR444BE] = {
320
+        .nb_channels = 3,
321
+        .color_type = FF_COLOR_RGB,
322
+        .pixel_type = FF_PIXEL_PACKED,
323
+        .depth = 4,
324
+    },
325
+    [PIX_FMT_BGR444LE] = {
326
+        .nb_channels = 3,
327
+        .color_type = FF_COLOR_RGB,
328
+        .pixel_type = FF_PIXEL_PACKED,
329
+        .depth = 4,
330
+    },
319 331
     [PIX_FMT_RGB8] = {
320 332
         .nb_channels = 1,
321 333
         .color_type = FF_COLOR_RGB,
... ...
@@ -529,10 +553,14 @@ int ff_fill_linesize(AVPicture *picture, enum PixelFormat pix_fmt, int width)
529 529
         break;
530 530
     case PIX_FMT_GRAY16BE:
531 531
     case PIX_FMT_GRAY16LE:
532
+    case PIX_FMT_BGR444BE:
533
+    case PIX_FMT_BGR444LE:
532 534
     case PIX_FMT_BGR555BE:
533 535
     case PIX_FMT_BGR555LE:
534 536
     case PIX_FMT_BGR565BE:
535 537
     case PIX_FMT_BGR565LE:
538
+    case PIX_FMT_RGB444BE:
539
+    case PIX_FMT_RGB444LE:
536 540
     case PIX_FMT_RGB555BE:
537 541
     case PIX_FMT_RGB555LE:
538 542
     case PIX_FMT_RGB565BE:
... ...
@@ -626,10 +654,14 @@ int ff_fill_pointer(AVPicture *picture, uint8_t *ptr, enum PixelFormat pix_fmt,
626 626
     case PIX_FMT_RGB48LE:
627 627
     case PIX_FMT_GRAY16BE:
628 628
     case PIX_FMT_GRAY16LE:
629
+    case PIX_FMT_BGR444BE:
630
+    case PIX_FMT_BGR444LE:
629 631
     case PIX_FMT_BGR555BE:
630 632
     case PIX_FMT_BGR555LE:
631 633
     case PIX_FMT_BGR565BE:
632 634
     case PIX_FMT_BGR565LE:
635
+    case PIX_FMT_RGB444BE:
636
+    case PIX_FMT_RGB444LE:
633 637
     case PIX_FMT_RGB555BE:
634 638
     case PIX_FMT_RGB555LE:
635 639
     case PIX_FMT_RGB565BE:
... ...
@@ -699,10 +731,14 @@ int avpicture_layout(const AVPicture* src, enum PixelFormat pix_fmt, int width,
699 699
             pix_fmt == PIX_FMT_BGR565LE ||
700 700
             pix_fmt == PIX_FMT_BGR555BE ||
701 701
             pix_fmt == PIX_FMT_BGR555LE ||
702
+            pix_fmt == PIX_FMT_BGR444BE ||
703
+            pix_fmt == PIX_FMT_BGR444LE ||
702 704
             pix_fmt == PIX_FMT_RGB565BE ||
703 705
             pix_fmt == PIX_FMT_RGB565LE ||
704 706
             pix_fmt == PIX_FMT_RGB555BE ||
705
-            pix_fmt == PIX_FMT_RGB555LE)
707
+            pix_fmt == PIX_FMT_RGB555LE ||
708
+            pix_fmt == PIX_FMT_RGB444BE ||
709
+            pix_fmt == PIX_FMT_RGB444LE)
706 710
             w = width * 2;
707 711
         else if (pix_fmt == PIX_FMT_UYYVYY411)
708 712
             w = width + width/2;
... ...
@@ -838,10 +874,14 @@ static int avg_bits_per_pixel(enum PixelFormat pix_fmt)
838 838
         case PIX_FMT_RGB565LE:
839 839
         case PIX_FMT_RGB555BE:
840 840
         case PIX_FMT_RGB555LE:
841
+        case PIX_FMT_RGB444BE:
842
+        case PIX_FMT_RGB444LE:
841 843
         case PIX_FMT_BGR565BE:
842 844
         case PIX_FMT_BGR565LE:
843 845
         case PIX_FMT_BGR555BE:
844 846
         case PIX_FMT_BGR555LE:
847
+        case PIX_FMT_BGR444BE:
848
+        case PIX_FMT_BGR444LE:
845 849
             bits = 16;
846 850
             break;
847 851
         case PIX_FMT_UYYVYY411:
... ...
@@ -958,10 +998,14 @@ int ff_get_plane_bytewidth(enum PixelFormat pix_fmt, int width, int plane)
958 958
         case PIX_FMT_RGB565LE:
959 959
         case PIX_FMT_RGB555BE:
960 960
         case PIX_FMT_RGB555LE:
961
+        case PIX_FMT_RGB444BE:
962
+        case PIX_FMT_RGB444LE:
961 963
         case PIX_FMT_BGR565BE:
962 964
         case PIX_FMT_BGR565LE:
963 965
         case PIX_FMT_BGR555BE:
964 966
         case PIX_FMT_BGR555LE:
967
+        case PIX_FMT_BGR444BE:
968
+        case PIX_FMT_BGR444LE:
965 969
             bits = 16;
966 970
             break;
967 971
         case PIX_FMT_UYYVYY411:
... ...
@@ -594,6 +594,29 @@ const AVPixFmtDescriptor av_pix_fmt_descriptors[PIX_FMT_NB] = {
594 594
             {0,1,1,0,4},        /* B */
595 595
         },
596 596
     },
597
+    [PIX_FMT_RGB444BE] = {
598
+        .name = "rgb444be",
599
+        .nb_components= 3,
600
+        .log2_chroma_w= 0,
601
+        .log2_chroma_h= 0,
602
+        .comp = {
603
+            {0,1,0,0,3},        /* R */
604
+            {0,1,1,4,3},        /* G */
605
+            {0,1,1,0,3},        /* B */
606
+        },
607
+        .flags = PIX_FMT_BE,
608
+    },
609
+    [PIX_FMT_RGB444LE] = {
610
+        .name = "rgb444le",
611
+        .nb_components= 3,
612
+        .log2_chroma_w= 0,
613
+        .log2_chroma_h= 0,
614
+        .comp = {
615
+            {0,1,2,0,3},        /* R */
616
+            {0,1,1,4,3},        /* G */
617
+            {0,1,1,0,3},        /* B */
618
+        },
619
+    },
597 620
     [PIX_FMT_BGR565BE] = {
598 621
         .name = "bgr565be",
599 622
         .nb_components= 3,
... ...
@@ -640,6 +663,29 @@ const AVPixFmtDescriptor av_pix_fmt_descriptors[PIX_FMT_NB] = {
640 640
             {0,1,1,0,4},        /* R */
641 641
         },
642 642
     },
643
+    [PIX_FMT_BGR444BE] = {
644
+        .name = "bgr444be",
645
+        .nb_components= 3,
646
+        .log2_chroma_w= 0,
647
+        .log2_chroma_h= 0,
648
+        .comp = {
649
+            {0,1,0,0,3},       /* B */
650
+            {0,1,1,4,3},       /* G */
651
+            {0,1,1,0,3},       /* R */
652
+        },
653
+        .flags = PIX_FMT_BE,
654
+     },
655
+    [PIX_FMT_BGR444LE] = {
656
+        .name = "bgr444le",
657
+        .nb_components= 3,
658
+        .log2_chroma_w= 0,
659
+        .log2_chroma_h= 0,
660
+        .comp = {
661
+            {0,1,2,0,3},        /* B */
662
+            {0,1,1,4,3},        /* G */
663
+            {0,1,1,0,3},        /* R */
664
+        },
665
+    },
643 666
     [PIX_FMT_VAAPI_MOCO] = {
644 667
         .name = "vaapi_moco",
645 668
         .log2_chroma_w = 1,
... ...
@@ -127,6 +127,11 @@ enum PixelFormat {
127 127
     PIX_FMT_YUV444P16BE,  ///< planar YUV 4:4:4, 48bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian
128 128
     PIX_FMT_VDPAU_MPEG4,  ///< MPEG4 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers
129 129
     PIX_FMT_DXVA2_VLD,    ///< HW decoding through DXVA2, Picture.data[3] contains a LPDIRECT3DSURFACE9 pointer
130
+
131
+    PIX_FMT_RGB444BE,  ///< packed RGB 4:4:4, 16bpp, (msb)4A 4R 4G 4B(lsb), big-endian, most significant bits to 0
132
+    PIX_FMT_RGB444LE,  ///< packed RGB 4:4:4, 16bpp, (msb)4A 4R 4G 4B(lsb), little-endian, most significant bits to 0
133
+    PIX_FMT_BGR444BE,  ///< packed BGR 4:4:4, 16bpp, (msb)4A 4B 4G 4R(lsb), big-endian, most significant bits to 1
134
+    PIX_FMT_BGR444LE,  ///< packed BGR 4:4:4, 16bpp, (msb)4A 4B 4G 4R(lsb), little-endian, most significant bits to 1
130 135
     PIX_FMT_NB,        ///< number of pixel formats, DO NOT USE THIS if you want to link with shared libav* because the number of formats might differ between versions
131 136
 };
132 137
 
... ...
@@ -145,8 +150,10 @@ enum PixelFormat {
145 145
 #define PIX_FMT_RGB48  PIX_FMT_NE(RGB48BE,  RGB48LE)
146 146
 #define PIX_FMT_RGB565 PIX_FMT_NE(RGB565BE, RGB565LE)
147 147
 #define PIX_FMT_RGB555 PIX_FMT_NE(RGB555BE, RGB555LE)
148
+#define PIX_FMT_RGB444 PIX_FMT_NE(RGB444BE, RGB444LE)
148 149
 #define PIX_FMT_BGR565 PIX_FMT_NE(BGR565BE, BGR565LE)
149 150
 #define PIX_FMT_BGR555 PIX_FMT_NE(BGR555BE, BGR555LE)
151
+#define PIX_FMT_BGR444 PIX_FMT_NE(BGR444BE, BGR444LE)
150 152
 
151 153
 #define PIX_FMT_YUV420P16 PIX_FMT_NE(YUV420P16BE, YUV420P16LE)
152 154
 #define PIX_FMT_YUV422P16 PIX_FMT_NE(YUV422P16BE, YUV422P16LE)