annotate Modules/svmodule.c @ 4566:6403c94de50d legacy-trunk

Added safeguard against failure in __del__.
author Guido van Rossum <guido@python.org>
date Wed, 27 Nov 1996 19:39:58 +0000
parents 65d2d8e67da3
children 0253ef267b68
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1179
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1 /**********************************************************
2061
172ba04a5191 Added 1995 to copyright message.
Guido van Rossum <guido@python.org>
parents: 1746
diff changeset
2 Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam,
172ba04a5191 Added 1995 to copyright message.
Guido van Rossum <guido@python.org>
parents: 1746
diff changeset
3 The Netherlands.
1179
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
4
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
5 All Rights Reserved
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
6
4503
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2061
diff changeset
7 Permission to use, copy, modify, and distribute this software and its
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2061
diff changeset
8 documentation for any purpose and without fee is hereby granted,
1179
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
9 provided that the above copyright notice appear in all copies and that
4503
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2061
diff changeset
10 both that copyright notice and this permission notice appear in
1179
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
11 supporting documentation, and that the names of Stichting Mathematisch
4503
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2061
diff changeset
12 Centrum or CWI or Corporation for National Research Initiatives or
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2061
diff changeset
13 CNRI not be used in advertising or publicity pertaining to
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2061
diff changeset
14 distribution of the software without specific, written prior
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2061
diff changeset
15 permission.
1179
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
16
4503
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2061
diff changeset
17 While CWI is the initial source for this software, a modified version
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2061
diff changeset
18 is made available by the Corporation for National Research Initiatives
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2061
diff changeset
19 (CNRI) at the Internet address ftp://ftp.python.org.
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2061
diff changeset
20
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2061
diff changeset
21 STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2061
diff changeset
22 REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2061
diff changeset
23 MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2061
diff changeset
24 CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2061
diff changeset
25 DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2061
diff changeset
26 PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2061
diff changeset
27 TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
65d2d8e67da3 New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents: 2061
diff changeset
28 PERFORMANCE OF THIS SOFTWARE.
1179
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
29
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
30 ******************************************************************/
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
31
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
32 /* SV module -- interface to the Indigo video board */
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
33
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
34 #include <sys/time.h>
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
35 #include <svideo.h>
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
36 #include "allobjects.h"
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
37 #include "import.h"
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
38 #include "modsupport.h"
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
39 #include "compile.h"
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
40 #include "ceval.h"
1253
685b31fe89c6 Added conversion routines to sv module.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1207
diff changeset
41 #include "yuv.h" /* for YUV conversion functions */
1179
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
42
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
43 typedef struct {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
44 OB_HEAD
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
45 SV_nodeP ob_svideo;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
46 svCaptureInfo ob_info;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
47 } svobject;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
48
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
49 typedef struct {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
50 OB_HEAD
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
51 void *ob_capture;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
52 int ob_mustunlock;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
53 svCaptureInfo ob_info;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
54 svobject *ob_svideo;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
55 } captureobject;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
56
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
57 static object *SvError; /* exception sv.error */
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
58
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
59 static object *newcaptureobject PROTO((svobject *, void *, int));
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
60
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
61 /* Set a SV-specific error from svideo_errno and return NULL */
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
62 static object *
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
63 sv_error()
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
64 {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
65 err_setstr(SvError, svStrerror(svideo_errno));
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
66 return NULL;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
67 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
68
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
69 static object *
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
70 svc_conversion(self, args, function, factor)
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
71 captureobject *self;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
72 object *args;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
73 void (*function)();
1253
685b31fe89c6 Added conversion routines to sv module.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1207
diff changeset
74 float factor;
1179
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
75 {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
76 object *output;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
77 int invert;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
78
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
79 if (!getargs(args, "i", &invert))
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
80 return NULL;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
81
1253
685b31fe89c6 Added conversion routines to sv module.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1207
diff changeset
82 output = newsizedstringobject(NULL, (int) (self->ob_info.width * self->ob_info.height * factor));
1179
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
83 if (output == NULL)
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
84 return NULL;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
85
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
86 (*function)((boolean) invert, self->ob_capture, getstringvalue(output),
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
87 self->ob_info.width, self->ob_info.height);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
88
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
89 return output;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
90 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
91
1253
685b31fe89c6 Added conversion routines to sv module.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1207
diff changeset
92 /*
685b31fe89c6 Added conversion routines to sv module.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1207
diff changeset
93 * 3 functions to convert from Starter Video YUV 4:1:1 format to
685b31fe89c6 Added conversion routines to sv module.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1207
diff changeset
94 * Compression Library 4:2:2 Duplicate Chroma format.
685b31fe89c6 Added conversion routines to sv module.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1207
diff changeset
95 */
685b31fe89c6 Added conversion routines to sv module.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1207
diff changeset
96 static object *
685b31fe89c6 Added conversion routines to sv module.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1207
diff changeset
97 svc_YUVtoYUV422DC(self, args)
685b31fe89c6 Added conversion routines to sv module.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1207
diff changeset
98 captureobject *self;
685b31fe89c6 Added conversion routines to sv module.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1207
diff changeset
99 object *args;
685b31fe89c6 Added conversion routines to sv module.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1207
diff changeset
100 {
685b31fe89c6 Added conversion routines to sv module.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1207
diff changeset
101 if (self->ob_info.format != SV_YUV411_FRAMES) {
685b31fe89c6 Added conversion routines to sv module.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1207
diff changeset
102 err_setstr(SvError, "data has bad format");
685b31fe89c6 Added conversion routines to sv module.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1207
diff changeset
103 return NULL;
685b31fe89c6 Added conversion routines to sv module.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1207
diff changeset
104 }
685b31fe89c6 Added conversion routines to sv module.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1207
diff changeset
105 return svc_conversion(self, args, yuv_sv411_to_cl422dc, 2.0);
685b31fe89c6 Added conversion routines to sv module.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1207
diff changeset
106 }
685b31fe89c6 Added conversion routines to sv module.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1207
diff changeset
107
685b31fe89c6 Added conversion routines to sv module.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1207
diff changeset
108 static object *
685b31fe89c6 Added conversion routines to sv module.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1207
diff changeset
109 svc_YUVtoYUV422DC_quarter(self, args)
685b31fe89c6 Added conversion routines to sv module.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1207
diff changeset
110 captureobject *self;
685b31fe89c6 Added conversion routines to sv module.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1207
diff changeset
111 object *args;
685b31fe89c6 Added conversion routines to sv module.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1207
diff changeset
112 {
685b31fe89c6 Added conversion routines to sv module.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1207
diff changeset
113 if (self->ob_info.format != SV_YUV411_FRAMES) {
685b31fe89c6 Added conversion routines to sv module.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1207
diff changeset
114 err_setstr(SvError, "data has bad format");
685b31fe89c6 Added conversion routines to sv module.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1207
diff changeset
115 return NULL;
685b31fe89c6 Added conversion routines to sv module.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1207
diff changeset
116 }
685b31fe89c6 Added conversion routines to sv module.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1207
diff changeset
117 return svc_conversion(self, args, yuv_sv411_to_cl422dc_quartersize, 0.5);
685b31fe89c6 Added conversion routines to sv module.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1207
diff changeset
118 }
685b31fe89c6 Added conversion routines to sv module.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1207
diff changeset
119
685b31fe89c6 Added conversion routines to sv module.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1207
diff changeset
120 static object *
685b31fe89c6 Added conversion routines to sv module.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1207
diff changeset
121 svc_YUVtoYUV422DC_sixteenth(self, args)
685b31fe89c6 Added conversion routines to sv module.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1207
diff changeset
122 captureobject *self;
685b31fe89c6 Added conversion routines to sv module.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1207
diff changeset
123 object *args;
685b31fe89c6 Added conversion routines to sv module.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1207
diff changeset
124 {
685b31fe89c6 Added conversion routines to sv module.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1207
diff changeset
125 if (self->ob_info.format != SV_YUV411_FRAMES) {
685b31fe89c6 Added conversion routines to sv module.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1207
diff changeset
126 err_setstr(SvError, "data has bad format");
685b31fe89c6 Added conversion routines to sv module.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1207
diff changeset
127 return NULL;
685b31fe89c6 Added conversion routines to sv module.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1207
diff changeset
128 }
685b31fe89c6 Added conversion routines to sv module.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1207
diff changeset
129 return svc_conversion(self, args, yuv_sv411_to_cl422dc_sixteenthsize, 0.125);
685b31fe89c6 Added conversion routines to sv module.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1207
diff changeset
130 }
685b31fe89c6 Added conversion routines to sv module.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1207
diff changeset
131
1179
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
132 static object *
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
133 svc_YUVtoRGB(self, args)
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
134 captureobject *self;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
135 object *args;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
136 {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
137 switch (self->ob_info.format) {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
138 case SV_YUV411_FRAMES:
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
139 case SV_YUV411_FRAMES_AND_BLANKING_BUFFER:
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
140 break;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
141 default:
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
142 err_setstr(SvError, "data had bad format");
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
143 return NULL;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
144 }
1253
685b31fe89c6 Added conversion routines to sv module.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1207
diff changeset
145 return svc_conversion(self, args, svYUVtoRGB, (float) sizeof(long));
1179
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
146 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
147
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
148 static object *
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
149 svc_RGB8toRGB32(self, args)
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
150 captureobject *self;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
151 object *args;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
152 {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
153 if (self->ob_info.format != SV_RGB8_FRAMES) {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
154 err_setstr(SvError, "data has bad format");
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
155 return NULL;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
156 }
1253
685b31fe89c6 Added conversion routines to sv module.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1207
diff changeset
157 return svc_conversion(self, args, svRGB8toRGB32, (float) sizeof(long));
1179
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
158 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
159
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
160 static object *
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
161 svc_InterleaveFields(self, args)
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
162 captureobject *self;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
163 object *args;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
164 {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
165 if (self->ob_info.format != SV_RGB8_FRAMES) {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
166 err_setstr(SvError, "data has bad format");
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
167 return NULL;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
168 }
1253
685b31fe89c6 Added conversion routines to sv module.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1207
diff changeset
169 return svc_conversion(self, args, svInterleaveFields, 1.0);
1179
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
170 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
171
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
172 static object *
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
173 svc_GetFields(self, args)
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
174 captureobject *self;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
175 object *args;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
176 {
1207
b564bd4e57e1 * ceval.c: ifdef out the last argument passing compat hack.
Guido van Rossum <guido@python.org>
parents: 1198
diff changeset
177 object *f1, *f2, *ret;
1179
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
178 int fieldsize;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
179
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
180 if (self->ob_info.format != SV_RGB8_FRAMES) {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
181 err_setstr(SvError, "data has bad format");
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
182 return NULL;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
183 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
184
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
185 fieldsize = self->ob_info.width * self->ob_info.height / 2;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
186 f1 = newsizedstringobject((char *) self->ob_capture, fieldsize);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
187 f2 = newsizedstringobject((char *) self->ob_capture + fieldsize, fieldsize);
1207
b564bd4e57e1 * ceval.c: ifdef out the last argument passing compat hack.
Guido van Rossum <guido@python.org>
parents: 1198
diff changeset
188 ret = mkvalue("(OO)", f1, f2);
b564bd4e57e1 * ceval.c: ifdef out the last argument passing compat hack.
Guido van Rossum <guido@python.org>
parents: 1198
diff changeset
189 XDECREF(f1);
b564bd4e57e1 * ceval.c: ifdef out the last argument passing compat hack.
Guido van Rossum <guido@python.org>
parents: 1198
diff changeset
190 XDECREF(f2);
b564bd4e57e1 * ceval.c: ifdef out the last argument passing compat hack.
Guido van Rossum <guido@python.org>
parents: 1198
diff changeset
191 return ret;
1179
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
192 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
193
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
194 static object *
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
195 svc_UnlockCaptureData(self, args)
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
196 captureobject *self;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
197 object *args;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
198 {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
199 if (!getnoarg(args))
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
200 return NULL;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
201
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
202 if (!self->ob_mustunlock) {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
203 err_setstr(SvError, "buffer should not be unlocked");
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
204 return NULL;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
205 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
206
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
207 if (svUnlockCaptureData(self->ob_svideo->ob_svideo, self->ob_capture))
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
208 return sv_error();
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
209
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
210 self->ob_mustunlock = 0;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
211
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
212 INCREF(None);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
213 return None;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
214 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
215
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
216 #ifdef USE_GL
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
217 #include <gl.h>
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
218
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
219 static object *
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
220 svc_lrectwrite(self, args)
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
221 captureobject *self;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
222 object *args;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
223 {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
224 Screencoord x1, x2, y1, y2;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
225
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
226 if (!getargs(args, "(hhhh)", &x1, &x2, &y1, &y2))
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
227 return NULL;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
228
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
229 lrectwrite(x1, x2, y1, y2, (unsigned long *) self->ob_capture);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
230
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
231 INCREF(None);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
232 return None;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
233 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
234 #endif
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
235
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
236 static object *
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1253
diff changeset
237 svc_writefile(self, args)
1179
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
238 captureobject *self;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
239 object *args;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
240 {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
241 object *file;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
242 int size;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
243
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
244 if (!getargs(args, "O", &file))
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
245 return NULL;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
246
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
247 if (!is_fileobject(file)) {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
248 err_setstr(SvError, "not a file object");
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
249 return NULL;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
250 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
251
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
252 size = self->ob_info.width * self->ob_info.height;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
253
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
254 if (fwrite(self->ob_capture, sizeof(long), size, getfilefile(file)) != size) {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
255 err_setstr(SvError, "writing failed");
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
256 return NULL;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
257 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
258
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
259 INCREF(None);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
260 return None;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
261 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
262
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
263 static object *
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
264 svc_FindVisibleRegion(self, args)
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
265 captureobject *self;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
266 object *args;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
267 {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
268 void *visible;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
269 int width;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
270
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
271 if (!getnoarg(args))
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
272 return NULL;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
273
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
274 if (svFindVisibleRegion(self->ob_svideo->ob_svideo, self->ob_capture, &visible, self->ob_info.width))
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
275 return sv_error();
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
276
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
277 if (visible == NULL) {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
278 err_setstr(SvError, "data in wrong format");
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
279 return NULL;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
280 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
281
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
282 return newcaptureobject(self->ob_svideo, visible, 0);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
283 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
284
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
285 static struct methodlist capture_methods[] = {
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1253
diff changeset
286 {"YUVtoRGB", (method)svc_YUVtoRGB},
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1253
diff changeset
287 {"RGB8toRGB32", (method)svc_RGB8toRGB32},
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1253
diff changeset
288 {"InterleaveFields", (method)svc_InterleaveFields},
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1253
diff changeset
289 {"UnlockCaptureData", (method)svc_UnlockCaptureData},
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1253
diff changeset
290 {"FindVisibleRegion", (method)svc_FindVisibleRegion},
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1253
diff changeset
291 {"GetFields", (method)svc_GetFields},
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1253
diff changeset
292 {"YUVtoYUV422DC", (method)svc_YUVtoYUV422DC},
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1253
diff changeset
293 {"YUVtoYUV422DC_quarter",(method)svc_YUVtoYUV422DC_quarter},
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1253
diff changeset
294 {"YUVtoYUV422DC_sixteenth",(method)svc_YUVtoYUV422DC_sixteenth},
1179
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
295 #ifdef USE_GL
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1253
diff changeset
296 {"lrectwrite", (method)svc_lrectwrite},
1179
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
297 #endif
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1253
diff changeset
298 {"writefile", (method)svc_writefile},
1179
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
299 {NULL, NULL} /* sentinel */
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
300 };
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
301
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
302 static void
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
303 capture_dealloc(self)
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
304 captureobject *self;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
305 {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
306 if (self->ob_capture != NULL) {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
307 if (self->ob_mustunlock)
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
308 (void) svUnlockCaptureData(self->ob_svideo->ob_svideo, self->ob_capture);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
309 self->ob_capture = NULL;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
310 DECREF(self->ob_svideo);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
311 self->ob_svideo = NULL;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
312 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
313 DEL(self);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
314 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
315
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
316 static object *
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
317 capture_getattr(self, name)
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
318 svobject *self;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
319 char *name;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
320 {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
321 return findmethod(capture_methods, (object *)self, name);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
322 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
323
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
324 typeobject Capturetype = {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
325 OB_HEAD_INIT(&Typetype)
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1253
diff changeset
326 0, /*ob_size*/
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1253
diff changeset
327 "capture", /*tp_name*/
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1253
diff changeset
328 sizeof(captureobject), /*tp_size*/
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1253
diff changeset
329 0, /*tp_itemsize*/
1179
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
330 /* methods */
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1253
diff changeset
331 (destructor)capture_dealloc, /*tp_dealloc*/
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1253
diff changeset
332 0, /*tp_print*/
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1253
diff changeset
333 (getattrfunc)capture_getattr, /*tp_getattr*/
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1253
diff changeset
334 0, /*tp_setattr*/
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1253
diff changeset
335 0, /*tp_compare*/
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1253
diff changeset
336 0, /*tp_repr*/
1179
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
337 };
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
338
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
339 static object *
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
340 newcaptureobject(self, ptr, mustunlock)
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
341 svobject *self;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
342 void *ptr;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
343 int mustunlock;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
344 {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
345 captureobject *p;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
346
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
347 p = NEWOBJ(captureobject, &Capturetype);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
348 if (p == NULL)
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
349 return NULL;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
350 p->ob_svideo = self;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
351 INCREF(self);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
352 p->ob_capture = ptr;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
353 p->ob_mustunlock = mustunlock;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
354 p->ob_info = self->ob_info;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
355 return (object *) p;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
356 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
357
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
358 static object *
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
359 sv_GetCaptureData(self, args)
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
360 svobject *self;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
361 object *args;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
362 {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
363 void *ptr;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
364 long fieldID;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
365 object *res, *c;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
366
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
367 if (!getnoarg(args))
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
368 return NULL;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
369
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
370 if (svGetCaptureData(self->ob_svideo, &ptr, &fieldID))
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
371 return sv_error();
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
372
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
373 if (ptr == NULL) {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
374 err_setstr(SvError, "no data available");
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
375 return NULL;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
376 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
377
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
378 c = newcaptureobject(self, ptr, 1);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
379 if (c == NULL)
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
380 return NULL;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
381 res = mkvalue("(Oi)", c, fieldID);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
382 DECREF(c);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
383 return res;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
384 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
385
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
386 static object *
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
387 sv_BindGLWindow(self, args)
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
388 svobject *self;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
389 object *args;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
390 {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
391 long wid;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
392 int mode;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
393
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
394 if (!getargs(args, "(ii)", &wid, &mode))
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
395 return NULL;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
396
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
397 if (svBindGLWindow(self->ob_svideo, wid, mode))
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
398 return sv_error();
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
399
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
400 INCREF(None);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
401 return None;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
402 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
403
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
404 static object *
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
405 sv_EndContinuousCapture(self, args)
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
406 svobject *self;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
407 object *args;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
408 {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
409
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
410 if (!getnoarg(args))
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
411 return NULL;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
412
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
413 if (svEndContinuousCapture(self->ob_svideo))
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
414 return sv_error();
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
415
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
416 INCREF(None);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
417 return None;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
418 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
419
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
420 static object *
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
421 sv_IsVideoDisplayed(self, args)
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
422 svobject *self;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
423 object *args;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
424 {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
425 int v;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
426
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
427 if (!getnoarg(args))
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
428 return NULL;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
429
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
430 v = svIsVideoDisplayed(self->ob_svideo);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
431 if (v == -1)
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
432 return sv_error();
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
433
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
434 return newintobject((long) v);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
435 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
436
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
437 static object *
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
438 sv_OutputOffset(self, args)
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
439 svobject *self;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
440 object *args;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
441 {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
442 int x_offset;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
443 int y_offset;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
444
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
445 if (!getargs(args, "(ii)", &x_offset, &y_offset))
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
446 return NULL;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
447
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
448 if (svOutputOffset(self->ob_svideo, x_offset, y_offset))
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
449 return sv_error();
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
450
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
451 INCREF(None);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
452 return None;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
453 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
454
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
455 static object *
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
456 sv_PutFrame(self, args)
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
457 svobject *self;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
458 object *args;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
459 {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
460 char *buffer;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
461
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
462 if (!getargs(args, "s", &buffer))
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
463 return NULL;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
464
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
465 if (svPutFrame(self->ob_svideo, buffer))
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
466 return sv_error();
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
467
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
468 INCREF(None);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
469 return None;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
470 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
471
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
472 static object *
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
473 sv_QuerySize(self, args)
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
474 svobject *self;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
475 object *args;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
476 {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
477 int w;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
478 int h;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
479 int rw;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
480 int rh;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
481
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
482 if (!getargs(args, "(ii)", &w, &h))
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
483 return NULL;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
484
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
485 if (svQuerySize(self->ob_svideo, w, h, &rw, &rh))
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
486 return sv_error();
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
487
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
488 return mkvalue("(ii)", (long) rw, (long) rh);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
489 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
490
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
491 static object *
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
492 sv_SetSize(self, args)
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
493 svobject *self;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
494 object *args;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
495 {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
496 int w;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
497 int h;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
498
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
499 if (!getargs(args, "(ii)", &w, &h))
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
500 return NULL;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
501
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
502 if (svSetSize(self->ob_svideo, w, h))
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
503 return sv_error();
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
504
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
505 INCREF(None);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
506 return None;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
507 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
508
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
509 static object *
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
510 sv_SetStdDefaults(self, args)
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
511 svobject *self;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
512 object *args;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
513 {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
514
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
515 if (!getnoarg(args))
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
516 return NULL;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
517
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
518 if (svSetStdDefaults(self->ob_svideo))
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
519 return sv_error();
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
520
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
521 INCREF(None);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
522 return None;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
523 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
524
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
525 static object *
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
526 sv_UseExclusive(self, args)
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
527 svobject *self;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
528 object *args;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
529 {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
530 boolean onoff;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
531 int mode;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
532
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
533 if (!getargs(args, "(ii)", &onoff, &mode))
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
534 return NULL;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
535
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
536 if (svUseExclusive(self->ob_svideo, onoff, mode))
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
537 return sv_error();
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
538
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
539 INCREF(None);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
540 return None;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
541 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
542
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
543 static object *
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
544 sv_WindowOffset(self, args)
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
545 svobject *self;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
546 object *args;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
547 {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
548 int x_offset;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
549 int y_offset;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
550
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
551 if (!getargs(args, "(ii)", &x_offset, &y_offset))
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
552 return NULL;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
553
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
554 if (svWindowOffset(self->ob_svideo, x_offset, y_offset))
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
555 return sv_error();
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
556
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
557 INCREF(None);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
558 return None;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
559 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
560
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
561 static object *
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
562 sv_CaptureBurst(self, args)
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
563 svobject *self;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
564 object *args;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
565 {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
566 int bytes, i;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
567 svCaptureInfo info;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
568 void *bitvector = NULL;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
569 object *videodata, *bitvecobj, *res;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
570 static object *evenitem, *odditem;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
571
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
572 if (!getargs(args, "(iiiii)", &info.format, &info.width, &info.height,
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
573 &info.size, &info.samplingrate))
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
574 return NULL;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
575
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
576 switch (info.format) {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
577 case SV_RGB8_FRAMES:
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
578 bitvector = malloc(SV_BITVEC_SIZE(info.size));
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
579 break;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
580 case SV_YUV411_FRAMES_AND_BLANKING_BUFFER:
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
581 break;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
582 default:
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
583 err_setstr(SvError, "illegal format specified");
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
584 return NULL;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
585 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
586
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
587 if (svQueryCaptureBufferSize(self->ob_svideo, &info, &bytes)) {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
588 if (bitvector)
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
589 free(bitvector);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
590 return sv_error();
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
591 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
592
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
593 videodata = newsizedstringobject(NULL, bytes);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
594 if (videodata == NULL) {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
595 if (bitvector)
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
596 free(bitvector);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
597 return NULL;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
598 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
599
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
600 /* XXX -- need to do something about the bitvector */
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
601 if (svCaptureBurst(self->ob_svideo, &info, getstringvalue(videodata),
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
602 bitvector)) {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
603 if (bitvector)
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
604 free(bitvector);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
605 DECREF(videodata);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
606 return sv_error();
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
607 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
608
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
609 if (bitvector) {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
610 if (evenitem == NULL) {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
611 evenitem = newintobject(0);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
612 if (evenitem == NULL) {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
613 free(bitvector);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
614 DECREF(videodata);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
615 return NULL;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
616 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
617 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
618 if (odditem == NULL) {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
619 odditem = newintobject(1);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
620 if (odditem == NULL) {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
621 free(bitvector);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
622 DECREF(videodata);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
623 return NULL;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
624 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
625 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
626 bitvecobj = newtupleobject(2 * info.size);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
627 if (bitvecobj == NULL) {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
628 free(bitvecobj);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
629 DECREF(videodata);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
630 return NULL;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
631 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
632 for (i = 0; i < 2 * info.size; i++) {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
633 if (SV_GET_FIELD(bitvector, i) == SV_EVEN_FIELD) {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
634 INCREF(evenitem);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
635 settupleitem(bitvecobj, i, evenitem);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
636 } else {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
637 INCREF(odditem);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
638 settupleitem(bitvecobj, i, odditem);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
639 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
640 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
641 free(bitvector);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
642 } else {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
643 bitvecobj = None;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
644 INCREF(None);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
645 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
646
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
647 res = mkvalue("((iiiii)OO)", info.format, info.width, info.height,
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
648 info.size, info.samplingrate, videodata, bitvecobj);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
649 DECREF(videodata);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
650 DECREF(bitvecobj);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
651 return res;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
652 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
653
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
654 static object *
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
655 sv_CaptureOneFrame(self, args)
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
656 svobject *self;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
657 object *args;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
658 {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
659 svCaptureInfo info;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
660 int format, width, height;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
661 int bytes;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
662 object *videodata, *res;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
663
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
664 if (!getargs(args, "(iii)", &format, &width, &height))
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
665 return NULL;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
666 info.format = format;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
667 info.width = width;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
668 info.height = height;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
669 info.size = 0;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
670 info.samplingrate = 0;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
671 if (svQueryCaptureBufferSize(self->ob_svideo, &info, &bytes))
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
672 return sv_error();
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
673 videodata = newsizedstringobject(NULL, bytes);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
674 if (videodata == NULL)
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
675 return NULL;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
676 if (svCaptureOneFrame(self->ob_svideo, format, &width, &height,
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
677 getstringvalue(videodata))) {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
678 DECREF(videodata);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
679 return sv_error();
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
680 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
681
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
682 res = mkvalue("(iiO)", width, height, videodata);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
683 DECREF(videodata);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
684 return res;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
685 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
686
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
687 static object *
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
688 sv_InitContinuousCapture(self, args)
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
689 svobject *self;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
690 object *args;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
691 {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
692 svCaptureInfo info;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
693
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
694 if (!getargs(args, "(iiiii)", &info.format, &info.width, &info.height,
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
695 &info.size, &info.samplingrate))
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
696 return NULL;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
697
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
698 if (svInitContinuousCapture(self->ob_svideo, &info))
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
699 return sv_error();
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
700
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
701 self->ob_info = info;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
702
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
703 return mkvalue("(iiiii)", info.format, info.width, info.height,
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
704 info.size, info.samplingrate);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
705 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
706
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
707 static object *
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
708 sv_LoadMap(self, args)
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
709 svobject *self;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
710 object *args;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
711 {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
712 object *rgb, *v, *cell;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
713 rgb_tuple *mapp;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
714 int maptype;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
715 int i, j; /* indices */
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
716
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
717 if (!getargs(args, "(iO)", &maptype, &rgb))
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
718 return NULL;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
719 if (!is_listobject(rgb) || getlistsize(rgb) != 256) {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
720 err_badarg();
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
721 return NULL;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
722 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
723 mapp = NEW(rgb_tuple, 256);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
724 if (mapp == NULL)
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
725 return err_nomem();
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
726 for (i = 0; i < 256; i++) {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
727 v = getlistitem(rgb, i);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
728 if (!is_tupleobject(v) || gettuplesize(v) != 3) {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
729 DEL(mapp);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
730 err_badarg();
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
731 return NULL;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
732 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
733 for (j = 0; j < 3; j++) {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
734 cell = gettupleitem(v, j);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
735 if (!is_intobject(cell)) {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
736 DEL(mapp);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
737 err_badarg();
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
738 return NULL;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
739 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
740 switch (j) {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
741 case 0: mapp[i].red = getintvalue(cell); break;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
742 case 1: mapp[i].blue = getintvalue(cell); break;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
743 case 2: mapp[i].green = getintvalue(cell); break;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
744 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
745 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
746 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
747
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
748 if (svLoadMap(self->ob_svideo, maptype, mapp)) {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
749 DEL(mapp);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
750 return sv_error();
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
751 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
752
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
753 DEL(mapp);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
754
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
755 INCREF(None);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
756 return None;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
757 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
758
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
759 static object *
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
760 sv_CloseVideo(self, args)
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
761 svobject *self;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
762 object *args;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
763 {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
764 if (!getnoarg(args))
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
765 return NULL;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
766
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
767 if (svCloseVideo(self->ob_svideo))
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
768 return sv_error();
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
769 self->ob_svideo = NULL;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
770
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
771 INCREF(None);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
772 return None;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
773 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
774
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
775 static object *
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
776 doParams(self, args, func, modified)
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
777 svobject *self;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
778 object *args;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
779 int (*func)(SV_nodeP, long *, int);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
780 int modified;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
781 {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
782 object *list, *v;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
783 long *PVbuffer;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
784 long length;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
785 int i;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
786
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
787 if (!getargs(args, "O", &list))
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
788 return NULL;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
789 if (!is_listobject(list)) {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
790 err_badarg();
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
791 return NULL;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
792 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
793 length = getlistsize(list);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
794 PVbuffer = NEW(long, length);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
795 if (PVbuffer == NULL)
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
796 return err_nomem();
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
797 for (i = 0; i < length; i++) {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
798 v = getlistitem(list, i);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
799 if (!is_intobject(v)) {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
800 DEL(PVbuffer);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
801 err_badarg();
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
802 return NULL;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
803 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
804 PVbuffer[i] = getintvalue(v);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
805 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
806
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
807 if ((*func)(self->ob_svideo, PVbuffer, length)) {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
808 DEL(PVbuffer);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
809 return sv_error();
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
810 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
811
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
812 if (modified) {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
813 for (i = 0; i < length; i++)
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
814 setlistitem(list, i, newintobject(PVbuffer[i]));
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
815 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
816
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
817 DEL(PVbuffer);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
818
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
819 INCREF(None);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
820 return None;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
821 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
822
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
823 static object *
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
824 sv_GetParam(self, args)
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
825 object *self, *args;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
826 {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
827 return doParams(self, args, svGetParam, 1);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
828 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
829
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
830 static object *
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
831 sv_GetParamRange(self, args)
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
832 object *self, *args;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
833 {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
834 return doParams(self, args, svGetParamRange, 1);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
835 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
836
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
837 static object *
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
838 sv_SetParam(self, args)
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
839 object *self, *args;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
840 {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
841 return doParams(self, args, svSetParam, 0);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
842 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
843
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
844 static struct methodlist svideo_methods[] = {
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1253
diff changeset
845 {"BindGLWindow", (method)sv_BindGLWindow},
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1253
diff changeset
846 {"EndContinuousCapture",(method)sv_EndContinuousCapture},
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1253
diff changeset
847 {"IsVideoDisplayed", (method)sv_IsVideoDisplayed},
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1253
diff changeset
848 {"OutputOffset", (method)sv_OutputOffset},
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1253
diff changeset
849 {"PutFrame", (method)sv_PutFrame},
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1253
diff changeset
850 {"QuerySize", (method)sv_QuerySize},
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1253
diff changeset
851 {"SetSize", (method)sv_SetSize},
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1253
diff changeset
852 {"SetStdDefaults", (method)sv_SetStdDefaults},
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1253
diff changeset
853 {"UseExclusive", (method)sv_UseExclusive},
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1253
diff changeset
854 {"WindowOffset", (method)sv_WindowOffset},
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1253
diff changeset
855 {"InitContinuousCapture",(method)sv_InitContinuousCapture},
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1253
diff changeset
856 {"CaptureBurst", (method)sv_CaptureBurst},
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1253
diff changeset
857 {"CaptureOneFrame", (method)sv_CaptureOneFrame},
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1253
diff changeset
858 {"GetCaptureData", (method)sv_GetCaptureData},
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1253
diff changeset
859 {"CloseVideo", (method)sv_CloseVideo},
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1253
diff changeset
860 {"LoadMap", (method)sv_LoadMap},
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1253
diff changeset
861 {"GetParam", (method)sv_GetParam},
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1253
diff changeset
862 {"GetParamRange", (method)sv_GetParamRange},
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1253
diff changeset
863 {"SetParam", (method)sv_SetParam},
1179
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
864 {NULL, NULL} /* sentinel */
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
865 };
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
866
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
867 static object *
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
868 sv_conversion(self, args, function, inputfactor, factor)
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
869 object *self, *args;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
870 void (*function)();
1253
685b31fe89c6 Added conversion routines to sv module.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1207
diff changeset
871 int inputfactor;
685b31fe89c6 Added conversion routines to sv module.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1207
diff changeset
872 float factor;
1179
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
873 {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
874 int invert, width, height, inputlength;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
875 char *input;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
876 object *output;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
877
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
878 if (!getargs(args, "(is#ii)", &invert, &input, &inputlength, &width, &height))
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
879 return NULL;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
880
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
881 if (width * height * inputfactor > inputlength) {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
882 err_setstr(SvError, "input buffer not long enough");
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
883 return NULL;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
884 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
885
1253
685b31fe89c6 Added conversion routines to sv module.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1207
diff changeset
886 output = newsizedstringobject(NULL, (int) (width * height * factor));
1179
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
887 if (output == NULL)
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
888 return NULL;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
889
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
890 (*function)(invert, input, getstringvalue(output), width, height);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
891
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
892 return output;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
893 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
894
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
895 static object *
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
896 sv_InterleaveFields(self, args)
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
897 object *self, *args;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
898 {
1253
685b31fe89c6 Added conversion routines to sv module.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1207
diff changeset
899 return sv_conversion(self, args, svInterleaveFields, 1, 1.0);
1179
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
900 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
901
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
902 static object *
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
903 sv_RGB8toRGB32(self, args)
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
904 object *self, *args;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
905 {
1253
685b31fe89c6 Added conversion routines to sv module.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1207
diff changeset
906 return sv_conversion(self, args, svRGB8toRGB32, 1, (float) sizeof(long));
1179
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
907 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
908
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
909 static object *
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
910 sv_YUVtoRGB(self, args)
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
911 object *self, *args;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
912 {
1253
685b31fe89c6 Added conversion routines to sv module.
Sjoerd Mullender <sjoerd@acm.org>
parents: 1207
diff changeset
913 return sv_conversion(self, args, svYUVtoRGB, 2, (float) sizeof(long));
1179
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
914 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
915
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
916 static void
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
917 svideo_dealloc(self)
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
918 svobject *self;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
919 {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
920 if (self->ob_svideo != NULL)
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
921 (void) svCloseVideo(self->ob_svideo);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
922 DEL(self);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
923 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
924
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
925 static object *
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
926 svideo_getattr(self, name)
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
927 svobject *self;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
928 char *name;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
929 {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
930 return findmethod(svideo_methods, (object *)self, name);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
931 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
932
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
933 typeobject Svtype = {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
934 OB_HEAD_INIT(&Typetype)
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
935 0, /*ob_size*/
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
936 "sv", /*tp_name*/
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
937 sizeof(svobject), /*tp_size*/
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
938 0, /*tp_itemsize*/
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
939 /* methods */
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1253
diff changeset
940 (destructor)svideo_dealloc, /*tp_dealloc*/
1179
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
941 0, /*tp_print*/
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1253
diff changeset
942 (getattrfunc)svideo_getattr, /*tp_getattr*/
1179
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
943 0, /*tp_setattr*/
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
944 0, /*tp_compare*/
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
945 0, /*tp_repr*/
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
946 };
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
947
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
948 static object *
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
949 newsvobject(svp)
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
950 SV_nodeP svp;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
951 {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
952 svobject *p;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
953
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
954 p = NEWOBJ(svobject, &Svtype);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
955 if (p == NULL)
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
956 return NULL;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
957 p->ob_svideo = svp;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
958 p->ob_info.format = 0;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
959 p->ob_info.size = 0;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
960 p->ob_info.width = 0;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
961 p->ob_info.height = 0;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
962 p->ob_info.samplingrate = 0;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
963 return (object *) p;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
964 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
965
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
966 static object *
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
967 sv_OpenVideo(self, args)
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
968 object *self, *args;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
969 {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
970 SV_nodeP svp;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
971
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
972 if (!getnoarg(args))
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
973 return NULL;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
974
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
975 svp = svOpenVideo();
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
976 if (svp == NULL)
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
977 return sv_error();
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
978
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
979 return newsvobject(svp);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
980 }
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
981
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
982 static struct methodlist sv_methods[] = {
1746
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1253
diff changeset
983 {"InterleaveFields", (method)sv_InterleaveFields},
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1253
diff changeset
984 {"RGB8toRGB32", (method)sv_RGB8toRGB32},
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1253
diff changeset
985 {"YUVtoRGB", (method)sv_YUVtoRGB},
1940892d2fe3 Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents: 1253
diff changeset
986 {"OpenVideo", (method)sv_OpenVideo},
1179
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
987 {NULL, NULL} /* Sentinel */
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
988 };
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
989
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
990 void
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
991 initsv()
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
992 {
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
993 object *m, *d;
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
994
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
995 m = initmodule("sv", sv_methods);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
996 d = getmoduledict(m);
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
997
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
998 SvError = newstringobject("sv.error");
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
999 if (SvError == NULL || dictinsert(d, "error", SvError) != 0)
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1000 fatal("can't define sv.error");
9ae65ee09735 Various changes.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1001 }