aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/cx18/cx18-streams.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/media/video/cx18/cx18-streams.c')
-rw-r--r--drivers/media/video/cx18/cx18-streams.c26
1 files changed, 21 insertions, 5 deletions
diff --git a/drivers/media/video/cx18/cx18-streams.c b/drivers/media/video/cx18/cx18-streams.c
index 9f8adda6f261..7755937fc521 100644
--- a/drivers/media/video/cx18/cx18-streams.c
+++ b/drivers/media/video/cx18/cx18-streams.c
@@ -262,9 +262,11 @@ static int cx18_reg_dev(struct cx18 *cx, int type)
262 262
263 switch (vfl_type) { 263 switch (vfl_type) {
264 case VFL_TYPE_GRABBER: 264 case VFL_TYPE_GRABBER:
265 CX18_INFO("Registered device video%d for %s (%d x %d kB)\n", 265 CX18_INFO("Registered device video%d for %s "
266 "(%d x %d.%02d kB)\n",
266 num, s->name, cx->stream_buffers[type], 267 num, s->name, cx->stream_buffers[type],
267 cx->stream_buf_size[type]/1024); 268 cx->stream_buf_size[type] / 1024,
269 (cx->stream_buf_size[type] * 100 / 1024) % 100);
268 break; 270 break;
269 271
270 case VFL_TYPE_RADIO: 272 case VFL_TYPE_RADIO:
@@ -501,9 +503,23 @@ static void cx18_stream_configure_mdls(struct cx18_stream *s)
501{ 503{
502 cx18_unload_queues(s); 504 cx18_unload_queues(s);
503 505
504 /* For now */ 506 switch (s->type) {
505 s->bufs_per_mdl = 1; 507 case CX18_ENC_STREAM_TYPE_YUV:
506 s->mdl_size = s->buf_size * s->bufs_per_mdl; 508 /*
509 * Height should be a multiple of 32 lines.
510 * Set the MDL size to the exact size needed for one frame.
511 * Use enough buffers per MDL to cover the MDL size
512 */
513 s->mdl_size = 720 * s->cx->params.height * 3 / 2;
514 s->bufs_per_mdl = s->mdl_size / s->buf_size;
515 if (s->mdl_size % s->buf_size)
516 s->bufs_per_mdl++;
517 break;
518 default:
519 s->bufs_per_mdl = 1;
520 s->mdl_size = s->buf_size * s->bufs_per_mdl;
521 break;
522 }
507 523
508 cx18_load_queues(s); 524 cx18_load_queues(s);
509} 525}