Lines Matching refs:cd

251     LinuxCameraDevice* cd;
253 ANEW0(cd);
254 memset(cd, 0, sizeof(*cd));
255 cd->header.opaque = cd;
256 cd->handle = -1;
258 return cd;
290 _camera_device_reset(LinuxCameraDevice* cd)
296 if (cd->framebuffers != NULL) {
297 _free_framebuffers(cd->framebuffers, cd->framebuffer_num, cd->io_type);
298 free(cd->framebuffers);
299 cd->framebuffers = NULL;
300 cd->framebuffer_num = 0;
304 close(cd->handle);
305 cd->handle = open(cd->device_name, O_RDWR | O_NONBLOCK, 0);
307 if (cd->handle >= 0) {
310 _xioctl(cd->handle, VIDIOC_CROPCAP, &cropcap);
313 _xioctl (cd->handle, VIDIOC_S_CROP, &crop);
324 _camera_device_mmap_framebuffer(LinuxCameraDevice* cd)
334 if(_xioctl(cd->handle, VIDIOC_REQBUFS, &req)) {
337 __FUNCTION__, cd->device_name);
347 cd->framebuffers = calloc(req.count, sizeof(CameraFrameBuffer));
348 if (cd->framebuffers == NULL) {
355 for(cd->framebuffer_num = 0; cd->framebuffer_num < req.count;
356 cd->framebuffer_num++) {
362 buf.index = cd->framebuffer_num;
363 if(_xioctl(cd->handle, VIDIOC_QUERYBUF, &buf) < 0) {
368 cd->framebuffers[cd->framebuffer_num].size = buf.length;
369 cd->framebuffers[cd->framebuffer_num].data =
371 cd->handle, buf.m.offset);
372 if (MAP_FAILED == cd->framebuffers[cd->framebuffer_num].data) {
382 buf.index = cd->framebuffer_num;
383 if (_xioctl(cd->handle, VIDIOC_QBUF, &buf) < 0) {
389 cd->io_type = CAMERA_IO_MEMMAP;
401 _camera_device_user_framebuffer(LinuxCameraDevice* cd)
411 if(_xioctl(cd->handle, VIDIOC_REQBUFS, &req)) {
414 __FUNCTION__, cd->device_name);
424 cd->framebuffers = calloc(req.count, sizeof(CameraFrameBuffer));
425 if (cd->framebuffers == NULL) {
431 for(cd->framebuffer_num = 0; cd->framebuffer_num < req.count;
432 cd->framebuffer_num++) {
433 cd->framebuffers[cd->framebuffer_num].size =
434 cd->actual_pixel_format.sizeimage;
435 cd->framebuffers[cd->framebuffer_num].data =
436 malloc(cd->framebuffers[cd->framebuffer_num].size);
437 if (cd->framebuffers[cd->framebuffer_num].data == NULL) {
447 buf.m.userptr = (unsigned long)cd->framebuffers[cd->framebuffer_num].data;
448 buf.length = cd->framebuffers[cd->framebuffer_num].size;
449 if (_xioctl(cd->handle, VIDIOC_QBUF, &buf) < 0) {
455 cd->io_type = CAMERA_IO_USERPTR;
467 _camera_device_direct_framebuffer(LinuxCameraDevice* cd)
470 cd->framebuffer_num = 1;
471 cd->framebuffers = malloc(sizeof(CameraFrameBuffer));
472 if (cd->framebuffers == NULL) {
477 cd->framebuffers[0].size = cd->actual_pixel_format.sizeimage;
478 cd->framebuffers[0].data = malloc(cd->framebuffers[0].size);
479 if (cd->framebuffers[0].data == NULL) {
484 cd->io_type = CAMERA_IO_DIRECT;
491 * cd - Camera device descriptor to open the camera for.
496 _camera_device_open(LinuxCameraDevice* cd)
500 if (stat(cd->device_name, &st)) {
505 E("%s: '%s' is not a device", __FUNCTION__, cd->device_name);
510 cd->handle = open(cd->device_name, O_RDWR | O_NONBLOCK, 0);
511 if (cd->handle < 0) {
513 __FUNCTION__, cd->device_name, strerror(errno));
516 if (_xioctl(cd->handle, VIDIOC_QUERYCAP, &cd->caps) < 0) {
519 __FUNCTION__, cd->device_name);
520 close(cd->handle);
521 cd->handle = -1;
525 __FUNCTION__, cd->device_name);
526 close(cd->handle);
527 cd->handle = -1;
533 if (!(cd->caps.capabilities & V4L2_CAP_VIDEO_CAPTURE)) {
535 __FUNCTION__, cd->device_name);
536 close(cd->handle);
537 cd->handle = -1;
546 * cd - Opened camera device descriptor.
556 _camera_device_enum_format_sizes(LinuxCameraDevice* cd,
570 if(_xioctl(cd->handle, VIDIOC_ENUM_FRAMESIZES, &size_enum)) {
612 if(_xioctl(cd->handle, VIDIOC_ENUM_FRAMESIZES, &size_enum)) {
662 * cd - Opened camera device descriptor.
671 _camera_device_enum_pixel_formats(LinuxCameraDevice* cd, QemuPixelFormat** fmts)
684 if(_xioctl(cd->handle, VIDIOC_ENUM_FMT, &fmt_enum)) {
708 if(_xioctl(cd->handle, VIDIOC_ENUM_FMT, &fmt_enum)) {
724 _camera_device_enum_format_sizes(cd, fmt_enum.pixelformat,
749 * cd - Opened camera device descriptor.
755 _camera_device_get_info(LinuxCameraDevice* cd, CameraInfo* cis)
760 int num_pix_fmts = _camera_device_enum_pixel_formats(cd, &formats);
778 cis->device_name = ASTRDUP(cd->device_name);
779 cis->inp_channel = cd->input_channel;
804 LinuxCameraDevice* cd;
807 cd = _camera_device_alloc();
808 cd->device_name = name != NULL ? ASTRDUP(name) : ASTRDUP("/dev/video0");
809 cd->input_channel = inp_channel;
812 if (_camera_device_open(cd)) {
813 _camera_device_free(cd);
819 _xioctl(cd->handle, VIDIOC_CROPCAP, &cropcap);
822 _xioctl (cd->handle, VIDIOC_S_CROP, &crop);
824 return &cd->header;
834 LinuxCameraDevice* cd;
843 cd = (LinuxCameraDevice*)ccd->opaque;
844 if (cd->handle < 0) {
855 if (_xioctl(cd->handle, VIDIOC_S_FMT, &fmt) < 0) {
859 __FUNCTION__, cd->device_name, fmt_str, frame_width, frame_height);
860 _camera_device_reset(cd);
870 _camera_device_reset(cd);
873 memcpy(&cd->actual_pixel_format, &fmt.fmt.pix, sizeof(struct v4l2_pix_format));
881 r = _camera_device_mmap_framebuffer(cd);
884 _camera_device_reset(cd);
889 r = _camera_device_user_framebuffer(cd);
892 _camera_device_reset(cd);
896 if (!(cd->caps.capabilities & V4L2_CAP_READWRITE)) {
898 __FUNCTION__, cd->device_name);
899 _camera_device_reset(cd);
902 r = _camera_device_direct_framebuffer(cd);
905 _camera_device_reset(cd);
912 if (cd->io_type != CAMERA_IO_DIRECT) {
915 if (_xioctl (cd->handle, VIDIOC_STREAMON, &type) < 0) {
917 __FUNCTION__, cd->device_name, strerror(errno));
918 _camera_device_reset(cd);
929 LinuxCameraDevice* cd;
936 cd = (LinuxCameraDevice*)ccd->opaque;
937 if (cd->handle < 0) {
942 switch (cd->io_type) {
950 if (_xioctl(cd->handle, VIDIOC_STREAMOFF, &type) < 0) {
952 __FUNCTION__, cd->device_name, strerror(errno));
957 E("%s: Unknown I/O method: %d", __FUNCTION__, cd->io_type);
964 _camera_device_reset(cd);
978 LinuxCameraDevice* cd;
985 cd = (LinuxCameraDevice*)ccd->opaque;
986 if (cd->handle < 0) {
991 if (cd->io_type == CAMERA_IO_DIRECT) {
995 void* buff = cd->framebuffers[0].data;
998 read(cd->handle, buff + total_read_bytes,
999 cd->actual_pixel_format.sizeimage - total_read_bytes);
1007 __FUNCTION__, cd->device_name, strerror(errno));
1012 } while (total_read_bytes < cd->actual_pixel_format.sizeimage);
1014 return convert_frame(buff, cd->actual_pixel_format.pixelformat,
1015 cd->actual_pixel_format.sizeimage,
1016 cd->actual_pixel_format.width,
1017 cd->actual_pixel_format.height,
1026 buf.memory = cd->io_type == CAMERA_IO_MEMMAP ? V4L2_MEMORY_MMAP :
1029 const int res = _xioctl(cd->handle, VIDIOC_DQBUF, &buf);
1036 __FUNCTION__, cd->device_name, strerror(errno));
1042 res = convert_frame(cd->framebuffers[buf.index].data,
1043 cd->actual_pixel_format.pixelformat,
1044 cd->actual_pixel_format.sizeimage,
1045 cd->actual_pixel_format.width,
1046 cd->actual_pixel_format.height,
1051 if (_xioctl(cd->handle, VIDIOC_QBUF, &buf) < 0) {
1053 __FUNCTION__, cd->device_name, strerror(errno));
1063 LinuxCameraDevice* cd;
1067 cd = (LinuxCameraDevice*)ccd->opaque;
1068 _camera_device_free(cd);
1082 CameraDevice* cd;
1085 cd = camera_device_open(dev_name, 0);
1086 if (cd != NULL) {
1087 LinuxCameraDevice* lcd = (LinuxCameraDevice*)cd->opaque;
1095 camera_device_close(cd);