annotate Modules/svmodule.c @ 1590:ac2e5cc29949 legacy-trunk

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