From 63a706fd110f0d32e99b9a481a37b5a64bcdf6b5 Mon Sep 17 00:00:00 2001 From: Sascha Sommer Date: Tue, 22 Apr 2008 14:45:47 -0300 Subject: [PATCH] --- yaml --- r: 92463 b: refs/heads/master c: 2c4a07b2da61bcd33f18195ff7f355c5bb285904 h: refs/heads/master i: 92461: 6702086f2415182a4639fdc11ef624a34bf7cbe2 92459: 216b4c332febe8797639296798898b8122be7766 92455: 7fc43f10ae5a8b9836b6298e9c80d4710f261ff0 92447: 138d3d2a7db7a35c53c4548b3c229f7098027f4b v: v3 --- [refs] | 2 +- trunk/drivers/media/video/em28xx/em28xx-core.c | 18 +++++++++++++----- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/[refs] b/[refs] index 894f95a059b1..c5735fb06814 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 4a24ce3a17ee713056db0a24cf558bd595211302 +refs/heads/master: 2c4a07b2da61bcd33f18195ff7f355c5bb285904 diff --git a/trunk/drivers/media/video/em28xx/em28xx-core.c b/trunk/drivers/media/video/em28xx/em28xx-core.c index dbea89c115b1..4ebef10b5722 100644 --- a/trunk/drivers/media/video/em28xx/em28xx-core.c +++ b/trunk/drivers/media/video/em28xx/em28xx-core.c @@ -813,19 +813,27 @@ int em28xx_set_alternate(struct em28xx *dev) { int errCode, prev_alt = dev->alt; int i; - unsigned int min_pkt_size = dev->bytesperline+4; + unsigned int min_pkt_size = dev->bytesperline + 4; - /* When image size is bigger than a ceirtain value, + /* When image size is bigger than a certain value, the frame size should be increased, otherwise, only green screen will be received. */ if (dev->frame_size > 720*240*2) min_pkt_size *= 2; - for (i = 0; i < dev->num_alt; i++) - if (dev->alt_max_pkt_size[i] >= min_pkt_size) + for (i = 0; i < dev->num_alt; i++) { + /* stop when the selected alt setting offers enough bandwidth */ + if (dev->alt_max_pkt_size[i] >= min_pkt_size) { + dev->alt = i; break; - dev->alt = i; + /* otherwise make sure that we end up with the maximum bandwidth + because the min_pkt_size equation might be wrong... + */ + } else if (dev->alt_max_pkt_size[i] > + dev->alt_max_pkt_size[dev->alt]) + dev->alt = i; + } if (dev->alt != prev_alt) { em28xx_coredbg("minimum isoc packet size: %u (alt=%d)\n",