diff options
author | Philipp Zabel <p.zabel@pengutronix.de> | 2015-07-16 12:19:39 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@osg.samsung.com> | 2015-07-17 10:29:39 -0400 |
commit | 6727d4fce95586e60922bdaf57b8a0eb99482557 (patch) | |
tree | 3812537bf391269c54d738398a26c00f1e25d02c /drivers/media/platform/coda | |
parent | a269e53b1aa87157311e53e5b69699ba8f3ba4d0 (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.c | 28 |
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[] = { | |||
234 | static u32 coda_format_normalize_yuv(u32 fourcc) | 234 | static 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; |