diff options
author | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-04-27 17:18:45 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-04-27 17:18:45 -0400 |
commit | aa5bc2b58e3344da57f26b62e99e13e91c9e0a94 (patch) | |
tree | c6e9ea1b3ee8af88b3a050b3fba160ea2f77e404 /drivers/media/video/pwc/pwc-v4l.c | |
parent | d868772fff6c4b881d66af8640251714e1aefa98 (diff) | |
parent | d455cf5d0db9e3eb1b204cd4a61d8c5ccfe4305f (diff) |
Merge branch 'master' of ssh://master.kernel.org/pub/scm/linux/kernel/git/mchehab/v4l-dvb
* 'master' of ssh://master.kernel.org/pub/scm/linux/kernel/git/mchehab/v4l-dvb: (184 commits)
V4L/DVB (5563): Radio-maestro.c Replace radio_ioctl to use video_ioctl2
V4L/DVB (5562): Radio-gemtek-pci.c Replace gemtek_pci_ioctl to use video_ioctl2
V4L/DVB (5560): Ivtv: fix incorrect bitwise-and for command flags.
V4L/DVB (5558): Opera: use 7-bit i2c addresses
V4L/DVB (5557): Cafe_ccic: check return value of pci_enable_device
V4L/DVB (5556): Radio-gemtek.c Replace gemtek_ioctl to use video_ioctl2
V4L/DVB (5555): Radio-aimslab.c Replace rt_ioctl to use video_ioctl2
V4L/DVB (5554): Fix: vidioc_g_parm were not zeroing the memory
V4L/DVB (5553): Replace typhoon_do_ioctl to use video_ioctl2
V4L/DVB (5552): Plan-b: Switch to refcounting PCI API
V4L/DVB (5551): Plan-b: header change
V4L/DVB (5550): Radio-sf16fmi.c Replace fmi_do_ioctl to use video_ioctl2
V4L/DVB (5549): Radio-sf16fmr2.c Replace fmr2_do_ioctl to use video_ioctl2
V4L/DVB (5548): Fix v4l2 buffer to the length
V4L/DVB (5547): Add ENUM_FRAMESIZES and ENUM_FRAMEINTERVALS ioctls
V4L/DVB (5546): Radio-terratec.c Replace tt_do_ioctl to use video_ioctl2
V4L/DVB (5545): Saa7146: Release capture buffers on device close
V4L/DVB (5544): Budget-av: Make inversion setting configurable, add KNC ONE V1.0 card
V4L/DVB (5543): Tda10023: Add support for frontend TDA10023
V4L/DVB (5542): Budget-av: Remove polarity switching of the clock for DVB-C
...
Diffstat (limited to 'drivers/media/video/pwc/pwc-v4l.c')
-rw-r--r-- | drivers/media/video/pwc/pwc-v4l.c | 60 |
1 files changed, 59 insertions, 1 deletions
diff --git a/drivers/media/video/pwc/pwc-v4l.c b/drivers/media/video/pwc/pwc-v4l.c index d5e6bc850643..32fbe1ae6251 100644 --- a/drivers/media/video/pwc/pwc-v4l.c +++ b/drivers/media/video/pwc/pwc-v4l.c | |||
@@ -1168,7 +1168,7 @@ int pwc_video_do_ioctl(struct inode *inode, struct file *file, | |||
1168 | buf->sequence = 0; | 1168 | buf->sequence = 0; |
1169 | buf->memory = V4L2_MEMORY_MMAP; | 1169 | buf->memory = V4L2_MEMORY_MMAP; |
1170 | buf->m.offset = pdev->fill_image * pdev->len_per_image; | 1170 | buf->m.offset = pdev->fill_image * pdev->len_per_image; |
1171 | buf->length = buf->bytesused; | 1171 | buf->length = pdev->len_per_image; |
1172 | pwc_next_image(pdev); | 1172 | pwc_next_image(pdev); |
1173 | 1173 | ||
1174 | PWC_DEBUG_IOCTL("VIDIOC_DQBUF: buf->index=%d\n",buf->index); | 1174 | PWC_DEBUG_IOCTL("VIDIOC_DQBUF: buf->index=%d\n",buf->index); |
@@ -1193,6 +1193,64 @@ int pwc_video_do_ioctl(struct inode *inode, struct file *file, | |||
1193 | return 0; | 1193 | return 0; |
1194 | } | 1194 | } |
1195 | 1195 | ||
1196 | case VIDIOC_ENUM_FRAMESIZES: | ||
1197 | { | ||
1198 | struct v4l2_frmsizeenum *fsize = arg; | ||
1199 | unsigned int i = 0, index = fsize->index; | ||
1200 | |||
1201 | if (fsize->pixel_format == V4L2_PIX_FMT_YUV420) { | ||
1202 | for (i = 0; i < PSZ_MAX; i++) { | ||
1203 | if (pdev->image_mask & (1UL << i)) { | ||
1204 | if (!index--) { | ||
1205 | fsize->type = V4L2_FRMSIZE_TYPE_DISCRETE; | ||
1206 | fsize->discrete.width = pwc_image_sizes[i].x; | ||
1207 | fsize->discrete.height = pwc_image_sizes[i].y; | ||
1208 | return 0; | ||
1209 | } | ||
1210 | } | ||
1211 | } | ||
1212 | } else if (fsize->index == 0 && | ||
1213 | ((fsize->pixel_format == V4L2_PIX_FMT_PWC1 && DEVICE_USE_CODEC1(pdev->type)) || | ||
1214 | (fsize->pixel_format == V4L2_PIX_FMT_PWC2 && DEVICE_USE_CODEC23(pdev->type)))) { | ||
1215 | |||
1216 | fsize->type = V4L2_FRMSIZE_TYPE_DISCRETE; | ||
1217 | fsize->discrete.width = pdev->abs_max.x; | ||
1218 | fsize->discrete.height = pdev->abs_max.y; | ||
1219 | return 0; | ||
1220 | } | ||
1221 | return -EINVAL; | ||
1222 | } | ||
1223 | |||
1224 | case VIDIOC_ENUM_FRAMEINTERVALS: | ||
1225 | { | ||
1226 | struct v4l2_frmivalenum *fival = arg; | ||
1227 | int size = -1; | ||
1228 | unsigned int i; | ||
1229 | |||
1230 | for (i = 0; i < PSZ_MAX; i++) { | ||
1231 | if (pwc_image_sizes[i].x == fival->width && | ||
1232 | pwc_image_sizes[i].y == fival->height) { | ||
1233 | size = i; | ||
1234 | break; | ||
1235 | } | ||
1236 | } | ||
1237 | |||
1238 | /* TODO: Support raw format */ | ||
1239 | if (size < 0 || fival->pixel_format != V4L2_PIX_FMT_YUV420) { | ||
1240 | return -EINVAL; | ||
1241 | } | ||
1242 | |||
1243 | i = pwc_get_fps(pdev, fival->index, size); | ||
1244 | if (!i) | ||
1245 | return -EINVAL; | ||
1246 | |||
1247 | fival->type = V4L2_FRMIVAL_TYPE_DISCRETE; | ||
1248 | fival->discrete.numerator = 1; | ||
1249 | fival->discrete.denominator = i; | ||
1250 | |||
1251 | return 0; | ||
1252 | } | ||
1253 | |||
1196 | default: | 1254 | default: |
1197 | return pwc_ioctl(pdev, cmd, arg); | 1255 | return pwc_ioctl(pdev, cmd, arg); |
1198 | } /* ..switch */ | 1256 | } /* ..switch */ |