1 /*
2 ********************************************************************************
3 * USB UVC Driver
4 *
5 * (c) Copyright 2010-2015, All winners Co,Ld.
6 * All Right Reserved
7 *
8 * FileName : usbWebcam.h
9 *
10 * Author : Kingvan.Tong
11 *
12 * Date : 2013.05.17
13 *
14 * Description : USB Webcam
15 *
16 * Others : NULL
17 *
18 * History:
19 * <time> <version > <author> <desc>
20 * 2013.05.17 1.0 Kingvan.Tong build this file
21 *
22 ********************************************************************************
23 */
24
25 #include <string.h>
26 //#include "usb_host_config.h"
27 //#include "usb_host_base_types.h"
28 #include "usb_os_platform.h"
29 #include "error.h"
30 //#include "misc_lib.h"
31 #include "video.h"
32 #include "uvcvideo.h"
33 #include "usbWebcam.h"
34 #include "usbWebcam_proc.h"
35 #include "hal_log.h"
36
37 static struct uvc_fh *v4l2_handle = NULL;
38
39 extern struct uvc_fh * uvc_v4l2_open(struct uvc_streaming *stream);
40 extern __s32 uvc_v4l2_release(struct uvc_fh *handle);
41 extern __s32 uvc_v4l2_do_ioctl(struct uvc_fh *handle, unsigned int cmd, void *arg);
42
43
usbWebcam_v4l2_init(UVCDev_t * UVCDev)44 __s32 usbWebcam_v4l2_init(UVCDev_t *UVCDev)
45 {
46 if( UVCDev->streams == NULL )
47 {
48 hal_log_err("usbWebcam_v4l2_init() fail\n");
49 return -1;
50 }
51 if( v4l2_handle != NULL )
52 {
53 hal_log_err("usbWebcam_v4l2_init() v4l2_handle != NULL\n");
54 return -1;
55 }
56 //1.打开设备文件
57 v4l2_handle = uvc_v4l2_open(UVCDev->streams);
58 hal_log_info("usbWebcam_v4l2_init()\n");
59 if( v4l2_handle == NULL )
60 return -1;
61 else
62 return 0;
63 }
64
usbWebcam_v4l2_exit(UVCDev_t * UVCDev)65 __s32 usbWebcam_v4l2_exit(UVCDev_t *UVCDev)
66 {
67 if( v4l2_handle == NULL )
68 {
69 hal_log_err("usbWebcam_v4l2_exit(), v4l2_handle == NULL\n");
70 return -1;
71 }
72 uvc_v4l2_release(v4l2_handle);
73 v4l2_handle = NULL;
74 hal_log_info("usbWebcam_v4l2_exit()\n");
75 return 0;
76 }
77
usbWebcam_v4l2_capture_on(UVCDev_t * UVCDev)78 __s32 usbWebcam_v4l2_capture_on(UVCDev_t *UVCDev)
79 {
80 usbWebcam_t *usbWebcam = NULL;
81 struct v4l2_format fmt;
82
83 if( v4l2_handle == NULL )
84 {
85 hal_log_err("usbWebcam_v4l2_capture_on(), v4l2_handle == NULL\n");
86 return -1;
87 }
88
89 usbWebcam = (usbWebcam_t *)UVCDev->Extern;
90
91 memset( &fmt, 0, sizeof(fmt) );
92 fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
93 fmt.fmt.pix.width = 1280;
94 fmt.fmt.pix.height = 720;
95 fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_MJPEG; //V4L2_PIX_FMT_MJPEG; V4L2_PIX_FMT_YUYV;
96 fmt.fmt.pix.field = V4L2_FIELD_INTERLACED;
97
98 if(uvc_v4l2_do_ioctl(v4l2_handle, VIDIOC_S_FMT, &fmt) == -1)
99 {
100 hal_log_err("usbWebcam_v4l2_capture_on() set format fail\n");
101 return-1;
102 }
103
104 hal_log_info("usbWebcam_v4l2_capture_on() type=%d\n", UVCDev->streams->type);
105 return uvc_v4l2_do_ioctl(v4l2_handle, VIDIOC_STREAMON, (void*)UVCDev->streams->type);
106 }
107
usbWebcam_v4l2_capture_off(UVCDev_t * UVCDev)108 __s32 usbWebcam_v4l2_capture_off(UVCDev_t *UVCDev)
109 {
110 if( v4l2_handle == NULL )
111 {
112 hal_log_err("usbWebcam_v4l2_capture_off(), v4l2_handle == NULL\n");
113 return -1;
114 }
115
116 hal_log_info("usbWebcam_v4l2_capture_on() type=%d\n", UVCDev->streams->type);
117 return uvc_v4l2_do_ioctl(v4l2_handle, VIDIOC_STREAMOFF, (void*)UVCDev->streams->type);
118 }
119
120
121
122
123
124
125
126
127
128
129
130