annotate src/_camera.c @ 1849:301bc61643a9 math_module

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