Mercurial > pygame
annotate src/_camera.c @ 3172:d1b367fc08bc tests-returncode
Use a return code of 1 when the tests fail.
| author | Thomas Kluyver <takowl@gmail.com> |
|---|---|
| date | Wed, 09 Jan 2013 10:13:57 +0000 |
| parents | 1c265998cf59 |
| 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 |
|
2174
8296cad31717
Patch from Martijn Schmidt. Remove V4L support.
Nirav Patel <nrp@eclecti.cc>
parents:
2143
diff
changeset
|
25 * such that adding support for vfw cameras should be possible without |
|
1513
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" |
|
2143
99afc91b219a
apply camera module patch for Python 3; thanks Christoph Gohlke
Lenard Lindstrom <len-l@telus.net>
parents:
1989
diff
changeset
|
37 #include "pgcompat.h" |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
38 |
|
1976
4b67c00bb2b3
camera building again, fixed a few warnings and errors. got camera.h from the git branch of Werner.
Rene Dudfield <renesd@gmail.com>
parents:
1975
diff
changeset
|
39 /* |
|
4b67c00bb2b3
camera building again, fixed a few warnings and errors. got camera.h from the git branch of Werner.
Rene Dudfield <renesd@gmail.com>
parents:
1975
diff
changeset
|
40 #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
|
41 #else |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
42 #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
|
43 #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
|
44 #endif |
|
1976
4b67c00bb2b3
camera building again, fixed a few warnings and errors. got camera.h from the git branch of Werner.
Rene Dudfield <renesd@gmail.com>
parents:
1975
diff
changeset
|
45 */ |
|
4b67c00bb2b3
camera building again, fixed a few warnings and errors. got camera.h from the git branch of Werner.
Rene Dudfield <renesd@gmail.com>
parents:
1975
diff
changeset
|
46 |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
47 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
48 /* functions available to pygame users */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
49 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
|
50 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
|
51 PyObject* camera_start (PyCameraObject* self); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
52 PyObject* camera_stop (PyCameraObject* self); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
53 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
|
54 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
|
55 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
|
56 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
|
57 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
|
58 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
|
59 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
60 /* |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
61 * 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
|
62 * 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
|
63 * 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
|
64 * 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
|
65 * 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
|
66 */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
67 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
68 /* colorspace() - Surface colorspace conversion */ |
| 1975 | 69 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
|
70 PyObject *surfobj, *surfobj2; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
71 SDL_Surface* surf, *newsurf; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
72 char* color; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
73 int cspace; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
74 surfobj2 = NULL; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
75 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
76 /*get all the arguments*/ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
77 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
|
78 &color, &PySurface_Type, &surfobj2)) |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
79 return NULL; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
80 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
81 if (!strcmp(color, "YUV")) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
82 cspace = YUV_OUT; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
83 } else if (!strcmp(color, "HSV")) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
84 cspace = HSV_OUT; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
85 } else { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
86 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
|
87 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
88 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
89 surf = PySurface_AsSurface (surfobj); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
90 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
91 if (!surfobj2) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
92 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
|
93 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
|
94 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
|
95 if (!newsurf) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
96 return NULL; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
97 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
98 } else { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
99 newsurf = PySurface_AsSurface (surfobj2); |
|
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 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
102 /* 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
|
103 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
|
104 return RAISE (PyExc_ValueError, |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
105 "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
|
106 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
107 /* 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
|
108 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
|
109 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
|
110 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
111 SDL_LockSurface (newsurf); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
112 PySurface_Lock (surfobj); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
113 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
114 Py_BEGIN_ALLOW_THREADS; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
115 colorspace (surf, newsurf, cspace); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
116 Py_END_ALLOW_THREADS; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
117 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
118 PySurface_Unlock (surfobj); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
119 SDL_UnlockSurface (newsurf); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
120 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
121 if (surfobj2) |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
122 { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
123 Py_INCREF (surfobj2); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
124 return surfobj2; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
125 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
126 else |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
127 return PySurface_New (newsurf); |
|
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 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
130 /* list_cameras() - lists cameras available on the computer */ |
| 1975 | 131 PyObject* list_cameras (PyObject* self, PyObject* arg) { |
|
3073
1c265998cf59
Disable camera_mac if OS X is above version 10.6.
Rene Dudfield <renesd@gmail.com>
parents:
2174
diff
changeset
|
132 #if defined(__unix__) || defined (PYGAME_MAC_CAMERA_OLD) |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
133 PyObject* ret_list; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
134 PyObject* string; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
135 char** devices; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
136 int num_devices, i; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
137 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
138 num_devices = 0; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
139 ret_list = NULL; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
140 ret_list = PyList_New (0); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
141 if (!ret_list) |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
142 return NULL; |
| 1975 | 143 |
| 144 #if defined(__unix__) | |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
145 devices = v4l2_list_cameras(&num_devices); |
|
3073
1c265998cf59
Disable camera_mac if OS X is above version 10.6.
Rene Dudfield <renesd@gmail.com>
parents:
2174
diff
changeset
|
146 # elif defined(PYGAME_MAC_CAMERA_OLD) |
| 1975 | 147 devices = mac_list_cameras(&num_devices); |
| 148 # endif | |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
149 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
150 for(i = 0; i < num_devices; i++) { |
|
2143
99afc91b219a
apply camera module patch for Python 3; thanks Christoph Gohlke
Lenard Lindstrom <len-l@telus.net>
parents:
1989
diff
changeset
|
151 string = Text_FromUTF8(devices[i]); |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
152 PyList_Append(ret_list, string); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
153 Py_DECREF(string); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
154 free(devices[i]); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
155 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
156 free(devices); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
157 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
158 return ret_list; |
| 1930 | 159 #else |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
160 Py_RETURN_NONE; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
161 #endif |
|
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 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
164 /* start() - opens, inits, and starts capturing on the camera */ |
| 1975 | 165 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
|
166 #if defined(__unix__) |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
167 if (v4l2_open_device(self) == 0) { |
|
2174
8296cad31717
Patch from Martijn Schmidt. Remove V4L support.
Nirav Patel <nrp@eclecti.cc>
parents:
2143
diff
changeset
|
168 v4l2_close_device(self); |
|
8296cad31717
Patch from Martijn Schmidt. Remove V4L support.
Nirav Patel <nrp@eclecti.cc>
parents:
2143
diff
changeset
|
169 return NULL; |
|
1513
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_V4L2; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
172 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
|
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 (v4l2_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 } |
|
3073
1c265998cf59
Disable camera_mac if OS X is above version 10.6.
Rene Dudfield <renesd@gmail.com>
parents:
2174
diff
changeset
|
181 #elif defined(PYGAME_MAC_CAMERA_OLD) |
| 1975 | 182 if (! (mac_open_device(self) == 1 && mac_init_device(self) == 1 && mac_start_capturing(self) == 1)) { |
| 183 mac_close_device(self); | |
| 184 return NULL; | |
| 185 } | |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
186 #endif |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
187 Py_RETURN_NONE; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
188 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
189 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
190 /* stop() - stops capturing, uninits, and closes the camera */ |
| 1975 | 191 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
|
192 #if defined(__unix__) |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
193 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
|
194 return NULL; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
195 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
|
196 return NULL; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
197 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
|
198 return NULL; |
|
3073
1c265998cf59
Disable camera_mac if OS X is above version 10.6.
Rene Dudfield <renesd@gmail.com>
parents:
2174
diff
changeset
|
199 #elif defined(PYGAME_MAC_CAMERA_OLD) |
| 1975 | 200 if (mac_stop_capturing(self) == 0) |
| 201 return NULL; | |
| 202 if (mac_close_device(self) == 0) | |
| 203 return NULL; | |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
204 #endif |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
205 Py_RETURN_NONE; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
206 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
207 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
208 /* 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
|
209 /* TODO: Support brightness, contrast, and other common controls */ |
| 1975 | 210 PyObject* camera_get_controls (PyCameraObject* self) { |
|
1976
4b67c00bb2b3
camera building again, fixed a few warnings and errors. got camera.h from the git branch of Werner.
Rene Dudfield <renesd@gmail.com>
parents:
1975
diff
changeset
|
211 #if defined(__unix__) |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
212 int value; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
213 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
|
214 self->hflip = value; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
215 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
216 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
|
217 self->vflip = value; |
|
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 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
|
220 self->brightness = value; |
| 1975 | 221 |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
222 return Py_BuildValue ("(NNN)", PyBool_FromLong(self->hflip), PyBool_FromLong(self->vflip), PyInt_FromLong(self->brightness)); |
|
3073
1c265998cf59
Disable camera_mac if OS X is above version 10.6.
Rene Dudfield <renesd@gmail.com>
parents:
2174
diff
changeset
|
223 #elif defined(PYGAME_MAC_CAMERA_OLD) |
| 1975 | 224 return Py_BuildValue ("(NNN)", PyBool_FromLong(self->hflip), PyBool_FromLong(self->vflip), PyInt_FromLong(-1)); |
| 225 #endif | |
| 226 Py_RETURN_NONE; | |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
227 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
228 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
229 /* set_controls() - changes camera settings if supported by the camera */ |
| 1975 | 230 PyObject* camera_set_controls (PyCameraObject* self, PyObject* arg, PyObject *kwds) { |
| 231 #if defined(__unix__) | |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
232 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
|
233 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
|
234 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
235 camera_get_controls(self); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
236 hflip = self->hflip; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
237 vflip = self->vflip; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
238 brightness = self->brightness; |
|
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 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
|
241 return NULL; |
| 1975 | 242 |
|
1976
4b67c00bb2b3
camera building again, fixed a few warnings and errors. got camera.h from the git branch of Werner.
Rene Dudfield <renesd@gmail.com>
parents:
1975
diff
changeset
|
243 /* #if defined(__unix__) */ |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
244 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
|
245 self->hflip = hflip; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
246 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
247 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
|
248 self->vflip = vflip; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
249 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
250 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
|
251 self->brightness = brightness; |
| 1975 | 252 |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
253 return Py_BuildValue ("(NNN)", PyBool_FromLong(self->hflip), PyBool_FromLong(self->vflip), PyInt_FromLong(self->brightness)); |
| 1975 | 254 |
|
3073
1c265998cf59
Disable camera_mac if OS X is above version 10.6.
Rene Dudfield <renesd@gmail.com>
parents:
2174
diff
changeset
|
255 #elif defined(PYGAME_MAC_CAMERA_OLD) |
| 1975 | 256 int hflip = 0, vflip = 0, brightness = 0; |
| 257 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
|
258 |
| 1975 | 259 camera_get_controls(self); |
| 260 hflip = self->hflip; | |
| 261 vflip = self->vflip; | |
| 262 brightness = -1; | |
| 263 | |
| 264 if (!PyArg_ParseTupleAndKeywords(arg, kwds, "|iii", kwids, &hflip, &vflip, &brightness)) | |
| 265 return NULL; | |
| 266 | |
| 267 self->hflip = hflip; | |
| 268 self->vflip = vflip; | |
| 269 | |
| 270 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
|
271 #endif |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
272 Py_RETURN_NONE; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
273 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
274 |
| 1975 | 275 /* get_size() - returns the dimensions of the images being recorded */ |
| 276 PyObject* camera_get_size (PyCameraObject* self) { | |
| 277 #if defined(__unix__) | |
| 278 return Py_BuildValue ("(ii)", self->width, self->height); | |
|
3073
1c265998cf59
Disable camera_mac if OS X is above version 10.6.
Rene Dudfield <renesd@gmail.com>
parents:
2174
diff
changeset
|
279 #elif defined(PYGAME_MAC_CAMERA_OLD) |
| 1975 | 280 return Py_BuildValue ("(ii)", self->boundsRect.right, self->boundsRect.bottom); |
| 281 #endif | |
| 282 Py_RETURN_NONE; | |
| 283 } | |
| 284 | |
| 285 /* query_image() - checks if a frame is ready */ | |
| 286 PyObject* camera_query_image(PyCameraObject* self) { | |
| 287 #if defined(__unix__) | |
| 288 return PyBool_FromLong(v4l2_query_buffer(self)); | |
| 289 #endif | |
| 290 Py_RETURN_TRUE; | |
| 291 } | |
| 292 | |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
293 /* 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
|
294 /* code to reuse Surface from René Dudfield */ |
| 1975 | 295 PyObject* camera_get_image (PyCameraObject* self, PyObject* arg) { |
| 296 #if defined(__unix__) | |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
297 SDL_Surface* surf = NULL; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
298 PyObject *surfobj = NULL; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
299 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
300 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
|
301 return NULL; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
302 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
303 if (!surfobj) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
304 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
|
305 0xFF<<8, 0xFF, 0); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
306 } else { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
307 surf = PySurface_AsSurface (surfobj); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
308 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
309 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
310 if (!surf) |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
311 return NULL; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
312 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
313 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
|
314 return RAISE (PyExc_ValueError, |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
315 "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
|
316 } |
| 1975 | 317 |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
318 Py_BEGIN_ALLOW_THREADS; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
319 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
|
320 return NULL; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
321 Py_END_ALLOW_THREADS; |
| 1975 | 322 |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
323 if (!surf) |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
324 return NULL; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
325 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
326 if (surfobj) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
327 Py_INCREF (surfobj); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
328 return surfobj; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
329 } else { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
330 return PySurface_New (surf); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
331 } |
|
3073
1c265998cf59
Disable camera_mac if OS X is above version 10.6.
Rene Dudfield <renesd@gmail.com>
parents:
2174
diff
changeset
|
332 #elif defined(PYGAME_MAC_CAMERA_OLD) |
| 1975 | 333 SDL_Surface* surf = NULL; |
| 334 PyObject *surfobj = NULL; | |
| 335 | |
| 336 if (!PyArg_ParseTuple (arg, "|O!", &PySurface_Type, &surfobj)) | |
| 337 return NULL; | |
| 338 | |
| 339 if (!surfobj) { | |
| 340 surf = SDL_CreateRGBSurface( | |
| 341 0, | |
| 342 self->boundsRect.right, | |
| 343 self->boundsRect.bottom, | |
| 344 24, | |
| 345 0xFF<<16, | |
| 346 0xFF<<8, | |
| 347 0xFF, | |
| 348 0); | |
| 349 | |
| 350 } else { | |
| 351 surf = PySurface_AsSurface(surfobj); | |
| 352 } | |
| 353 | |
| 354 if (!surf) | |
| 355 return NULL; | |
| 356 | |
| 357 if (surf->w != self->boundsRect.right || surf->h != self->boundsRect.bottom) { | |
| 358 return RAISE (PyExc_ValueError, | |
| 359 "Destination surface not the correct width or height."); | |
| 360 } | |
|
1976
4b67c00bb2b3
camera building again, fixed a few warnings and errors. got camera.h from the git branch of Werner.
Rene Dudfield <renesd@gmail.com>
parents:
1975
diff
changeset
|
361 /*is dit nodig op osx... */ |
|
4b67c00bb2b3
camera building again, fixed a few warnings and errors. got camera.h from the git branch of Werner.
Rene Dudfield <renesd@gmail.com>
parents:
1975
diff
changeset
|
362 Py_BEGIN_ALLOW_THREADS; |
| 1975 | 363 |
| 364 if (!mac_read_frame(self, surf)) | |
| 365 return NULL; | |
| 366 Py_END_ALLOW_THREADS; | |
| 367 if (!surf) | |
| 368 return NULL; | |
| 369 | |
| 370 if (surfobj) { | |
| 371 Py_INCREF (surfobj); | |
| 372 return surfobj; | |
| 373 } else { | |
| 374 return PySurface_New (surf); | |
| 375 } | |
| 376 #endif | |
| 377 Py_RETURN_NONE; | |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
378 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
379 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
380 /* get_raw() - returns an unmodified image as a string from the buffer */ |
| 1975 | 381 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
|
382 #if defined(__unix__) |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
383 return v4l2_read_raw(self); |
|
3073
1c265998cf59
Disable camera_mac if OS X is above version 10.6.
Rene Dudfield <renesd@gmail.com>
parents:
2174
diff
changeset
|
384 #elif defined(PYGAME_MAC_CAMERA_OLD) |
| 1975 | 385 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
|
386 #endif |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
387 Py_RETURN_NONE; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
388 } |
|
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 * Pixelformat conversion functions |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
392 */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
393 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
394 /* 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
|
395 /* TODO: Allow for conversion from yuv and hsv to all */ |
| 1975 | 396 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
|
397 switch (cspace) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
398 case YUV_OUT: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
399 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
|
400 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
401 case HSV_OUT: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
402 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
|
403 break; |
|
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 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
406 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
407 /* 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
|
408 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
|
409 { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
410 Uint8 *s = (Uint8 *) src; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
411 Uint8 *d8; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
412 Uint16 *d16; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
413 Uint32 *d32; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
414 Uint8 r, g, b; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
415 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
|
416 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
417 rshift = format->Rshift; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
418 gshift = format->Gshift; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
419 bshift = format->Bshift; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
420 rloss = format->Rloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
421 gloss = format->Gloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
422 bloss = format->Bloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
423 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
424 switch (format->BytesPerPixel) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
425 case 1: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
426 d8 = (Uint8 *) dst; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
427 while (length--) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
428 r = *s++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
429 g = *s++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
430 b = *s++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
431 *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
|
432 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
433 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
434 case 2: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
435 d16 = (Uint16 *) dst; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
436 while (length--) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
437 r = *s++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
438 g = *s++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
439 b = *s++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
440 *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
|
441 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
442 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
443 case 3: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
444 d8 = (Uint8 *) dst; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
445 while (length--) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
446 *d8++ = *(s+2); /* blue */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
447 *d8++ = *(s+1); /* green */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
448 *d8++ = *s; /* red */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
449 s += 3; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
450 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
451 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
452 default: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
453 d32 = (Uint32 *) dst; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
454 while (length--) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
455 r = *s++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
456 g = *s++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
457 b = *s++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
458 *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
|
459 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
460 break; |
|
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 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
463 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
464 /* 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
|
465 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
|
466 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
|
467 { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
468 Uint8 *s8, *d8; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
469 Uint16 *s16, *d16; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
470 Uint32 *s32, *d32; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
471 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
|
472 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
|
473 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
474 s8 = (Uint8 *) src; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
475 s16 = (Uint16 *) src; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
476 s32 = (Uint32 *) src; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
477 d8 = (Uint8 *) dst; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
478 d16 = (Uint16 *) dst; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
479 d32 = (Uint32 *) dst; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
480 rshift = format->Rshift; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
481 gshift = format->Gshift; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
482 bshift = format->Bshift; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
483 rloss = format->Rloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
484 gloss = format->Gloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
485 bloss = format->Bloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
486 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
487 /* 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
|
488 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
|
489 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
|
490 while (length--) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
491 p1 = *s8++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
492 p2 = *s8++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
493 b = p2 << 4; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
494 g = p1 & 0xF0; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
495 r = p1 << 4; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
496 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
|
497 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
|
498 delta = max - min; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
499 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
|
500 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
|
501 s = 0; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
502 h = 0; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
503 } else { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
504 s = 255*delta/max; /* saturation */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
505 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
|
506 h = 43*(g - b)/delta; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
507 } else if (g == max) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
508 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
|
509 } else { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
510 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
|
511 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
512 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
513 switch (format->BytesPerPixel) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
514 case 1: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
515 *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
|
516 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
517 case 2: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
518 *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
|
519 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
520 case 3: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
521 *d8++ = v; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
522 *d8++ = s; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
523 *d8++ = h; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
524 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
525 default: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
526 *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
|
527 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
528 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
529 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
530 } 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
|
531 while (length--) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
532 r = *s8++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
533 g = *s8++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
534 b = *s8++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
535 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
|
536 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
|
537 delta = max - min; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
538 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
|
539 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
|
540 s = 0; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
541 h = 0; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
542 } else { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
543 s = 255*delta/max; /* saturation */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
544 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
|
545 h = 43*(g - b)/delta; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
546 } else if (g == max) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
547 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
|
548 } else { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
549 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
|
550 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
551 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
552 switch (format->BytesPerPixel) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
553 case 1: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
554 *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
|
555 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
556 case 2: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
557 *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
|
558 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
559 case 3: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
560 *d8++ = v; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
561 *d8++ = s; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
562 *d8++ = h; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
563 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
564 default: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
565 *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
|
566 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
567 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
568 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
569 } 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
|
570 while (length--) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
571 switch (format->BytesPerPixel) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
572 case 1: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
573 r = *s8 >> rshift << rloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
574 g = *s8 >> gshift << gloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
575 b = *s8++ >> bshift << bloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
576 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
577 case 2: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
578 r = *s16 >> rshift << rloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
579 g = *s16 >> gshift << gloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
580 b = *s16++ >> bshift << bloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
581 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
582 case 3: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
583 b = *s8++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
584 g = *s8++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
585 r = *s8++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
586 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
587 default: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
588 r = *s32 >> rshift << rloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
589 g = *s32 >> gshift << gloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
590 b = *s32++ >> bshift << bloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
591 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
592 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
593 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
|
594 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
|
595 delta = max - min; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
596 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
|
597 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
|
598 s = 0; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
599 h = 0; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
600 } else { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
601 s = 255*delta/max; /* saturation */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
602 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
|
603 h = 43*(g - b)/delta; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
604 } else if (g == max) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
605 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
|
606 } else { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
607 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
|
608 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
609 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
610 switch (format->BytesPerPixel) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
611 case 1: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
612 *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
|
613 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
614 case 2: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
615 *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
|
616 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
617 case 3: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
618 *d8++ = v; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
619 *d8++ = s; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
620 *d8++ = h; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
621 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
622 default: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
623 *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
|
624 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
625 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
626 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
627 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
628 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
629 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
630 /* 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
|
631 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
|
632 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
|
633 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
|
634 { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
635 Uint8 *s8, *d8; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
636 Uint16 *s16, *d16; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
637 Uint32 *s32, *d32; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
638 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
|
639 Uint8 p1, p2; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
640 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
|
641 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
642 s8 = (Uint8 *) src; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
643 s16 = (Uint16 *) src; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
644 s32 = (Uint32 *) src; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
645 d8 = (Uint8 *) dst; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
646 d16 = (Uint16 *) dst; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
647 d32 = (Uint32 *) dst; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
648 rshift = format->Rshift; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
649 gshift = format->Gshift; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
650 bshift = format->Bshift; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
651 rloss = format->Rloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
652 gloss = format->Gloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
653 bloss = format->Bloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
654 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
655 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
|
656 while (length--) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
657 p1 = *s8++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
658 p2 = *s8++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
659 b = p2 << 4; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
660 g = p1 & 0xF0; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
661 r = p1 << 4; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
662 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
|
663 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
|
664 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
|
665 switch (format->BytesPerPixel) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
666 case 1: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
667 *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
|
668 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
669 case 2: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
670 *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
|
671 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
672 case 3: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
673 *d8++ = v; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
674 *d8++ = u; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
675 *d8++ = y; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
676 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
677 default: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
678 *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
|
679 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
680 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
681 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
682 } 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
|
683 while (length--) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
684 r = *s8++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
685 g = *s8++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
686 b = *s8++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
687 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
|
688 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
|
689 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
|
690 switch (format->BytesPerPixel) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
691 case 1: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
692 *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
|
693 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
694 case 2: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
695 *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
|
696 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
697 case 3: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
698 *d8++ = v; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
699 *d8++ = u; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
700 *d8++ = y; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
701 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
702 default: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
703 *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
|
704 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
705 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
706 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
707 } 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
|
708 switch (format->BytesPerPixel) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
709 case 1: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
710 while (length--) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
711 r = *s8 >> rshift << rloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
712 g = *s8 >> gshift << gloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
713 b = *s8++ >> bshift << bloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
714 *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
|
715 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
716 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
717 case 2: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
718 while (length--) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
719 r = *s16 >> rshift << rloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
720 g = *s16 >> gshift << gloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
721 b = *s16++ >> bshift << bloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
722 *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
|
723 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
724 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
725 case 3: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
726 while (length--) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
727 b = *s8++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
728 g = *s8++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
729 r = *s8++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
730 *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
|
731 *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
|
732 *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
|
733 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
734 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
735 default: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
736 while (length--) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
737 r = *s32 >> rshift << rloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
738 g = *s32 >> gshift << gloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
739 b = *s32++ >> bshift << bloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
740 *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
|
741 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
742 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
743 } |
|
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 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
746 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
747 /* Converts from rgb444 (R444) to rgb24 (RGB3) */ |
| 1975 | 748 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
|
749 Uint8 *s, *d8; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
750 Uint16 *d16; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
751 Uint32 *d32; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
752 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
|
753 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
|
754 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
755 s = (Uint8 *) src; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
756 rshift = format->Rshift; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
757 gshift = format->Gshift; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
758 bshift = format->Bshift; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
759 rloss = format->Rloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
760 gloss = format->Gloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
761 bloss = format->Bloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
762 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
763 switch (format->BytesPerPixel) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
764 case 1: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
765 d8 = (Uint8 *) dst; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
766 while (length--) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
767 r = *s << 4; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
768 g = *s++ & 0xF0; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
769 b = *s++ << 4; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
770 *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
|
771 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
772 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
773 case 2: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
774 d16 = (Uint16 *) dst; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
775 while (length--) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
776 r = *s << 4; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
777 g = *s++ & 0xF0; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
778 b = *s++ << 4; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
779 *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
|
780 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
781 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
782 case 3: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
783 d8 = (Uint8 *) dst; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
784 while (length--) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
785 p1 = *s++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
786 p2 = *s++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
787 *d8++ = p2 << 4; /* blue */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
788 *d8++ = p1 & 0xF0; /* green */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
789 *d8++ = p1 << 4; /* red */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
790 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
791 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
792 default: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
793 d32 = (Uint32 *) dst; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
794 while (length--) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
795 r = *s << 4; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
796 g = *s++ & 0xF0; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
797 b = *s++ << 4; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
798 *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
|
799 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
800 break; |
|
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 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
803 |
|
1532
e672d97c46c5
Licensing problems in the Camera module.
Nirav Patel <nrp@eclecti.cc>
parents:
1513
diff
changeset
|
804 /* 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
|
805 /* 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
|
806 (C) 2008 Hans de Goede <j.w.r.degoede@hhs.nl> */ |
| 1975 | 807 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
|
808 Uint8 *s, *d8; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
809 Uint16 *d16; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
810 Uint32 *d32; |
|
1532
e672d97c46c5
Licensing problems in the Camera module.
Nirav Patel <nrp@eclecti.cc>
parents:
1513
diff
changeset
|
811 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
|
812 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
|
813 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
|
814 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
815 rshift = format->Rshift; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
816 gshift = format->Gshift; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
817 bshift = format->Bshift; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
818 rloss = format->Rloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
819 gloss = format->Gloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
820 bloss = format->Bloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
821 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
822 d8 = (Uint8 *) dst; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
823 d16 = (Uint16 *) dst; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
824 d32 = (Uint32 *) dst; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
825 i = length >> 1; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
826 s = (Uint8 *) src; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
827 |
|
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
|
828 /* 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
|
829 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
|
830 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
|
831 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
|
832 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
|
833 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
|
834 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
|
835 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
|
836 /* 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
|
837 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
|
838 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
|
839 ((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
|
840 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
|
841 |
|
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
|
842 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
|
843 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
|
844 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
|
845 |
|
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 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
|
847 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
|
848 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
|
849 |
|
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 /* 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
|
851 switch (format->BytesPerPixel) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
852 case 1: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
853 *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
|
854 *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
|
855 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
856 case 2: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
857 *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
|
858 *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
|
859 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
860 case 3: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
861 *d8++ = b1; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
862 *d8++ = g1; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
863 *d8++ = r1; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
864 *d8++ = b2; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
865 *d8++ = g2; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
866 *d8++ = r2; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
867 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
868 default: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
869 *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
|
870 *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
|
871 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
872 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
873 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
874 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
875 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
876 /* turn yuyv into packed yuv. */ |
| 1975 | 877 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
|
878 Uint8 *s, *d8; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
879 Uint8 y1, u, y2, v; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
880 Uint16 *d16; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
881 Uint32 *d32; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
882 int i = length >> 1; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
883 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
|
884 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
885 rshift = format->Rshift; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
886 gshift = format->Gshift; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
887 bshift = format->Bshift; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
888 rloss = format->Rloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
889 gloss = format->Gloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
890 bloss = format->Bloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
891 s = (Uint8 *) src; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
892 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
893 switch (format->BytesPerPixel) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
894 case 1: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
895 d8 = (Uint8 *) dst; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
896 while (i--) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
897 y1 = *s++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
898 u = *s++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
899 y2 = *s++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
900 v = *s++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
901 *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
|
902 *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
|
903 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
904 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
905 case 2: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
906 d16 = (Uint16 *) 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 *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
|
913 *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
|
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 3: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
917 d8 = (Uint8 *) 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 *d8++ = *(s+3); /* v */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
920 *d8++ = *(s+1); /* u */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
921 *d8++ = *s; /* y1 */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
922 *d8++ = *(s+3); /* v */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
923 *d8++ = *(s+1); /* u */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
924 *d8++ = *(s+2); /* y2 */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
925 s += 4; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
926 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
927 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
928 default: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
929 d32 = (Uint32 *) dst; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
930 while (i--) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
931 y1 = *s++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
932 u = *s++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
933 y2 = *s++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
934 v = *s++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
935 *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
|
936 *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
|
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 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
940 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
941 |
|
1532
e672d97c46c5
Licensing problems in the Camera module.
Nirav Patel <nrp@eclecti.cc>
parents:
1513
diff
changeset
|
942 /* 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
|
943 * Sonix SN9C101 based webcam basic I/F routines |
|
e672d97c46c5
Licensing problems in the Camera module.
Nirav Patel <nrp@eclecti.cc>
parents:
1513
diff
changeset
|
944 * 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
|
945 * |
|
e672d97c46c5
Licensing problems in the Camera module.
Nirav Patel <nrp@eclecti.cc>
parents:
1513
diff
changeset
|
946 * 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
|
947 * modification, are permitted provided that the following conditions |
|
e672d97c46c5
Licensing problems in the Camera module.
Nirav Patel <nrp@eclecti.cc>
parents:
1513
diff
changeset
|
948 * are met: |
|
e672d97c46c5
Licensing problems in the Camera module.
Nirav Patel <nrp@eclecti.cc>
parents:
1513
diff
changeset
|
949 * 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
|
950 * 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
|
951 * 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
|
952 * 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
|
953 * 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
|
954 * |
|
e672d97c46c5
Licensing problems in the Camera module.
Nirav Patel <nrp@eclecti.cc>
parents:
1513
diff
changeset
|
955 * 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
|
956 * 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
|
957 * 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
|
958 * 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
|
959 * 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
|
960 * 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
|
961 * 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
|
962 * 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
|
963 * 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
|
964 * 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
|
965 * SUCH DAMAGE. |
|
e672d97c46c5
Licensing problems in the Camera module.
Nirav Patel <nrp@eclecti.cc>
parents:
1513
diff
changeset
|
966 */ |
|
e672d97c46c5
Licensing problems in the Camera module.
Nirav Patel <nrp@eclecti.cc>
parents:
1513
diff
changeset
|
967 /* 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
|
968 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
|
969 /* TODO: Certainly not the most efficient way of doing this conversion. */ |
| 1975 | 970 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
|
971 Uint8 *rawpt, *d8; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
972 Uint16 *d16; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
973 Uint32 *d32; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
974 Uint8 r, g, b; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
975 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
|
976 int i = width * height; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
977 rawpt = (Uint8*) src; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
978 rshift = format->Rshift; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
979 gshift = format->Gshift; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
980 bshift = format->Bshift; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
981 rloss = format->Rloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
982 gloss = format->Gloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
983 bloss = format->Bloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
984 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
985 d8 = (Uint8 *) dst; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
986 d16 = (Uint16 *) dst; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
987 d32 = (Uint32 *) dst; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
988 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
989 while (i--) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
990 if ( (i/width) % 2 == 0 ) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
991 /* even row (BGBGBGBG)*/ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
992 if ( (i % 2) == 0 ) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
993 /* B */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
994 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
|
995 b = *rawpt; /* B */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
996 g = (*(rawpt-1)+*(rawpt+1)+ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
997 *(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
|
998 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
|
999 *(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
|
1000 } else { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1001 /* first line or left column */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1002 b = *rawpt; /* B */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1003 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
|
1004 r = *(rawpt+width+1); /* R */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1005 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1006 } else { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1007 /* (B)G */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1008 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
|
1009 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
|
1010 g = *rawpt; /* G */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1011 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
|
1012 } else { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1013 /* first line or right column */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1014 b = *(rawpt-1); /* B */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1015 g = *rawpt; /* G */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1016 r = *(rawpt+width); /* R */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1017 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1018 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1019 } else { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1020 /* odd row (GRGRGRGR) */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1021 if ( (i % 2) == 0 ) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1022 /* G(R) */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1023 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
|
1024 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
|
1025 g = *rawpt; /* G */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1026 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
|
1027 } else { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1028 /* bottom line or left column */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1029 b = *(rawpt-width); /* B */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1030 g = *rawpt; /* G */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1031 r = *(rawpt+1); /* R */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1032 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1033 } else { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1034 /* R */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1035 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
|
1036 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
|
1037 *(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
|
1038 g = (*(rawpt-1)+*(rawpt+1)+ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1039 *(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
|
1040 r = *rawpt; /* R */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1041 } else { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1042 /* bottom line or right column */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1043 b = *(rawpt-width-1); /* B */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1044 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
|
1045 r = *rawpt; /* R */ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1046 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1047 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1048 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1049 rawpt++; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1050 switch (format->BytesPerPixel) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1051 case 1: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1052 *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
|
1053 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1054 case 2: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1055 *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
|
1056 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1057 case 3: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1058 *d8++ = b; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1059 *d8++ = g; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1060 *d8++ = r; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1061 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1062 default: |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1063 *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
|
1064 break; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1065 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1066 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1067 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1068 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1069 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1070 /* 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
|
1071 /* based on v4lconvert_yuv420_to_rgb24 in libv4l (C) 2008 Hans de Goede. LGPL */ |
| 1975 | 1072 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
|
1073 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
|
1074 const Uint8 *y1, *y2, *u, *v; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1075 Uint8 *d8_1, *d8_2; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1076 Uint16 *d16_1, *d16_2; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1077 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
|
1078 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1079 rshift = format->Rshift; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1080 gshift = format->Gshift; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1081 bshift = format->Bshift; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1082 rloss = format->Rloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1083 gloss = format->Gloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1084 bloss = format->Bloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1085 |
|
1534
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1086 /* 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
|
1087 y1 = (Uint8*) src; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1088 y2 = y1 + width; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1089 u = y1 + width * height; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1090 v = u + (width * height)/4; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1091 j = height/2; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1092 /* prepare the destination pointers for different surface depths. */ |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1093 d8_1 = (Uint8 *) dst; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1094 /* 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
|
1095 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
|
1096 d16_1 = (Uint16 *) dst; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1097 d16_2 = d16_1 + width; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1098 d32_1 = (Uint32 *) dst; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1099 d32_2 = d32_1 + width; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1100 |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1101 |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1102 /* 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
|
1103 statement for the different surface bit depths */ |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1104 switch(format->BytesPerPixel) { |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1105 case 1: |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1106 while(j--) { |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1107 i = width/2; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1108 while(i--) { |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1109 /* These formulas are from libv4l */ |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1110 u1 = (((*u - 128) << 7) + (*u - 128)) >> 6; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1111 rg = (((*u - 128) << 1) + (*u - 128) + |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1112 ((*v - 128) << 2) + ((*v - 128) << 1)) >> 3; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1113 v1 = (((*v - 128) << 1) + (*v - 128)) >> 1; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1114 u++; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1115 v++; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1116 /* do the pixels on row 1 */ |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1117 y = *y1++; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1118 *d8_1++ = ((SAT2(y + v1) >> rloss) << rshift) | |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1119 ((SAT2(y - rg) >> gloss) << gshift) | |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1120 ((SAT2(y + u1) >> bloss) << bshift); |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1121 y = *y1++; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1122 *d8_1++ = ((SAT2(y + v1) >> rloss) << rshift) | |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1123 ((SAT2(y - rg) >> gloss) << gshift) | |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1124 ((SAT2(y + u1) >> bloss) << bshift); |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1125 /* do the pixels on row 2 */ |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1126 y = *y2++; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1127 *d8_2++ = ((SAT2(y + v1) >> rloss) << rshift) | |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1128 ((SAT2(y - rg) >> gloss) << gshift) | |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1129 ((SAT2(y + u1) >> bloss) << bshift); |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1130 y = *y2++; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1131 *d8_2++ = ((SAT2(y + v1) >> rloss) << rshift) | |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1132 ((SAT2(y - rg) >> gloss) << gshift) | |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1133 ((SAT2(y + u1) >> bloss) << bshift); |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1134 } |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1135 /* 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
|
1136 y1 = y2; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1137 /* and make row 2 one row further */ |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1138 y2 += width; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1139 d8_1 = d8_2; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1140 d8_2 += width; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1141 } |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1142 break; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1143 case 2: |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1144 while(j--) { |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1145 i = width/2; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1146 while(i--) { |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1147 /* These formulas are from libv4l */ |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1148 u1 = (((*u - 128) << 7) + (*u - 128)) >> 6; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1149 rg = (((*u - 128) << 1) + (*u - 128) + |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1150 ((*v - 128) << 2) + ((*v - 128) << 1)) >> 3; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1151 v1 = (((*v - 128) << 1) + (*v - 128)) >> 1; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1152 u++; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1153 v++; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1154 /* do the pixels on row 1 */ |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1155 y = *y1++; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1156 *d16_1++ = ((SAT2(y + v1) >> rloss) << rshift) | |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1157 ((SAT2(y - rg) >> gloss) << gshift) | |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1158 ((SAT2(y + u1) >> bloss) << bshift); |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1159 y = *y1++; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1160 *d16_1++ = ((SAT2(y + v1) >> rloss) << rshift) | |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1161 ((SAT2(y - rg) >> gloss) << gshift) | |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1162 ((SAT2(y + u1) >> bloss) << bshift); |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1163 /* do the pixels on row 2 */ |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1164 y = *y2++; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1165 *d16_2++ = ((SAT2(y + v1) >> rloss) << rshift) | |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1166 ((SAT2(y - rg) >> gloss) << gshift) | |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1167 ((SAT2(y + u1) >> bloss) << bshift); |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1168 y = *y2++; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1169 *d16_2++ = ((SAT2(y + v1) >> rloss) << rshift) | |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1170 ((SAT2(y - rg) >> gloss) << gshift) | |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1171 ((SAT2(y + u1) >> bloss) << bshift); |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1172 } |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1173 /* 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
|
1174 y1 = y2; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1175 /* and make row 2 one row further */ |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1176 y2 += width; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1177 d16_1 = d16_2; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1178 d16_2 += width; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1179 } |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1180 break; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1181 case 3: |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1182 while(j--) { |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1183 i = width/2; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1184 while(i--) { |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1185 /* These formulas are from libv4l */ |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1186 u1 = (((*u - 128) << 7) + (*u - 128)) >> 6; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1187 rg = (((*u - 128) << 1) + (*u - 128) + |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1188 ((*v - 128) << 2) + ((*v - 128) << 1)) >> 3; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1189 v1 = (((*v - 128) << 1) + (*v - 128)) >> 1; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1190 u++; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1191 v++; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1192 /* do the pixels on row 1 */ |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1193 y = *y1++; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1194 *d8_1++ = SAT2(y + u1); |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1195 *d8_1++ = SAT2(y - rg); |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1196 *d8_1++ = SAT2(y + v1); |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1197 y = *y1++; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1198 *d8_1++ = SAT2(y + u1); |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1199 *d8_1++ = SAT2(y - rg); |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1200 *d8_1++ = SAT2(y + v1); |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1201 /* do the pixels on row 2 */ |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1202 y = *y2++; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1203 *d8_2++ = SAT2(y + u1); |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1204 *d8_2++ = SAT2(y - rg); |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1205 *d8_2++ = SAT2(y + v1); |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1206 y = *y2++; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1207 *d8_2++ = SAT2(y + u1); |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1208 *d8_2++ = SAT2(y - rg); |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1209 *d8_2++ = SAT2(y + v1); |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1210 } |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1211 /* 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
|
1212 y1 = y2; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1213 /* and make row 2 one row further */ |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1214 y2 += width; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1215 d8_1 = d8_2; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1216 /* since it is 3 bytes per pixel */ |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1217 d8_2 += width*3; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1218 } |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1219 break; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1220 default: |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1221 while(j--) { |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1222 i = width/2; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1223 while(i--) { |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1224 /* These formulas are from libv4l */ |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1225 u1 = (((*u - 128) << 7) + (*u - 128)) >> 6; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1226 rg = (((*u - 128) << 1) + (*u - 128) + |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1227 ((*v - 128) << 2) + ((*v - 128) << 1)) >> 3; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1228 v1 = (((*v - 128) << 1) + (*v - 128)) >> 1; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1229 u++; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1230 v++; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1231 /* do the pixels on row 1 */ |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1232 y = *y1++; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1233 *d32_1++ = ((SAT2(y + v1) >> rloss) << rshift) | |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1234 ((SAT2(y - rg) >> gloss) << gshift) | |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1235 ((SAT2(y + u1) >> bloss) << bshift); |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1236 y = *y1++; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1237 *d32_1++ = ((SAT2(y + v1) >> rloss) << rshift) | |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1238 ((SAT2(y - rg) >> gloss) << gshift) | |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1239 ((SAT2(y + u1) >> bloss) << bshift); |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1240 /* do the pixels on row 2 */ |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1241 y = *y2++; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1242 *d32_2++ = ((SAT2(y + v1) >> rloss) << rshift) | |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1243 ((SAT2(y - rg) >> gloss) << gshift) | |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1244 ((SAT2(y + u1) >> bloss) << bshift); |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1245 y = *y2++; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1246 *d32_2++ = ((SAT2(y + v1) >> rloss) << rshift) | |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1247 ((SAT2(y - rg) >> gloss) << gshift) | |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1248 ((SAT2(y + u1) >> bloss) << bshift); |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1249 } |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1250 /* 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
|
1251 y1 = y2; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1252 /* and make row 2 one row further */ |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1253 y2 += width; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1254 d32_1 = d32_2; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1255 d32_2 += width; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1256 } |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1257 break; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1258 } |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1259 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1260 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1261 /* turn yuv420 into packed yuv. */ |
| 1975 | 1262 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
|
1263 const Uint8 *y1, *y2, *u, *v; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1264 Uint8 *d8_1, *d8_2; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1265 Uint16 *d16_1, *d16_2; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1266 Uint32 *d32_1, *d32_2; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1267 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
|
1268 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1269 rshift = format->Rshift; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1270 gshift = format->Gshift; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1271 bshift = format->Bshift; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1272 rloss = format->Rloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1273 gloss = format->Gloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1274 bloss = format->Bloss; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1275 |
|
1534
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1276 d8_1 = (Uint8 *) dst; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1277 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
|
1278 d16_1 = (Uint16 *) dst; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1279 d16_2 = d16_1 + width; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1280 d32_1 = (Uint32 *) dst; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1281 d32_2 = d32_1 + width; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1282 y1 = (Uint8 *) src; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1283 y2 = y1 + width; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1284 u = y1 + width * height; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1285 v = u + (width * height) / 4; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1286 j = height / 2; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1287 |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1288 switch (format->BytesPerPixel) { |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1289 case 1: |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1290 while (j--) { |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1291 i = width/2; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1292 while (i--) { |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1293 *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
|
1294 *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
|
1295 *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
|
1296 *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
|
1297 } |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1298 y1 = y2; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1299 y2 += width; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1300 d8_1 = d8_2; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1301 d8_2 += width; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1302 } |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1303 break; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1304 case 2: |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1305 while (j--) { |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1306 i = width/2; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1307 while (i--) { |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1308 *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
|
1309 *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
|
1310 *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
|
1311 *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
|
1312 } |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1313 y1 = y2; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1314 y2 += width; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1315 d16_1 = d16_2; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1316 d16_2 += width; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1317 } |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1318 break; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1319 case 3: |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1320 while (j--) { |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1321 i = width/2; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1322 while (i--) { |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1323 *d8_1++ = *v; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1324 *d8_1++ = *u; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1325 *d8_1++ = *y1++; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1326 *d8_1++ = *v; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1327 *d8_1++ = *u; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1328 *d8_1++ = *y1++; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1329 *d8_2++ = *v; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1330 *d8_2++ = *u; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1331 *d8_2++ = *y2++; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1332 *d8_2++ = *v++; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1333 *d8_2++ = *u++; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1334 *d8_2++ = *y2++; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1335 } |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1336 y1 = y2; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1337 y2 += width; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1338 d8_1 = d8_2; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1339 d8_2 += width*3; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1340 } |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1341 break; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1342 default: |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1343 while (j--) { |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1344 i = width/2; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1345 while (i--) { |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1346 *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
|
1347 *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
|
1348 *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
|
1349 *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
|
1350 } |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1351 y1 = y2; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1352 y2 += width; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1353 d32_1 = d32_2; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1354 d32_2 += width; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1355 } |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1356 break; |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1357 } |
|
19a59d1c410b
yuv420 reimplemented with formulas from libv4l
Nirav Patel <nrp@eclecti.cc>
parents:
1533
diff
changeset
|
1358 |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1359 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1360 |
|
1976
4b67c00bb2b3
camera building again, fixed a few warnings and errors. got camera.h from the git branch of Werner.
Rene Dudfield <renesd@gmail.com>
parents:
1975
diff
changeset
|
1361 |
| 1975 | 1362 |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1363 /* |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1364 * Python API stuff |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1365 */ |
| 1975 | 1366 |
| 1367 /* Camera class definition */ | |
| 1368 PyMethodDef cameraobj_builtins[] = { | |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1369 { "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
|
1370 { "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
|
1371 { "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
|
1372 { "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
|
1373 { "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
|
1374 { "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
|
1375 { "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
|
1376 { "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
|
1377 { NULL, NULL, 0, NULL } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1378 }; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1379 |
| 1975 | 1380 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
|
1381 free(((PyCameraObject*) self)->device_name); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1382 PyObject_DEL (self); |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1383 } |
|
2143
99afc91b219a
apply camera module patch for Python 3; thanks Christoph Gohlke
Lenard Lindstrom <len-l@telus.net>
parents:
1989
diff
changeset
|
1384 /* |
| 1975 | 1385 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
|
1386 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
|
1387 } |
|
2143
99afc91b219a
apply camera module patch for Python 3; thanks Christoph Gohlke
Lenard Lindstrom <len-l@telus.net>
parents:
1989
diff
changeset
|
1388 */ |
| 1975 | 1389 PyTypeObject PyCamera_Type = { |
|
2143
99afc91b219a
apply camera module patch for Python 3; thanks Christoph Gohlke
Lenard Lindstrom <len-l@telus.net>
parents:
1989
diff
changeset
|
1390 TYPE_HEAD (NULL, 0) |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1391 "Camera", |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1392 sizeof(PyCameraObject), |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1393 0, |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1394 camera_dealloc, |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1395 0, |
|
2143
99afc91b219a
apply camera module patch for Python 3; thanks Christoph Gohlke
Lenard Lindstrom <len-l@telus.net>
parents:
1989
diff
changeset
|
1396 0, /*camera_getattr */ |
| 1975 | 1397 NULL, /*setattr*/ |
| 1398 NULL, /*compare*/ | |
| 1399 NULL, /*repr*/ | |
| 1400 NULL, /*as_number*/ | |
| 1401 NULL, /*as_sequence*/ | |
| 1402 NULL, /*as_mapping*/ | |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1403 (hashfunc)NULL, /*hash*/ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1404 (ternaryfunc)NULL, /*call*/ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1405 (reprfunc)NULL, /*str*/ |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1406 0L,0L,0L,0L, |
|
2143
99afc91b219a
apply camera module patch for Python 3; thanks Christoph Gohlke
Lenard Lindstrom <len-l@telus.net>
parents:
1989
diff
changeset
|
1407 DOC_PYGAMECAMERACAMERA, /* Documentation string */ |
|
99afc91b219a
apply camera module patch for Python 3; thanks Christoph Gohlke
Lenard Lindstrom <len-l@telus.net>
parents:
1989
diff
changeset
|
1408 0, /* tp_traverse */ |
|
99afc91b219a
apply camera module patch for Python 3; thanks Christoph Gohlke
Lenard Lindstrom <len-l@telus.net>
parents:
1989
diff
changeset
|
1409 0, /* tp_clear */ |
|
99afc91b219a
apply camera module patch for Python 3; thanks Christoph Gohlke
Lenard Lindstrom <len-l@telus.net>
parents:
1989
diff
changeset
|
1410 0, /* tp_richcompare */ |
|
99afc91b219a
apply camera module patch for Python 3; thanks Christoph Gohlke
Lenard Lindstrom <len-l@telus.net>
parents:
1989
diff
changeset
|
1411 0, /* tp_weaklistoffset */ |
|
99afc91b219a
apply camera module patch for Python 3; thanks Christoph Gohlke
Lenard Lindstrom <len-l@telus.net>
parents:
1989
diff
changeset
|
1412 0, /* tp_iter */ |
|
99afc91b219a
apply camera module patch for Python 3; thanks Christoph Gohlke
Lenard Lindstrom <len-l@telus.net>
parents:
1989
diff
changeset
|
1413 0, /* tp_iternext */ |
|
99afc91b219a
apply camera module patch for Python 3; thanks Christoph Gohlke
Lenard Lindstrom <len-l@telus.net>
parents:
1989
diff
changeset
|
1414 cameraobj_builtins, /* tp_methods */ |
|
99afc91b219a
apply camera module patch for Python 3; thanks Christoph Gohlke
Lenard Lindstrom <len-l@telus.net>
parents:
1989
diff
changeset
|
1415 0, /* tp_members */ |
|
99afc91b219a
apply camera module patch for Python 3; thanks Christoph Gohlke
Lenard Lindstrom <len-l@telus.net>
parents:
1989
diff
changeset
|
1416 0, /* tp_getset */ |
|
99afc91b219a
apply camera module patch for Python 3; thanks Christoph Gohlke
Lenard Lindstrom <len-l@telus.net>
parents:
1989
diff
changeset
|
1417 0, /* tp_base */ |
|
99afc91b219a
apply camera module patch for Python 3; thanks Christoph Gohlke
Lenard Lindstrom <len-l@telus.net>
parents:
1989
diff
changeset
|
1418 0, /* tp_dict */ |
|
99afc91b219a
apply camera module patch for Python 3; thanks Christoph Gohlke
Lenard Lindstrom <len-l@telus.net>
parents:
1989
diff
changeset
|
1419 0, /* tp_descr_get */ |
|
99afc91b219a
apply camera module patch for Python 3; thanks Christoph Gohlke
Lenard Lindstrom <len-l@telus.net>
parents:
1989
diff
changeset
|
1420 0, /* tp_descr_set */ |
|
99afc91b219a
apply camera module patch for Python 3; thanks Christoph Gohlke
Lenard Lindstrom <len-l@telus.net>
parents:
1989
diff
changeset
|
1421 0, /* tp_dictoffset */ |
|
99afc91b219a
apply camera module patch for Python 3; thanks Christoph Gohlke
Lenard Lindstrom <len-l@telus.net>
parents:
1989
diff
changeset
|
1422 0, /* tp_init */ |
|
99afc91b219a
apply camera module patch for Python 3; thanks Christoph Gohlke
Lenard Lindstrom <len-l@telus.net>
parents:
1989
diff
changeset
|
1423 0, /* tp_alloc */ |
|
99afc91b219a
apply camera module patch for Python 3; thanks Christoph Gohlke
Lenard Lindstrom <len-l@telus.net>
parents:
1989
diff
changeset
|
1424 0, /* tp_new */ |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1425 }; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1426 |
| 1975 | 1427 PyObject* Camera (PyCameraObject* self, PyObject* arg) { |
| 1428 # if defined(__unix__) | |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1429 int w, h; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1430 char* dev_name = NULL; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1431 char* color = NULL; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1432 PyCameraObject *cameraobj; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1433 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1434 w = DEFAULT_WIDTH; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1435 h = DEFAULT_HEIGHT; |
|
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 (!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
|
1438 return NULL; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1439 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1440 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
|
1441 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1442 if (cameraobj) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1443 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
|
1444 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
|
1445 cameraobj->camera_type = 0; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1446 cameraobj->pixelformat = 0; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1447 if (color) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1448 if (!strcmp(color, "YUV")) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1449 cameraobj->color_out = YUV_OUT; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1450 } else if (!strcmp(color, "HSV")) { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1451 cameraobj->color_out = HSV_OUT; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1452 } else { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1453 cameraobj->color_out = RGB_OUT; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1454 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1455 } else { |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1456 cameraobj->color_out = RGB_OUT; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1457 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1458 cameraobj->buffers = NULL; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1459 cameraobj->n_buffers = 0; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1460 cameraobj->width = w; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1461 cameraobj->height = h; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1462 cameraobj->size = 0; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1463 cameraobj->hflip = 0; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1464 cameraobj->vflip = 0; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1465 cameraobj->brightness = 0; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1466 cameraobj->fd = -1; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1467 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1468 |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1469 return (PyObject*)cameraobj; |
| 1975 | 1470 |
|
3073
1c265998cf59
Disable camera_mac if OS X is above version 10.6.
Rene Dudfield <renesd@gmail.com>
parents:
2174
diff
changeset
|
1471 # elif defined(PYGAME_MAC_CAMERA_OLD) |
| 1975 | 1472 int w, h; |
| 1473 char* dev_name = NULL; | |
| 1474 char* color = NULL; | |
| 1475 PyCameraObject *cameraobj; | |
| 1476 | |
| 1477 w = DEFAULT_WIDTH; | |
| 1478 h = DEFAULT_HEIGHT; | |
| 1479 | |
| 1480 if (!PyArg_ParseTuple(arg, "s|(ii)s", &dev_name, &w, &h, &color)) | |
| 1481 return NULL; | |
| 1482 | |
| 1483 cameraobj = PyObject_NEW (PyCameraObject, &PyCamera_Type); | |
| 1484 | |
| 1485 if (cameraobj) { | |
| 1486 cameraobj->device_name = (char*) malloc((strlen(dev_name)+1)*sizeof(char)); | |
| 1487 strcpy(cameraobj->device_name, dev_name); | |
| 1488 if (color) { | |
| 1489 if (!strcmp(color, "YUV")) { | |
| 1490 cameraobj->color_out = YUV_OUT; | |
| 1491 } else if (!strcmp(color, "HSV")) { | |
| 1492 cameraobj->color_out = HSV_OUT; | |
| 1493 } else { | |
| 1494 cameraobj->color_out = RGB_OUT; | |
| 1495 } | |
| 1496 } else { | |
| 1497 cameraobj->color_out = RGB_OUT; | |
| 1498 } | |
| 1499 cameraobj->component = NULL; | |
| 1500 cameraobj->channel = NULL; | |
| 1501 cameraobj->gworld = NULL; | |
| 1502 cameraobj->boundsRect.top = 0; | |
| 1503 cameraobj->boundsRect.left = 0; | |
| 1504 cameraobj->boundsRect.bottom = h; | |
| 1505 cameraobj->boundsRect.right = w; | |
| 1506 cameraobj->size = w * h; | |
|
1979
8d1a9327b5d9
removed the use of true and false... not c89 compatible.
Rene Dudfield <renesd@gmail.com>
parents:
1976
diff
changeset
|
1507 cameraobj->hflip = 0; |
|
8d1a9327b5d9
removed the use of true and false... not c89 compatible.
Rene Dudfield <renesd@gmail.com>
parents:
1976
diff
changeset
|
1508 cameraobj->vflip = 0; |
| 1975 | 1509 } |
| 1510 | |
| 1511 return (PyObject*)cameraobj; | |
| 1512 # endif | |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1513 } |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1514 |
| 1975 | 1515 /* Camera module definition */ |
| 1516 PyMethodDef camera_builtins[] = { | |
| 1517 {"colorspace", surf_colorspace, METH_VARARGS, DOC_PYGAMECAMERACOLORSPACE }, | |
| 1518 {"list_cameras", list_cameras, METH_NOARGS, DOC_PYGAMECAMERALISTCAMERAS }, | |
| 1519 {"Camera", (PyCFunction) Camera, METH_VARARGS, DOC_PYGAMECAMERACAMERA }, | |
| 1520 {NULL, NULL, 0, NULL } | |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1521 }; |
|
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1522 |
|
2143
99afc91b219a
apply camera module patch for Python 3; thanks Christoph Gohlke
Lenard Lindstrom <len-l@telus.net>
parents:
1989
diff
changeset
|
1523 MODINIT_DEFINE (_camera) { |
|
99afc91b219a
apply camera module patch for Python 3; thanks Christoph Gohlke
Lenard Lindstrom <len-l@telus.net>
parents:
1989
diff
changeset
|
1524 PyObject *module; |
| 1975 | 1525 /* imported needed apis; Do this first so if there is an error |
| 1526 * the module is not loaded. | |
| 1527 */ | |
|
2143
99afc91b219a
apply camera module patch for Python 3; thanks Christoph Gohlke
Lenard Lindstrom <len-l@telus.net>
parents:
1989
diff
changeset
|
1528 |
|
99afc91b219a
apply camera module patch for Python 3; thanks Christoph Gohlke
Lenard Lindstrom <len-l@telus.net>
parents:
1989
diff
changeset
|
1529 #if PY3 |
|
99afc91b219a
apply camera module patch for Python 3; thanks Christoph Gohlke
Lenard Lindstrom <len-l@telus.net>
parents:
1989
diff
changeset
|
1530 static struct PyModuleDef _module = { |
|
99afc91b219a
apply camera module patch for Python 3; thanks Christoph Gohlke
Lenard Lindstrom <len-l@telus.net>
parents:
1989
diff
changeset
|
1531 PyModuleDef_HEAD_INIT, |
|
99afc91b219a
apply camera module patch for Python 3; thanks Christoph Gohlke
Lenard Lindstrom <len-l@telus.net>
parents:
1989
diff
changeset
|
1532 "_camera", |
|
99afc91b219a
apply camera module patch for Python 3; thanks Christoph Gohlke
Lenard Lindstrom <len-l@telus.net>
parents:
1989
diff
changeset
|
1533 DOC_PYGAMECAMERA, |
|
99afc91b219a
apply camera module patch for Python 3; thanks Christoph Gohlke
Lenard Lindstrom <len-l@telus.net>
parents:
1989
diff
changeset
|
1534 -1, |
|
99afc91b219a
apply camera module patch for Python 3; thanks Christoph Gohlke
Lenard Lindstrom <len-l@telus.net>
parents:
1989
diff
changeset
|
1535 camera_builtins, |
|
99afc91b219a
apply camera module patch for Python 3; thanks Christoph Gohlke
Lenard Lindstrom <len-l@telus.net>
parents:
1989
diff
changeset
|
1536 NULL, NULL, NULL, NULL |
|
99afc91b219a
apply camera module patch for Python 3; thanks Christoph Gohlke
Lenard Lindstrom <len-l@telus.net>
parents:
1989
diff
changeset
|
1537 }; |
|
99afc91b219a
apply camera module patch for Python 3; thanks Christoph Gohlke
Lenard Lindstrom <len-l@telus.net>
parents:
1989
diff
changeset
|
1538 #endif |
|
99afc91b219a
apply camera module patch for Python 3; thanks Christoph Gohlke
Lenard Lindstrom <len-l@telus.net>
parents:
1989
diff
changeset
|
1539 |
| 1975 | 1540 import_pygame_base(); |
| 1541 if (PyErr_Occurred()) { | |
|
2143
99afc91b219a
apply camera module patch for Python 3; thanks Christoph Gohlke
Lenard Lindstrom <len-l@telus.net>
parents:
1989
diff
changeset
|
1542 MODINIT_ERROR; |
| 1975 | 1543 } |
| 1544 import_pygame_surface(); | |
| 1545 if (PyErr_Occurred()) { | |
|
2143
99afc91b219a
apply camera module patch for Python 3; thanks Christoph Gohlke
Lenard Lindstrom <len-l@telus.net>
parents:
1989
diff
changeset
|
1546 MODINIT_ERROR; |
| 1975 | 1547 } |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1548 |
| 1975 | 1549 /* type preparation */ |
|
2143
99afc91b219a
apply camera module patch for Python 3; thanks Christoph Gohlke
Lenard Lindstrom <len-l@telus.net>
parents:
1989
diff
changeset
|
1550 //PyType_Init(PyCamera_Type); |
|
99afc91b219a
apply camera module patch for Python 3; thanks Christoph Gohlke
Lenard Lindstrom <len-l@telus.net>
parents:
1989
diff
changeset
|
1551 PyCamera_Type.tp_new = PyType_GenericNew; |
|
99afc91b219a
apply camera module patch for Python 3; thanks Christoph Gohlke
Lenard Lindstrom <len-l@telus.net>
parents:
1989
diff
changeset
|
1552 if (PyType_Ready (&PyCamera_Type) < 0) |
|
99afc91b219a
apply camera module patch for Python 3; thanks Christoph Gohlke
Lenard Lindstrom <len-l@telus.net>
parents:
1989
diff
changeset
|
1553 { |
|
99afc91b219a
apply camera module patch for Python 3; thanks Christoph Gohlke
Lenard Lindstrom <len-l@telus.net>
parents:
1989
diff
changeset
|
1554 MODINIT_ERROR; |
|
99afc91b219a
apply camera module patch for Python 3; thanks Christoph Gohlke
Lenard Lindstrom <len-l@telus.net>
parents:
1989
diff
changeset
|
1555 } |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1556 |
| 1975 | 1557 /* create the module */ |
|
2143
99afc91b219a
apply camera module patch for Python 3; thanks Christoph Gohlke
Lenard Lindstrom <len-l@telus.net>
parents:
1989
diff
changeset
|
1558 #if PY3 |
|
99afc91b219a
apply camera module patch for Python 3; thanks Christoph Gohlke
Lenard Lindstrom <len-l@telus.net>
parents:
1989
diff
changeset
|
1559 module = PyModule_Create(&_module); |
|
99afc91b219a
apply camera module patch for Python 3; thanks Christoph Gohlke
Lenard Lindstrom <len-l@telus.net>
parents:
1989
diff
changeset
|
1560 #else |
| 1975 | 1561 module = Py_InitModule3("_camera", camera_builtins, DOC_PYGAMECAMERA); |
|
2143
99afc91b219a
apply camera module patch for Python 3; thanks Christoph Gohlke
Lenard Lindstrom <len-l@telus.net>
parents:
1989
diff
changeset
|
1562 #endif |
|
99afc91b219a
apply camera module patch for Python 3; thanks Christoph Gohlke
Lenard Lindstrom <len-l@telus.net>
parents:
1989
diff
changeset
|
1563 |
|
99afc91b219a
apply camera module patch for Python 3; thanks Christoph Gohlke
Lenard Lindstrom <len-l@telus.net>
parents:
1989
diff
changeset
|
1564 Py_INCREF(&PyCamera_Type); |
|
99afc91b219a
apply camera module patch for Python 3; thanks Christoph Gohlke
Lenard Lindstrom <len-l@telus.net>
parents:
1989
diff
changeset
|
1565 PyModule_AddObject(module, "CameraType", (PyObject *)&PyCamera_Type); |
|
99afc91b219a
apply camera module patch for Python 3; thanks Christoph Gohlke
Lenard Lindstrom <len-l@telus.net>
parents:
1989
diff
changeset
|
1566 |
|
99afc91b219a
apply camera module patch for Python 3; thanks Christoph Gohlke
Lenard Lindstrom <len-l@telus.net>
parents:
1989
diff
changeset
|
1567 MODINIT_RETURN(module); |
|
1513
d30a1c63f562
moved camera.c _camera.c . created a lib/camera.py
Rene Dudfield <renesd@gmail.com>
parents:
diff
changeset
|
1568 } |
