Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
DISCONTINUED:openSUSE:11.2:Update
xawtv
xawtv-3.95-fixes.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File xawtv-3.95-fixes.patch of Package xawtv
diff -Nrbu xawtv-3.95/libng/plugins/drv0-v4l2.c xawtv-3.95-OK/libng/plugins/drv0-v4l2.c --- xawtv-3.95/libng/plugins/drv0-v4l2.c 2005-02-11 20:56:24.000000000 +0300 +++ xawtv-3.95-OK/libng/plugins/drv0-v4l2.c 2008-08-26 19:27:18.000000000 +0400 @@ -91,6 +91,7 @@ struct ng_video_fmt fmt_me; struct v4l2_requestbuffers reqbufs; struct v4l2_buffer buf_v4l2[WANTED_BUFFERS]; + int buf_v4l2_size[WANTED_BUFFERS]; struct ng_video_buf buf_me[WANTED_BUFFERS]; unsigned int queue,waiton; @@ -768,6 +769,7 @@ /* get it */ memset(&buf,0,sizeof(buf)); buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; + buf.memory = V4L2_MEMORY_MMAP; if (-1 == xioctl(h->fd,VIDIOC_DQBUF,&buf, 0)) return -1; h->waiton++; @@ -812,6 +814,7 @@ h->buf_v4l2[i].memory = V4L2_MEMORY_MMAP; if (-1 == xioctl(h->fd, VIDIOC_QUERYBUF, &h->buf_v4l2[i], 0)) return -1; + h->buf_v4l2_size[i] = h->buf_v4l2[i].length; h->buf_me[i].fmt = h->fmt_me; h->buf_me[i].size = h->buf_me[i].fmt.bytesperline * h->buf_me[i].fmt.height; @@ -865,12 +868,16 @@ ng_waiton_video_buf(&h->buf_me[i]); if (ng_debug) print_bufinfo(&h->buf_v4l2[i]); - if (-1 == munmap(h->buf_me[i].data,h->buf_me[i].size)) + if (-1 == munmap(h->buf_me[i].data, h->buf_v4l2_size[i])) perror("munmap"); } h->queue = 0; h->waiton = 0; + /* unrequest buffers (only needed for some drivers) */ + h->reqbufs.count = 0; + xioctl(h->fd, VIDIOC_REQBUFS, &h->reqbufs, EINVAL); + /* turn on preview (if needed) */ if (h->ov_on != h->ov_enabled) { h->ov_on = h->ov_enabled; @@ -907,6 +914,17 @@ fmt->width = h->fmt_v4l2.fmt.pix.width; fmt->height = h->fmt_v4l2.fmt.pix.height; fmt->bytesperline = h->fmt_v4l2.fmt.pix.bytesperline; + /* struct v4l2_format.fmt.pix.bytesperline is bytesperline for the + main plane for planar formats, where as we want it to be the total + bytesperline for all planes */ + switch (fmt->fmtid) { + case VIDEO_YUV422P: + fmt->bytesperline *= 2; + break; + case VIDEO_YUV420P: + fmt->bytesperline = fmt->bytesperline * 3 / 2; + break; + } if (0 == fmt->bytesperline) fmt->bytesperline = fmt->width * ng_vfmt_to_depth[fmt->fmtid] / 8; h->fmt_me = *fmt;
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor