The hardware is capable of encoding/decoding RGB and ARGB formats
in whatever order the color components are,
but the resulting jpegs look good
if we start with raw data in BGR/ABGR order,
so we will further only support V4L2_PIX_FMT_BGR24 and V4L2_PIX_FMT_ABGR32.
Signed-off-by: Ming Qian <[email protected]>
---
.../media/platform/nxp/imx-jpeg/mxc-jpeg-hw.h | 4 +--
.../media/platform/nxp/imx-jpeg/mxc-jpeg.c | 34 +++++++++----------
.../media/platform/nxp/imx-jpeg/mxc-jpeg.h | 2 +-
3 files changed, 20 insertions(+), 20 deletions(-)
diff --git a/drivers/media/platform/nxp/imx-jpeg/mxc-jpeg-hw.h b/drivers/media/platform/nxp/imx-jpeg/mxc-jpeg-hw.h
index 356e40140987..e7e8954754b1 100644
--- a/drivers/media/platform/nxp/imx-jpeg/mxc-jpeg-hw.h
+++ b/drivers/media/platform/nxp/imx-jpeg/mxc-jpeg-hw.h
@@ -102,11 +102,11 @@ enum mxc_jpeg_image_format {
MXC_JPEG_INVALID = -1,
MXC_JPEG_YUV420 = 0x0, /* 2 Plannar, Y=1st plane UV=2nd plane */
MXC_JPEG_YUV422 = 0x1, /* 1 Plannar, YUYV sequence */
- MXC_JPEG_RGB = 0x2, /* RGBRGB packed format */
+ MXC_JPEG_BGR = 0x2, /* BGR packed format */
MXC_JPEG_YUV444 = 0x3, /* 1 Plannar, YUVYUV sequence */
MXC_JPEG_GRAY = 0x4, /* Y8 or Y12 or Single Component */
MXC_JPEG_RESERVED = 0x5,
- MXC_JPEG_ARGB = 0x6,
+ MXC_JPEG_ABGR = 0x6,
};
#include "mxc-jpeg.h"
diff --git a/drivers/media/platform/nxp/imx-jpeg/mxc-jpeg.c b/drivers/media/platform/nxp/imx-jpeg/mxc-jpeg.c
index 3df51d866011..8bee179c5cec 100644
--- a/drivers/media/platform/nxp/imx-jpeg/mxc-jpeg.c
+++ b/drivers/media/platform/nxp/imx-jpeg/mxc-jpeg.c
@@ -8,7 +8,7 @@
* Baseline and extended sequential jpeg decoding is supported.
* Progressive jpeg decoding is not supported by the IP.
* Supports encode and decode of various formats:
- * YUV444, YUV422, YUV420, RGB, ARGB, Gray
+ * YUV444, YUV422, YUV420, BGR, ABGR, Gray
* YUV420 is the only multi-planar format supported.
* Minimum resolution is 64 x 64, maximum 8192 x 8192.
* To achieve 8192 x 8192, modify in defconfig: CONFIG_CMA_SIZE_MBYTES=320
@@ -73,8 +73,8 @@ static const struct mxc_jpeg_fmt mxc_formats[] = {
.flags = MXC_JPEG_FMT_TYPE_ENC,
},
{
- .name = "RGB", /*RGBRGB packed format*/
- .fourcc = V4L2_PIX_FMT_RGB24,
+ .name = "BGR", /*BGR packed format*/
+ .fourcc = V4L2_PIX_FMT_BGR24,
.subsampling = V4L2_JPEG_CHROMA_SUBSAMPLING_444,
.nc = 3,
.depth = 24,
@@ -85,8 +85,8 @@ static const struct mxc_jpeg_fmt mxc_formats[] = {
.precision = 8,
},
{
- .name = "ARGB", /* ARGBARGB packed format */
- .fourcc = V4L2_PIX_FMT_ARGB32,
+ .name = "ABGR", /* ABGR packed format */
+ .fourcc = V4L2_PIX_FMT_ABGR32,
.subsampling = V4L2_JPEG_CHROMA_SUBSAMPLING_444,
.nc = 4,
.depth = 32,
@@ -420,10 +420,10 @@ static enum mxc_jpeg_image_format mxc_jpeg_fourcc_to_imgfmt(u32 fourcc)
return MXC_JPEG_YUV420;
case V4L2_PIX_FMT_YUV24:
return MXC_JPEG_YUV444;
- case V4L2_PIX_FMT_RGB24:
- return MXC_JPEG_RGB;
- case V4L2_PIX_FMT_ARGB32:
- return MXC_JPEG_ARGB;
+ case V4L2_PIX_FMT_BGR24:
+ return MXC_JPEG_BGR;
+ case V4L2_PIX_FMT_ABGR32:
+ return MXC_JPEG_ABGR;
default:
return MXC_JPEG_INVALID;
}
@@ -697,11 +697,11 @@ static int mxc_jpeg_fixup_sof(struct mxc_jpeg_sof *sof,
sof->comp[0].h = 0x2;
break;
case V4L2_PIX_FMT_YUV24:
- case V4L2_PIX_FMT_RGB24:
+ case V4L2_PIX_FMT_BGR24:
default:
sof->components_no = 3;
break;
- case V4L2_PIX_FMT_ARGB32:
+ case V4L2_PIX_FMT_ABGR32:
sof->components_no = 4;
break;
case V4L2_PIX_FMT_GREY:
@@ -729,11 +729,11 @@ static int mxc_jpeg_fixup_sos(struct mxc_jpeg_sos *sos,
sos->components_no = 3;
break;
case V4L2_PIX_FMT_YUV24:
- case V4L2_PIX_FMT_RGB24:
+ case V4L2_PIX_FMT_BGR24:
default:
sos->components_no = 3;
break;
- case V4L2_PIX_FMT_ARGB32:
+ case V4L2_PIX_FMT_ABGR32:
sos->components_no = 4;
break;
case V4L2_PIX_FMT_GREY:
@@ -764,8 +764,8 @@ static unsigned int mxc_jpeg_setup_cfg_stream(void *cfg_stream_vaddr,
memcpy(cfg + offset, jpeg_soi, ARRAY_SIZE(jpeg_soi));
offset += ARRAY_SIZE(jpeg_soi);
- if (fourcc == V4L2_PIX_FMT_RGB24 ||
- fourcc == V4L2_PIX_FMT_ARGB32) {
+ if (fourcc == V4L2_PIX_FMT_BGR24 ||
+ fourcc == V4L2_PIX_FMT_ABGR32) {
memcpy(cfg + offset, jpeg_app14, sizeof(jpeg_app14));
offset += sizeof(jpeg_app14);
} else {
@@ -1277,9 +1277,9 @@ static u32 mxc_jpeg_get_image_format(struct device *dev,
* encoded with 3 components have RGB colorspace, see Recommendation
* ITU-T T.872 chapter 6.5.3 APP14 marker segment for colour encoding
*/
- if (fourcc == V4L2_PIX_FMT_YUV24 || fourcc == V4L2_PIX_FMT_RGB24) {
+ if (fourcc == V4L2_PIX_FMT_YUV24 || fourcc == V4L2_PIX_FMT_BGR24) {
if (header->app14_tf == V4L2_JPEG_APP14_TF_CMYK_RGB)
- fourcc = V4L2_PIX_FMT_RGB24;
+ fourcc = V4L2_PIX_FMT_BGR24;
else
fourcc = V4L2_PIX_FMT_YUV24;
}
diff --git a/drivers/media/platform/nxp/imx-jpeg/mxc-jpeg.h b/drivers/media/platform/nxp/imx-jpeg/mxc-jpeg.h
index 9c9da32b2125..6e8c5aa7d956 100644
--- a/drivers/media/platform/nxp/imx-jpeg/mxc-jpeg.h
+++ b/drivers/media/platform/nxp/imx-jpeg/mxc-jpeg.h
@@ -17,7 +17,7 @@
#define MXC_JPEG_FMT_TYPE_RAW 1
#define MXC_JPEG_DEFAULT_WIDTH 1280
#define MXC_JPEG_DEFAULT_HEIGHT 720
-#define MXC_JPEG_DEFAULT_PFMT V4L2_PIX_FMT_RGB24
+#define MXC_JPEG_DEFAULT_PFMT V4L2_PIX_FMT_BGR24
#define MXC_JPEG_MIN_WIDTH 64
#define MXC_JPEG_MIN_HEIGHT 64
#define MXC_JPEG_MAX_WIDTH 0x2000
--
2.33.0
On 06.04.2022 12:47, Ming Qian wrote:
> The hardware is capable of encoding/decoding RGB and ARGB formats
> in whatever order the color components are,
> but the resulting jpegs look good
> if we start with raw data in BGR/ABGR order,
> so we will further only support V4L2_PIX_FMT_BGR24 and V4L2_PIX_FMT_ABGR32.
>
> Signed-off-by: Ming Qian <[email protected]>
Reviewed-by: Mirela Rabulea <[email protected]>
> ---
> .../media/platform/nxp/imx-jpeg/mxc-jpeg-hw.h | 4 +--
> .../media/platform/nxp/imx-jpeg/mxc-jpeg.c | 34 +++++++++----------
> .../media/platform/nxp/imx-jpeg/mxc-jpeg.h | 2 +-
> 3 files changed, 20 insertions(+), 20 deletions(-)
>
> diff --git a/drivers/media/platform/nxp/imx-jpeg/mxc-jpeg-hw.h b/drivers/media/platform/nxp/imx-jpeg/mxc-jpeg-hw.h
> index 356e40140987..e7e8954754b1 100644
> --- a/drivers/media/platform/nxp/imx-jpeg/mxc-jpeg-hw.h
> +++ b/drivers/media/platform/nxp/imx-jpeg/mxc-jpeg-hw.h
> @@ -102,11 +102,11 @@ enum mxc_jpeg_image_format {
> MXC_JPEG_INVALID = -1,
> MXC_JPEG_YUV420 = 0x0, /* 2 Plannar, Y=1st plane UV=2nd plane */
> MXC_JPEG_YUV422 = 0x1, /* 1 Plannar, YUYV sequence */
> - MXC_JPEG_RGB = 0x2, /* RGBRGB packed format */
> + MXC_JPEG_BGR = 0x2, /* BGR packed format */
> MXC_JPEG_YUV444 = 0x3, /* 1 Plannar, YUVYUV sequence */
> MXC_JPEG_GRAY = 0x4, /* Y8 or Y12 or Single Component */
> MXC_JPEG_RESERVED = 0x5,
> - MXC_JPEG_ARGB = 0x6,
> + MXC_JPEG_ABGR = 0x6,
> };
>
> #include "mxc-jpeg.h"
> diff --git a/drivers/media/platform/nxp/imx-jpeg/mxc-jpeg.c b/drivers/media/platform/nxp/imx-jpeg/mxc-jpeg.c
> index 3df51d866011..8bee179c5cec 100644
> --- a/drivers/media/platform/nxp/imx-jpeg/mxc-jpeg.c
> +++ b/drivers/media/platform/nxp/imx-jpeg/mxc-jpeg.c
> @@ -8,7 +8,7 @@
> * Baseline and extended sequential jpeg decoding is supported.
> * Progressive jpeg decoding is not supported by the IP.
> * Supports encode and decode of various formats:
> - * YUV444, YUV422, YUV420, RGB, ARGB, Gray
> + * YUV444, YUV422, YUV420, BGR, ABGR, Gray
> * YUV420 is the only multi-planar format supported.
> * Minimum resolution is 64 x 64, maximum 8192 x 8192.
> * To achieve 8192 x 8192, modify in defconfig: CONFIG_CMA_SIZE_MBYTES=320
> @@ -73,8 +73,8 @@ static const struct mxc_jpeg_fmt mxc_formats[] = {
> .flags = MXC_JPEG_FMT_TYPE_ENC,
> },
> {
> - .name = "RGB", /*RGBRGB packed format*/
> - .fourcc = V4L2_PIX_FMT_RGB24,
> + .name = "BGR", /*BGR packed format*/
> + .fourcc = V4L2_PIX_FMT_BGR24,
> .subsampling = V4L2_JPEG_CHROMA_SUBSAMPLING_444,
> .nc = 3,
> .depth = 24,
> @@ -85,8 +85,8 @@ static const struct mxc_jpeg_fmt mxc_formats[] = {
> .precision = 8,
> },
> {
> - .name = "ARGB", /* ARGBARGB packed format */
> - .fourcc = V4L2_PIX_FMT_ARGB32,
> + .name = "ABGR", /* ABGR packed format */
> + .fourcc = V4L2_PIX_FMT_ABGR32,
> .subsampling = V4L2_JPEG_CHROMA_SUBSAMPLING_444,
> .nc = 4,
> .depth = 32,
> @@ -420,10 +420,10 @@ static enum mxc_jpeg_image_format mxc_jpeg_fourcc_to_imgfmt(u32 fourcc)
> return MXC_JPEG_YUV420;
> case V4L2_PIX_FMT_YUV24:
> return MXC_JPEG_YUV444;
> - case V4L2_PIX_FMT_RGB24:
> - return MXC_JPEG_RGB;
> - case V4L2_PIX_FMT_ARGB32:
> - return MXC_JPEG_ARGB;
> + case V4L2_PIX_FMT_BGR24:
> + return MXC_JPEG_BGR;
> + case V4L2_PIX_FMT_ABGR32:
> + return MXC_JPEG_ABGR;
> default:
> return MXC_JPEG_INVALID;
> }
> @@ -697,11 +697,11 @@ static int mxc_jpeg_fixup_sof(struct mxc_jpeg_sof *sof,
> sof->comp[0].h = 0x2;
> break;
> case V4L2_PIX_FMT_YUV24:
> - case V4L2_PIX_FMT_RGB24:
> + case V4L2_PIX_FMT_BGR24:
> default:
> sof->components_no = 3;
> break;
> - case V4L2_PIX_FMT_ARGB32:
> + case V4L2_PIX_FMT_ABGR32:
> sof->components_no = 4;
> break;
> case V4L2_PIX_FMT_GREY:
> @@ -729,11 +729,11 @@ static int mxc_jpeg_fixup_sos(struct mxc_jpeg_sos *sos,
> sos->components_no = 3;
> break;
> case V4L2_PIX_FMT_YUV24:
> - case V4L2_PIX_FMT_RGB24:
> + case V4L2_PIX_FMT_BGR24:
> default:
> sos->components_no = 3;
> break;
> - case V4L2_PIX_FMT_ARGB32:
> + case V4L2_PIX_FMT_ABGR32:
> sos->components_no = 4;
> break;
> case V4L2_PIX_FMT_GREY:
> @@ -764,8 +764,8 @@ static unsigned int mxc_jpeg_setup_cfg_stream(void *cfg_stream_vaddr,
> memcpy(cfg + offset, jpeg_soi, ARRAY_SIZE(jpeg_soi));
> offset += ARRAY_SIZE(jpeg_soi);
>
> - if (fourcc == V4L2_PIX_FMT_RGB24 ||
> - fourcc == V4L2_PIX_FMT_ARGB32) {
> + if (fourcc == V4L2_PIX_FMT_BGR24 ||
> + fourcc == V4L2_PIX_FMT_ABGR32) {
> memcpy(cfg + offset, jpeg_app14, sizeof(jpeg_app14));
> offset += sizeof(jpeg_app14);
> } else {
> @@ -1277,9 +1277,9 @@ static u32 mxc_jpeg_get_image_format(struct device *dev,
> * encoded with 3 components have RGB colorspace, see Recommendation
> * ITU-T T.872 chapter 6.5.3 APP14 marker segment for colour encoding
> */
> - if (fourcc == V4L2_PIX_FMT_YUV24 || fourcc == V4L2_PIX_FMT_RGB24) {
> + if (fourcc == V4L2_PIX_FMT_YUV24 || fourcc == V4L2_PIX_FMT_BGR24) {
> if (header->app14_tf == V4L2_JPEG_APP14_TF_CMYK_RGB)
> - fourcc = V4L2_PIX_FMT_RGB24;
> + fourcc = V4L2_PIX_FMT_BGR24;
> else
> fourcc = V4L2_PIX_FMT_YUV24;
> }
> diff --git a/drivers/media/platform/nxp/imx-jpeg/mxc-jpeg.h b/drivers/media/platform/nxp/imx-jpeg/mxc-jpeg.h
> index 9c9da32b2125..6e8c5aa7d956 100644
> --- a/drivers/media/platform/nxp/imx-jpeg/mxc-jpeg.h
> +++ b/drivers/media/platform/nxp/imx-jpeg/mxc-jpeg.h
> @@ -17,7 +17,7 @@
> #define MXC_JPEG_FMT_TYPE_RAW 1
> #define MXC_JPEG_DEFAULT_WIDTH 1280
> #define MXC_JPEG_DEFAULT_HEIGHT 720
> -#define MXC_JPEG_DEFAULT_PFMT V4L2_PIX_FMT_RGB24
> +#define MXC_JPEG_DEFAULT_PFMT V4L2_PIX_FMT_BGR24
> #define MXC_JPEG_MIN_WIDTH 64
> #define MXC_JPEG_MIN_HEIGHT 64
> #define MXC_JPEG_MAX_WIDTH 0x2000