~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

Wine Cross Reference
wine/dlls/avicap32/avicap32_main.c

Version: ~ [ wine-1.1.3 ] ~ [ wine-1.1.2 ] ~ [ wine-1.1.1 ] ~ [ wine-1.1.0 ] ~ [ wine-1.0 ] ~ [ wine-1.0-rc5 ] ~ [ wine-1.0-rc4 ] ~ [ wine-1.0-rc3 ] ~ [ wine-1.0-rc2 ] ~ [ wine-1.0-rc1 ] ~ [ wine-0.9.61 ] ~ [ wine-0.9.60 ] ~ [ wine-0.9.59 ] ~ [ wine-0.9.58 ] ~ [ wine-0.9.57 ] ~ [ wine-0.9.56 ] ~ [ wine-0.9.55 ] ~ [ wine-0.9.54 ] ~ [ wine-0.9.53 ] ~ [ wine-0.9.52 ] ~ [ wine-0.9.51 ] ~ [ wine-0.9.50 ] ~ [ wine-0.9.49 ] ~ [ wine-0.9.48 ] ~ [ wine-0.9.47 ] ~ [ wine-0.9.46 ] ~ [ wine-0.9.45 ] ~ [ wine-0.9.44 ] ~ [ wine-0.9.43 ] ~ [ wine-0.9.42 ] ~ [ wine-0.9.41 ] ~ [ wine-0.9.40 ] ~ [ wine-0.9.39 ] ~ [ wine-0.9.38 ] ~ [ wine-0.9.37 ] ~ [ wine-0.9.36 ] ~ [ wine-0.9.35 ] ~ [ wine-0.9.34 ] ~ [ wine-0.9.33 ] ~ [ wine-0.9.32 ] ~ [ wine-0.9.31 ] ~ [ wine-0.9.30 ] ~ [ wine-0.9.29 ] ~ [ wine-0.9.28 ] ~ [ wine-0.9.27 ] ~ [ wine-0.9.26 ] ~ [ wine-0.9.25 ] ~ [ wine-0.9.24 ] ~ [ wine-0.9.23 ] ~ [ wine-0.9.22 ] ~ [ wine-0.9.21 ] ~ [ wine-0.9.20 ] ~ [ wine-0.9.19 ] ~ [ wine-0.9.18 ] ~ [ wine-0.9.17 ] ~ [ wine-0.9.16 ] ~ [ wine-0.9.15 ] ~ [ wine-0.9.14 ] ~ [ wine-0.9.13 ] ~ [ wine-0.9.12 ] ~ [ wine-0.9.11 ] ~ [ wine-0.9.10 ] ~ [ wine-0.9.9 ] ~ [ wine-0.9.8 ] ~ [ wine-0.9.7 ] ~ [ wine-0.9.6 ] ~ [ wine-0.9.5 ] ~ [ wine-0.9.4 ] ~ [ wine-0.9.3 ] ~ [ wine-0.9.2 ] ~ [ wine-0.9.1 ] ~ [ wine-0.9 ] ~ [ wine20050930 ] ~ [ wine20050830 ] ~ [ wine20050725 ] ~ [ wine20050628 ] ~ [ wine20050524 ] ~ [ wine20050419 ] ~ [ wine20050310 ] ~ [ wine20050211 ] ~ [ wine20050111 ] ~ [ wine20041201 ] ~ [ wine20041019 ] ~ [ wine20040914 ] ~ [ wine20040813 ] ~ [ wine20040716 ] ~ [ wine20040615 ] ~ [ wine20040505 ] ~ [ wine20040408 ] ~ [ wine20040309 ] ~ [ wine20040213 ] ~ [ wine20040121 ] ~ [ wine20031212 ] ~ [ wine20031118 ] ~ [ wine20031016 ] ~ [ wine20030911 ] ~ [ wine20030813 ] ~ [ wine20030709 ] ~ [ wine20030618 ] ~ [ wine20030508 ] ~ [ wine20030408 ] ~ [ wine20030318 ] ~ [ wine20030219 ] ~ [ wine20030115 ] ~ [ wine20021219 ] ~ [ wine20021125 ] ~ [ wine20021031 ] ~ [ wine20021007 ] ~ [ wine20020904 ] ~ [ wine20020804 ] ~ [ wine20020710 ] ~ [ wine20020605 ] ~ [ wine20020509 ] ~ [ wine20020411 ] ~ [ wine20020310 ] ~ [ wine20020228 ] ~ [ wine20011226 ] ~ [ wine20011108 ] ~ [ wine20011004 ] ~ [ wine20010824 ] ~ [ wine20010731 ] ~ [ wine20010629 ] ~ [ wine20010510 ] ~ [ wine20010418 ] ~ [ wine20010326 ] ~ [ wine20010305 ] ~ [ wine20010216 ] ~ [ wine20010112 ] ~ [ wine20001222 ] ~ [ wine20001202 ] ~ [ wine20001026 ] ~ [ wine20001002 ] ~ [ wine20000909 ] ~ [ wine20000821 ] ~ [ wine20000801 ] ~ [ wine20000716 ] ~ [ wine20000326 ] ~ [ wine20000227 ] ~ [ wine20000130 ] ~ [ wine20000109 ] ~

  1 /*
  2  * Copyright 2002 Dmitry Timoshkov for CodeWeavers
  3  * Copyright 2005 Maarten Lankhorst
  4  *
  5  * This library is free software; you can redistribute it and/or
  6  * modify it under the terms of the GNU Lesser General Public
  7  * License as published by the Free Software Foundation; either
  8  * version 2.1 of the License, or (at your option) any later version.
  9  *
 10  * This library is distributed in the hope that it will be useful,
 11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 13  * Lesser General Public License for more details.
 14  *
 15  * You should have received a copy of the GNU Lesser General Public
 16  * License along with this library; if not, write to the Free Software
 17  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 18  */
 19 
 20 #include "config.h"
 21 #include "wine/port.h"
 22 
 23 #include <stdarg.h>
 24 #include <stdio.h>
 25 #include <fcntl.h>
 26 #ifdef HAVE_SYS_IOCTL_H
 27 # include <sys/ioctl.h>
 28 #endif
 29 #ifdef HAVE_SYS_STAT_H
 30 # include <sys/stat.h>
 31 #endif
 32 #ifdef HAVE_SYS_ERRNO_H
 33 # include <sys/errno.h>
 34 #endif
 35 #ifdef HAVE_SYS_TIME_H
 36 # include <sys/time.h>
 37 #endif
 38 #ifdef HAVE_ASM_TYPES_H
 39 # include <asm/types.h>
 40 #endif
 41 #ifdef HAVE_LINUX_VIDEODEV_H
 42 # include <linux/videodev.h>
 43 #endif
 44 #ifdef HAVE_UNISTD_H
 45 # include <unistd.h>
 46 #endif
 47 
 48 #include "windef.h"
 49 #include "winbase.h"
 50 #include "wingdi.h"
 51 #include "winuser.h"
 52 #include "vfw.h"
 53 #include "winnls.h"
 54 #include "winternl.h"
 55 #include "wine/debug.h"
 56 
 57 #define CAP_DESC_MAX 32
 58 
 59 WINE_DEFAULT_DEBUG_CHANNEL(avicap);
 60 
 61 
 62 /***********************************************************************
 63  *             capCreateCaptureWindowW   (AVICAP32.@)
 64  */
 65 HWND VFWAPI capCreateCaptureWindowW(LPCWSTR lpszWindowName, DWORD dwStyle, INT x,
 66                                     INT y, INT nWidth, INT nHeight, HWND hWnd,
 67                                     INT nID)
 68 {
 69     FIXME("%s, %08x, %08x, %08x, %08x, %08x, %p, %08x\n",
 70            debugstr_w(lpszWindowName), dwStyle,
 71            x, y, nWidth, nHeight, hWnd, nID);
 72     return 0;
 73 }
 74 
 75 /***********************************************************************
 76  *             capCreateCaptureWindowA   (AVICAP32.@)
 77  */
 78 HWND VFWAPI capCreateCaptureWindowA(LPCSTR lpszWindowName, DWORD dwStyle, INT x,
 79                                     INT y, INT nWidth, INT nHeight, HWND hWnd,
 80                                     INT nID)
 81 {   UNICODE_STRING nameW;
 82     HWND retW;
 83 
 84     if (lpszWindowName) RtlCreateUnicodeStringFromAsciiz(&nameW, lpszWindowName);
 85     else nameW.Buffer = NULL;
 86 
 87     retW = capCreateCaptureWindowW(nameW.Buffer, dwStyle, x, y, nWidth, nHeight,
 88                                    hWnd, nID);
 89     RtlFreeUnicodeString(&nameW);
 90 
 91     return retW;
 92 }
 93 
 94 #ifdef HAVE_LINUX_VIDEODEV_H
 95 
 96 static int xioctl(int fd, int request, void * arg)
 97 {
 98    int r;
 99 
100    do r = ioctl (fd, request, arg);
101    while (-1 == r && EINTR == errno);
102 
103    return r;
104 }
105 
106 static BOOL query_video_device(int devnum, char *name, int namesize, char *version, int versionsize)
107 {
108    int fd;
109    char device[16];
110    struct stat st;
111    struct video_capability capa;
112 #ifdef HAVE_V4L2
113    struct v4l2_capability caps;
114 #endif
115 
116    snprintf(device, sizeof(device), "/dev/video%i", devnum);
117 
118    if (stat (device, &st) == -1) {
119       /* This is probably because the device does not exist */
120       WARN("%s: %s\n", device, strerror(errno));
121       return FALSE;
122    }
123 
124    if (!S_ISCHR (st.st_mode)) {
125       ERR("%s: Not a device\n", device);
126       return FALSE;
127    }
128 
129    fd = open(device, O_RDWR | O_NONBLOCK);
130    if (fd == -1) {
131       ERR("%s: Failed to open: %s\n", device, strerror(errno));
132       return FALSE;
133    }
134 
135 #ifdef HAVE_V4L2
136    memset(&caps, 0, sizeof(caps));
137    if (xioctl(fd, VIDIOC_QUERYCAP, &caps) != -1) {
138       lstrcpynA(name, (char *)caps.card, namesize);
139       snprintf(version, versionsize, "%s v%u.%u.%u", (char *)caps.driver, (caps.version >> 16) & 0xFF,
140                              (caps.version >> 8) & 0xFF, caps.version & 0xFF);
141       close(fd);
142       return TRUE;
143    }
144 
145    if (errno != EINVAL && errno != 515)
146       WARN("%s: ioctl failed: %s -- Falling back to V4L\n", device, strerror(errno));
147    else WARN("%s: Not a V4L2 compatible device, trying V4l 1\n", device);
148 #endif /* HAVE_V4L2 */
149 
150    memset(&capa, 0, sizeof(capa));
151    if (xioctl(fd, VIDIOCGCAP, &capa) == -1) {
152 /* errno 515 is used by some webcam drivers for unknown IOICTL command */
153       if (errno != EINVAL && errno != 515)
154          ERR("%s: Querying failed: %s\n", device, strerror(errno));
155       else ERR("%s: Querying failed: Not a V4L compatible device\n", device);
156       close(fd);
157       return FALSE;
158    }
159 
160    lstrcpynA(name, capa.name, namesize);
161    lstrcpynA(version, device, versionsize);
162    close(fd);
163    return TRUE;
164 }
165 
166 #else /* HAVE_LINUX_VIDEODEV_H */
167 
168 static BOOL query_video_device(int devnum, char *name, int namesize, char *version, int versionsize)
169 {
170    ERR("Video 4 Linux support not enabled\n");
171    return FALSE;
172 }
173 
174 #endif /* HAVE_LINUX_VIDEODEV_H */
175 
176 /***********************************************************************
177  *             capGetDriverDescriptionA   (AVICAP32.@)
178  */
179 BOOL VFWAPI capGetDriverDescriptionA(WORD wDriverIndex, LPSTR lpszName,
180                                      INT cbName, LPSTR lpszVer, INT cbVer)
181 {
182    BOOL retval;
183    WCHAR devname[CAP_DESC_MAX], devver[CAP_DESC_MAX];
184    TRACE("--> capGetDriverDescriptionW\n");
185    retval = capGetDriverDescriptionW(wDriverIndex, devname, CAP_DESC_MAX, devver, CAP_DESC_MAX);
186    if (retval) {
187       WideCharToMultiByte(CP_ACP, 0, devname, -1, lpszName, cbName, NULL, NULL);
188       WideCharToMultiByte(CP_ACP, 0, devver, -1, lpszVer, cbVer, NULL, NULL);
189    }
190    return retval;
191 }
192 
193 /***********************************************************************
194  *             capGetDriverDescriptionW   (AVICAP32.@)
195  */
196 BOOL VFWAPI capGetDriverDescriptionW(WORD wDriverIndex, LPWSTR lpszName,
197                                      INT cbName, LPWSTR lpszVer, INT cbVer)
198 {
199    char devname[CAP_DESC_MAX], devver[CAP_DESC_MAX];
200 
201    if (!query_video_device(wDriverIndex, devname, CAP_DESC_MAX, devver, CAP_DESC_MAX)) return FALSE;
202 
203    MultiByteToWideChar(CP_UNIXCP, 0, devname, -1, lpszName, cbName);
204    MultiByteToWideChar(CP_UNIXCP, 0, devver, -1, lpszVer, cbVer);
205    TRACE("Version: %s - Name: %s\n", debugstr_w(lpszVer), debugstr_w(lpszName));
206    return TRUE;
207 }
208 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

This page was automatically generated by the LXR engine.
Visit the LXR main site for more information.