| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | /**********************************************************
 | 
					
						
							| 
									
										
										
										
											1995-01-04 19:10:35 +00:00
										 |  |  | Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, | 
					
						
							|  |  |  | The Netherlands. | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |                         All Rights Reserved | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-10-25 14:44:06 +00:00
										 |  |  | Permission to use, copy, modify, and distribute this software and its | 
					
						
							|  |  |  | documentation for any purpose and without fee is hereby granted, | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | provided that the above copyright notice appear in all copies and that | 
					
						
							| 
									
										
										
										
											1996-10-25 14:44:06 +00:00
										 |  |  | both that copyright notice and this permission notice appear in | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | supporting documentation, and that the names of Stichting Mathematisch | 
					
						
							| 
									
										
										
										
											1996-10-25 14:44:06 +00:00
										 |  |  | Centrum or CWI or Corporation for National Research Initiatives or | 
					
						
							|  |  |  | CNRI not be used in advertising or publicity pertaining to | 
					
						
							|  |  |  | distribution of the software without specific, written prior | 
					
						
							|  |  |  | permission. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | While CWI is the initial source for this software, a modified version | 
					
						
							|  |  |  | is made available by the Corporation for National Research Initiatives | 
					
						
							|  |  |  | (CNRI) at the Internet address ftp://ftp.python.org.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH | 
					
						
							|  |  |  | REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF | 
					
						
							|  |  |  | MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH | 
					
						
							|  |  |  | CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL | 
					
						
							|  |  |  | DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR | 
					
						
							|  |  |  | PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER | 
					
						
							|  |  |  | TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR | 
					
						
							|  |  |  | PERFORMANCE OF THIS SOFTWARE. | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | ******************************************************************/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* SV module -- interface to the Indigo video board */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-17 20:43:55 +00:00
										 |  |  | /* WARNING! This module is for hardware that we don't have any more,
 | 
					
						
							|  |  |  |    so it hasn't been tested.  It has been converted to the new coding | 
					
						
							|  |  |  |    style, and it is possible that this conversion has broken something | 
					
						
							|  |  |  |    -- user beware! */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | #include <sys/time.h>
 | 
					
						
							|  |  |  | #include <svideo.h>
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | #include "Python.h"
 | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | #include "compile.h"
 | 
					
						
							| 
									
										
										
										
											1993-03-16 12:25:30 +00:00
										 |  |  | #include "yuv.h"		/* for YUV conversion functions */
 | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | typedef struct { | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	PyObject_HEAD | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 	SV_nodeP ob_svideo; | 
					
						
							|  |  |  | 	svCaptureInfo ob_info; | 
					
						
							|  |  |  | } svobject; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | typedef struct { | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	PyObject_HEAD | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 	void *ob_capture; | 
					
						
							|  |  |  | 	int ob_mustunlock; | 
					
						
							|  |  |  | 	svCaptureInfo ob_info; | 
					
						
							|  |  |  | 	svobject *ob_svideo; | 
					
						
							|  |  |  | } captureobject; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | static PyObject *SvError;		/* exception sv.error */ | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | static PyObject *newcaptureobject Py_PROTO((svobject *, void *, int)); | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | /* Set a SV-specific error from svideo_errno and return NULL */ | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | sv_error() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	PyErr_SetString(SvError, svStrerror(svideo_errno)); | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 	return NULL; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | svc_conversion(self, args, function, factor) | 
					
						
							|  |  |  | 	captureobject *self; | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	PyObject *args; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 	void (*function)(); | 
					
						
							| 
									
										
										
										
											1993-03-16 12:25:30 +00:00
										 |  |  | 	float factor; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	PyObject *output; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 	int invert; | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	char* outstr; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	if (!PyArg_Parse(args, "i", &invert)) | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 		return NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	if (!(output = PyString_FromStringAndSize( | 
					
						
							|  |  |  | 		NULL, | 
					
						
							|  |  |  | 		(int)(self->ob_info.width * self->ob_info.height * factor)))) | 
					
						
							|  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 		return NULL; | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	if (!(outstr = PyString_AsString(output))) { | 
					
						
							|  |  |  | 		Py_DECREF(output); | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	(*function)((boolean)invert, self->ob_capture, | 
					
						
							|  |  |  | 		    outstr, | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 		    self->ob_info.width, self->ob_info.height); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return output; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1993-03-16 12:25:30 +00:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * 3 functions to convert from Starter Video YUV 4:1:1 format to | 
					
						
							|  |  |  |  * Compression Library 4:2:2 Duplicate Chroma format. | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1993-03-16 12:25:30 +00:00
										 |  |  | svc_YUVtoYUV422DC(self, args) | 
					
						
							|  |  |  | 	captureobject *self; | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	PyObject *args; | 
					
						
							| 
									
										
										
										
											1993-03-16 12:25:30 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	if (self->ob_info.format != SV_YUV411_FRAMES) { | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 		PyErr_SetString(SvError, "data has bad format"); | 
					
						
							| 
									
										
										
										
											1993-03-16 12:25:30 +00:00
										 |  |  | 		return NULL; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return svc_conversion(self, args, yuv_sv411_to_cl422dc, 2.0); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1993-03-16 12:25:30 +00:00
										 |  |  | svc_YUVtoYUV422DC_quarter(self, args) | 
					
						
							|  |  |  | 	captureobject *self; | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	PyObject *args; | 
					
						
							| 
									
										
										
										
											1993-03-16 12:25:30 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	if (self->ob_info.format != SV_YUV411_FRAMES) { | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 		PyErr_SetString(SvError, "data has bad format"); | 
					
						
							| 
									
										
										
										
											1993-03-16 12:25:30 +00:00
										 |  |  | 		return NULL; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	return svc_conversion(self, args, | 
					
						
							|  |  |  | 			      yuv_sv411_to_cl422dc_quartersize, 0.5); | 
					
						
							| 
									
										
										
										
											1993-03-16 12:25:30 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1993-03-16 12:25:30 +00:00
										 |  |  | svc_YUVtoYUV422DC_sixteenth(self, args) | 
					
						
							|  |  |  | 	captureobject *self; | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	PyObject *args; | 
					
						
							| 
									
										
										
										
											1993-03-16 12:25:30 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	if (self->ob_info.format != SV_YUV411_FRAMES) { | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 		PyErr_SetString(SvError, "data has bad format"); | 
					
						
							| 
									
										
										
										
											1993-03-16 12:25:30 +00:00
										 |  |  | 		return NULL; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	return svc_conversion(self, args, | 
					
						
							|  |  |  | 			      yuv_sv411_to_cl422dc_sixteenthsize, 0.125); | 
					
						
							| 
									
										
										
										
											1993-03-16 12:25:30 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | svc_YUVtoRGB(self, args) | 
					
						
							|  |  |  | 	captureobject *self; | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	PyObject *args; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	switch (self->ob_info.format) { | 
					
						
							|  |  |  | 	case SV_YUV411_FRAMES: | 
					
						
							|  |  |  | 	case SV_YUV411_FRAMES_AND_BLANKING_BUFFER: | 
					
						
							|  |  |  | 		break; | 
					
						
							|  |  |  | 	default: | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 		PyErr_SetString(SvError, "data had bad format"); | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 		return NULL; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											1993-03-16 12:25:30 +00:00
										 |  |  | 	return svc_conversion(self, args, svYUVtoRGB, (float) sizeof(long)); | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | svc_RGB8toRGB32(self, args) | 
					
						
							|  |  |  | 	captureobject *self; | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	PyObject *args; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	if (self->ob_info.format != SV_RGB8_FRAMES) { | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 		PyErr_SetString(SvError, "data has bad format"); | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 		return NULL; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											1993-03-16 12:25:30 +00:00
										 |  |  | 	return svc_conversion(self, args, svRGB8toRGB32, (float) sizeof(long)); | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | svc_InterleaveFields(self, args) | 
					
						
							|  |  |  | 	captureobject *self; | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	PyObject *args; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	if (self->ob_info.format != SV_RGB8_FRAMES) { | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 		PyErr_SetString(SvError, "data has bad format"); | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 		return NULL; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											1993-03-16 12:25:30 +00:00
										 |  |  | 	return svc_conversion(self, args, svInterleaveFields, 1.0); | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | svc_GetFields(self, args) | 
					
						
							|  |  |  | 	captureobject *self; | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	PyObject *args; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	PyObject *f1 = NULL; | 
					
						
							|  |  |  | 	PyObject *f2 = NULL; | 
					
						
							|  |  |  | 	PyObject *ret = NULL; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 	int fieldsize; | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	char* obcapture; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	if (self->ob_info.format != SV_RGB8_FRAMES) { | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 		PyErr_SetString(SvError, "data has bad format"); | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 		return NULL; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	fieldsize = self->ob_info.width * self->ob_info.height / 2; | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	obcapture = (char*)self->ob_capture; | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	if (!(f1 = PyString_FromStringAndSize(obcapture, fieldsize))) | 
					
						
							|  |  |  | 		goto finally; | 
					
						
							|  |  |  | 	if (!(f2 = PyString_FromStringAndSize(obcapture + fieldsize, | 
					
						
							|  |  |  | 					      fieldsize))) | 
					
						
							|  |  |  | 		goto finally; | 
					
						
							|  |  |  | 	ret = Py_BuildValue("(OO)", f1, f2); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   finally: | 
					
						
							|  |  |  | 	Py_XDECREF(f1); | 
					
						
							|  |  |  | 	Py_XDECREF(f2); | 
					
						
							| 
									
										
										
										
											1993-02-05 09:46:15 +00:00
										 |  |  | 	return ret; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 	 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | svc_UnlockCaptureData(self, args) | 
					
						
							|  |  |  | 	captureobject *self; | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	PyObject *args; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	if (!PyArg_Parse(args, "")) | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 		return NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (!self->ob_mustunlock) { | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 		PyErr_SetString(SvError, "buffer should not be unlocked"); | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 		return NULL; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (svUnlockCaptureData(self->ob_svideo->ob_svideo, self->ob_capture)) | 
					
						
							|  |  |  | 		return sv_error(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	self->ob_mustunlock = 0; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	Py_INCREF(Py_None); | 
					
						
							|  |  |  | 	return Py_None; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifdef USE_GL
 | 
					
						
							|  |  |  | #include <gl.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | svc_lrectwrite(self, args) | 
					
						
							|  |  |  | 	captureobject *self; | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	PyObject *args; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	Screencoord x1, x2, y1, y2; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	if (!PyArg_Parse(args, "(hhhh)", &x1, &x2, &y1, &y2)) | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 		return NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	lrectwrite(x1, x2, y1, y2, (unsigned long *) self->ob_capture); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	Py_INCREF(Py_None); | 
					
						
							|  |  |  | 	return Py_None; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | } | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1994-08-01 11:34:53 +00:00
										 |  |  | svc_writefile(self, args) | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 	captureobject *self; | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	PyObject *args; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	PyObject *file; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 	int size; | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	FILE* fp; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	if (!PyArg_Parse(args, "O", &file)) | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 		return NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	if (!PyFile_Check(file)) { | 
					
						
							|  |  |  | 		PyErr_SetString(SvError, "not a file object"); | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 		return NULL; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	if (!(fp = PyFile_AsFile(file))) | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 	size = self->ob_info.width * self->ob_info.height; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	if (fwrite(self->ob_capture, sizeof(long), size, fp) != size) { | 
					
						
							|  |  |  | 		PyErr_SetString(SvError, "writing failed"); | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 		return NULL; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	Py_INCREF(Py_None); | 
					
						
							|  |  |  | 	return Py_None; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | svc_FindVisibleRegion(self, args) | 
					
						
							|  |  |  | 	captureobject *self; | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	PyObject *args; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	void *visible; | 
					
						
							|  |  |  | 	int width; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	if (!PyArg_Parse(args, "")) | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 		return NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	if (svFindVisibleRegion(self->ob_svideo->ob_svideo, | 
					
						
							|  |  |  | 				self->ob_capture, &visible, | 
					
						
							|  |  |  | 				self->ob_info.width)) | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 		return sv_error(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (visible == NULL) { | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 		PyErr_SetString(SvError, "data in wrong format"); | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 		return NULL; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return newcaptureobject(self->ob_svideo, visible, 0); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | static PyMethodDef capture_methods[] = { | 
					
						
							|  |  |  | 	{"YUVtoRGB",		(PyCFunction)svc_YUVtoRGB}, | 
					
						
							|  |  |  | 	{"RGB8toRGB32",		(PyCFunction)svc_RGB8toRGB32}, | 
					
						
							|  |  |  | 	{"InterleaveFields",	(PyCFunction)svc_InterleaveFields}, | 
					
						
							|  |  |  | 	{"UnlockCaptureData",	(PyCFunction)svc_UnlockCaptureData}, | 
					
						
							|  |  |  | 	{"FindVisibleRegion",	(PyCFunction)svc_FindVisibleRegion}, | 
					
						
							|  |  |  | 	{"GetFields",		(PyCFunction)svc_GetFields}, | 
					
						
							|  |  |  | 	{"YUVtoYUV422DC",	(PyCFunction)svc_YUVtoYUV422DC}, | 
					
						
							|  |  |  | 	{"YUVtoYUV422DC_quarter",(PyCFunction)svc_YUVtoYUV422DC_quarter}, | 
					
						
							|  |  |  | 	{"YUVtoYUV422DC_sixteenth",(PyCFunction)svc_YUVtoYUV422DC_sixteenth}, | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | #ifdef USE_GL
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	{"lrectwrite",		(PyCFunction)svc_lrectwrite}, | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	{"writefile",		(PyCFunction)svc_writefile}, | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 	{NULL,			NULL} 		/* sentinel */ | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static void | 
					
						
							|  |  |  | capture_dealloc(self) | 
					
						
							|  |  |  | 	captureobject *self; | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	if (self->ob_capture != NULL) { | 
					
						
							|  |  |  | 		if (self->ob_mustunlock) | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 			(void)svUnlockCaptureData(self->ob_svideo->ob_svideo, | 
					
						
							|  |  |  | 						  self->ob_capture); | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 		self->ob_capture = NULL; | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 		Py_DECREF(self->ob_svideo); | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 		self->ob_svideo = NULL; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	PyMem_DEL(self); | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | capture_getattr(self, name) | 
					
						
							|  |  |  | 	svobject *self; | 
					
						
							|  |  |  | 	char *name; | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	return Py_FindMethod(capture_methods, (PyObject *)self, name); | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | PyTypeObject Capturetype = { | 
					
						
							|  |  |  | 	PyObject_HEAD_INIT(&PyType_Type) | 
					
						
							| 
									
										
										
										
											1994-08-01 11:34:53 +00:00
										 |  |  | 	0,				/*ob_size*/ | 
					
						
							|  |  |  | 	"capture",			/*tp_name*/ | 
					
						
							|  |  |  | 	sizeof(captureobject),		/*tp_size*/ | 
					
						
							|  |  |  | 	0,				/*tp_itemsize*/ | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 	/* methods */ | 
					
						
							| 
									
										
										
										
											1994-08-01 11:34:53 +00:00
										 |  |  | 	(destructor)capture_dealloc,	/*tp_dealloc*/ | 
					
						
							|  |  |  | 	0,				/*tp_print*/ | 
					
						
							|  |  |  | 	(getattrfunc)capture_getattr,	/*tp_getattr*/ | 
					
						
							|  |  |  | 	0,				/*tp_setattr*/ | 
					
						
							|  |  |  | 	0,				/*tp_compare*/ | 
					
						
							|  |  |  | 	0,				/*tp_repr*/ | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | newcaptureobject(self, ptr, mustunlock) | 
					
						
							|  |  |  | 	svobject *self; | 
					
						
							|  |  |  | 	void *ptr; | 
					
						
							|  |  |  | 	int mustunlock; | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	captureobject *p; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	p = PyObject_NEW(captureobject, &Capturetype); | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 	if (p == NULL) | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							|  |  |  | 	p->ob_svideo = self; | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	Py_INCREF(self); | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 	p->ob_capture = ptr; | 
					
						
							|  |  |  | 	p->ob_mustunlock = mustunlock; | 
					
						
							|  |  |  | 	p->ob_info = self->ob_info; | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	return (PyObject *) p; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | sv_GetCaptureData(self, args) | 
					
						
							|  |  |  | 	svobject *self; | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	PyObject *args; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	void *ptr; | 
					
						
							|  |  |  | 	long fieldID; | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	PyObject *res, *c; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	if (!PyArg_Parse(args, "")) | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 		return NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (svGetCaptureData(self->ob_svideo, &ptr, &fieldID)) | 
					
						
							|  |  |  | 		return sv_error(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (ptr == NULL) { | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 		PyErr_SetString(SvError, "no data available"); | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 		return NULL; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	c = newcaptureobject(self, ptr, 1); | 
					
						
							|  |  |  | 	if (c == NULL) | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	res = Py_BuildValue("(Oi)", c, fieldID); | 
					
						
							|  |  |  | 	Py_DECREF(c); | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 	return res; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | sv_BindGLWindow(self, args) | 
					
						
							|  |  |  | 	svobject *self; | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	PyObject *args; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	long wid; | 
					
						
							|  |  |  | 	int mode; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	if (!PyArg_Parse(args, "(ii)", &wid, &mode)) | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 		return NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (svBindGLWindow(self->ob_svideo, wid, mode)) | 
					
						
							|  |  |  | 		return sv_error(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	Py_INCREF(Py_None); | 
					
						
							|  |  |  | 	return Py_None; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | sv_EndContinuousCapture(self, args) | 
					
						
							|  |  |  | 	svobject *self; | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	PyObject *args; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	if (!PyArg_Parse(args, "")) | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 		return NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (svEndContinuousCapture(self->ob_svideo)) | 
					
						
							|  |  |  | 		return sv_error(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	Py_INCREF(Py_None); | 
					
						
							|  |  |  | 	return Py_None; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | sv_IsVideoDisplayed(self, args) | 
					
						
							|  |  |  | 	svobject *self; | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	PyObject *args; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	int v; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	if (!PyArg_Parse(args, "")) | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 		return NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	v = svIsVideoDisplayed(self->ob_svideo); | 
					
						
							|  |  |  | 	if (v == -1) | 
					
						
							|  |  |  | 		return sv_error(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	return PyInt_FromLong((long) v); | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | sv_OutputOffset(self, args) | 
					
						
							|  |  |  | 	svobject *self; | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	PyObject *args; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	int x_offset; | 
					
						
							|  |  |  | 	int y_offset; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	if (!PyArg_Parse(args, "(ii)", &x_offset, &y_offset)) | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 		return NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (svOutputOffset(self->ob_svideo, x_offset, y_offset)) | 
					
						
							|  |  |  | 		return sv_error(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	Py_INCREF(Py_None); | 
					
						
							|  |  |  | 	return Py_None; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | sv_PutFrame(self, args) | 
					
						
							|  |  |  | 	svobject *self; | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	PyObject *args; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	char *buffer; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	if (!PyArg_Parse(args, "s", &buffer)) | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 		return NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (svPutFrame(self->ob_svideo, buffer)) | 
					
						
							|  |  |  | 		return sv_error(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	Py_INCREF(Py_None); | 
					
						
							|  |  |  | 	return Py_None; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | sv_QuerySize(self, args) | 
					
						
							|  |  |  | 	svobject *self; | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	PyObject *args; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	int w; | 
					
						
							|  |  |  | 	int h; | 
					
						
							|  |  |  | 	int rw; | 
					
						
							|  |  |  | 	int rh; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	if (!PyArg_Parse(args, "(ii)", &w, &h)) | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 		return NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (svQuerySize(self->ob_svideo, w, h, &rw, &rh)) | 
					
						
							|  |  |  | 		return sv_error(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	return Py_BuildValue("(ii)", (long) rw, (long) rh); | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | sv_SetSize(self, args) | 
					
						
							|  |  |  | 	svobject *self; | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	PyObject *args; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	int w; | 
					
						
							|  |  |  | 	int h; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	if (!PyArg_Parse(args, "(ii)", &w, &h)) | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 		return NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (svSetSize(self->ob_svideo, w, h)) | 
					
						
							|  |  |  | 		return sv_error(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	Py_INCREF(Py_None); | 
					
						
							|  |  |  | 	return Py_None; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | sv_SetStdDefaults(self, args) | 
					
						
							|  |  |  | 	svobject *self; | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	PyObject *args; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	if (!PyArg_Parse(args, "")) | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 		return NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (svSetStdDefaults(self->ob_svideo)) | 
					
						
							|  |  |  | 		return sv_error(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	Py_INCREF(Py_None); | 
					
						
							|  |  |  | 	return Py_None; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | sv_UseExclusive(self, args) | 
					
						
							|  |  |  | 	svobject *self; | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	PyObject *args; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	boolean onoff; | 
					
						
							|  |  |  | 	int mode; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	if (!PyArg_Parse(args, "(ii)", &onoff, &mode)) | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 		return NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (svUseExclusive(self->ob_svideo, onoff, mode)) | 
					
						
							|  |  |  | 		return sv_error(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	Py_INCREF(Py_None); | 
					
						
							|  |  |  | 	return Py_None; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | sv_WindowOffset(self, args) | 
					
						
							|  |  |  | 	svobject *self; | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	PyObject *args; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	int x_offset; | 
					
						
							|  |  |  | 	int y_offset; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	if (!PyArg_Parse(args, "(ii)", &x_offset, &y_offset)) | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 		return NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (svWindowOffset(self->ob_svideo, x_offset, y_offset)) | 
					
						
							|  |  |  | 		return sv_error(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	Py_INCREF(Py_None); | 
					
						
							|  |  |  | 	return Py_None; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | sv_CaptureBurst(self, args) | 
					
						
							|  |  |  | 	svobject *self; | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	PyObject *args; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	int bytes, i; | 
					
						
							|  |  |  | 	svCaptureInfo info; | 
					
						
							|  |  |  | 	void *bitvector = NULL; | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	PyObject *videodata = NULL; | 
					
						
							|  |  |  | 	PyObject *bitvecobj = NULL; | 
					
						
							| 
									
										
										
										
											1996-12-17 20:43:55 +00:00
										 |  |  | 	PyObject *res = NULL; | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	static PyObject *evenitem, *odditem; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (!PyArg_Parse(args, "(iiiii)", &info.format, | 
					
						
							|  |  |  | 			 &info.width, &info.height, | 
					
						
							|  |  |  | 			 &info.size, &info.samplingrate)) | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 		return NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	switch (info.format) { | 
					
						
							|  |  |  | 	case SV_RGB8_FRAMES: | 
					
						
							|  |  |  | 		bitvector = malloc(SV_BITVEC_SIZE(info.size)); | 
					
						
							|  |  |  | 		break; | 
					
						
							|  |  |  | 	case SV_YUV411_FRAMES_AND_BLANKING_BUFFER: | 
					
						
							|  |  |  | 		break; | 
					
						
							|  |  |  | 	default: | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 		PyErr_SetString(SvError, "illegal format specified"); | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 		return NULL; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (svQueryCaptureBufferSize(self->ob_svideo, &info, &bytes)) { | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 		res = sv_error(); | 
					
						
							|  |  |  | 		goto finally; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	if (!(videodata = PyString_FromStringAndSize(NULL, bytes))) | 
					
						
							|  |  |  | 		goto finally; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	/* XXX -- need to do something about the bitvector */ | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	{ | 
					
						
							|  |  |  | 		char* str = PyString_AsString(videodata); | 
					
						
							|  |  |  | 		if (!str) | 
					
						
							|  |  |  | 			goto finally; | 
					
						
							|  |  |  | 		 | 
					
						
							|  |  |  | 		if (svCaptureBurst(self->ob_svideo, &info, str, bitvector)) { | 
					
						
							|  |  |  | 			res = sv_error(); | 
					
						
							|  |  |  | 			goto finally; | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (bitvector) { | 
					
						
							|  |  |  | 		if (evenitem == NULL) { | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 			if (!(evenitem = PyInt_FromLong(0))) | 
					
						
							|  |  |  | 				goto finally; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 		} | 
					
						
							|  |  |  | 		if (odditem == NULL) { | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 			if (!(odditem = PyInt_FromLong(1))) | 
					
						
							|  |  |  | 				goto finally; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 		if (!(bitvecobj = PyTuple_New(2 * info.size))) | 
					
						
							|  |  |  | 			goto finally; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 		for (i = 0; i < 2 * info.size; i++) { | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 			int sts; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 			if (SV_GET_FIELD(bitvector, i) == SV_EVEN_FIELD) { | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 				Py_INCREF(evenitem); | 
					
						
							|  |  |  | 				sts = PyTuple_SetItem(bitvecobj, i, evenitem); | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 			} else { | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 				Py_INCREF(odditem); | 
					
						
							|  |  |  | 				sts = PyTuple_SetItem(bitvecobj, i, odditem); | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 			if (sts < 0) | 
					
						
							|  |  |  | 				goto finally; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 		} | 
					
						
							|  |  |  | 	} else { | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 		bitvecobj = Py_None; | 
					
						
							|  |  |  | 		Py_INCREF(Py_None); | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	res = Py_BuildValue("((iiiii)OO)", info.format, | 
					
						
							|  |  |  | 			    info.width, info.height, | 
					
						
							|  |  |  | 			    info.size, info.samplingrate, | 
					
						
							|  |  |  | 			    videodata, bitvecobj); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   finally: | 
					
						
							|  |  |  | 	if (bitvector) | 
					
						
							|  |  |  | 		free(bitvector); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	Py_XDECREF(videodata); | 
					
						
							|  |  |  | 	Py_XDECREF(bitvecobj); | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 	return res; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | sv_CaptureOneFrame(self, args) | 
					
						
							|  |  |  | 	svobject *self; | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	PyObject *args; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	svCaptureInfo info; | 
					
						
							|  |  |  | 	int format, width, height; | 
					
						
							|  |  |  | 	int bytes; | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	PyObject *videodata = NULL; | 
					
						
							|  |  |  | 	PyObject *res = NULL; | 
					
						
							| 
									
										
										
										
											1996-12-17 20:43:55 +00:00
										 |  |  | 	char *str; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 	 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	if (!PyArg_Parse(args, "(iii)", &format, &width, &height)) | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 		return NULL; | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 	info.format = format; | 
					
						
							|  |  |  | 	info.width = width; | 
					
						
							|  |  |  | 	info.height = height; | 
					
						
							|  |  |  | 	info.size = 0; | 
					
						
							|  |  |  | 	info.samplingrate = 0; | 
					
						
							|  |  |  | 	if (svQueryCaptureBufferSize(self->ob_svideo, &info, &bytes)) | 
					
						
							|  |  |  | 		return sv_error(); | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	if (!(videodata = PyString_FromStringAndSize(NULL, bytes))) | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 		return NULL; | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	 | 
					
						
							| 
									
										
										
										
											1996-12-17 20:43:55 +00:00
										 |  |  | 	str = PyString_AsString(videodata); | 
					
						
							|  |  |  | 	if (!str) | 
					
						
							|  |  |  | 		goto finally; | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	if (svCaptureOneFrame(self->ob_svideo, format, &width, &height, str)) { | 
					
						
							|  |  |  | 		res = sv_error(); | 
					
						
							|  |  |  | 		goto finally; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	res = Py_BuildValue("(iiO)", width, height, videodata); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   finally: | 
					
						
							|  |  |  | 	Py_XDECREF(videodata); | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 	return res; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | sv_InitContinuousCapture(self, args) | 
					
						
							|  |  |  | 	svobject *self; | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	PyObject *args; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	svCaptureInfo info; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	if (!PyArg_Parse(args, "(iiiii)", &info.format, | 
					
						
							|  |  |  | 			 &info.width, &info.height, | 
					
						
							|  |  |  | 			 &info.size, &info.samplingrate)) | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 		return NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (svInitContinuousCapture(self->ob_svideo, &info)) | 
					
						
							|  |  |  | 		return sv_error(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	self->ob_info = info; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	return Py_BuildValue("(iiiii)", info.format, info.width, info.height, | 
					
						
							|  |  |  | 			     info.size, info.samplingrate); | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | sv_LoadMap(self, args) | 
					
						
							|  |  |  | 	svobject *self; | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	PyObject *args; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	PyObject *rgb; | 
					
						
							|  |  |  | 	PyObject *res = NULL; | 
					
						
							|  |  |  | 	rgb_tuple *mapp = NULL; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 	int maptype; | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	int i, j;			     /* indices */ | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	if (!PyArg_Parse(args, "(iO)", &maptype, &rgb)) | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 		return NULL; | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	if (!PyList_Check(rgb) || PyList_Size(rgb) != 256) { | 
					
						
							|  |  |  | 		PyErr_BadArgument(); | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 		return NULL; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	if (!(mapp = PyMem_NEW(rgb_tuple, 256))) | 
					
						
							|  |  |  | 		return PyErr_NoMemory(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 	for (i = 0; i < 256; i++) { | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 		PyObject* v = PyList_GetItem(rgb, i); | 
					
						
							|  |  |  | 		if (!v) | 
					
						
							|  |  |  | 			goto finally; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if (!PyTuple_Check(v) || PyTuple_Size(v) != 3) { | 
					
						
							|  |  |  | 			PyErr_BadArgument(); | 
					
						
							|  |  |  | 			goto finally; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 		} | 
					
						
							|  |  |  | 		for (j = 0; j < 3; j++) { | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 			PyObject* cell = PyTuple_GetItem(v, j); | 
					
						
							|  |  |  | 			if (!cell) | 
					
						
							|  |  |  | 				goto finally; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			if (!PyInt_Check(cell)) { | 
					
						
							|  |  |  | 				PyErr_BadArgument(); | 
					
						
							|  |  |  | 				goto finally; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 			} | 
					
						
							|  |  |  | 			switch (j) { | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 			case 0: mapp[i].red = PyInt_AsLong(cell); break; | 
					
						
							|  |  |  | 			case 1: mapp[i].blue = PyInt_AsLong(cell); break; | 
					
						
							|  |  |  | 			case 2: mapp[i].green = PyInt_AsLong(cell); break; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 			if (PyErr_Occurred()) | 
					
						
							|  |  |  | 				goto finally; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (svLoadMap(self->ob_svideo, maptype, mapp)) { | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 		res = sv_error(); | 
					
						
							|  |  |  | 		goto finally; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	Py_INCREF(Py_None); | 
					
						
							|  |  |  | 	res = Py_None; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  |   finally: | 
					
						
							|  |  |  | 	PyMem_DEL(mapp); | 
					
						
							|  |  |  | 	return res; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 		 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | sv_CloseVideo(self, args) | 
					
						
							|  |  |  | 	svobject *self; | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	PyObject *args; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	if (!PyArg_Parse(args, "")) | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 		return NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (svCloseVideo(self->ob_svideo)) | 
					
						
							|  |  |  | 		return sv_error(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	self->ob_svideo = NULL; | 
					
						
							|  |  |  | 	Py_INCREF(Py_None); | 
					
						
							|  |  |  | 	return Py_None; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | doParams(self, args, func, modified) | 
					
						
							|  |  |  | 	svobject *self; | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	PyObject *args; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 	int (*func)(SV_nodeP, long *, int); | 
					
						
							|  |  |  | 	int modified; | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	PyObject *list; | 
					
						
							|  |  |  | 	PyObject *res = NULL; | 
					
						
							|  |  |  | 	long *PVbuffer = NULL; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 	long length; | 
					
						
							|  |  |  | 	int i; | 
					
						
							|  |  |  | 	 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	if (!PyArg_Parse(args, "O", &list)) | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 		return NULL; | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	if (!PyList_Check(list)) { | 
					
						
							|  |  |  | 		PyErr_BadArgument(); | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 		return NULL; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	if ((length = PyList_Size(list)) < 0) | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	PVbuffer = PyMem_NEW(long, length); | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 	if (PVbuffer == NULL) | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 		return PyErr_NoMemory(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 	for (i = 0; i < length; i++) { | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 		PyObject *v = PyList_GetItem(list, i); | 
					
						
							|  |  |  | 		if (!v) | 
					
						
							|  |  |  | 			goto finally; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if (!PyInt_Check(v)) { | 
					
						
							|  |  |  | 			PyErr_BadArgument(); | 
					
						
							|  |  |  | 			goto finally; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 		PVbuffer[i] = PyInt_AsLong(v); | 
					
						
							|  |  |  | 		/* can't just test the return value, because what if the
 | 
					
						
							|  |  |  | 		   value was -1?! | 
					
						
							|  |  |  | 		*/ | 
					
						
							|  |  |  | 		if (PVbuffer[i] == -1 && PyErr_Occurred()) | 
					
						
							|  |  |  | 			goto finally; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if ((*func)(self->ob_svideo, PVbuffer, length)) { | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 		res = sv_error(); | 
					
						
							|  |  |  | 		goto finally; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (modified) { | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 		for (i = 0; i < length; i++) { | 
					
						
							|  |  |  | 			PyObject* v = PyInt_FromLong(PVbuffer[i]); | 
					
						
							|  |  |  | 			if (!v || PyList_SetItem(list, i, v) < 0) | 
					
						
							|  |  |  | 				goto finally; | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	Py_INCREF(Py_None); | 
					
						
							|  |  |  | 	res = Py_None; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  |   finally: | 
					
						
							|  |  |  | 	PyMem_DEL(PVbuffer); | 
					
						
							|  |  |  | 	return res; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | sv_GetParam(self, args) | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	PyObject *self, *args; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	return doParams(self, args, svGetParam, 1); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | sv_GetParamRange(self, args) | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	PyObject *self, *args; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	return doParams(self, args, svGetParamRange, 1); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | sv_SetParam(self, args) | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	PyObject *self, *args; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	return doParams(self, args, svSetParam, 0); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | static PyMethodDef svideo_methods[] = { | 
					
						
							|  |  |  | 	{"BindGLWindow",	(PyCFunction)sv_BindGLWindow}, | 
					
						
							|  |  |  | 	{"EndContinuousCapture",(PyCFunction)sv_EndContinuousCapture}, | 
					
						
							|  |  |  | 	{"IsVideoDisplayed",	(PyCFunction)sv_IsVideoDisplayed}, | 
					
						
							|  |  |  | 	{"OutputOffset",	(PyCFunction)sv_OutputOffset}, | 
					
						
							|  |  |  | 	{"PutFrame",		(PyCFunction)sv_PutFrame}, | 
					
						
							|  |  |  | 	{"QuerySize",		(PyCFunction)sv_QuerySize}, | 
					
						
							|  |  |  | 	{"SetSize",		(PyCFunction)sv_SetSize}, | 
					
						
							|  |  |  | 	{"SetStdDefaults",	(PyCFunction)sv_SetStdDefaults}, | 
					
						
							|  |  |  | 	{"UseExclusive",	(PyCFunction)sv_UseExclusive}, | 
					
						
							|  |  |  | 	{"WindowOffset",	(PyCFunction)sv_WindowOffset}, | 
					
						
							|  |  |  | 	{"InitContinuousCapture",(PyCFunction)sv_InitContinuousCapture}, | 
					
						
							|  |  |  | 	{"CaptureBurst",	(PyCFunction)sv_CaptureBurst}, | 
					
						
							|  |  |  | 	{"CaptureOneFrame",	(PyCFunction)sv_CaptureOneFrame}, | 
					
						
							|  |  |  | 	{"GetCaptureData",	(PyCFunction)sv_GetCaptureData}, | 
					
						
							|  |  |  | 	{"CloseVideo",		(PyCFunction)sv_CloseVideo}, | 
					
						
							|  |  |  | 	{"LoadMap",		(PyCFunction)sv_LoadMap}, | 
					
						
							|  |  |  | 	{"GetParam",		(PyCFunction)sv_GetParam}, | 
					
						
							|  |  |  | 	{"GetParamRange",	(PyCFunction)sv_GetParamRange}, | 
					
						
							|  |  |  | 	{"SetParam",		(PyCFunction)sv_SetParam}, | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 	{NULL,			NULL} 		/* sentinel */ | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | sv_conversion(self, args, function, inputfactor, factor) | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	PyObject *self, *args; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 	void (*function)(); | 
					
						
							| 
									
										
										
										
											1993-03-16 12:25:30 +00:00
										 |  |  | 	int inputfactor; | 
					
						
							|  |  |  | 	float factor; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	int invert, width, height, inputlength; | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	char *input, *str; | 
					
						
							|  |  |  | 	PyObject *output; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	if (!PyArg_Parse(args, "(is#ii)", &invert, | 
					
						
							|  |  |  | 			 &input, &inputlength, &width, &height)) | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 		return NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (width * height * inputfactor > inputlength) { | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 		PyErr_SetString(SvError, "input buffer not long enough"); | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 		return NULL; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	if (!(output = PyString_FromStringAndSize(NULL, | 
					
						
							|  |  |  | 					      (int)(width * height * factor)))) | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 		return NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	str = PyString_AsString(output); | 
					
						
							|  |  |  | 	if (!str) { | 
					
						
							|  |  |  | 		Py_DECREF(output); | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	(*function)(invert, input, str, width, height); | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	return output; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | sv_InterleaveFields(self, args) | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	PyObject *self, *args; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											1993-03-16 12:25:30 +00:00
										 |  |  | 	return sv_conversion(self, args, svInterleaveFields, 1, 1.0); | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | sv_RGB8toRGB32(self, args) | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	PyObject *self, *args; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											1993-03-16 12:25:30 +00:00
										 |  |  | 	return sv_conversion(self, args, svRGB8toRGB32, 1, (float) sizeof(long)); | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | sv_YUVtoRGB(self, args) | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	PyObject *self, *args; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											1993-03-16 12:25:30 +00:00
										 |  |  | 	return sv_conversion(self, args, svYUVtoRGB, 2, (float) sizeof(long)); | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static void | 
					
						
							|  |  |  | svideo_dealloc(self) | 
					
						
							|  |  |  | 	svobject *self; | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	if (self->ob_svideo != NULL) | 
					
						
							|  |  |  | 		(void) svCloseVideo(self->ob_svideo); | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	PyMem_DEL(self); | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | svideo_getattr(self, name) | 
					
						
							|  |  |  | 	svobject *self; | 
					
						
							|  |  |  | 	char *name; | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	return Py_FindMethod(svideo_methods, (PyObject *)self, name); | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | PyTypeObject Svtype = { | 
					
						
							|  |  |  | 	PyObject_HEAD_INIT(&PyType_Type) | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 	0,			/*ob_size*/ | 
					
						
							|  |  |  | 	"sv",			/*tp_name*/ | 
					
						
							|  |  |  | 	sizeof(svobject),	/*tp_size*/ | 
					
						
							|  |  |  | 	0,			/*tp_itemsize*/ | 
					
						
							|  |  |  | 	/* methods */ | 
					
						
							| 
									
										
										
										
											1994-08-01 11:34:53 +00:00
										 |  |  | 	(destructor)svideo_dealloc, /*tp_dealloc*/ | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 	0,			/*tp_print*/ | 
					
						
							| 
									
										
										
										
											1994-08-01 11:34:53 +00:00
										 |  |  | 	(getattrfunc)svideo_getattr, /*tp_getattr*/ | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 	0,			/*tp_setattr*/ | 
					
						
							|  |  |  | 	0,			/*tp_compare*/ | 
					
						
							|  |  |  | 	0,			/*tp_repr*/ | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | newsvobject(svp) | 
					
						
							|  |  |  | 	SV_nodeP svp; | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	svobject *p; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	p = PyObject_NEW(svobject, &Svtype); | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 	if (p == NULL) | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							|  |  |  | 	p->ob_svideo = svp; | 
					
						
							|  |  |  | 	p->ob_info.format = 0; | 
					
						
							|  |  |  | 	p->ob_info.size = 0; | 
					
						
							|  |  |  | 	p->ob_info.width = 0; | 
					
						
							|  |  |  | 	p->ob_info.height = 0; | 
					
						
							|  |  |  | 	p->ob_info.samplingrate = 0; | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	return (PyObject *) p; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | sv_OpenVideo(self, args) | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	PyObject *self, *args; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	SV_nodeP svp; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	if (!PyArg_Parse(args, "")) | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 		return NULL; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	svp = svOpenVideo(); | 
					
						
							|  |  |  | 	if (svp == NULL) | 
					
						
							|  |  |  | 		return sv_error(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return newsvobject(svp); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | static PyMethodDef sv_methods[] = { | 
					
						
							|  |  |  | 	{"InterleaveFields",	(PyCFunction)sv_InterleaveFields}, | 
					
						
							|  |  |  | 	{"RGB8toRGB32",		(PyCFunction)sv_RGB8toRGB32}, | 
					
						
							|  |  |  | 	{"YUVtoRGB",		(PyCFunction)sv_YUVtoRGB}, | 
					
						
							|  |  |  | 	{"OpenVideo",		(PyCFunction)sv_OpenVideo}, | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 	{NULL,			NULL}	/* Sentinel */ | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void | 
					
						
							|  |  |  | initsv() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	PyObject *m, *d; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	m = Py_InitModule("sv", sv_methods); | 
					
						
							|  |  |  | 	d = PyModule_GetDict(m); | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-10-01 04:29:29 +00:00
										 |  |  | 	SvError = PyErr_NewException("sv.error", NULL, NULL); | 
					
						
							| 
									
										
										
										
											1996-12-13 01:24:29 +00:00
										 |  |  | 	if (SvError == NULL || PyDict_SetItemString(d, "error", SvError) != 0) | 
					
						
							| 
									
										
										
										
											1997-10-01 04:29:29 +00:00
										 |  |  | 		return; | 
					
						
							| 
									
										
										
										
											1993-01-06 13:36:38 +00:00
										 |  |  | } |