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