aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/platform/coda
diff options
context:
space:
mode:
authorPhilipp Zabel <p.zabel@pengutronix.de>2015-07-16 12:19:39 -0400
committerMauro Carvalho Chehab <mchehab@osg.samsung.com>2015-07-17 10:29:39 -0400
commit6727d4fce95586e60922bdaf57b8a0eb99482557 (patch)
tree3812537bf391269c54d738398a26c00f1e25d02c /drivers/media/platform/coda
parenta269e53b1aa87157311e53e5b69699ba8f3ba4d0 (diff)
[media] coda: make NV12 format default
The chroma interleaved NV12 format has higher memory bandwidth efficiency because the chroma planes can be read/written with longer burst lengths. Use NV12 as default format if available and consistently sort it first. Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de> Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
Diffstat (limited to 'drivers/media/platform/coda')
-rw-r--r--drivers/media/platform/coda/coda-common.c28
1 files changed, 14 insertions, 14 deletions
diff --git a/drivers/media/platform/coda/coda-common.c b/drivers/media/platform/coda/coda-common.c
index d62b82846037..04310cd35bc1 100644
--- a/drivers/media/platform/coda/coda-common.c
+++ b/drivers/media/platform/coda/coda-common.c
@@ -90,17 +90,17 @@ void coda_write_base(struct coda_ctx *ctx, struct coda_q_data *q_data,
90 u32 base_cb, base_cr; 90 u32 base_cb, base_cr;
91 91
92 switch (q_data->fourcc) { 92 switch (q_data->fourcc) {
93 case V4L2_PIX_FMT_YVU420:
94 /* Switch Cb and Cr for YVU420 format */
95 base_cr = base_y + q_data->bytesperline * q_data->height;
96 base_cb = base_cr + q_data->bytesperline * q_data->height / 4;
97 break;
98 case V4L2_PIX_FMT_YUV420:
99 case V4L2_PIX_FMT_NV12: 93 case V4L2_PIX_FMT_NV12:
94 case V4L2_PIX_FMT_YUV420:
100 default: 95 default:
101 base_cb = base_y + q_data->bytesperline * q_data->height; 96 base_cb = base_y + q_data->bytesperline * q_data->height;
102 base_cr = base_cb + q_data->bytesperline * q_data->height / 4; 97 base_cr = base_cb + q_data->bytesperline * q_data->height / 4;
103 break; 98 break;
99 case V4L2_PIX_FMT_YVU420:
100 /* Switch Cb and Cr for YVU420 format */
101 base_cr = base_y + q_data->bytesperline * q_data->height;
102 base_cb = base_cr + q_data->bytesperline * q_data->height / 4;
103 break;
104 case V4L2_PIX_FMT_YUV422P: 104 case V4L2_PIX_FMT_YUV422P:
105 base_cb = base_y + q_data->bytesperline * q_data->height; 105 base_cb = base_y + q_data->bytesperline * q_data->height;
106 base_cr = base_cb + q_data->bytesperline * q_data->height / 2; 106 base_cr = base_cb + q_data->bytesperline * q_data->height / 2;
@@ -156,9 +156,9 @@ static const struct coda_video_device coda_bit_encoder = {
156 .type = CODA_INST_ENCODER, 156 .type = CODA_INST_ENCODER,
157 .ops = &coda_bit_encode_ops, 157 .ops = &coda_bit_encode_ops,
158 .src_formats = { 158 .src_formats = {
159 V4L2_PIX_FMT_NV12,
159 V4L2_PIX_FMT_YUV420, 160 V4L2_PIX_FMT_YUV420,
160 V4L2_PIX_FMT_YVU420, 161 V4L2_PIX_FMT_YVU420,
161 V4L2_PIX_FMT_NV12,
162 }, 162 },
163 .dst_formats = { 163 .dst_formats = {
164 V4L2_PIX_FMT_H264, 164 V4L2_PIX_FMT_H264,
@@ -171,9 +171,9 @@ static const struct coda_video_device coda_bit_jpeg_encoder = {
171 .type = CODA_INST_ENCODER, 171 .type = CODA_INST_ENCODER,
172 .ops = &coda_bit_encode_ops, 172 .ops = &coda_bit_encode_ops,
173 .src_formats = { 173 .src_formats = {
174 V4L2_PIX_FMT_NV12,
174 V4L2_PIX_FMT_YUV420, 175 V4L2_PIX_FMT_YUV420,
175 V4L2_PIX_FMT_YVU420, 176 V4L2_PIX_FMT_YVU420,
176 V4L2_PIX_FMT_NV12,
177 V4L2_PIX_FMT_YUV422P, 177 V4L2_PIX_FMT_YUV422P,
178 }, 178 },
179 .dst_formats = { 179 .dst_formats = {
@@ -190,9 +190,9 @@ static const struct coda_video_device coda_bit_decoder = {
190 V4L2_PIX_FMT_MPEG4, 190 V4L2_PIX_FMT_MPEG4,
191 }, 191 },
192 .dst_formats = { 192 .dst_formats = {
193 V4L2_PIX_FMT_NV12,
193 V4L2_PIX_FMT_YUV420, 194 V4L2_PIX_FMT_YUV420,
194 V4L2_PIX_FMT_YVU420, 195 V4L2_PIX_FMT_YVU420,
195 V4L2_PIX_FMT_NV12,
196 }, 196 },
197}; 197};
198 198
@@ -204,9 +204,9 @@ static const struct coda_video_device coda_bit_jpeg_decoder = {
204 V4L2_PIX_FMT_JPEG, 204 V4L2_PIX_FMT_JPEG,
205 }, 205 },
206 .dst_formats = { 206 .dst_formats = {
207 V4L2_PIX_FMT_NV12,
207 V4L2_PIX_FMT_YUV420, 208 V4L2_PIX_FMT_YUV420,
208 V4L2_PIX_FMT_YVU420, 209 V4L2_PIX_FMT_YVU420,
209 V4L2_PIX_FMT_NV12,
210 V4L2_PIX_FMT_YUV422P, 210 V4L2_PIX_FMT_YUV422P,
211 }, 211 },
212}; 212};
@@ -234,9 +234,9 @@ static const struct coda_video_device *coda9_video_devices[] = {
234static u32 coda_format_normalize_yuv(u32 fourcc) 234static u32 coda_format_normalize_yuv(u32 fourcc)
235{ 235{
236 switch (fourcc) { 236 switch (fourcc) {
237 case V4L2_PIX_FMT_NV12:
237 case V4L2_PIX_FMT_YUV420: 238 case V4L2_PIX_FMT_YUV420:
238 case V4L2_PIX_FMT_YVU420: 239 case V4L2_PIX_FMT_YVU420:
239 case V4L2_PIX_FMT_NV12:
240 case V4L2_PIX_FMT_YUV422P: 240 case V4L2_PIX_FMT_YUV422P:
241 return V4L2_PIX_FMT_YUV420; 241 return V4L2_PIX_FMT_YUV420;
242 default: 242 default:
@@ -448,9 +448,9 @@ static int coda_try_fmt(struct coda_ctx *ctx, const struct coda_codec *codec,
448 S_ALIGN); 448 S_ALIGN);
449 449
450 switch (f->fmt.pix.pixelformat) { 450 switch (f->fmt.pix.pixelformat) {
451 case V4L2_PIX_FMT_NV12:
451 case V4L2_PIX_FMT_YUV420: 452 case V4L2_PIX_FMT_YUV420:
452 case V4L2_PIX_FMT_YVU420: 453 case V4L2_PIX_FMT_YVU420:
453 case V4L2_PIX_FMT_NV12:
454 /* 454 /*
455 * Frame stride must be at least multiple of 8, 455 * Frame stride must be at least multiple of 8,
456 * but multiple of 16 for h.264 or JPEG 4:2:x 456 * but multiple of 16 for h.264 or JPEG 4:2:x
@@ -1099,8 +1099,8 @@ static void set_default_params(struct coda_ctx *ctx)
1099 ctx->params.framerate = 30; 1099 ctx->params.framerate = 30;
1100 1100
1101 /* Default formats for output and input queues */ 1101 /* Default formats for output and input queues */
1102 ctx->q_data[V4L2_M2M_SRC].fourcc = ctx->codec->src_fourcc; 1102 ctx->q_data[V4L2_M2M_SRC].fourcc = ctx->cvd->src_formats[0];
1103 ctx->q_data[V4L2_M2M_DST].fourcc = ctx->codec->dst_fourcc; 1103 ctx->q_data[V4L2_M2M_DST].fourcc = ctx->cvd->dst_formats[0];
1104 ctx->q_data[V4L2_M2M_SRC].width = max_w; 1104 ctx->q_data[V4L2_M2M_SRC].width = max_w;
1105 ctx->q_data[V4L2_M2M_SRC].height = max_h; 1105 ctx->q_data[V4L2_M2M_SRC].height = max_h;
1106 ctx->q_data[V4L2_M2M_DST].width = max_w; 1106 ctx->q_data[V4L2_M2M_DST].width = max_w;