Mercurial > pygame
annotate src/_camera.c @ 1849:301bc61643a9 math_module
merged changes from trunk
| author | lorenz |
|---|---|
| date | Mon, 16 Nov 2009 18:31:40 +0000 |
| parents | 19a59d1c410b |
| children |
| rev | line source |
|---|---|
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1 /* |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
2 pygame - Python Game Library |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
3 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
4 This library is free software; you can redistribute it and/or |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
5 modify it under the terms of the GNU Library General Public |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
6 License as published by the Free Software Foundation; either |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
7 version 2 of the License, or (at your option) any later version. |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
8 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
9 This library is distributed in the hope that it will be useful, |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
10 but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
12 Library General Public License for more details. |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
13 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
14 You should have received a copy of the GNU Library General Public |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
15 License along with this library; if not, write to the Free |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
16 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
17 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
18 */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
19 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
20 /* |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
21 * Camera - webcam support for pygame |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
22 * Author: Nirav Patel |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
23 * |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
24 * This module allows for use of v4l2 webcams in pygame. The code is written |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
25 * such that adding support for v4l or vfw cameras should be possible without |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
26 * much modification of existing functions. v4l2 functions are kept seperate |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
27 * from functions available to pygame users and generic functions like |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
28 * colorspace conversion. |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
29 * |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
30 * There is currently support for cameras that support MMAP and use pixelformats |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
31 * of RGB24, RGB444, YUYV, SBGGR8, and YUV420. To add support for additional |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
32 * pixelformats, add them to v4l2_init_device and v4l2_process_image, and add |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
33 * functions to convert the format to packed RGB, YUV, and HSV. |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
34 */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
35 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
36 #include "camera.h" |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
37 |
| 1849 | 38 /* |
| 39 #if defined(__unix__) || !defined(__APPLE__) | |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
40 #else |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
41 #define V4L2_PIX_FMT_RGB24 1 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
42 #define V4L2_PIX_FMT_RGB444 1 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
43 #endif |
| 1849 | 44 */ |
| 45 | |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
46 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
47 /* functions available to pygame users */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
48 PyObject* surf_colorspace (PyObject* self, PyObject* arg); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
49 PyObject* list_cameras (PyObject* self, PyObject* arg); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
50 PyObject* camera_start (PyCameraObject* self); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
51 PyObject* camera_stop (PyCameraObject* self); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
52 PyObject* camera_get_controls (PyCameraObject* self); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
53 PyObject* camera_set_controls (PyCameraObject* self, PyObject* arg, PyObject *kwds); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
54 PyObject* camera_get_size (PyCameraObject* self); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
55 PyObject* camera_query_image (PyCameraObject* self); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
56 PyObject* camera_get_image (PyCameraObject* self, PyObject* arg); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
57 PyObject* camera_get_raw(PyCameraObject* self); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
58 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
59 /* |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
60 * Functions available to pygame users. The idea is to make these as simple as |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
61 * possible, and merely have them call functions specific to the type of |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
62 * camera being used to do all the real work. It currently just calls v4l2_* |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
63 * functions, but it could check something like self->cameratype and depending |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
64 * on the result, call v4l, v4l2, vfw, or other functions. |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
65 */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
66 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
67 /* colorspace() - Surface colorspace conversion */ |
| 1849 | 68 PyObject* surf_colorspace (PyObject* self, PyObject* arg) { |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
69 PyObject *surfobj, *surfobj2; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
70 SDL_Surface* surf, *newsurf; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
71 char* color; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
72 int cspace; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
73 surfobj2 = NULL; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
74 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
75 /*get all the arguments*/ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
76 if (!PyArg_ParseTuple (arg, "O!s|O!", &PySurface_Type, &surfobj, |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
77 &color, &PySurface_Type, &surfobj2)) |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
78 return NULL; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
79 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
80 if (!strcmp(color, "YUV")) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
81 cspace = YUV_OUT; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
82 } else if (!strcmp(color, "HSV")) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
83 cspace = HSV_OUT; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
84 } else { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
85 return RAISE (PyExc_ValueError, "Incorrect colorspace value"); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
86 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
87 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
88 surf = PySurface_AsSurface (surfobj); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
89 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
90 if (!surfobj2) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
91 newsurf = SDL_CreateRGBSurface (0, surf->w, surf->h, |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
92 surf->format->BitsPerPixel, surf->format->Rmask, |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
93 surf->format->Gmask, surf->format->Bmask, surf->format->Amask); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
94 if (!newsurf) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
95 return NULL; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
96 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
97 } else { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
98 newsurf = PySurface_AsSurface (surfobj2); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
99 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
100 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
101 /* check to see if the size is the same. */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
102 if (newsurf->w != surf->w || newsurf->h != surf->h) |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
103 return RAISE (PyExc_ValueError, |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
104 "Surfaces not the same width and height."); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
105 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
106 /* check to see if the format of the surface is the same. */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
107 if (surf->format->BitsPerPixel != newsurf->format->BitsPerPixel) |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
108 return RAISE (PyExc_ValueError, "Surfaces not the same depth"); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
109 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
110 SDL_LockSurface (newsurf); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
111 PySurface_Lock (surfobj); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
112 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
113 Py_BEGIN_ALLOW_THREADS; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
114 colorspace (surf, newsurf, cspace); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
115 Py_END_ALLOW_THREADS; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
116 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
117 PySurface_Unlock (surfobj); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
118 SDL_UnlockSurface (newsurf); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
119 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
120 if (surfobj2) |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
121 { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
122 Py_INCREF (surfobj2); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
123 return surfobj2; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
124 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
125 else |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
126 return PySurface_New (newsurf); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
127 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
128 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
129 /* list_cameras() - lists cameras available on the computer */ |
| 1849 | 130 PyObject* list_cameras (PyObject* self, PyObject* arg) { |
| 131 #if defined(__unix__) || defined (__APPLE__) | |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
132 PyObject* ret_list; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
133 PyObject* string; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
134 char** devices; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
135 int num_devices, i; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
136 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
137 num_devices = 0; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
138 ret_list = NULL; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
139 ret_list = PyList_New (0); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
140 if (!ret_list) |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
141 return NULL; |
| 1849 | 142 |
| 143 #if defined(__unix__) | |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
144 devices = v4l2_list_cameras(&num_devices); |
| 1849 | 145 # elif defined(__APPLE__) |
| 146 devices = mac_list_cameras(&num_devices); | |
| 147 # endif | |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
148 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
149 for(i = 0; i < num_devices; i++) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
150 string = PyString_FromString(devices[i]); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
151 PyList_Append(ret_list, string); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
152 Py_DECREF(string); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
153 free(devices[i]); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
154 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
155 free(devices); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
156 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
157 return ret_list; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
158 #else |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
159 Py_RETURN_NONE; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
160 #endif |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
161 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
162 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
163 /* start() - opens, inits, and starts capturing on the camera */ |
| 1849 | 164 PyObject* camera_start (PyCameraObject* self) { |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
165 #if defined(__unix__) |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
166 if (v4l2_open_device(self) == 0) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
167 if (v4l_open_device(self) == 0) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
168 v4l2_close_device(self); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
169 return NULL; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
170 } else { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
171 self->camera_type = CAM_V4L; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
172 if (v4l_init_device(self) == 0) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
173 v4l2_close_device(self); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
174 return NULL; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
175 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
176 if (v4l_start_capturing(self) == 0) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
177 v4l2_close_device(self); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
178 return NULL; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
179 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
180 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
181 } else { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
182 self->camera_type = CAM_V4L2; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
183 if (v4l2_init_device(self) == 0) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
184 v4l2_close_device(self); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
185 return NULL; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
186 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
187 if (v4l2_start_capturing(self) == 0) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
188 v4l2_close_device(self); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
189 return NULL; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
190 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
191 } |
| 1849 | 192 #elif defined(__APPLE__) |
| 193 if (! (mac_open_device(self) == 1 && mac_init_device(self) == 1 && mac_start_capturing(self) == 1)) { | |
| 194 mac_close_device(self); | |
| 195 return NULL; | |
| 196 } | |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
197 #endif |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
198 Py_RETURN_NONE; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
199 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
200 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
201 /* stop() - stops capturing, uninits, and closes the camera */ |
| 1849 | 202 PyObject* camera_stop (PyCameraObject* self) { |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
203 #if defined(__unix__) |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
204 if (v4l2_stop_capturing(self) == 0) |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
205 return NULL; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
206 if (v4l2_uninit_device(self) == 0) |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
207 return NULL; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
208 if (v4l2_close_device(self) == 0) |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
209 return NULL; |
| 1849 | 210 #elif defined(__APPLE__) |
| 211 if (mac_stop_capturing(self) == 0) | |
| 212 return NULL; | |
| 213 if (mac_close_device(self) == 0) | |
| 214 return NULL; | |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
215 #endif |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
216 Py_RETURN_NONE; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
217 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
218 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
219 /* get_controls() - gets current values of user controls */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
220 /* TODO: Support brightness, contrast, and other common controls */ |
| 1849 | 221 PyObject* camera_get_controls (PyCameraObject* self) { |
| 222 #if defined(__unix__) | |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
223 int value; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
224 if (v4l2_get_control(self->fd, V4L2_CID_HFLIP, &value)) |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
225 self->hflip = value; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
226 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
227 if (v4l2_get_control(self->fd, V4L2_CID_VFLIP, &value)) |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
228 self->vflip = value; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
229 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
230 if (v4l2_get_control(self->fd, V4L2_CID_BRIGHTNESS, &value)) |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
231 self->brightness = value; |
| 1849 | 232 |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
233 return Py_BuildValue ("(NNN)", PyBool_FromLong(self->hflip), PyBool_FromLong(self->vflip), PyInt_FromLong(self->brightness)); |
| 1849 | 234 #elif defined(__APPLE__) |
| 235 return Py_BuildValue ("(NNN)", PyBool_FromLong(self->hflip), PyBool_FromLong(self->vflip), PyInt_FromLong(-1)); | |
| 236 #endif | |
| 237 Py_RETURN_NONE; | |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
238 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
239 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
240 /* set_controls() - changes camera settings if supported by the camera */ |
| 1849 | 241 PyObject* camera_set_controls (PyCameraObject* self, PyObject* arg, PyObject *kwds) { |
| 242 #if defined(__unix__) | |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
243 int hflip = 0, vflip = 0, brightness = 0; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
244 char *kwids[] = {"hflip", "vflip", "brightness", NULL}; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
245 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
246 camera_get_controls(self); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
247 hflip = self->hflip; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
248 vflip = self->vflip; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
249 brightness = self->brightness; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
250 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
251 if (!PyArg_ParseTupleAndKeywords(arg, kwds, "|iii", kwids, &hflip, &vflip, &brightness)) |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
252 return NULL; |
| 1849 | 253 |
| 254 /* #if defined(__unix__) */ | |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
255 if (v4l2_set_control(self->fd, V4L2_CID_HFLIP, hflip)) |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
256 self->hflip = hflip; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
257 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
258 if (v4l2_set_control(self->fd, V4L2_CID_VFLIP, vflip)) |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
259 self->vflip = vflip; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
260 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
261 if (v4l2_set_control(self->fd, V4L2_CID_BRIGHTNESS, brightness)) |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
262 self->brightness = brightness; |
| 1849 | 263 |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
264 return Py_BuildValue ("(NNN)", PyBool_FromLong(self->hflip), PyBool_FromLong(self->vflip), PyInt_FromLong(self->brightness)); |
| 1849 | 265 |
| 266 #elif defined(__APPLE__) | |
| 267 int hflip = 0, vflip = 0, brightness = 0; | |
| 268 char *kwids[] = {"hflip", "vflip", "brightness", NULL}; | |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
269 |
| 1849 | 270 camera_get_controls(self); |
| 271 hflip = self->hflip; | |
| 272 vflip = self->vflip; | |
| 273 brightness = -1; | |
| 274 | |
| 275 if (!PyArg_ParseTupleAndKeywords(arg, kwds, "|iii", kwids, &hflip, &vflip, &brightness)) | |
| 276 return NULL; | |
| 277 | |
| 278 self->hflip = hflip; | |
| 279 self->vflip = vflip; | |
| 280 | |
| 281 return Py_BuildValue ("(NNN)", PyBool_FromLong(self->hflip), PyBool_FromLong(self->vflip), PyInt_FromLong(-1)); | |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
282 #endif |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
283 Py_RETURN_NONE; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
284 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
285 |
| 1849 | 286 /* get_size() - returns the dimensions of the images being recorded */ |
| 287 PyObject* camera_get_size (PyCameraObject* self) { | |
| 288 #if defined(__unix__) | |
| 289 return Py_BuildValue ("(ii)", self->width, self->height); | |
| 290 #elif defined(__APPLE__) | |
| 291 return Py_BuildValue ("(ii)", self->boundsRect.right, self->boundsRect.bottom); | |
| 292 #endif | |
| 293 Py_RETURN_NONE; | |
| 294 } | |
| 295 | |
| 296 /* query_image() - checks if a frame is ready */ | |
| 297 PyObject* camera_query_image(PyCameraObject* self) { | |
| 298 #if defined(__unix__) | |
| 299 return PyBool_FromLong(v4l2_query_buffer(self)); | |
| 300 #endif | |
| 301 Py_RETURN_TRUE; | |
| 302 } | |
| 303 | |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
304 /* get_image() - returns an RGB Surface */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
305 /* code to reuse Surface from René Dudfield */ |
| 1849 | 306 PyObject* camera_get_image (PyCameraObject* self, PyObject* arg) { |
| 307 #if defined(__unix__) | |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
308 SDL_Surface* surf = NULL; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
309 PyObject *surfobj = NULL; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
310 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
311 if (!PyArg_ParseTuple (arg, "|O!", &PySurface_Type, &surfobj)) |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
312 return NULL; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
313 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
314 if (!surfobj) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
315 surf = SDL_CreateRGBSurface (0, self->width, self->height, 24, 0xFF<<16, |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
316 0xFF<<8, 0xFF, 0); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
317 } else { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
318 surf = PySurface_AsSurface (surfobj); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
319 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
320 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
321 if (!surf) |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
322 return NULL; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
323 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
324 if (surf->w != self->width || surf->h != self->height) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
325 return RAISE (PyExc_ValueError, |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
326 "Destination surface not the correct width or height."); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
327 } |
| 1849 | 328 |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
329 Py_BEGIN_ALLOW_THREADS; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
330 if (!v4l2_read_frame(self, surf)) |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
331 return NULL; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
332 Py_END_ALLOW_THREADS; |
| 1849 | 333 |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
334 if (!surf) |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
335 return NULL; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
336 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
337 if (surfobj) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
338 Py_INCREF (surfobj); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
339 return surfobj; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
340 } else { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
341 return PySurface_New (surf); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
342 } |
| 1849 | 343 #elif defined(__APPLE__) |
| 344 SDL_Surface* surf = NULL; | |
| 345 PyObject *surfobj = NULL; | |
| 346 | |
| 347 if (!PyArg_ParseTuple (arg, "|O!", &PySurface_Type, &surfobj)) | |
| 348 return NULL; | |
| 349 | |
| 350 if (!surfobj) { | |
| 351 surf = SDL_CreateRGBSurface( | |
| 352 0, | |
| 353 self->boundsRect.right, | |
| 354 self->boundsRect.bottom, | |
| 355 24, | |
| 356 0xFF<<16, | |
| 357 0xFF<<8, | |
| 358 0xFF, | |
| 359 0); | |
| 360 | |
| 361 } else { | |
| 362 surf = PySurface_AsSurface(surfobj); | |
| 363 } | |
| 364 | |
| 365 if (!surf) | |
| 366 return NULL; | |
| 367 | |
| 368 if (surf->w != self->boundsRect.right || surf->h != self->boundsRect.bottom) { | |
| 369 return RAISE (PyExc_ValueError, | |
| 370 "Destination surface not the correct width or height."); | |
| 371 } | |
| 372 /*is dit nodig op osx... */ | |
| 373 Py_BEGIN_ALLOW_THREADS; | |
| 374 | |
| 375 if (!mac_read_frame(self, surf)) | |
| 376 return NULL; | |
| 377 Py_END_ALLOW_THREADS; | |
| 378 if (!surf) | |
| 379 return NULL; | |
| 380 | |
| 381 if (surfobj) { | |
| 382 Py_INCREF (surfobj); | |
| 383 return surfobj; | |
| 384 } else { | |
| 385 return PySurface_New (surf); | |
| 386 } | |
| 387 #endif | |
| 388 Py_RETURN_NONE; | |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
389 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
390 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
391 /* get_raw() - returns an unmodified image as a string from the buffer */ |
| 1849 | 392 PyObject* camera_get_raw(PyCameraObject* self) { |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
393 #if defined(__unix__) |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
394 return v4l2_read_raw(self); |
| 1849 | 395 #elif defined(__APPLE__) |
| 396 return mac_read_raw(self); | |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
397 #endif |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
398 Py_RETURN_NONE; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
399 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
400 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
401 /* |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
402 * Pixelformat conversion functions |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
403 */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
404 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
405 /* converts from rgb Surface to yuv or hsv */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
406 /* TODO: Allow for conversion from yuv and hsv to all */ |
| 1849 | 407 void colorspace (SDL_Surface *src, SDL_Surface *dst, int cspace) { |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
408 switch (cspace) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
409 case YUV_OUT: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
410 rgb_to_yuv (src->pixels, dst->pixels, src->h * src->w, 0, src->format); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
411 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
412 case HSV_OUT: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
413 rgb_to_hsv (src->pixels, dst->pixels, src->h * src->w, 0, src->format); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
414 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
415 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
416 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
417 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
418 /* converts pretty directly if its already RGB24 */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
419 void rgb24_to_rgb (const void* src, void* dst, int length, SDL_PixelFormat* format) |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
420 { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
421 Uint8 *s = (Uint8 *) src; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
422 Uint8 *d8; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
423 Uint16 *d16; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
424 Uint32 *d32; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
425 Uint8 r, g, b; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
426 int rshift, gshift, bshift, rloss, gloss, bloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
427 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
428 rshift = format->Rshift; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
429 gshift = format->Gshift; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
430 bshift = format->Bshift; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
431 rloss = format->Rloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
432 gloss = format->Gloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
433 bloss = format->Bloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
434 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
435 switch (format->BytesPerPixel) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
436 case 1: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
437 d8 = (Uint8 *) dst; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
438 while (length--) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
439 r = *s++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
440 g = *s++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
441 b = *s++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
442 *d8++ = ((r >> rloss) << rshift) | ((g >> gloss) << gshift) | ((b >> bloss) << bshift); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
443 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
444 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
445 case 2: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
446 d16 = (Uint16 *) dst; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
447 while (length--) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
448 r = *s++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
449 g = *s++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
450 b = *s++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
451 *d16++ = ((r >> rloss) << rshift) | ((g >> gloss) << gshift) | ((b >> bloss) << bshift); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
452 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
453 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
454 case 3: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
455 d8 = (Uint8 *) dst; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
456 while (length--) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
457 *d8++ = *(s+2); /* blue */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
458 *d8++ = *(s+1); /* green */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
459 *d8++ = *s; /* red */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
460 s += 3; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
461 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
462 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
463 default: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
464 d32 = (Uint32 *) dst; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
465 while (length--) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
466 r = *s++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
467 g = *s++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
468 b = *s++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
469 *d32++ = ((r >> rloss) << rshift) | ((g >> gloss) << gshift) | ((b >> bloss) << bshift); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
470 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
471 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
472 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
473 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
474 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
475 /* converts packed rgb to packed hsv. formulas modified from wikipedia */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
476 void rgb_to_hsv (const void* src, void* dst, int length, |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
477 unsigned long source, SDL_PixelFormat* format) |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
478 { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
479 Uint8 *s8, *d8; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
480 Uint16 *s16, *d16; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
481 Uint32 *s32, *d32; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
482 Uint8 r, g, b, p1, p2, h, s, v, max, min, delta; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
483 int rshift, gshift, bshift, rloss, gloss, bloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
484 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
485 s8 = (Uint8 *) src; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
486 s16 = (Uint16 *) src; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
487 s32 = (Uint32 *) src; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
488 d8 = (Uint8 *) dst; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
489 d16 = (Uint16 *) dst; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
490 d32 = (Uint32 *) dst; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
491 rshift = format->Rshift; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
492 gshift = format->Gshift; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
493 bshift = format->Bshift; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
494 rloss = format->Rloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
495 gloss = format->Gloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
496 bloss = format->Bloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
497 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
498 /* you could stick the if statement inside the loop, but I'm sacrificing a |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
499 a few hundred bytes for a little performance */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
500 if (source == V4L2_PIX_FMT_RGB444) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
501 while (length--) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
502 p1 = *s8++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
503 p2 = *s8++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
504 b = p2 << 4; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
505 g = p1 & 0xF0; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
506 r = p1 << 4; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
507 max = MAX(MAX(r, g), b); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
508 min = MIN(MIN(r, g), b); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
509 delta = max - min; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
510 v = max; /* value (similar to luminosity) */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
511 if (!delta) { /* grey, zero hue and saturation */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
512 s = 0; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
513 h = 0; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
514 } else { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
515 s = 255*delta/max; /* saturation */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
516 if (r == max) { /* set hue based on max color */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
517 h = 43*(g - b)/delta; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
518 } else if (g == max) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
519 h = 85 + 43*(b - r)/delta; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
520 } else { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
521 h = 170 + 43*(r - g)/delta; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
522 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
523 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
524 switch (format->BytesPerPixel) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
525 case 1: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
526 *d8++ = ((h >> rloss) << rshift) | ((s >> gloss) << gshift) | ((v >> bloss) << bshift); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
527 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
528 case 2: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
529 *d16++ = ((h >> rloss) << rshift) | ((s >> gloss) << gshift) | ((v >> bloss) << bshift); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
530 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
531 case 3: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
532 *d8++ = v; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
533 *d8++ = s; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
534 *d8++ = h; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
535 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
536 default: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
537 *d32++ = ((h >> rloss) << rshift) | ((s >> gloss) << gshift) | ((v >> bloss) << bshift); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
538 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
539 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
540 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
541 } else if (source == V4L2_PIX_FMT_RGB24) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
542 while (length--) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
543 r = *s8++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
544 g = *s8++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
545 b = *s8++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
546 max = MAX(MAX(r, g), b); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
547 min = MIN(MIN(r, g), b); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
548 delta = max - min; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
549 v = max; /* value (similar to luminosity) */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
550 if (!delta) { /* grey, zero hue and saturation */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
551 s = 0; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
552 h = 0; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
553 } else { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
554 s = 255*delta/max; /* saturation */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
555 if (r == max) { /* set hue based on max color */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
556 h = 43*(g - b)/delta; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
557 } else if (g == max) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
558 h = 85 + 43*(b - r)/delta; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
559 } else { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
560 h = 170 + 43*(r - g)/delta; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
561 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
562 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
563 switch (format->BytesPerPixel) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
564 case 1: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
565 *d8++ = ((h >> rloss) << rshift) | ((s >> gloss) << gshift) | ((v >> bloss) << bshift); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
566 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
567 case 2: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
568 *d16++ = ((h >> rloss) << rshift) | ((s >> gloss) << gshift) | ((v >> bloss) << bshift); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
569 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
570 case 3: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
571 *d8++ = v; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
572 *d8++ = s; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
573 *d8++ = h; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
574 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
575 default: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
576 *d32++ = ((h >> rloss) << rshift) | ((s >> gloss) << gshift) | ((v >> bloss) << bshift); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
577 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
578 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
579 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
580 } else { /* for use as stage 2 in yuv or bayer to hsv, r and b switched */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
581 while (length--) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
582 switch (format->BytesPerPixel) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
583 case 1: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
584 r = *s8 >> rshift << rloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
585 g = *s8 >> gshift << gloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
586 b = *s8++ >> bshift << bloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
587 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
588 case 2: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
589 r = *s16 >> rshift << rloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
590 g = *s16 >> gshift << gloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
591 b = *s16++ >> bshift << bloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
592 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
593 case 3: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
594 b = *s8++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
595 g = *s8++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
596 r = *s8++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
597 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
598 default: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
599 r = *s32 >> rshift << rloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
600 g = *s32 >> gshift << gloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
601 b = *s32++ >> bshift << bloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
602 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
603 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
604 max = MAX(MAX(r, g), b); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
605 min = MIN(MIN(r, g), b); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
606 delta = max - min; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
607 v = max; /* value (similar to luminosity) */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
608 if (!delta) { /* grey, zero hue and saturation */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
609 s = 0; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
610 h = 0; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
611 } else { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
612 s = 255*delta/max; /* saturation */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
613 if (r == max) { /* set hue based on max color */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
614 h = 43*(g - b)/delta; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
615 } else if (g == max) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
616 h = 85 + 43*(b - r)/delta; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
617 } else { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
618 h = 170 + 43*(r - g)/delta; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
619 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
620 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
621 switch (format->BytesPerPixel) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
622 case 1: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
623 *d8++ = ((h >> rloss) << rshift) | ((s >> gloss) << gshift) | ((v >> bloss) << bshift); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
624 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
625 case 2: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
626 *d16++ = ((h >> rloss) << rshift) + ((s >> gloss) << gshift) + ((v >> bloss) << bshift); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
627 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
628 case 3: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
629 *d8++ = v; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
630 *d8++ = s; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
631 *d8++ = h; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
632 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
633 default: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
634 *d32++ = ((h >> rloss) << rshift) | ((s >> gloss) << gshift) | ((v >> bloss) << bshift); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
635 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
636 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
637 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
638 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
639 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
640 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
641 /* convert packed rgb to yuv. Note that unlike many implementations of YUV, |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
642 this has a full range of 0-255 for Y, not 16-235. Formulas from wikipedia */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
643 void rgb_to_yuv (const void* src, void* dst, int length, |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
644 unsigned long source, SDL_PixelFormat* format) |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
645 { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
646 Uint8 *s8, *d8; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
647 Uint16 *s16, *d16; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
648 Uint32 *s32, *d32; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
649 Uint8 r, g, b, y, u, v; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
650 Uint8 p1, p2; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
651 int rshift, gshift, bshift, rloss, gloss, bloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
652 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
653 s8 = (Uint8 *) src; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
654 s16 = (Uint16 *) src; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
655 s32 = (Uint32 *) src; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
656 d8 = (Uint8 *) dst; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
657 d16 = (Uint16 *) dst; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
658 d32 = (Uint32 *) dst; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
659 rshift = format->Rshift; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
660 gshift = format->Gshift; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
661 bshift = format->Bshift; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
662 rloss = format->Rloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
663 gloss = format->Gloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
664 bloss = format->Bloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
665 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
666 if (source == V4L2_PIX_FMT_RGB444) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
667 while (length--) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
668 p1 = *s8++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
669 p2 = *s8++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
670 b = p2 << 4; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
671 g = p1 & 0xF0; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
672 r = p1 << 4; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
673 v = ((112*r-94*g-18*b + 128) >> 8) + 128; /* V */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
674 u = ((-38*r-74*g+112*b + 128) >> 8) + 128; /* U */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
675 y = (77*r+150*g+29*b + 128) >> 8; /* Y */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
676 switch (format->BytesPerPixel) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
677 case 1: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
678 *d8++ = ((y >> rloss) << rshift) | ((u >> gloss) << gshift) | ((v >> bloss) << bshift); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
679 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
680 case 2: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
681 *d16++ = ((y >> rloss) << rshift) | ((u >> gloss) << gshift) | ((v >> bloss) << bshift); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
682 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
683 case 3: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
684 *d8++ = v; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
685 *d8++ = u; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
686 *d8++ = y; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
687 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
688 default: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
689 *d32++ = ((y >> rloss) << rshift) | ((u >> gloss) << gshift) | ((v >> bloss) << bshift); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
690 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
691 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
692 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
693 } else if (source == V4L2_PIX_FMT_RGB24) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
694 while (length--) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
695 r = *s8++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
696 g = *s8++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
697 b = *s8++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
698 v = ((112*r-94*g-18*b + 128) >> 8) + 128; /* V */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
699 u = ((-38*r-74*g+112*b + 128) >> 8) + 128; /* U */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
700 y = (77*r+150*g+29*b + 128) >> 8; /* Y */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
701 switch (format->BytesPerPixel) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
702 case 1: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
703 *d8++ = ((y >> rloss) << rshift) | ((u >> gloss) << gshift) | ((v >> bloss) << bshift); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
704 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
705 case 2: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
706 *d16++ = ((y >> rloss) << rshift) | ((u >> gloss) << gshift) | ((v >> bloss) << bshift); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
707 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
708 case 3: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
709 *d8++ = v; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
710 *d8++ = u; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
711 *d8++ = y; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
712 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
713 default: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
714 *d32++ = ((y >> rloss) << rshift) | ((u >> gloss) << gshift) | ((v >> bloss) << bshift); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
715 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
716 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
717 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
718 } else { /* for use as stage 2 in bayer to yuv, r and b switched */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
719 switch (format->BytesPerPixel) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
720 case 1: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
721 while (length--) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
722 r = *s8 >> rshift << rloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
723 g = *s8 >> gshift << gloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
724 b = *s8++ >> bshift << bloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
725 *d8++ = ((((77*r+150*g+29*b + 128) >> 8) >> rloss) << rshift) | (((((-38*r-74*g+112*b + 128) >> 8) + 128) >> gloss) << gshift) | (((((112*r-94*g-18*b + 128) >> 8) + 128) >> bloss) << bshift); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
726 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
727 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
728 case 2: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
729 while (length--) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
730 r = *s16 >> rshift << rloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
731 g = *s16 >> gshift << gloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
732 b = *s16++ >> bshift << bloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
733 *d16++ = ((((77*r+150*g+29*b + 128) >> 8) >> rloss) << rshift) | (((((-38*r-74*g+112*b + 128) >> 8) + 128) >> gloss) << gshift) | (((((112*r-94*g-18*b + 128) >> 8) + 128) >> bloss) << bshift); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
734 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
735 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
736 case 3: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
737 while (length--) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
738 b = *s8++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
739 g = *s8++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
740 r = *s8++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
741 *d8++ = ((112*r-94*g-18*b + 128) >> 8) + 128; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
742 *d8++ = ((-38*r-74*g+112*b + 128) >> 8) + 128; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
743 *d8++ = (77*r+150*g+29*b + 128) >> 8; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
744 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
745 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
746 default: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
747 while (length--) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
748 r = *s32 >> rshift << rloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
749 g = *s32 >> gshift << gloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
750 b = *s32++ >> bshift << bloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
751 *d32++ = ((((77*r+150*g+29*b + 128) >> 8) >> rloss) << rshift) | (((((-38*r-74*g+112*b + 128) >> 8) + 128) >> gloss) << gshift) | (((((112*r-94*g-18*b + 128) >> 8) + 128) >> bloss) << bshift); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
752 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
753 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
754 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
755 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
756 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
757 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
758 /* Converts from rgb444 (R444) to rgb24 (RGB3) */ |
| 1849 | 759 void rgb444_to_rgb (const void* src, void* dst, int length, SDL_PixelFormat* format) { |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
760 Uint8 *s, *d8; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
761 Uint16 *d16; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
762 Uint32 *d32; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
763 Uint8 p1, p2, r, g, b; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
764 int rshift, gshift, bshift, rloss, gloss, bloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
765 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
766 s = (Uint8 *) src; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
767 rshift = format->Rshift; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
768 gshift = format->Gshift; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
769 bshift = format->Bshift; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
770 rloss = format->Rloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
771 gloss = format->Gloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
772 bloss = format->Bloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
773 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
774 switch (format->BytesPerPixel) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
775 case 1: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
776 d8 = (Uint8 *) dst; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
777 while (length--) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
778 r = *s << 4; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
779 g = *s++ & 0xF0; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
780 b = *s++ << 4; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
781 *d8++ = ((r >> rloss) << rshift) | ((g >> gloss) << gshift) | ((b >> bloss) << bshift); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
782 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
783 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
784 case 2: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
785 d16 = (Uint16 *) dst; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
786 while (length--) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
787 r = *s << 4; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
788 g = *s++ & 0xF0; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
789 b = *s++ << 4; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
790 *d16++ = ((r >> rloss) << rshift) | ((g >> gloss) << gshift) | ((b >> bloss) << bshift); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
791 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
792 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
793 case 3: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
794 d8 = (Uint8 *) dst; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
795 while (length--) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
796 p1 = *s++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
797 p2 = *s++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
798 *d8++ = p2 << 4; /* blue */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
799 *d8++ = p1 & 0xF0; /* green */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
800 *d8++ = p1 << 4; /* red */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
801 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
802 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
803 default: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
804 d32 = (Uint32 *) dst; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
805 while (length--) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
806 r = *s << 4; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
807 g = *s++ & 0xF0; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
808 b = *s++ << 4; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
809 *d32++ = ((r >> rloss) << rshift) | ((g >> gloss) << gshift) | ((b >> bloss) << bshift); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
810 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
811 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
812 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
813 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
814 |
|
1532
e672d97c46c5
Licensing problems in the Camera module.
Nirav Patel <nrp@eclecti.cc>
parents:
1513
diff
changeset
|
815 /* convert from 4:2:2 YUYV interlaced to RGB */ |
|
1533
633723dd42a9
re-add yuyv to rgb based on libv4l by Hans de Goede, licensed LGPL
Nirav Patel <nrp@eclecti.cc>
parents:
1532
diff
changeset
|
816 /* colorspace conversion routine from libv4l. Licensed LGPL 2.1 |
|
633723dd42a9
re-add yuyv to rgb based on libv4l by Hans de Goede, licensed LGPL
Nirav Patel <nrp@eclecti.cc>
parents:
1532
diff
changeset
|
817 (C) 2008 Hans de Goede <j.w.r.degoede@hhs.nl> */ |
| 1849 | 818 void yuyv_to_rgb (const void* src, void* dst, int length, SDL_PixelFormat* format) { |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
819 Uint8 *s, *d8; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
820 Uint16 *d16; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
821 Uint32 *d32; |
|
1532
e672d97c46c5
Licensing problems in the Camera module.
Nirav Patel <nrp@eclecti.cc>
parents:
1513
diff
changeset
|
822 int i; |
|
1533
633723dd42a9
re-add yuyv to rgb based on libv4l by Hans de Goede, licensed LGPL
Nirav Patel <nrp@eclecti.cc>
parents:
1532
diff
changeset
|
823 int r1, g1, b1, r2, b2, g2; |
|
633723dd42a9
re-add yuyv to rgb based on libv4l by Hans de Goede, licensed LGPL
Nirav Patel <nrp@eclecti.cc>
parents:
1532
diff
changeset
|
824 int rshift, gshift, bshift, rloss, gloss, bloss, y1, y2, u, v, u1, rg, v1; |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
825 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
826 rshift = format->Rshift; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
827 gshift = format->Gshift; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
828 bshift = format->Bshift; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
829 rloss = format->Rloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
830 gloss = format->Gloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
831 bloss = format->Bloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
832 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
833 d8 = (Uint8 *) dst; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
834 d16 = (Uint16 *) dst; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
835 d32 = (Uint32 *) dst; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
836 i = length >> 1; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
837 s = (Uint8 *) src; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
838 |
|
1533
633723dd42a9
re-add yuyv to rgb based on libv4l by Hans de Goede, licensed LGPL
Nirav Patel <nrp@eclecti.cc>
parents:
1532
diff
changeset
|
839 /* yuyv packs 2 pixels into every 4 bytes, sharing the u and v color |
|
633723dd42a9
re-add yuyv to rgb based on libv4l by Hans de Goede, licensed LGPL
Nirav Patel <nrp@eclecti.cc>
parents:
1532
diff
changeset
|
840 terms between the 2, with each pixel having a unique y luminance term. |
|
633723dd42a9
re-add yuyv to rgb based on libv4l by Hans de Goede, licensed LGPL
Nirav Patel <nrp@eclecti.cc>
parents:
1532
diff
changeset
|
841 Thus, we will operate on 2 pixels at a time. */ |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
842 while (i--) { |
|
1533
633723dd42a9
re-add yuyv to rgb based on libv4l by Hans de Goede, licensed LGPL
Nirav Patel <nrp@eclecti.cc>
parents:
1532
diff
changeset
|
843 y1 = *s++; |
|
633723dd42a9
re-add yuyv to rgb based on libv4l by Hans de Goede, licensed LGPL
Nirav Patel <nrp@eclecti.cc>
parents:
1532
diff
changeset
|
844 u = *s++; |
|
633723dd42a9
re-add yuyv to rgb based on libv4l by Hans de Goede, licensed LGPL
Nirav Patel <nrp@eclecti.cc>
parents:
1532
diff
changeset
|
845 y2 = *s++; |
|
633723dd42a9
re-add yuyv to rgb based on libv4l by Hans de Goede, licensed LGPL
Nirav Patel <nrp@eclecti.cc>
parents:
1532
diff
changeset
|
846 v = *s++; |
|
633723dd42a9
re-add yuyv to rgb based on libv4l by Hans de Goede, licensed LGPL
Nirav Patel <nrp@eclecti.cc>
parents:
1532
diff
changeset
|
847 /* The lines from here to the switch statement are from libv4l */ |
|
633723dd42a9
re-add yuyv to rgb based on libv4l by Hans de Goede, licensed LGPL
Nirav Patel <nrp@eclecti.cc>
parents:
1532
diff
changeset
|
848 u1 = (((u - 128) << 7) + (u - 128)) >> 6; |
|
633723dd42a9
re-add yuyv to rgb based on libv4l by Hans de Goede, licensed LGPL
Nirav Patel <nrp@eclecti.cc>
parents:
1532
diff
changeset
|
849 rg = (((u - 128) << 1) + (u - 128) + ((v - 128) << 2) + |
|
633723dd42a9
re-add yuyv to rgb based on libv4l by Hans de Goede, licensed LGPL
Nirav Patel <nrp@eclecti.cc>
parents:
1532
diff
changeset
|
850 ((v - 128) << 1)) >> 3; |
|
633723dd42a9
re-add yuyv to rgb based on libv4l by Hans de Goede, licensed LGPL
Nirav Patel <nrp@eclecti.cc>
parents:
1532
diff
changeset
|
851 v1 = (((v - 128) << 1) + (v - 128)) >> 1; |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
852 |
|
1533
633723dd42a9
re-add yuyv to rgb based on libv4l by Hans de Goede, licensed LGPL
Nirav Patel <nrp@eclecti.cc>
parents:
1532
diff
changeset
|
853 r1 = SAT2(y1 + v1); |
|
633723dd42a9
re-add yuyv to rgb based on libv4l by Hans de Goede, licensed LGPL
Nirav Patel <nrp@eclecti.cc>
parents:
1532
diff
changeset
|
854 g1 = SAT2(y1 - rg); |
|
633723dd42a9
re-add yuyv to rgb based on libv4l by Hans de Goede, licensed LGPL
Nirav Patel <nrp@eclecti.cc>
parents:
1532
diff
changeset
|
855 b1 = SAT2(y1 + u1); |
|
633723dd42a9
re-add yuyv to rgb based on libv4l by Hans de Goede, licensed LGPL
Nirav Patel <nrp@eclecti.cc>
parents:
1532
diff
changeset
|
856 |
|
633723dd42a9
re-add yuyv to rgb based on libv4l by Hans de Goede, licensed LGPL
Nirav Patel <nrp@eclecti.cc>
parents:
1532
diff
changeset
|
857 r2 = SAT2(y2 + v1); |
|
633723dd42a9
re-add yuyv to rgb based on libv4l by Hans de Goede, licensed LGPL
Nirav Patel <nrp@eclecti.cc>
parents:
1532
diff
changeset
|
858 g2 = SAT2(y2 - rg); |
|
633723dd42a9
re-add yuyv to rgb based on libv4l by Hans de Goede, licensed LGPL
Nirav Patel <nrp@eclecti.cc>
parents:
1532
diff
changeset
|
859 b2 = SAT2(y2 + u1); |
|
633723dd42a9
re-add yuyv to rgb based on libv4l by Hans de Goede, licensed LGPL
Nirav Patel <nrp@eclecti.cc>
parents:
1532
diff
changeset
|
860 |
|
633723dd42a9
re-add yuyv to rgb based on libv4l by Hans de Goede, licensed LGPL
Nirav Patel <nrp@eclecti.cc>
parents:
1532
diff
changeset
|
861 /* choose the right pixel packing for the destination surface depth */ |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
862 switch (format->BytesPerPixel) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
863 case 1: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
864 *d8++ = ((r1 >> rloss) << rshift) | ((g1 >> gloss) << gshift) | ((b1 >> bloss) << bshift); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
865 *d8++ = ((r2 >> rloss) << rshift) | ((g2 >> gloss) << gshift) | ((b2 >> bloss) << bshift); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
866 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
867 case 2: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
868 *d16++ = ((r1 >> rloss) << rshift) | ((g1 >> gloss) << gshift) | ((b1 >> bloss) << bshift); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
869 *d16++ = ((r2 >> rloss) << rshift) | ((g2 >> gloss) << gshift) | ((b2 >> bloss) << bshift); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
870 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
871 case 3: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
872 *d8++ = b1; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
873 *d8++ = g1; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
874 *d8++ = r1; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
875 *d8++ = b2; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
876 *d8++ = g2; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
877 *d8++ = r2; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
878 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
879 default: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
880 *d32++ = ((r1 >> rloss) << rshift) | ((g1 >> gloss) << gshift) | ((b1 >> bloss) << bshift); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
881 *d32++ = ((r2 >> rloss) << rshift) | ((g2 >> gloss) << gshift) | ((b2 >> bloss) << bshift); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
882 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
883 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
884 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
885 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
886 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
887 /* turn yuyv into packed yuv. */ |
| 1849 | 888 void yuyv_to_yuv (const void* src, void* dst, int length, SDL_PixelFormat* format) { |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
889 Uint8 *s, *d8; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
890 Uint8 y1, u, y2, v; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
891 Uint16 *d16; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
892 Uint32 *d32; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
893 int i = length >> 1; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
894 int rshift, gshift, bshift, rloss, gloss, bloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
895 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
896 rshift = format->Rshift; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
897 gshift = format->Gshift; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
898 bshift = format->Bshift; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
899 rloss = format->Rloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
900 gloss = format->Gloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
901 bloss = format->Bloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
902 s = (Uint8 *) src; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
903 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
904 switch (format->BytesPerPixel) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
905 case 1: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
906 d8 = (Uint8 *) dst; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
907 while (i--) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
908 y1 = *s++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
909 u = *s++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
910 y2 = *s++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
911 v = *s++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
912 *d8++ = ((y1 >> rloss) << rshift) | ((u >> gloss) << gshift) | ((v >> bloss) << bshift); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
913 *d8++ = ((y2 >> rloss) << rshift) | ((u >> gloss) << gshift) | ((v >> bloss) << bshift); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
914 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
915 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
916 case 2: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
917 d16 = (Uint16 *) dst; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
918 while (i--) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
919 y1 = *s++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
920 u = *s++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
921 y2 = *s++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
922 v = *s++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
923 *d16++ = ((y1 >> rloss) << rshift) | ((u >> gloss) << gshift) | ((v >> bloss) << bshift); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
924 *d16++ = ((y2 >> rloss) << rshift) | ((u >> gloss) << gshift) | ((v >> bloss) << bshift); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
925 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
926 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
927 case 3: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
928 d8 = (Uint8 *) dst; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
929 while (i--) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
930 *d8++ = *(s+3); /* v */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
931 *d8++ = *(s+1); /* u */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
932 *d8++ = *s; /* y1 */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
933 *d8++ = *(s+3); /* v */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
934 *d8++ = *(s+1); /* u */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
935 *d8++ = *(s+2); /* y2 */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
936 s += 4; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
937 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
938 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
939 default: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
940 d32 = (Uint32 *) dst; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
941 while (i--) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
942 y1 = *s++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
943 u = *s++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
944 y2 = *s++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
945 v = *s++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
946 *d32++ = ((y1 >> rloss) << rshift) | ((u >> gloss) << gshift) | ((v >> bloss) << bshift); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
947 *d32++ = ((y2 >> rloss) << rshift) | ((u >> gloss) << gshift) | ((v >> bloss) << bshift); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
948 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
949 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
950 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
951 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
952 |
|
1532
e672d97c46c5
Licensing problems in the Camera module.
Nirav Patel <nrp@eclecti.cc>
parents:
1513
diff
changeset
|
953 /* Converts from 8 bit Bayer (BA81) to rgb24 (RGB3), based on: |
|
e672d97c46c5
Licensing problems in the Camera module.
Nirav Patel <nrp@eclecti.cc>
parents:
1513
diff
changeset
|
954 * Sonix SN9C101 based webcam basic I/F routines |
|
e672d97c46c5
Licensing problems in the Camera module.
Nirav Patel <nrp@eclecti.cc>
parents:
1513
diff
changeset
|
955 * Copyright (C) 2004 Takafumi Mizuno <taka-qce@ls-a.jp> |
|
e672d97c46c5
Licensing problems in the Camera module.
Nirav Patel <nrp@eclecti.cc>
parents:
1513
diff
changeset
|
956 * |
|
e672d97c46c5
Licensing problems in the Camera module.
Nirav Patel <nrp@eclecti.cc>
parents:
1513
diff
changeset
|
957 * Redistribution and use in source and binary forms, with or without |
|
e672d97c46c5
Licensing problems in the Camera module.
Nirav Patel <nrp@eclecti.cc>
parents:
1513
diff
changeset
|
958 * modification, are permitted provided that the following conditions |
|
e672d97c46c5
Licensing problems in the Camera module.
Nirav Patel <nrp@eclecti.cc>
parents:
1513
diff
changeset
|
959 * are met: |
|
e672d97c46c5
Licensing problems in the Camera module.
Nirav Patel <nrp@eclecti.cc>
parents:
1513
diff
changeset
|
960 * 1. Redistributions of source code must retain the above copyright |
|
e672d97c46c5
Licensing problems in the Camera module.
Nirav Patel <nrp@eclecti.cc>
parents:
1513
diff
changeset
|
961 * notice, this list of conditions and the following disclaimer. |
|
e672d97c46c5
Licensing problems in the Camera module.
Nirav Patel <nrp@eclecti.cc>
parents:
1513
diff
changeset
|
962 * 2. Redistributions in binary form must reproduce the above copyright |
|
e672d97c46c5
Licensing problems in the Camera module.
Nirav Patel <nrp@eclecti.cc>
parents:
1513
diff
changeset
|
963 * notice, this list of conditions and the following disclaimer in the |
|
e672d97c46c5
Licensing problems in the Camera module.
Nirav Patel <nrp@eclecti.cc>
parents:
1513
diff
changeset
|
964 * documentation and/or other materials provided with the distribution. |
|
e672d97c46c5
Licensing problems in the Camera module.
Nirav Patel <nrp@eclecti.cc>
parents:
1513
diff
changeset
|
965 * |
|
e672d97c46c5
Licensing problems in the Camera module.
Nirav Patel <nrp@eclecti.cc>
parents:
1513
diff
changeset
|
966 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND |
|
e672d97c46c5
Licensing problems in the Camera module.
Nirav Patel <nrp@eclecti.cc>
parents:
1513
diff
changeset
|
967 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
|
e672d97c46c5
Licensing problems in the Camera module.
Nirav Patel <nrp@eclecti.cc>
parents:
1513
diff
changeset
|
968 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
|
e672d97c46c5
Licensing problems in the Camera module.
Nirav Patel <nrp@eclecti.cc>
parents:
1513
diff
changeset
|
969 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE |
|
e672d97c46c5
Licensing problems in the Camera module.
Nirav Patel <nrp@eclecti.cc>
parents:
1513
diff
changeset
|
970 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
|
e672d97c46c5
Licensing problems in the Camera module.
Nirav Patel <nrp@eclecti.cc>
parents:
1513
diff
changeset
|
971 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
|
e672d97c46c5
Licensing problems in the Camera module.
Nirav Patel <nrp@eclecti.cc>
parents:
1513
diff
changeset
|
972 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
|
e672d97c46c5
Licensing problems in the Camera module.
Nirav Patel <nrp@eclecti.cc>
parents:
1513
diff
changeset
|
973 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
|
e672d97c46c5
Licensing problems in the Camera module.
Nirav Patel <nrp@eclecti.cc>
parents:
1513
diff
changeset
|
974 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
|
e672d97c46c5
Licensing problems in the Camera module.
Nirav Patel <nrp@eclecti.cc>
parents:
1513
diff
changeset
|
975 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
|
e672d97c46c5
Licensing problems in the Camera module.
Nirav Patel <nrp@eclecti.cc>
parents:
1513
diff
changeset
|
976 * SUCH DAMAGE. |
|
e672d97c46c5
Licensing problems in the Camera module.
Nirav Patel <nrp@eclecti.cc>
parents:
1513
diff
changeset
|
977 */ |
|
e672d97c46c5
Licensing problems in the Camera module.
Nirav Patel <nrp@eclecti.cc>
parents:
1513
diff
changeset
|
978 /* FIXME: Seems to be grayscale and kind of dark on the OLPC XO |
|
e672d97c46c5
Licensing problems in the Camera module.
Nirav Patel <nrp@eclecti.cc>
parents:
1513
diff
changeset
|
979 Maybe the result of a different Bayer color order on the screen? */ |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
980 /* TODO: Certainly not the most efficient way of doing this conversion. */ |
| 1849 | 981 void sbggr8_to_rgb (const void* src, void* dst, int width, int height, SDL_PixelFormat* format) { |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
982 Uint8 *rawpt, *d8; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
983 Uint16 *d16; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
984 Uint32 *d32; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
985 Uint8 r, g, b; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
986 int rshift, gshift, bshift, rloss, gloss, bloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
987 int i = width * height; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
988 rawpt = (Uint8*) src; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
989 rshift = format->Rshift; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
990 gshift = format->Gshift; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
991 bshift = format->Bshift; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
992 rloss = format->Rloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
993 gloss = format->Gloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
994 bloss = format->Bloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
995 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
996 d8 = (Uint8 *) dst; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
997 d16 = (Uint16 *) dst; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
998 d32 = (Uint32 *) dst; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
999 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1000 while (i--) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1001 if ( (i/width) % 2 == 0 ) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1002 /* even row (BGBGBGBG)*/ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1003 if ( (i % 2) == 0 ) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1004 /* B */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1005 if ( (i > width) && ((i % width) > 0) ) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1006 b = *rawpt; /* B */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1007 g = (*(rawpt-1)+*(rawpt+1)+ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1008 *(rawpt+width)+*(rawpt-width))/4; /* G */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1009 r = (*(rawpt-width-1)+*(rawpt-width+1)+ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1010 *(rawpt+width-1)+*(rawpt+width+1))/4; /* R */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1011 } else { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1012 /* first line or left column */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1013 b = *rawpt; /* B */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1014 g = (*(rawpt+1)+*(rawpt+width))/2; /* G */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1015 r = *(rawpt+width+1); /* R */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1016 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1017 } else { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1018 /* (B)G */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1019 if ( (i > width) && ((i % width) < (width-1)) ) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1020 b = (*(rawpt-1)+*(rawpt+1))/2; /* B */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1021 g = *rawpt; /* G */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1022 r = (*(rawpt+width)+*(rawpt-width))/2; /* R */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1023 } else { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1024 /* first line or right column */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1025 b = *(rawpt-1); /* B */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1026 g = *rawpt; /* G */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1027 r = *(rawpt+width); /* R */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1028 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1029 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1030 } else { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1031 /* odd row (GRGRGRGR) */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1032 if ( (i % 2) == 0 ) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1033 /* G(R) */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1034 if ( (i < (width*(height-1))) && ((i % width) > 0) ) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1035 b = (*(rawpt+width)+*(rawpt-width))/2; /* B */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1036 g = *rawpt; /* G */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1037 r = (*(rawpt-1)+*(rawpt+1))/2; /* R */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1038 } else { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1039 /* bottom line or left column */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1040 b = *(rawpt-width); /* B */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1041 g = *rawpt; /* G */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1042 r = *(rawpt+1); /* R */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1043 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1044 } else { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1045 /* R */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1046 if ( i < (width*(height-1)) && ((i % width) < (width-1)) ) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1047 b = (*(rawpt-width-1)+*(rawpt-width+1)+ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1048 *(rawpt+width-1)+*(rawpt+width+1))/4; /* B */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1049 g = (*(rawpt-1)+*(rawpt+1)+ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1050 *(rawpt-width)+*(rawpt+width))/4; /* G */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1051 r = *rawpt; /* R */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1052 } else { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1053 /* bottom line or right column */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1054 b = *(rawpt-width-1); /* B */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1055 g = (*(rawpt-1)+*(rawpt-width))/2; /* G */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1056 r = *rawpt; /* R */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1057 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1058 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1059 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1060 rawpt++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1061 switch (format->BytesPerPixel) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1062 case 1: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1063 *d8++ = ((r >> rloss) << rshift) | ((g >> gloss) << gshift) | ((b >> bloss) << bshift); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1064 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1065 case 2: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1066 *d16++ = ((r >> rloss) << rshift) | ((g >> gloss) << gshift) | ((b >> bloss) << bshift); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1067 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1068 case 3: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1069 *d8++ = b; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1070 *d8++ = g; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1071 *d8++ = r; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1072 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1073 default: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1074 *d32++ = ((r >> rloss) << rshift) | ((g >> gloss) << gshift) | ((b >> bloss) << bshift); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1075 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1076 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1077 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1078 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1079 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1080 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1081 /* convert from YUV 4:2:0 (YU12) to RGB24 */ |
|
1534
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1082 /* based on v4lconvert_yuv420_to_rgb24 in libv4l (C) 2008 Hans de Goede. LGPL */ |
| 1849 | 1083 void yuv420_to_rgb (const void* src, void* dst, int width, int height, SDL_PixelFormat* format) { |
|
1534
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1084 int rshift, gshift, bshift, rloss, gloss, bloss, i, j, u1, v1, rg, y; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1085 const Uint8 *y1, *y2, *u, *v; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1086 Uint8 *d8_1, *d8_2; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1087 Uint16 *d16_1, *d16_2; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1088 Uint32 *d32_1, *d32_2; |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1089 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1090 rshift = format->Rshift; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1091 gshift = format->Gshift; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1092 bshift = format->Bshift; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1093 rloss = format->Rloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1094 gloss = format->Gloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1095 bloss = format->Bloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1096 |
|
1534
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1097 /* see http://en.wikipedia.org/wiki/YUV for an explanation of YUV420 */ |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1098 y1 = (Uint8*) src; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1099 y2 = y1 + width; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1100 u = y1 + width * height; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1101 v = u + (width * height)/4; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1102 j = height/2; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1103 /* prepare the destination pointers for different surface depths. */ |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1104 d8_1 = (Uint8 *) dst; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1105 /* the following is because d8 used for both 8 and 24 bit surfaces */ |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1106 d8_2 = d8_1 + (format->BytesPerPixel == 3 ? width*3 : 3); |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1107 d16_1 = (Uint16 *) dst; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1108 d16_2 = d16_1 + width; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1109 d32_1 = (Uint32 *) dst; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1110 d32_2 = d32_1 + width; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1111 |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1112 |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1113 /* for the sake of speed, the nested while loops are inside of the switch |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1114 statement for the different surface bit depths */ |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1115 switch(format->BytesPerPixel) { |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1116 case 1: |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1117 while(j--) { |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1118 i = width/2; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1119 while(i--) { |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1120 /* These formulas are from libv4l */ |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1121 u1 = (((*u - 128) << 7) + (*u - 128)) >> 6; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1122 rg = (((*u - 128) << 1) + (*u - 128) + |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1123 ((*v - 128) << 2) + ((*v - 128) << 1)) >> 3; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1124 v1 = (((*v - 128) << 1) + (*v - 128)) >> 1; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1125 u++; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1126 v++; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1127 /* do the pixels on row 1 */ |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1128 y = *y1++; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1129 *d8_1++ = ((SAT2(y + v1) >> rloss) << rshift) | |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1130 ((SAT2(y - rg) >> gloss) << gshift) | |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1131 ((SAT2(y + u1) >> bloss) << bshift); |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1132 y = *y1++; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1133 *d8_1++ = ((SAT2(y + v1) >> rloss) << rshift) | |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1134 ((SAT2(y - rg) >> gloss) << gshift) | |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1135 ((SAT2(y + u1) >> bloss) << bshift); |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1136 /* do the pixels on row 2 */ |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1137 y = *y2++; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1138 *d8_2++ = ((SAT2(y + v1) >> rloss) << rshift) | |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1139 ((SAT2(y - rg) >> gloss) << gshift) | |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1140 ((SAT2(y + u1) >> bloss) << bshift); |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1141 y = *y2++; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1142 *d8_2++ = ((SAT2(y + v1) >> rloss) << rshift) | |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1143 ((SAT2(y - rg) >> gloss) << gshift) | |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1144 ((SAT2(y + u1) >> bloss) << bshift); |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1145 } |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1146 /* y2 is at the beginning of a new row, make it the new row 1 */ |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1147 y1 = y2; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1148 /* and make row 2 one row further */ |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1149 y2 += width; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1150 d8_1 = d8_2; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1151 d8_2 += width; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1152 } |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1153 break; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1154 case 2: |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1155 while(j--) { |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1156 i = width/2; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1157 while(i--) { |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1158 /* These formulas are from libv4l */ |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1159 u1 = (((*u - 128) << 7) + (*u - 128)) >> 6; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1160 rg = (((*u - 128) << 1) + (*u - 128) + |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1161 ((*v - 128) << 2) + ((*v - 128) << 1)) >> 3; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1162 v1 = (((*v - 128) << 1) + (*v - 128)) >> 1; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1163 u++; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1164 v++; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1165 /* do the pixels on row 1 */ |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1166 y = *y1++; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1167 *d16_1++ = ((SAT2(y + v1) >> rloss) << rshift) | |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1168 ((SAT2(y - rg) >> gloss) << gshift) | |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1169 ((SAT2(y + u1) >> bloss) << bshift); |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1170 y = *y1++; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1171 *d16_1++ = ((SAT2(y + v1) >> rloss) << rshift) | |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1172 ((SAT2(y - rg) >> gloss) << gshift) | |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1173 ((SAT2(y + u1) >> bloss) << bshift); |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1174 /* do the pixels on row 2 */ |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1175 y = *y2++; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1176 *d16_2++ = ((SAT2(y + v1) >> rloss) << rshift) | |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1177 ((SAT2(y - rg) >> gloss) << gshift) | |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1178 ((SAT2(y + u1) >> bloss) << bshift); |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1179 y = *y2++; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1180 *d16_2++ = ((SAT2(y + v1) >> rloss) << rshift) | |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1181 ((SAT2(y - rg) >> gloss) << gshift) | |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1182 ((SAT2(y + u1) >> bloss) << bshift); |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1183 } |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1184 /* y2 is at the beginning of a new row, make it the new row 1 */ |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1185 y1 = y2; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1186 /* and make row 2 one row further */ |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1187 y2 += width; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1188 d16_1 = d16_2; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1189 d16_2 += width; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1190 } |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1191 break; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1192 case 3: |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1193 while(j--) { |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1194 i = width/2; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1195 while(i--) { |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1196 /* These formulas are from libv4l */ |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1197 u1 = (((*u - 128) << 7) + (*u - 128)) >> 6; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1198 rg = (((*u - 128) << 1) + (*u - 128) + |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1199 ((*v - 128) << 2) + ((*v - 128) << 1)) >> 3; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1200 v1 = (((*v - 128) << 1) + (*v - 128)) >> 1; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1201 u++; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1202 v++; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1203 /* do the pixels on row 1 */ |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1204 y = *y1++; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1205 *d8_1++ = SAT2(y + u1); |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1206 *d8_1++ = SAT2(y - rg); |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1207 *d8_1++ = SAT2(y + v1); |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1208 y = *y1++; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1209 *d8_1++ = SAT2(y + u1); |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1210 *d8_1++ = SAT2(y - rg); |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1211 *d8_1++ = SAT2(y + v1); |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1212 /* do the pixels on row 2 */ |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1213 y = *y2++; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1214 *d8_2++ = SAT2(y + u1); |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1215 *d8_2++ = SAT2(y - rg); |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1216 *d8_2++ = SAT2(y + v1); |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1217 y = *y2++; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1218 *d8_2++ = SAT2(y + u1); |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1219 *d8_2++ = SAT2(y - rg); |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1220 *d8_2++ = SAT2(y + v1); |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1221 } |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1222 /* y2 is at the beginning of a new row, make it the new row 1 */ |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1223 y1 = y2; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1224 /* and make row 2 one row further */ |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1225 y2 += width; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1226 d8_1 = d8_2; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1227 /* since it is 3 bytes per pixel */ |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1228 d8_2 += width*3; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1229 } |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1230 break; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1231 default: |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1232 while(j--) { |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1233 i = width/2; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1234 while(i--) { |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1235 /* These formulas are from libv4l */ |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1236 u1 = (((*u - 128) << 7) + (*u - 128)) >> 6; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1237 rg = (((*u - 128) << 1) + (*u - 128) + |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1238 ((*v - 128) << 2) + ((*v - 128) << 1)) >> 3; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1239 v1 = (((*v - 128) << 1) + (*v - 128)) >> 1; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1240 u++; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1241 v++; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1242 /* do the pixels on row 1 */ |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1243 y = *y1++; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1244 *d32_1++ = ((SAT2(y + v1) >> rloss) << rshift) | |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1245 ((SAT2(y - rg) >> gloss) << gshift) | |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1246 ((SAT2(y + u1) >> bloss) << bshift); |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1247 y = *y1++; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1248 *d32_1++ = ((SAT2(y + v1) >> rloss) << rshift) | |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1249 ((SAT2(y - rg) >> gloss) << gshift) | |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1250 ((SAT2(y + u1) >> bloss) << bshift); |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1251 /* do the pixels on row 2 */ |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1252 y = *y2++; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1253 *d32_2++ = ((SAT2(y + v1) >> rloss) << rshift) | |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1254 ((SAT2(y - rg) >> gloss) << gshift) | |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1255 ((SAT2(y + u1) >> bloss) << bshift); |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1256 y = *y2++; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1257 *d32_2++ = ((SAT2(y + v1) >> rloss) << rshift) | |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1258 ((SAT2(y - rg) >> gloss) << gshift) | |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1259 ((SAT2(y + u1) >> bloss) << bshift); |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1260 } |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1261 /* y2 is at the beginning of a new row, make it the new row 1 */ |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1262 y1 = y2; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1263 /* and make row 2 one row further */ |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1264 y2 += width; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1265 d32_1 = d32_2; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1266 d32_2 += width; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1267 } |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1268 break; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1269 } |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1270 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1271 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1272 /* turn yuv420 into packed yuv. */ |
| 1849 | 1273 void yuv420_to_yuv (const void* src, void* dst, int width, int height, SDL_PixelFormat* format) { |
|
1534
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1274 const Uint8 *y1, *y2, *u, *v; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1275 Uint8 *d8_1, *d8_2; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1276 Uint16 *d16_1, *d16_2; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1277 Uint32 *d32_1, *d32_2; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1278 int rshift, gshift, bshift, rloss, gloss, bloss, j, i; |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1279 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1280 rshift = format->Rshift; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1281 gshift = format->Gshift; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1282 bshift = format->Bshift; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1283 rloss = format->Rloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1284 gloss = format->Gloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1285 bloss = format->Bloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1286 |
|
1534
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1287 d8_1 = (Uint8 *) dst; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1288 d8_2 = d8_1 + (format->BytesPerPixel == 3 ? width*3 : 3); |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1289 d16_1 = (Uint16 *) dst; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1290 d16_2 = d16_1 + width; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1291 d32_1 = (Uint32 *) dst; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1292 d32_2 = d32_1 + width; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1293 y1 = (Uint8 *) src; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1294 y2 = y1 + width; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1295 u = y1 + width * height; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1296 v = u + (width * height) / 4; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1297 j = height / 2; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1298 |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1299 switch (format->BytesPerPixel) { |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1300 case 1: |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1301 while (j--) { |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1302 i = width/2; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1303 while (i--) { |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1304 *d8_1++ = ((*y1++ >> rloss) << rshift) | ((*u >> gloss) << gshift) | ((*v >> bloss) << bshift); |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1305 *d8_1++ = ((*y1++ >> rloss) << rshift) | ((*u >> gloss) << gshift) | ((*v >> bloss) << bshift); |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1306 *d8_2++ = ((*y2++ >> rloss) << rshift) | ((*u >> gloss) << gshift) | ((*v >> bloss) << bshift); |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1307 *d8_2++ = ((*y2++ >> rloss) << rshift) | ((*u++ >> gloss) << gshift) | ((*v++ >> bloss) << bshift); |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1308 } |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1309 y1 = y2; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1310 y2 += width; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1311 d8_1 = d8_2; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1312 d8_2 += width; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1313 } |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1314 break; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1315 case 2: |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1316 while (j--) { |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1317 i = width/2; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1318 while (i--) { |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1319 *d16_1++ = ((*y1++ >> rloss) << rshift) | ((*u >> gloss) << gshift) | ((*v >> bloss) << bshift); |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1320 *d16_1++ = ((*y1++ >> rloss) << rshift) | ((*u >> gloss) << gshift) | ((*v >> bloss) << bshift); |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1321 *d16_2++ = ((*y2++ >> rloss) << rshift) | ((*u >> gloss) << gshift) | ((*v >> bloss) << bshift); |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1322 *d16_2++ = ((*y2++ >> rloss) << rshift) | ((*u++ >> gloss) << gshift) | ((*v++ >> bloss) << bshift); |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1323 } |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1324 y1 = y2; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1325 y2 += width; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1326 d16_1 = d16_2; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1327 d16_2 += width; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1328 } |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1329 break; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1330 case 3: |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1331 while (j--) { |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1332 i = width/2; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1333 while (i--) { |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1334 *d8_1++ = *v; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1335 *d8_1++ = *u; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1336 *d8_1++ = *y1++; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1337 *d8_1++ = *v; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1338 *d8_1++ = *u; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1339 *d8_1++ = *y1++; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1340 *d8_2++ = *v; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1341 *d8_2++ = *u; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1342 *d8_2++ = *y2++; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1343 *d8_2++ = *v++; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1344 *d8_2++ = *u++; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1345 *d8_2++ = *y2++; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1346 } |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1347 y1 = y2; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1348 y2 += width; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1349 d8_1 = d8_2; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1350 d8_2 += width*3; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1351 } |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1352 break; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1353 default: |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1354 while (j--) { |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1355 i = width/2; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1356 while (i--) { |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1357 *d32_1++ = ((*y1++ >> rloss) << rshift) | ((*u >> gloss) << gshift) | ((*v >> bloss) << bshift); |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1358 *d32_1++ = ((*y1++ >> rloss) << rshift) | ((*u >> gloss) << gshift) | ((*v >> bloss) << bshift); |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1359 *d32_2++ = ((*y2++ >> rloss) << rshift) | ((*u >> gloss) << gshift) | ((*v >> bloss) << bshift); |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1360 *d32_2++ = ((*y2++ >> rloss) << rshift) | ((*u++ >> gloss) << gshift) | ((*v++ >> bloss) << bshift); |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1361 } |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1362 y1 = y2; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1363 y2 += width; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1364 d32_1 = d32_2; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1365 d32_2 += width; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1366 } |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1367 break; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1368 } |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1369 |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1370 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1371 |
| 1849 | 1372 |
| 1373 | |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1374 /* |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1375 * Python API stuff |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1376 */ |
| 1849 | 1377 |
| 1378 /* Camera class definition */ | |
| 1379 PyMethodDef cameraobj_builtins[] = { | |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1380 { "start", (PyCFunction) camera_start, METH_NOARGS, DOC_CAMERASTART }, |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1381 { "stop", (PyCFunction) camera_stop, METH_NOARGS, DOC_CAMERASTOP }, |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1382 { "get_controls", (PyCFunction) camera_get_controls, METH_NOARGS, DOC_CAMERAGETCONTROLS }, |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1383 { "set_controls", (PyCFunction) camera_set_controls, METH_KEYWORDS, DOC_CAMERASETCONTROLS }, |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1384 { "get_size", (PyCFunction) camera_get_size, METH_NOARGS, DOC_CAMERAGETSIZE }, |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1385 { "query_image", (PyCFunction) camera_query_image, METH_NOARGS, DOC_CAMERAQUERYIMAGE }, |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1386 { "get_image", (PyCFunction) camera_get_image, METH_VARARGS, DOC_CAMERAGETIMAGE }, |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1387 { "get_raw", (PyCFunction) camera_get_raw, METH_NOARGS, DOC_CAMERAGETRAW }, |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1388 { NULL, NULL, 0, NULL } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1389 }; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1390 |
| 1849 | 1391 void camera_dealloc (PyObject* self) { |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1392 free(((PyCameraObject*) self)->device_name); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1393 PyObject_DEL (self); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1394 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1395 |
| 1849 | 1396 PyObject* camera_getattr(PyObject* self, char* attrname) { |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1397 return Py_FindMethod(cameraobj_builtins, self, attrname); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1398 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1399 |
| 1849 | 1400 PyTypeObject PyCamera_Type = { |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1401 PyObject_HEAD_INIT(NULL) |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1402 0, |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1403 "Camera", |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1404 sizeof(PyCameraObject), |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1405 0, |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1406 camera_dealloc, |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1407 0, |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1408 camera_getattr, |
| 1849 | 1409 NULL, /*setattr*/ |
| 1410 NULL, /*compare*/ | |
| 1411 NULL, /*repr*/ | |
| 1412 NULL, /*as_number*/ | |
| 1413 NULL, /*as_sequence*/ | |
| 1414 NULL, /*as_mapping*/ | |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1415 (hashfunc)NULL, /*hash*/ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1416 (ternaryfunc)NULL, /*call*/ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1417 (reprfunc)NULL, /*str*/ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1418 0L,0L,0L,0L, |
| 1849 | 1419 DOC_PYGAMECAMERACAMERA /* Documentation string */ |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1420 }; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1421 |
| 1849 | 1422 PyObject* Camera (PyCameraObject* self, PyObject* arg) { |
| 1423 # if defined(__unix__) | |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1424 int w, h; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1425 char* dev_name = NULL; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1426 char* color = NULL; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1427 PyCameraObject *cameraobj; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1428 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1429 w = DEFAULT_WIDTH; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1430 h = DEFAULT_HEIGHT; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1431 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1432 if (!PyArg_ParseTuple(arg, "s|(ii)s", &dev_name, &w, &h, &color)) |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1433 return NULL; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1434 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1435 cameraobj = PyObject_NEW (PyCameraObject, &PyCamera_Type); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1436 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1437 if (cameraobj) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1438 cameraobj->device_name = (char*) malloc((strlen(dev_name)+1)*sizeof(char)); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1439 strcpy(cameraobj->device_name, dev_name); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1440 cameraobj->camera_type = 0; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1441 cameraobj->pixelformat = 0; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1442 if (color) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1443 if (!strcmp(color, "YUV")) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1444 cameraobj->color_out = YUV_OUT; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1445 } else if (!strcmp(color, "HSV")) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1446 cameraobj->color_out = HSV_OUT; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1447 } else { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1448 cameraobj->color_out = RGB_OUT; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1449 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1450 } else { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1451 cameraobj->color_out = RGB_OUT; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1452 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1453 cameraobj->buffers = NULL; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1454 cameraobj->n_buffers = 0; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1455 cameraobj->width = w; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1456 cameraobj->height = h; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1457 cameraobj->size = 0; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1458 cameraobj->hflip = 0; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1459 cameraobj->vflip = 0; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1460 cameraobj->brightness = 0; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1461 cameraobj->fd = -1; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1462 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1463 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1464 return (PyObject*)cameraobj; |
| 1849 | 1465 |
| 1466 # elif defined(__APPLE__) | |
| 1467 int w, h; | |
| 1468 char* dev_name = NULL; | |
| 1469 char* color = NULL; | |
| 1470 PyCameraObject *cameraobj; | |
| 1471 | |
| 1472 w = DEFAULT_WIDTH; | |
| 1473 h = DEFAULT_HEIGHT; | |
| 1474 | |
| 1475 if (!PyArg_ParseTuple(arg, "s|(ii)s", &dev_name, &w, &h, &color)) | |
| 1476 return NULL; | |
| 1477 | |
| 1478 cameraobj = PyObject_NEW (PyCameraObject, &PyCamera_Type); | |
| 1479 | |
| 1480 if (cameraobj) { | |
| 1481 cameraobj->device_name = (char*) malloc((strlen(dev_name)+1)*sizeof(char)); | |
| 1482 strcpy(cameraobj->device_name, dev_name); | |
| 1483 if (color) { | |
| 1484 if (!strcmp(color, "YUV")) { | |
| 1485 cameraobj->color_out = YUV_OUT; | |
| 1486 } else if (!strcmp(color, "HSV")) { | |
| 1487 cameraobj->color_out = HSV_OUT; | |
| 1488 } else { | |
| 1489 cameraobj->color_out = RGB_OUT; | |
| 1490 } | |
| 1491 } else { | |
| 1492 cameraobj->color_out = RGB_OUT; | |
| 1493 } | |
| 1494 cameraobj->component = NULL; | |
| 1495 cameraobj->channel = NULL; | |
| 1496 cameraobj->gworld = NULL; | |
| 1497 cameraobj->boundsRect.top = 0; | |
| 1498 cameraobj->boundsRect.left = 0; | |
| 1499 cameraobj->boundsRect.bottom = h; | |
| 1500 cameraobj->boundsRect.right = w; | |
| 1501 cameraobj->size = w * h; | |
| 1502 cameraobj->hflip = 0; | |
| 1503 cameraobj->vflip = 0; | |
| 1504 } | |
| 1505 | |
| 1506 return (PyObject*)cameraobj; | |
| 1507 # endif | |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1508 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1509 |
| 1849 | 1510 /* Camera module definition */ |
| 1511 PyMethodDef camera_builtins[] = { | |
| 1512 {"colorspace", surf_colorspace, METH_VARARGS, DOC_PYGAMECAMERACOLORSPACE }, | |
| 1513 {"list_cameras", list_cameras, METH_NOARGS, DOC_PYGAMECAMERALISTCAMERAS }, | |
| 1514 {"Camera", (PyCFunction) Camera, METH_VARARGS, DOC_PYGAMECAMERACAMERA }, | |
| 1515 {NULL, NULL, 0, NULL } | |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1516 }; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1517 |
| 1849 | 1518 void init_camera(void) { |
| 1519 PyObject *module, *dict; | |
| 1520 /* imported needed apis; Do this first so if there is an error | |
| 1521 * the module is not loaded. | |
| 1522 */ | |
| 1523 import_pygame_base(); | |
| 1524 if (PyErr_Occurred()) { | |
| 1525 return; | |
| 1526 } | |
| 1527 import_pygame_surface(); | |
| 1528 if (PyErr_Occurred()) { | |
| 1529 return; | |
| 1530 } | |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1531 |
| 1849 | 1532 /* type preparation */ |
| 1533 PyType_Init(PyCamera_Type); | |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1534 |
| 1849 | 1535 /* create the module */ |
| 1536 module = Py_InitModule3("_camera", camera_builtins, DOC_PYGAMECAMERA); | |
| 1537 dict = PyModule_GetDict(module); | |
| 1538 PyDict_SetItemString(dict, "CameraType", (PyObject *)&PyCamera_Type); | |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1539 } |
