Skip to content

Commit

Permalink
[media] gspca: Add a need_max_bandwidth flag to sd_desc
Browse files Browse the repository at this point in the history
Some cameras will pretty much entirely fill all the image buffers all the
time even though they are using compression.

This patch adds a flag to sd_desc, which drivers for such cameras can set.

When this flag is set the bandwidth calculation code will no longer
assume that the image buffer size is a worst case and less bandwidth than
imagebufsize * fps will be used on average.

This patch sets this new flag for 3 drivers:
* For spca561 (for rev12a cameras) and nw80x cams as these simply don't work
  when given less bandwidth than imagebufsize * fps.
* For sn9c20x cameras, because these show severy jpeg artifacts when
  given less bandwidth than imagebufsize * fps and since these are usb2
  cameras there is plenty bandwidth anyways.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Jean-François Moine <moinejf@free.fr>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
  • Loading branch information
Hans de Goede authored and Mauro Carvalho Chehab committed Jan 6, 2012
1 parent 51e23be commit eb3fb7c
Show file tree
Hide file tree
Showing 5 changed files with 8 additions and 1 deletion.
3 changes: 2 additions & 1 deletion drivers/media/video/gspca/gspca.c
Original file line number Diff line number Diff line change
Expand Up @@ -638,7 +638,8 @@ static u32 which_bandwidth(struct gspca_dev *gspca_dev)
bandwidth = gspca_dev->cam.cam_mode[i].sizeimage;

/* if the image is compressed, estimate its mean size */
if (bandwidth < gspca_dev->cam.cam_mode[i].width *
if (!gspca_dev->cam.needs_full_bandwidth &&
bandwidth < gspca_dev->cam.cam_mode[i].width *
gspca_dev->cam.cam_mode[i].height)
bandwidth = bandwidth * 3 / 8; /* 0.375 */

Expand Down
3 changes: 3 additions & 0 deletions drivers/media/video/gspca/gspca.h
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,9 @@ struct cam {
u8 bulk; /* image transfer by 0:isoc / 1:bulk */
u8 npkt; /* number of packets in an ISOC message
* 0 is the default value: 32 packets */
u8 needs_full_bandwidth;/* Set this flag to notify the bandwidth calc.
* code that the cam fills all image buffers to
* the max, even when using compression. */
};

struct gspca_dev;
Expand Down
1 change: 1 addition & 0 deletions drivers/media/video/gspca/nw80x.c
Original file line number Diff line number Diff line change
Expand Up @@ -1764,6 +1764,7 @@ static int sd_config(struct gspca_dev *gspca_dev,
webcam = 0;
sd->webcam = webcam;
gspca_dev->cam.ctrls = sd->ctrls;
gspca_dev->cam.needs_full_bandwidth = 1;
sd->ag_cnt = -1;

/*
Expand Down
1 change: 1 addition & 0 deletions drivers/media/video/gspca/sn9c20x.c
Original file line number Diff line number Diff line change
Expand Up @@ -2048,6 +2048,7 @@ static int sd_config(struct gspca_dev *gspca_dev,
struct cam *cam;

cam = &gspca_dev->cam;
cam->needs_full_bandwidth = 1;

sd->sensor = (id->driver_info >> 8) & 0xff;
sd->i2c_addr = id->driver_info & 0xff;
Expand Down
1 change: 1 addition & 0 deletions drivers/media/video/gspca/spca561.c
Original file line number Diff line number Diff line change
Expand Up @@ -451,6 +451,7 @@ static int sd_config(struct gspca_dev *gspca_dev,
}

cam = &gspca_dev->cam;
cam->needs_full_bandwidth = 1;

sd->chip_revision = id->driver_info;
if (sd->chip_revision == Rev012A) {
Expand Down

0 comments on commit eb3fb7c

Please sign in to comment.