annotate src/_camera.c @ 3182:0c07af110477 docs-changes

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