Re: [PATCH v4 16/16] media: coda: support 1024 px height on CODA7, set max frame size to 1080p
On 10 September 2012 17:30, Philipp Zabel p.za...@pengutronix.de wrote: Increases the maximum encoded frame buffer size to 1 MiB. Signed-off-by: Philipp Zabel p.za...@pengutronix.de --- drivers/media/platform/coda.c | 11 +-- drivers/media/platform/coda.h |3 ++- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/drivers/media/platform/coda.c b/drivers/media/platform/coda.c index 4c3e100..defab64 100644 --- a/drivers/media/platform/coda.c +++ b/drivers/media/platform/coda.c @@ -47,16 +47,14 @@ #define CODA_MAX_FRAMEBUFFERS 2 -#define MAX_W 720 -#define MAX_H 576 -#define CODA_MAX_FRAME_SIZE0x9 +#define MAX_W 1920 +#define MAX_H 1080 You need to define separate MAX_W and MAX_H for codadx6 and coda7. The reason of this is that 'try_fmt' in codadx6 must adjust the width and height to 720x576 not to 1920x1080. So you need to modify try_fmt too. +#define CODA_MAX_FRAME_SIZE0x10 #define FMO_SLICE_SAVE_BUF_SIZE (32) #define CODA_DEFAULT_GAMMA 4096 #define MIN_W 176 #define MIN_H 144 -#define MAX_W 720 -#define MAX_H 576 #define S_ALIGN1 /* multiple of 2 */ #define W_ALIGN1 /* multiple of 2 */ @@ -1016,11 +1014,12 @@ static int coda_start_streaming(struct vb2_queue *q, unsigned int count) switch (dev-devtype-product) { case CODA_DX6: value = (q_data_src-width CODADX6_PICWIDTH_MASK) CODADX6_PICWIDTH_OFFSET; + value |= (q_data_src-height CODADX6_PICHEIGHT_MASK) CODA_PICHEIGHT_OFFSET; break; default: value = (q_data_src-width CODA7_PICWIDTH_MASK) CODA7_PICWIDTH_OFFSET; + value |= (q_data_src-height CODA7_PICHEIGHT_MASK) CODA_PICHEIGHT_OFFSET; } - value |= (q_data_src-height CODA_PICHEIGHT_MASK) CODA_PICHEIGHT_OFFSET; coda_write(dev, value, CODA_CMD_ENC_SEQ_SRC_SIZE); coda_write(dev, ctx-params.framerate, CODA_CMD_ENC_SEQ_SRC_F_RATE); diff --git a/drivers/media/platform/coda.h b/drivers/media/platform/coda.h index f3f5e43..60338c3 100644 --- a/drivers/media/platform/coda.h +++ b/drivers/media/platform/coda.h @@ -117,7 +117,8 @@ #defineCODADX6_PICWIDTH_OFFSET 10 #defineCODADX6_PICWIDTH_MASK 0x3ff #defineCODA_PICHEIGHT_OFFSET 0 -#defineCODA_PICHEIGHT_MASK 0x3ff +#defineCODADX6_PICHEIGHT_MASK 0x3ff +#defineCODA7_PICHEIGHT_MASK0x #define CODA_CMD_ENC_SEQ_SRC_F_RATE0x194 #define CODA_CMD_ENC_SEQ_MP4_PARA 0x198 #defineCODA_MP4PARAM_VERID_OFFSET 6 -- 1.7.10.4 -- Javier Martin Vista Silicon S.L. CDTUC - FASE C - Oficina S-345 Avda de los Castros s/n 39005- Santander. Cantabria. Spain +34 942 25 32 60 www.vista-silicon.com -- To unsubscribe from this list: send the line unsubscribe linux-media in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v4 16/16] media: coda: support 1024 px height on CODA7, set max frame size to 1080p
Hi Javier, Am Dienstag, den 11.09.2012, 12:52 +0200 schrieb javier Martin: On 10 September 2012 17:30, Philipp Zabel p.za...@pengutronix.de wrote: Increases the maximum encoded frame buffer size to 1 MiB. Signed-off-by: Philipp Zabel p.za...@pengutronix.de --- drivers/media/platform/coda.c | 11 +-- drivers/media/platform/coda.h |3 ++- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/drivers/media/platform/coda.c b/drivers/media/platform/coda.c index 4c3e100..defab64 100644 --- a/drivers/media/platform/coda.c +++ b/drivers/media/platform/coda.c @@ -47,16 +47,14 @@ #define CODA_MAX_FRAMEBUFFERS 2 -#define MAX_W 720 -#define MAX_H 576 -#define CODA_MAX_FRAME_SIZE0x9 +#define MAX_W 1920 +#define MAX_H 1080 You need to define separate MAX_W and MAX_H for codadx6 and coda7. The reason of this is that 'try_fmt' in codadx6 must adjust the width and height to 720x576 not to 1920x1080. So you need to modify try_fmt too. even worse, there are different MAX_W/H depending on the codec. And when doing S_FMT on the OUTPUT side first, the codec is still not chosen... My current approach (in progress) looks something like this: Subject: [PATCH] media: coda: per-product list of codecs instead of list of formats This allows to support different maximum frame sizes depending on the used codec and to specify decoders. Also rename rawstreamon to streamon_out and compstreamon to streamon_cap in preparation for decoding support. Signed-off-by: Philipp Zabel p.za...@pengutronix.de --- drivers/media/video/coda.c | 191 +--- 1 file changed, 107 insertions(+), 84 deletions(-) diff --git a/drivers/media/video/coda.c b/drivers/media/video/coda.c index afa3166..4dbb716 100644 --- a/drivers/media/video/coda.c +++ b/drivers/media/video/coda.c @@ -48,8 +48,8 @@ #define CODA_MAX_FRAMEBUFFERS 2 -#define MAX_W 1920 -#define MAX_H 1080 +#define MAX_W 8192 +#define MAX_H 8192 #define CODA_MAX_FRAME_SIZE0x10 #define FMO_SLICE_SAVE_BUF_SIZE (32) #define CODA_DEFAULT_GAMMA 4096 @@ -93,11 +93,19 @@ struct coda_fmt { enum coda_fmt_type type; }; +struct coda_codec { + u32 mode; + u32 src_fourcc; + u32 dst_fourcc; + u32 max_w; + u32 max_h; +}; + struct coda_devtype { char*firmware; enum coda_product product; - struct coda_fmt *formats; - unsigned intnum_formats; + struct coda_codec *codecs; + unsigned intnum_codecs; size_t workbuf_size; }; @@ -162,11 +170,12 @@ struct coda_ctx { struct coda_dev *dev; struct list_headlist; int aborting; - int rawstreamon; - int compstreamon; + int streamon_out; + int streamon_cap; u32 isequence; struct coda_q_data q_data[2]; enum coda_inst_type inst_type; + struct coda_codec *codec; enum v4l2_colorspacecolorspace; struct coda_params params; struct v4l2_m2m_ctx *m2m_ctx; @@ -256,25 +265,7 @@ static struct coda_q_data *get_q_data(struct coda_ctx *ctx, * i.MX51 - coda7 * i.MX6 - coda960 */ -static struct coda_fmt codadx6_formats[] = { - { - .name = YUV 4:2:0 Planar, - .fourcc = V4L2_PIX_FMT_YUV420, - .type = CODA_FMT_RAW, - }, - { - .name = H264 Encoded Stream, - .fourcc = V4L2_PIX_FMT_H264, - .type = CODA_FMT_ENC, - }, - { - .name = MPEG4 Encoded Stream, - .fourcc = V4L2_PIX_FMT_MPEG4, - .type = CODA_FMT_ENC, - }, -}; - -static struct coda_fmt coda7_formats[] = { +static struct coda_fmt coda_formats[] = { { .name = YUV 4:2:0 Planar, .fourcc = V4L2_PIX_FMT_YUV420, @@ -297,10 +288,42 @@ static struct coda_fmt coda7_formats[] = { }, }; +#define CODA_CODEC(mode, src_fourcc, dst_fourcc, max_w, max_h) \ + { mode, src_fourcc, dst_fourcc, max_w, max_h } + +static struct coda_codec codadx6_codecs[] = { + CODA_CODEC(CODADX6_MODE_ENCODE_H264, V4L2_PIX_FMT_YUV420, V4L2_PIX_FMT_H264, 720, 576), + CODA_CODEC(CODADX6_MODE_ENCODE_MP4, V4L2_PIX_FMT_YUV420, V4L2_PIX_FMT_MPEG4, 720, 576), +}; + +static struct coda_codec coda7_codecs[] = { + CODA_CODEC(CODA7_MODE_ENCODE_H264, V4L2_PIX_FMT_YUV420, V4L2_PIX_FMT_H264, 1280, 720), + CODA_CODEC(CODA7_MODE_ENCODE_MP4, V4L2_PIX_FMT_YUV420,
[PATCH v4 16/16] media: coda: support 1024 px height on CODA7, set max frame size to 1080p
Increases the maximum encoded frame buffer size to 1 MiB. Signed-off-by: Philipp Zabel p.za...@pengutronix.de --- drivers/media/platform/coda.c | 11 +-- drivers/media/platform/coda.h |3 ++- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/drivers/media/platform/coda.c b/drivers/media/platform/coda.c index 4c3e100..defab64 100644 --- a/drivers/media/platform/coda.c +++ b/drivers/media/platform/coda.c @@ -47,16 +47,14 @@ #define CODA_MAX_FRAMEBUFFERS 2 -#define MAX_W 720 -#define MAX_H 576 -#define CODA_MAX_FRAME_SIZE0x9 +#define MAX_W 1920 +#define MAX_H 1080 +#define CODA_MAX_FRAME_SIZE0x10 #define FMO_SLICE_SAVE_BUF_SIZE (32) #define CODA_DEFAULT_GAMMA 4096 #define MIN_W 176 #define MIN_H 144 -#define MAX_W 720 -#define MAX_H 576 #define S_ALIGN1 /* multiple of 2 */ #define W_ALIGN1 /* multiple of 2 */ @@ -1016,11 +1014,12 @@ static int coda_start_streaming(struct vb2_queue *q, unsigned int count) switch (dev-devtype-product) { case CODA_DX6: value = (q_data_src-width CODADX6_PICWIDTH_MASK) CODADX6_PICWIDTH_OFFSET; + value |= (q_data_src-height CODADX6_PICHEIGHT_MASK) CODA_PICHEIGHT_OFFSET; break; default: value = (q_data_src-width CODA7_PICWIDTH_MASK) CODA7_PICWIDTH_OFFSET; + value |= (q_data_src-height CODA7_PICHEIGHT_MASK) CODA_PICHEIGHT_OFFSET; } - value |= (q_data_src-height CODA_PICHEIGHT_MASK) CODA_PICHEIGHT_OFFSET; coda_write(dev, value, CODA_CMD_ENC_SEQ_SRC_SIZE); coda_write(dev, ctx-params.framerate, CODA_CMD_ENC_SEQ_SRC_F_RATE); diff --git a/drivers/media/platform/coda.h b/drivers/media/platform/coda.h index f3f5e43..60338c3 100644 --- a/drivers/media/platform/coda.h +++ b/drivers/media/platform/coda.h @@ -117,7 +117,8 @@ #defineCODADX6_PICWIDTH_OFFSET 10 #defineCODADX6_PICWIDTH_MASK 0x3ff #defineCODA_PICHEIGHT_OFFSET 0 -#defineCODA_PICHEIGHT_MASK 0x3ff +#defineCODADX6_PICHEIGHT_MASK 0x3ff +#defineCODA7_PICHEIGHT_MASK0x #define CODA_CMD_ENC_SEQ_SRC_F_RATE0x194 #define CODA_CMD_ENC_SEQ_MP4_PARA 0x198 #defineCODA_MP4PARAM_VERID_OFFSET 6 -- 1.7.10.4 -- To unsubscribe from this list: send the line unsubscribe linux-media in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html