MMAL/IL: Add support for the 16bpp Bayer/Grey raw 10/12/14 formats

Unicam can unpack to 16bpp, but only using the bottom N bits, and
V4L2 supports them all. It is also far easier for a CPU to process.

Adds support to the framework and to the ISP component (changes the
black level config).
This commit is contained in:
Dave Stevenson
2021-01-07 10:20:26 +00:00
committed by popcornmix
parent 093b30bbc2
commit 7deff646e8
3 changed files with 68 additions and 0 deletions

View File

@@ -145,12 +145,35 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#define MMAL_ENCODING_BAYER_SGRBG10DPCM8 MMAL_FOURCC('B','D','1','0') //GRBG
#define MMAL_ENCODING_BAYER_SRGGB10DPCM8 MMAL_FOURCC('b','R','A','8') //RGGB
//10 bit per pixel unpacked (16bit) Bayer formats.
#define MMAL_ENCODING_BAYER_SBGGR10 MMAL_FOURCC('B','G','1','0') //BGGR
#define MMAL_ENCODING_BAYER_SGRBG10 MMAL_FOURCC('B','A','1','0') //GRBG
#define MMAL_ENCODING_BAYER_SGBRG10 MMAL_FOURCC('G','B','1','0') //GBRG
#define MMAL_ENCODING_BAYER_SRGGB10 MMAL_FOURCC('R','G','1','0') //RGGB
//12 bit per pixel unpacked (16bit) Bayer formats
#define MMAL_ENCODING_BAYER_SBGGR12 MMAL_FOURCC('B','G','1','2') //BGGR
#define MMAL_ENCODING_BAYER_SGRBG12 MMAL_FOURCC('B','A','1','2') //GRBG
#define MMAL_ENCODING_BAYER_SGBRG12 MMAL_FOURCC('G','B','1','2') //GBRG
#define MMAL_ENCODING_BAYER_SRGGB12 MMAL_FOURCC('R','G','1','2') //RGGB
//14 bit per pixel unpacked (16bit) Bayer formats
#define MMAL_ENCODING_BAYER_SBGGR14 MMAL_FOURCC('B','G','1','4') //BGGR
#define MMAL_ENCODING_BAYER_SGBRG14 MMAL_FOURCC('G','B','1','4') //GBRG
#define MMAL_ENCODING_BAYER_SGRBG14 MMAL_FOURCC('G','R','1','4') //GRBG
#define MMAL_ENCODING_BAYER_SRGGB14 MMAL_FOURCC('R','G','1','4') //RGGB
//MIPI packed monochrome images
#define MMAL_ENCODING_GREY MMAL_FOURCC('G', 'R', 'E', 'Y') //8bpp Greyscale
#define MMAL_ENCODING_Y10P MMAL_FOURCC('Y', '1', '0', 'P') //10bpp Greyscale, MIPI RAW10 packed
#define MMAL_ENCODING_Y12P MMAL_FOURCC('Y', '1', '2', 'P') //12bpp Greyscale, MIPI RAW12 packed
#define MMAL_ENCODING_Y14P MMAL_FOURCC('Y', '1', '4', 'P') //14bpp Greyscale, MIPI RAW14 packed
#define MMAL_ENCODING_Y16 MMAL_FOURCC('Y', '1', '6', ' ') //16bpp Greyscale
//Unpacked monochrome formats (16bit per sample, but only N LSBs used)
#define MMAL_ENCODING_Y10 MMAL_FOURCC('Y', '1', '0', ' ') //10bpp Greyscale
#define MMAL_ENCODING_Y12 MMAL_FOURCC('Y', '1', '2', ' ') //12bpp Greyscale
#define MMAL_ENCODING_Y14 MMAL_FOURCC('Y', '1', '4', ' ') //14bpp Greyscale
/** SAND Video (YUVUV128) format, native format understood by VideoCore.
* This format is *not* opaque - if requested you will receive full frames

View File

@@ -767,6 +767,10 @@ static struct {
{MMAL_ENCODING_BAYER_SGRBG12P, OMX_COLOR_FormatRawBayer12bit},
{MMAL_ENCODING_BAYER_SGBRG12P, OMX_COLOR_FormatRawBayer12bit},
{MMAL_ENCODING_BAYER_SRGGB12P, OMX_COLOR_FormatRawBayer12bit},
{MMAL_ENCODING_BAYER_SBGGR14P, OMX_COLOR_FormatRawBayer14bit},
{MMAL_ENCODING_BAYER_SGRBG14P, OMX_COLOR_FormatRawBayer14bit},
{MMAL_ENCODING_BAYER_SGBRG14P, OMX_COLOR_FormatRawBayer14bit},
{MMAL_ENCODING_BAYER_SRGGB14P, OMX_COLOR_FormatRawBayer14bit},
{MMAL_ENCODING_BAYER_SBGGR16, OMX_COLOR_FormatRawBayer16bit},
{MMAL_ENCODING_BAYER_SGBRG16, OMX_COLOR_FormatRawBayer16bit},
{MMAL_ENCODING_BAYER_SGRBG16, OMX_COLOR_FormatRawBayer16bit},
@@ -786,6 +790,21 @@ static struct {
{MMAL_ENCODING_Y12P, OMX_COLOR_FormatRawGrey12bit},
{MMAL_ENCODING_Y14P, OMX_COLOR_FormatRawGrey14bit},
{MMAL_ENCODING_Y16, OMX_COLOR_FormatRawGrey16bit},
{MMAL_ENCODING_Y10, OMX_COLOR_FormatRawGrey10bit16bpp},
{MMAL_ENCODING_Y12, OMX_COLOR_FormatRawGrey12bit16bpp},
{MMAL_ENCODING_Y14, OMX_COLOR_FormatRawGrey14bit16bpp},
{MMAL_ENCODING_BAYER_SBGGR10, OMX_COLOR_FormatRawBayer10bit16bpp},
{MMAL_ENCODING_BAYER_SGRBG10, OMX_COLOR_FormatRawBayer10bit16bpp},
{MMAL_ENCODING_BAYER_SGBRG10, OMX_COLOR_FormatRawBayer10bit16bpp},
{MMAL_ENCODING_BAYER_SRGGB10, OMX_COLOR_FormatRawBayer10bit16bpp},
{MMAL_ENCODING_BAYER_SBGGR12, OMX_COLOR_FormatRawBayer12bit16bpp},
{MMAL_ENCODING_BAYER_SGRBG12, OMX_COLOR_FormatRawBayer12bit16bpp},
{MMAL_ENCODING_BAYER_SGBRG12, OMX_COLOR_FormatRawBayer12bit16bpp},
{MMAL_ENCODING_BAYER_SRGGB12, OMX_COLOR_FormatRawBayer12bit16bpp},
{MMAL_ENCODING_BAYER_SBGGR14, OMX_COLOR_FormatRawBayer14bit16bpp},
{MMAL_ENCODING_BAYER_SGRBG14, OMX_COLOR_FormatRawBayer14bit16bpp},
{MMAL_ENCODING_BAYER_SGBRG14, OMX_COLOR_FormatRawBayer14bit16bpp},
{MMAL_ENCODING_BAYER_SRGGB14, OMX_COLOR_FormatRawBayer14bit16bpp},
{MMAL_ENCODING_UNKNOWN, OMX_COLOR_FormatUnused}
};
@@ -828,6 +847,11 @@ static struct {
{MMAL_ENCODING_BAYER_SGBRG12P, OMX_COLOR_FormatRawBayer12bit, OMX_BayerOrderGBRG},
{MMAL_ENCODING_BAYER_SRGGB12P, OMX_COLOR_FormatRawBayer12bit, OMX_BayerOrderRGGB},
{MMAL_ENCODING_BAYER_SBGGR14P, OMX_COLOR_FormatRawBayer14bit, OMX_BayerOrderBGGR},
{MMAL_ENCODING_BAYER_SGRBG14P, OMX_COLOR_FormatRawBayer14bit, OMX_BayerOrderGRBG},
{MMAL_ENCODING_BAYER_SGBRG14P, OMX_COLOR_FormatRawBayer14bit, OMX_BayerOrderGBRG},
{MMAL_ENCODING_BAYER_SRGGB14P, OMX_COLOR_FormatRawBayer14bit, OMX_BayerOrderRGGB},
{MMAL_ENCODING_BAYER_SBGGR16, OMX_COLOR_FormatRawBayer16bit, OMX_BayerOrderBGGR},
{MMAL_ENCODING_BAYER_SGRBG16, OMX_COLOR_FormatRawBayer16bit, OMX_BayerOrderGRBG},
{MMAL_ENCODING_BAYER_SGBRG16, OMX_COLOR_FormatRawBayer16bit, OMX_BayerOrderGBRG},
@@ -838,6 +862,21 @@ static struct {
{MMAL_ENCODING_BAYER_SGBRG10DPCM8,OMX_COLOR_FormatRawBayer8bitcompressed, OMX_BayerOrderGBRG},
{MMAL_ENCODING_BAYER_SRGGB10DPCM8,OMX_COLOR_FormatRawBayer8bitcompressed, OMX_BayerOrderRGGB},
{MMAL_ENCODING_BAYER_SBGGR10, OMX_COLOR_FormatRawBayer10bit16bpp, OMX_BayerOrderBGGR},
{MMAL_ENCODING_BAYER_SGRBG10, OMX_COLOR_FormatRawBayer10bit16bpp, OMX_BayerOrderGRBG},
{MMAL_ENCODING_BAYER_SGBRG10, OMX_COLOR_FormatRawBayer10bit16bpp, OMX_BayerOrderGBRG},
{MMAL_ENCODING_BAYER_SRGGB10, OMX_COLOR_FormatRawBayer10bit16bpp, OMX_BayerOrderRGGB},
{MMAL_ENCODING_BAYER_SBGGR12, OMX_COLOR_FormatRawBayer12bit16bpp, OMX_BayerOrderBGGR},
{MMAL_ENCODING_BAYER_SGRBG12, OMX_COLOR_FormatRawBayer12bit16bpp, OMX_BayerOrderGRBG},
{MMAL_ENCODING_BAYER_SGBRG12, OMX_COLOR_FormatRawBayer12bit16bpp, OMX_BayerOrderGBRG},
{MMAL_ENCODING_BAYER_SRGGB12, OMX_COLOR_FormatRawBayer12bit16bpp, OMX_BayerOrderRGGB},
{MMAL_ENCODING_BAYER_SBGGR14, OMX_COLOR_FormatRawBayer14bit16bpp, OMX_BayerOrderBGGR},
{MMAL_ENCODING_BAYER_SGRBG14, OMX_COLOR_FormatRawBayer14bit16bpp, OMX_BayerOrderGRBG},
{MMAL_ENCODING_BAYER_SGBRG14, OMX_COLOR_FormatRawBayer14bit16bpp, OMX_BayerOrderGBRG},
{MMAL_ENCODING_BAYER_SRGGB14, OMX_COLOR_FormatRawBayer14bit16bpp, OMX_BayerOrderRGGB},
{MMAL_ENCODING_UNKNOWN, OMX_COLOR_FormatMax, OMX_BayerOrderMax}
};

View File

@@ -157,6 +157,12 @@ typedef enum OMX_COLOR_FORMATTYPE {
OMX_COLOR_FormatRawGrey12bit,
OMX_COLOR_FormatRawGrey14bit,
OMX_COLOR_FormatRawGrey16bit,
OMX_COLOR_FormatRawBayer10bit16bpp,
OMX_COLOR_FormatRawBayer12bit16bpp,
OMX_COLOR_FormatRawBayer14bit16bpp,
OMX_COLOR_FormatRawGrey10bit16bpp,
OMX_COLOR_FormatRawGrey12bit16bpp,
OMX_COLOR_FormatRawGrey14bit16bpp,
OMX_COLOR_FormatMax = 0x7FFFFFFF
} OMX_COLOR_FORMATTYPE;