Browse code

libavutil: add AV_PIX_FMT_BAYER pixel formats

The pixel format descriptors are set to more or less arbitrary
values as bayer formats do not fit in the descriptors structure.
These values are currently not used for bayer formats and thus
do not matter.

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>

Peter Ross authored on 2012/12/16 10:48:39
Showing 2 changed files
... ...
@@ -1737,6 +1737,75 @@ const AVPixFmtDescriptor av_pix_fmt_descriptors[AV_PIX_FMT_NB] = {
1737 1737
        },
1738 1738
         .flags = AV_PIX_FMT_FLAG_BE,
1739 1739
     },
1740
+
1741
+#define BAYER8_DESC_COMMON \
1742
+        .nb_components= 3, \
1743
+        .log2_chroma_w= 0, \
1744
+        .log2_chroma_h= 0, \
1745
+        .comp = {          \
1746
+            {0,0,0,0,1},   \
1747
+            {0,0,0,0,3},   \
1748
+            {0,0,0,0,1},   \
1749
+        },                 \
1750
+
1751
+#define BAYER16_DESC_COMMON \
1752
+        .nb_components= 3, \
1753
+        .log2_chroma_w= 0, \
1754
+        .log2_chroma_h= 0, \
1755
+        .comp = {          \
1756
+            {0,1,0,0, 3},  \
1757
+            {0,1,0,0, 7},  \
1758
+            {0,1,0,0, 3},  \
1759
+        },                 \
1760
+
1761
+    [AV_PIX_FMT_BAYER_BGGR8] = {
1762
+        .name = "bayer_bggr8",
1763
+        BAYER8_DESC_COMMON
1764
+    },
1765
+    [AV_PIX_FMT_BAYER_BGGR16LE] = {
1766
+        .name = "bayer_bggr16le",
1767
+        BAYER16_DESC_COMMON
1768
+    },
1769
+    [AV_PIX_FMT_BAYER_BGGR16BE] = {
1770
+        .name = "bayer_bggr16be",
1771
+        BAYER16_DESC_COMMON
1772
+    },
1773
+    [AV_PIX_FMT_BAYER_RGGB8] = {
1774
+        .name = "bayer_rggb8",
1775
+        BAYER8_DESC_COMMON
1776
+    },
1777
+    [AV_PIX_FMT_BAYER_RGGB16LE] = {
1778
+        .name = "bayer_rggb16le",
1779
+        BAYER16_DESC_COMMON
1780
+    },
1781
+    [AV_PIX_FMT_BAYER_RGGB16BE] = {
1782
+        .name = "bayer_rggb16be",
1783
+        BAYER16_DESC_COMMON
1784
+    },
1785
+    [AV_PIX_FMT_BAYER_GBRG8] = {
1786
+        .name = "bayer_gbrg8",
1787
+        BAYER8_DESC_COMMON
1788
+    },
1789
+    [AV_PIX_FMT_BAYER_GBRG16LE] = {
1790
+        .name = "bayer_gbrg16le",
1791
+        BAYER16_DESC_COMMON
1792
+    },
1793
+    [AV_PIX_FMT_BAYER_GBRG16BE] = {
1794
+        .name = "bayer_gbrg16be",
1795
+        BAYER16_DESC_COMMON
1796
+    },
1797
+    [AV_PIX_FMT_BAYER_GRBG8] = {
1798
+        .name = "bayer_grbg8",
1799
+        BAYER8_DESC_COMMON
1800
+    },
1801
+    [AV_PIX_FMT_BAYER_GRBG16LE] = {
1802
+        .name = "bayer_grbg16le",
1803
+        BAYER16_DESC_COMMON
1804
+    },
1805
+    [AV_PIX_FMT_BAYER_GRBG16BE] = {
1806
+        .name = "bayer_grbg16be",
1807
+        BAYER16_DESC_COMMON
1808
+    },
1740 1809
 };
1741 1810
 
1742 1811
 FF_DISABLE_DEPRECATION_WARNINGS
... ...
@@ -1918,6 +1987,8 @@ void ff_check_pixfmt_descriptors(void){
1918 1918
                 av_assert0(8*(c->step_minus1+1) >= c->depth_minus1+1);
1919 1919
             }
1920 1920
             av_read_image_line(tmp, (void*)data, linesize, d, 0, 0, j, 2, 0);
1921
+            if (!memcmp(d->name, "bayer_", 6))
1922
+                continue;
1921 1923
             av_assert0(tmp[0] == 0 && tmp[1] == 0);
1922 1924
             tmp[0] = tmp[1] = (1<<(c->depth_minus1 + 1)) - 1;
1923 1925
             av_write_image_line(tmp, data, linesize, d, 0, 0, j, 2);
... ...
@@ -244,6 +244,20 @@ enum AVPixelFormat {
244 244
     AV_PIX_FMT_GBRAP16BE,   ///< planar GBRA 4:4:4:4 64bpp, big-endian
245 245
     AV_PIX_FMT_GBRAP16LE,   ///< planar GBRA 4:4:4:4 64bpp, little-endian
246 246
     AV_PIX_FMT_YUVJ411P,    ///< planar YUV 4:1:1, 12bpp, (1 Cr & Cb sample per 4x1 Y samples) full scale (JPEG), deprecated in favor of PIX_FMT_YUV411P and setting color_range
247
+
248
+    AV_PIX_FMT_BAYER_BGGR8,    ///< bayer, BGBG..(odd line), GRGR..(even line), 8-bit samples */
249
+    AV_PIX_FMT_BAYER_RGGB8,    ///< bayer, RGRG..(odd line), GBGB..(even line), 8-bit samples */
250
+    AV_PIX_FMT_BAYER_GBRG8,    ///< bayer, GBGB..(odd line), RGRG..(even line), 8-bit samples */
251
+    AV_PIX_FMT_BAYER_GRBG8,    ///< bayer, GRGR..(odd line), BGBG..(even line), 8-bit samples */
252
+    AV_PIX_FMT_BAYER_BGGR16LE, ///< bayer, BGBG..(odd line), GRGR..(even line), 16-bit samples, little-endian */
253
+    AV_PIX_FMT_BAYER_BGGR16BE, ///< bayer, BGBG..(odd line), GRGR..(even line), 16-bit samples, big-endian */
254
+    AV_PIX_FMT_BAYER_RGGB16LE, ///< bayer, RGRG..(odd line), GBGB..(even line), 16-bit samples, little-endian */
255
+    AV_PIX_FMT_BAYER_RGGB16BE, ///< bayer, RGRG..(odd line), GBGB..(even line), 16-bit samples, big-endian */
256
+    AV_PIX_FMT_BAYER_GBRG16LE, ///< bayer, GBGB..(odd line), RGRG..(even line), 16-bit samples, little-endian */
257
+    AV_PIX_FMT_BAYER_GBRG16BE, ///< bayer, GBGB..(odd line), RGRG..(even line), 16-bit samples, big-endian */
258
+    AV_PIX_FMT_BAYER_GRBG16LE, ///< bayer, GRGR..(odd line), BGBG..(even line), 16-bit samples, little-endian */
259
+    AV_PIX_FMT_BAYER_GRBG16BE, ///< bayer, GRGR..(odd line), BGBG..(even line), 16-bit samples, big-endian */
260
+
247 261
     AV_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
248 262
 
249 263
 #if FF_API_PIX_FMT