Commit 6856ba77 authored by Helen Fornazier's avatar Helen Fornazier Committed by Mauro Carvalho Chehab

[media] vimc: sca: Add scaler

Implement scaler and integrated with the core
Signed-off-by: default avatarHelen Koike <helen.koike@collabora.com>
Signed-off-by: default avatarHans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@s-opensource.com>
parent 88f42bf0
...@@ -2,7 +2,8 @@ vimc-objs := vimc-core.o ...@@ -2,7 +2,8 @@ vimc-objs := vimc-core.o
vimc_capture-objs := vimc-capture.o vimc_capture-objs := vimc-capture.o
vimc_common-objs := vimc-common.o vimc_common-objs := vimc-common.o
vimc_debayer-objs := vimc-debayer.o vimc_debayer-objs := vimc-debayer.o
vimc_scaler-objs := vimc-scaler.o
vimc_sensor-objs := vimc-sensor.o vimc_sensor-objs := vimc-sensor.o
obj-$(CONFIG_VIDEO_VIMC) += vimc.o vimc_capture.o vimc_common.o vimc-debayer.o \ obj-$(CONFIG_VIDEO_VIMC) += vimc.o vimc_capture.o vimc_common.o vimc-debayer.o \
vimc_sensor.o vimc_scaler.o vimc_sensor.o
...@@ -20,6 +20,10 @@ ...@@ -20,6 +20,10 @@
#include "vimc-common.h" #include "vimc-common.h"
/*
* NOTE: non-bayer formats need to come first (necessary for enum_mbus_code
* in the scaler)
*/
static const struct vimc_pix_map vimc_pix_map_list[] = { static const struct vimc_pix_map vimc_pix_map_list[] = {
/* TODO: add all missing formats */ /* TODO: add all missing formats */
...@@ -28,16 +32,19 @@ static const struct vimc_pix_map vimc_pix_map_list[] = { ...@@ -28,16 +32,19 @@ static const struct vimc_pix_map vimc_pix_map_list[] = {
.code = MEDIA_BUS_FMT_BGR888_1X24, .code = MEDIA_BUS_FMT_BGR888_1X24,
.pixelformat = V4L2_PIX_FMT_BGR24, .pixelformat = V4L2_PIX_FMT_BGR24,
.bpp = 3, .bpp = 3,
.bayer = false,
}, },
{ {
.code = MEDIA_BUS_FMT_RGB888_1X24, .code = MEDIA_BUS_FMT_RGB888_1X24,
.pixelformat = V4L2_PIX_FMT_RGB24, .pixelformat = V4L2_PIX_FMT_RGB24,
.bpp = 3, .bpp = 3,
.bayer = false,
}, },
{ {
.code = MEDIA_BUS_FMT_ARGB8888_1X32, .code = MEDIA_BUS_FMT_ARGB8888_1X32,
.pixelformat = V4L2_PIX_FMT_ARGB32, .pixelformat = V4L2_PIX_FMT_ARGB32,
.bpp = 4, .bpp = 4,
.bayer = false,
}, },
/* Bayer formats */ /* Bayer formats */
...@@ -45,41 +52,49 @@ static const struct vimc_pix_map vimc_pix_map_list[] = { ...@@ -45,41 +52,49 @@ static const struct vimc_pix_map vimc_pix_map_list[] = {
.code = MEDIA_BUS_FMT_SBGGR8_1X8, .code = MEDIA_BUS_FMT_SBGGR8_1X8,
.pixelformat = V4L2_PIX_FMT_SBGGR8, .pixelformat = V4L2_PIX_FMT_SBGGR8,
.bpp = 1, .bpp = 1,
.bayer = true,
}, },
{ {
.code = MEDIA_BUS_FMT_SGBRG8_1X8, .code = MEDIA_BUS_FMT_SGBRG8_1X8,
.pixelformat = V4L2_PIX_FMT_SGBRG8, .pixelformat = V4L2_PIX_FMT_SGBRG8,
.bpp = 1, .bpp = 1,
.bayer = true,
}, },
{ {
.code = MEDIA_BUS_FMT_SGRBG8_1X8, .code = MEDIA_BUS_FMT_SGRBG8_1X8,
.pixelformat = V4L2_PIX_FMT_SGRBG8, .pixelformat = V4L2_PIX_FMT_SGRBG8,
.bpp = 1, .bpp = 1,
.bayer = true,
}, },
{ {
.code = MEDIA_BUS_FMT_SRGGB8_1X8, .code = MEDIA_BUS_FMT_SRGGB8_1X8,
.pixelformat = V4L2_PIX_FMT_SRGGB8, .pixelformat = V4L2_PIX_FMT_SRGGB8,
.bpp = 1, .bpp = 1,
.bayer = true,
}, },
{ {
.code = MEDIA_BUS_FMT_SBGGR10_1X10, .code = MEDIA_BUS_FMT_SBGGR10_1X10,
.pixelformat = V4L2_PIX_FMT_SBGGR10, .pixelformat = V4L2_PIX_FMT_SBGGR10,
.bpp = 2, .bpp = 2,
.bayer = true,
}, },
{ {
.code = MEDIA_BUS_FMT_SGBRG10_1X10, .code = MEDIA_BUS_FMT_SGBRG10_1X10,
.pixelformat = V4L2_PIX_FMT_SGBRG10, .pixelformat = V4L2_PIX_FMT_SGBRG10,
.bpp = 2, .bpp = 2,
.bayer = true,
}, },
{ {
.code = MEDIA_BUS_FMT_SGRBG10_1X10, .code = MEDIA_BUS_FMT_SGRBG10_1X10,
.pixelformat = V4L2_PIX_FMT_SGRBG10, .pixelformat = V4L2_PIX_FMT_SGRBG10,
.bpp = 2, .bpp = 2,
.bayer = true,
}, },
{ {
.code = MEDIA_BUS_FMT_SRGGB10_1X10, .code = MEDIA_BUS_FMT_SRGGB10_1X10,
.pixelformat = V4L2_PIX_FMT_SRGGB10, .pixelformat = V4L2_PIX_FMT_SRGGB10,
.bpp = 2, .bpp = 2,
.bayer = true,
}, },
/* 10bit raw bayer a-law compressed to 8 bits */ /* 10bit raw bayer a-law compressed to 8 bits */
...@@ -87,21 +102,25 @@ static const struct vimc_pix_map vimc_pix_map_list[] = { ...@@ -87,21 +102,25 @@ static const struct vimc_pix_map vimc_pix_map_list[] = {
.code = MEDIA_BUS_FMT_SBGGR10_ALAW8_1X8, .code = MEDIA_BUS_FMT_SBGGR10_ALAW8_1X8,
.pixelformat = V4L2_PIX_FMT_SBGGR10ALAW8, .pixelformat = V4L2_PIX_FMT_SBGGR10ALAW8,
.bpp = 1, .bpp = 1,
.bayer = true,
}, },
{ {
.code = MEDIA_BUS_FMT_SGBRG10_ALAW8_1X8, .code = MEDIA_BUS_FMT_SGBRG10_ALAW8_1X8,
.pixelformat = V4L2_PIX_FMT_SGBRG10ALAW8, .pixelformat = V4L2_PIX_FMT_SGBRG10ALAW8,
.bpp = 1, .bpp = 1,
.bayer = true,
}, },
{ {
.code = MEDIA_BUS_FMT_SGRBG10_ALAW8_1X8, .code = MEDIA_BUS_FMT_SGRBG10_ALAW8_1X8,
.pixelformat = V4L2_PIX_FMT_SGRBG10ALAW8, .pixelformat = V4L2_PIX_FMT_SGRBG10ALAW8,
.bpp = 1, .bpp = 1,
.bayer = true,
}, },
{ {
.code = MEDIA_BUS_FMT_SRGGB10_ALAW8_1X8, .code = MEDIA_BUS_FMT_SRGGB10_ALAW8_1X8,
.pixelformat = V4L2_PIX_FMT_SRGGB10ALAW8, .pixelformat = V4L2_PIX_FMT_SRGGB10ALAW8,
.bpp = 1, .bpp = 1,
.bayer = true,
}, },
/* 10bit raw bayer DPCM compressed to 8 bits */ /* 10bit raw bayer DPCM compressed to 8 bits */
...@@ -109,41 +128,49 @@ static const struct vimc_pix_map vimc_pix_map_list[] = { ...@@ -109,41 +128,49 @@ static const struct vimc_pix_map vimc_pix_map_list[] = {
.code = MEDIA_BUS_FMT_SBGGR10_DPCM8_1X8, .code = MEDIA_BUS_FMT_SBGGR10_DPCM8_1X8,
.pixelformat = V4L2_PIX_FMT_SBGGR10DPCM8, .pixelformat = V4L2_PIX_FMT_SBGGR10DPCM8,
.bpp = 1, .bpp = 1,
.bayer = true,
}, },
{ {
.code = MEDIA_BUS_FMT_SGBRG10_DPCM8_1X8, .code = MEDIA_BUS_FMT_SGBRG10_DPCM8_1X8,
.pixelformat = V4L2_PIX_FMT_SGBRG10DPCM8, .pixelformat = V4L2_PIX_FMT_SGBRG10DPCM8,
.bpp = 1, .bpp = 1,
.bayer = true,
}, },
{ {
.code = MEDIA_BUS_FMT_SGRBG10_DPCM8_1X8, .code = MEDIA_BUS_FMT_SGRBG10_DPCM8_1X8,
.pixelformat = V4L2_PIX_FMT_SGRBG10DPCM8, .pixelformat = V4L2_PIX_FMT_SGRBG10DPCM8,
.bpp = 1, .bpp = 1,
.bayer = true,
}, },
{ {
.code = MEDIA_BUS_FMT_SRGGB10_DPCM8_1X8, .code = MEDIA_BUS_FMT_SRGGB10_DPCM8_1X8,
.pixelformat = V4L2_PIX_FMT_SRGGB10DPCM8, .pixelformat = V4L2_PIX_FMT_SRGGB10DPCM8,
.bpp = 1, .bpp = 1,
.bayer = true,
}, },
{ {
.code = MEDIA_BUS_FMT_SBGGR12_1X12, .code = MEDIA_BUS_FMT_SBGGR12_1X12,
.pixelformat = V4L2_PIX_FMT_SBGGR12, .pixelformat = V4L2_PIX_FMT_SBGGR12,
.bpp = 2, .bpp = 2,
.bayer = true,
}, },
{ {
.code = MEDIA_BUS_FMT_SGBRG12_1X12, .code = MEDIA_BUS_FMT_SGBRG12_1X12,
.pixelformat = V4L2_PIX_FMT_SGBRG12, .pixelformat = V4L2_PIX_FMT_SGBRG12,
.bpp = 2, .bpp = 2,
.bayer = true,
}, },
{ {
.code = MEDIA_BUS_FMT_SGRBG12_1X12, .code = MEDIA_BUS_FMT_SGRBG12_1X12,
.pixelformat = V4L2_PIX_FMT_SGRBG12, .pixelformat = V4L2_PIX_FMT_SGRBG12,
.bpp = 2, .bpp = 2,
.bayer = true,
}, },
{ {
.code = MEDIA_BUS_FMT_SRGGB12_1X12, .code = MEDIA_BUS_FMT_SRGGB12_1X12,
.pixelformat = V4L2_PIX_FMT_SRGGB12, .pixelformat = V4L2_PIX_FMT_SRGGB12,
.bpp = 2, .bpp = 2,
.bayer = true,
}, },
}; };
......
...@@ -84,6 +84,7 @@ struct vimc_pix_map { ...@@ -84,6 +84,7 @@ struct vimc_pix_map {
unsigned int code; unsigned int code;
unsigned int bpp; unsigned int bpp;
u32 pixelformat; u32 pixelformat;
bool bayer;
}; };
/** /**
......
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment