2012/5/29 Laurent Pinchart <[email protected]>:
> Hi Jean-Philippe,
>
> On Tuesday 29 May 2012 10:24:45 jean-philippe francois wrote:
>> Hi,
>>
>> omap3 ISP previewer block can convert a raw bayer image into a UYVY image.
>> Debayering coefficient are stored in an undocumented table. In the current
>> form, only GRBG format are converted correctly.
>>
>> However, the other CFA arrangement can be transformed in GRBG arrangement by
>> shifting the image window one pixel to the left or to the bottom.
>>
>> Here is a patch against vanilla 3.2.17, that was only tested with a BGGR
>> arrangement.
>> Is it the right way to fix this issue ?
>
> That's really a hack. I'd much rather support other Bayer orders properly by
> modifying the CFA coefficients table.
>
> The table is arranged as 4 blocks of 144 coefficients. If I'm not mistaken (I
> haven't tested it), the blocks should be arranged as follows:
>
> GRBG 0 1 2 3
> RGGB 1 0 3 2
> BGGR 2 3 0 1
> GBRG 3 2 1 0
>
> Would you be able to test that with your BGGR sensor ?

It is indeed working for BGGR.

>
> If that's correct, it shouldn't be too difficult to modify the order
> dynamically based on the format.

What about something like the patch below ?
(It is easier for me to build images using mainline kernel + patch queue,
but should this patch be a good start, I would switch to a git workflow)

Index: b/drivers/media/video/omap3isp/isppreview.c
===================================================================
--- a/drivers/media/video/omap3isp/isppreview.c
+++ b/drivers/media/video/omap3isp/isppreview.c
@@ -308,6 +308,19 @@
                        dcor->couplet_mode_en ? ISPPRV_PCR_DCCOUP : 0);
 }

+
+/* cfa table is organised in four blocks.
+ * Default ordering is for GRBG arrangement, but changing
+ * the block order allows to interpolate other cfa arrangement
+ */
+static unsigned int cfa_coef_order[4][4] = {
+       { 0, 1, 2, 3 }, /* GRBG */
+       { 1, 0, 3, 2 }, /* RGGB */
+       { 2, 3, 0, 1 }, /* BGGR */
+       { 3, 2, 1, 0 }, /* GBRG */
+};
+#define CFA_BLK_SIZE (OMAP3ISP_PREV_CFA_TBL_SIZE / 4)
+
 /*
  * preview_config_cfa - Configures the CFA Interpolation parameters.
  * @prev_cfa: Structure containing the CFA interpolation table, CFA format
@@ -319,6 +332,7 @@
        struct isp_device *isp = to_isp_device(prev);
        const struct omap3isp_prev_cfa *cfa = prev_cfa;
        unsigned int i;
+       unsigned int * block_order;

        isp_reg_clr_set(isp, OMAP3_ISP_IOMEM_PREV, ISPPRV_PCR,
                        ISPPRV_PCR_CFAFMT_MASK,
@@ -332,8 +346,30 @@
        isp_reg_writel(isp, ISPPRV_CFA_TABLE_ADDR,
                       OMAP3_ISP_IOMEM_PREV, ISPPRV_SET_TBL_ADDR);

+
+       switch(prev->formats[PREV_PAD_SINK].code) {
+       case V4L2_MBUS_FMT_SRGGB10_1X10 :
+               block_order = cfa_coef_order[1];
+               break;
+
+       case V4L2_MBUS_FMT_SBGGR10_1X10 :
+               block_order = cfa_coef_order[2];
+               break;
+
+       case V4L2_MBUS_FMT_SGBRG10_1X10 :
+               block_order = cfa_coef_order[3];
+               break;
+
+       default :
+               block_order = cfa_coef_order[0];
+       }
+
+
        for (i = 0; i < OMAP3ISP_PREV_CFA_TBL_SIZE; i++) {
-               isp_reg_writel(isp, cfa->table[i],
+               unsigned int base, offset;
+               base = block_order[i / CFA_BLK_SIZE]*CFA_BLK_SIZE;
+               offset = i % CFA_BLK_SIZE;
+               isp_reg_writel(isp, cfa->table[base + offset],
                               OMAP3_ISP_IOMEM_PREV, ISPPRV_SET_TBL_DATA);
        }
 }
@@ -1344,7 +1380,8 @@
        preview_adjust_bandwidth(prev);

        preview_config_input_size(prev);
-
+       preview_config_cfa(prev, &prev->params.cfa);
+
        if (prev->input == PREVIEW_INPUT_CCDC)
                preview_config_inlineoffset(prev, 0);
        else


>
> --
> Regards,
>
> Laurent Pinchart
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to