Re: [PATCH v4 16/16] media: coda: support 1024 px height on CODA7, set max frame size to 1080p

2012-09-11 Thread 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.


 +#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

2012-09-11 Thread Philipp Zabel
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

2012-09-10 Thread Philipp Zabel
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