IL ISP: Major updates.
authorDave Stevenson <6by9@users.noreply.github.com>
Tue, 25 Oct 2016 15:30:49 +0000 (16:30 +0100)
committerpopcornmix <popcornmix@gmail.com>
Tue, 25 Oct 2016 15:30:49 +0000 (16:30 +0100)
Supports Bayer (needs more pipe tweaks)
Add RGB565 and RGBA input formats
Add RGB output formats
Corrects RGB888/BGR888 colour ordering.
Correct buffer flag handling.
Return buffers after checking for new buffers to fully utilise
the pipe if buffer callbacks are taking some time.

interface/mmal/mmal_encodings.h
interface/mmal/util/mmal_il.c
interface/mmal/util/mmal_il.h
interface/mmal/util/mmal_util.c

index b2fc682c8466076f58f8df90fb0fbc05f269b08c..45589d763fcc33d1c09d649807ba8b97420921c4 100644 (file)
@@ -97,15 +97,15 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 //FourCC values copied from V4L2
 //10 bit per pixel packed Bayer formats.
 #define MMAL_ENCODING_BAYER_SBGGR10P   MMAL_FOURCC('p','B','A','A')  //BGGR
-//#define MMAL_ENCODING_BAYER_SGRBG10P   MMAL_FOURCC('p','g','A','A')  //GRBG
-//#define MMAL_ENCODING_BAYER_SGBRG10P   MMAL_FOURCC('p','G','A','A')  //GBRG
-//#define MMAL_ENCODING_BAYER_SRGGB10P   MMAL_FOURCC('p','R','A','A')  //RGGB
+#define MMAL_ENCODING_BAYER_SGRBG10P   MMAL_FOURCC('p','g','A','A')  //GRBG
+#define MMAL_ENCODING_BAYER_SGBRG10P   MMAL_FOURCC('p','G','A','A')  //GBRG
+#define MMAL_ENCODING_BAYER_SRGGB10P   MMAL_FOURCC('p','R','A','A')  //RGGB
 
 //8 bit per pixel Bayer formats.
 #define MMAL_ENCODING_BAYER_SBGGR8     MMAL_FOURCC('B','A','8','1')  //BGGR
-//#define MMAL_ENCODING_BAYER_SGBRG8     MMAL_FOURCC('G','B','R','G')  //GBRG
-//#define MMAL_ENCODING_BAYER_SGRBG8     MMAL_FOURCC('G','R','B','G')  //GRBG
-//#define MMAL_ENCODING_BAYER_SRGGB8     MMAL_FOURCC('R','G','G','B')  //RGGB
+#define MMAL_ENCODING_BAYER_SGBRG8     MMAL_FOURCC('G','B','R','G')  //GBRG
+#define MMAL_ENCODING_BAYER_SGRBG8     MMAL_FOURCC('G','R','B','G')  //GRBG
+#define MMAL_ENCODING_BAYER_SRGGB8     MMAL_FOURCC('R','G','G','B')  //RGGB
 
 //12 bit per pixel Bayer formats - not defined in V4L2, only 12bit expanded to 16.
 #define MMAL_ENCODING_BAYER_SBGGR12P   MMAL_FOURCC('B','Y','1','2')  //BGGR
index 9e369d16de6c682c081c44cbd759755966ba56db..5526d9b5bad97947730241804ef938d25970e8e8 100644 (file)
@@ -726,6 +726,9 @@ static struct {
    {MMAL_ENCODING_EGL_IMAGE,      OMX_COLOR_FormatBRCMEGL},
    {MMAL_ENCODING_BAYER_SBGGR8,   OMX_COLOR_FormatRawBayer8bit},
    {MMAL_ENCODING_BAYER_SBGGR10P, OMX_COLOR_FormatRawBayer10bit},
+   {MMAL_ENCODING_BAYER_SGRBG10P, OMX_COLOR_FormatRawBayer10bit},
+   {MMAL_ENCODING_BAYER_SGBRG10P, OMX_COLOR_FormatRawBayer10bit},
+   {MMAL_ENCODING_BAYER_SRGGB10P, OMX_COLOR_FormatRawBayer10bit},
    {MMAL_ENCODING_BAYER_SBGGR12P, OMX_COLOR_FormatRawBayer12bit},
    {MMAL_ENCODING_BAYER_SBGGR16,  OMX_COLOR_FormatRawBayer16bit},
    {MMAL_ENCODING_BAYER_SBGGR10DPCM8,OMX_COLOR_FormatRawBayer8bitcompressed},
@@ -749,6 +752,48 @@ OMX_COLOR_FORMATTYPE mmalil_encoding_to_omx_color_format(uint32_t encoding)
    return mmal_omx_colorformat_coding_table[i].coding;
 }
 
+static struct {
+   uint32_t encoding;
+   OMX_COLOR_FORMATTYPE color_format;
+   OMX_BAYERORDERTYPE bayer_order;
+} mmal_omx_bayer_order_coding_table[] =
+{
+   //Colour format required for conversion from OMX to MMAL.
+   //Not used for MMAL encoding to OMX color format.
+   {MMAL_ENCODING_BAYER_SBGGR8, OMX_COLOR_FormatRawBayer8bit, OMX_BayerOrderBGGR},
+   {MMAL_ENCODING_BAYER_SGBRG8, OMX_COLOR_FormatRawBayer8bit, OMX_BayerOrderGBRG},
+   {MMAL_ENCODING_BAYER_SGRBG8, OMX_COLOR_FormatRawBayer8bit, OMX_BayerOrderGRBG},
+   {MMAL_ENCODING_BAYER_SRGGB8, OMX_COLOR_FormatRawBayer8bit, OMX_BayerOrderRGGB},
+
+   {MMAL_ENCODING_BAYER_SBGGR10P, OMX_COLOR_FormatRawBayer10bit, OMX_BayerOrderBGGR},
+   {MMAL_ENCODING_BAYER_SGRBG10P, OMX_COLOR_FormatRawBayer10bit, OMX_BayerOrderGRBG},
+   {MMAL_ENCODING_BAYER_SGBRG10P, OMX_COLOR_FormatRawBayer10bit, OMX_BayerOrderGBRG},
+   {MMAL_ENCODING_BAYER_SRGGB10P, OMX_COLOR_FormatRawBayer10bit, OMX_BayerOrderRGGB},
+
+   {MMAL_ENCODING_BAYER_SBGGR12P, OMX_COLOR_FormatRawBayer12bit, OMX_BayerOrderBGGR},
+   {MMAL_ENCODING_BAYER_SBGGR16,  OMX_COLOR_FormatRawBayer16bit, OMX_BayerOrderBGGR},
+   {MMAL_ENCODING_BAYER_SBGGR10DPCM8,OMX_COLOR_FormatRawBayer8bitcompressed, OMX_BayerOrderBGGR},
+   {MMAL_ENCODING_UNKNOWN,        OMX_BayerOrderMax}
+};
+
+uint32_t mmalil_omx_bayer_format_order_to_encoding(OMX_BAYERORDERTYPE bayer_order, OMX_COLOR_FORMATTYPE color_format)
+{
+   unsigned int i;
+   for(i = 0; mmal_omx_bayer_order_coding_table[i].encoding != MMAL_ENCODING_UNKNOWN; i++)
+      if(mmal_omx_bayer_order_coding_table[i].bayer_order == bayer_order &&
+         mmal_omx_bayer_order_coding_table[i].color_format == color_format)
+         break;
+   return mmal_omx_bayer_order_coding_table[i].encoding;
+}
+
+OMX_BAYERORDERTYPE mmalil_encoding_to_omx_bayer_order(uint32_t encoding)
+{
+   unsigned int i;
+   for(i = 0; mmal_omx_bayer_order_coding_table[i].encoding != MMAL_ENCODING_UNKNOWN; i++)
+      if(mmal_omx_bayer_order_coding_table[i].encoding == encoding) break;
+   return mmal_omx_bayer_order_coding_table[i].bayer_order;
+}
+
 /*****************************************************************************/
 static struct {
    uint32_t mmal;
index b13cbefa07004e3fe3d62aaa0f753fc66329c491..b047a2897addbc2e70fa0a436553a4f3d706d151 100644 (file)
@@ -99,6 +99,8 @@ OMX_IMAGE_CODINGTYPE mmalil_encoding_to_omx_image_coding(uint32_t encoding);
 uint32_t mmalil_omx_coding_to_encoding(uint32_t encoding, OMX_PORTDOMAINTYPE domain);
 uint32_t mmalil_omx_color_format_to_encoding(OMX_COLOR_FORMATTYPE coding);
 OMX_COLOR_FORMATTYPE mmalil_encoding_to_omx_color_format(uint32_t encoding);
+uint32_t mmalil_omx_bayer_format_order_to_encoding(OMX_BAYERORDERTYPE bayer_order, OMX_COLOR_FORMATTYPE color_format);
+OMX_BAYERORDERTYPE mmalil_encoding_to_omx_bayer_order(uint32_t encoding);
 uint32_t mmalil_omx_color_space_to_mmal(OMX_COLORSPACETYPE coding);
 OMX_COLORSPACETYPE mmalil_color_space_to_omx(uint32_t coding);
 uint32_t mmalil_omx_video_profile_to_mmal(OMX_U32 level, OMX_VIDEO_CODINGTYPE coding);
index a260c9cfca082218ab73d82c977f42e12352abc0..eb9decbe38274ef90b615f0780f26968100f08f5 100644 (file)
@@ -108,8 +108,14 @@ static struct {
    // Bayer formats, the resulting alignment must also be a multiple of 16.
    // Camplus padded to a multiple of 32, so let's copy that.
    {MMAL_ENCODING_BAYER_SBGGR8,        1, 1, 32},
+   {MMAL_ENCODING_BAYER_SGBRG8,        1, 1, 32},
+   {MMAL_ENCODING_BAYER_SGRBG8,        1, 1, 32},
+   {MMAL_ENCODING_BAYER_SRGGB8,        1, 1, 32},
    {MMAL_ENCODING_BAYER_SBGGR10DPCM8,  1, 1, 32},
    {MMAL_ENCODING_BAYER_SBGGR10P,      10,8, 32},
+   {MMAL_ENCODING_BAYER_SGRBG10P,      10,8, 32},
+   {MMAL_ENCODING_BAYER_SGBRG10P,      10,8, 32},
+   {MMAL_ENCODING_BAYER_SRGGB10P,      10,8, 32},
    {MMAL_ENCODING_BAYER_SBGGR16,       2, 1, 32},
 
    /* {MMAL_ENCODING_YUVUV128, 1, 1}, That's a special case which must not be included */