Update of /cvsroot/freevo/kaa/xine/src
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv10159/src
Modified Files:
__init__.py post.c post_in.c post_out.c video_port.c
video_port.h xine.c xine.h
Added Files:
vo_driver.c vo_driver.h
Log Message:
New VODriver class; add load_video_output_plugin (requires patch to xine-lib);
reimplement open_video_driver() to use load_video_output_plugin() and
VODriver.get_port(); refactor type initialization in xine.c; reimplement
buffer driver to use a video driver instead of video port; implement RLE
overlay blending in buffer driver (code ripped from xine-lib); buffer driver
seems to actually work now. kaaplayer.py is a mess. :)
--- NEW FILE: vo_driver.c ---
#include "xine.h"
#include "post.h"
#include "post_in.h"
#include "post_out.h"
#include "stream.h"
#include "vo_driver.h"
#include "video_port.h"
#include "structmember.h"
// Owner must be a Xine or VideoPort object
Xine_VO_Driver_PyObject *
pyxine_new_vo_driver_pyobject(PyObject *owner_pyobject, vo_driver_t *driver,
int owner)
{
Xine_VO_Driver_PyObject *o = (Xine_VO_Driver_PyObject
*)xine_object_to_pyobject_find(driver);
if (o) {
Py_INCREF(o);
return o;
}
o = (Xine_VO_Driver_PyObject *)
Xine_VO_Driver_PyObject__new(&Xine_VO_Driver_PyObject_Type, NULL, NULL);
if (!o)
return NULL;
if (Xine_PyObject_Check(owner_pyobject))
o->xine = ((Xine_PyObject *)owner_pyobject)->xine;
else if (Xine_Video_Port_PyObject_Check(owner_pyobject))
o->xine = ((Xine_Video_Port_PyObject *)owner_pyobject)->xine;
else
PyErr_Format(xine_error, "Unsupported owner for VideoPort object");
o->owner_pyobject = owner_pyobject;
Py_INCREF(owner_pyobject);
o->driver = driver;
o->xine_object_owner = owner;
xine_object_to_pyobject_register(driver, (PyObject *)o);
return o;
}
static int
Xine_VO_Driver_PyObject__clear(Xine_VO_Driver_PyObject * self)
{
PyObject **list[] = {&self->owner_pyobject, NULL};
return pyxine_gc_helper_clear(list);
}
static int
Xine_VO_Driver_PyObject__traverse(Xine_VO_Driver_PyObject * self,
visitproc visit, void *arg)
{
PyObject **list[] = {&self->owner_pyobject, NULL};
return pyxine_gc_helper_traverse(list, visit, arg);
}
PyObject *
Xine_VO_Driver_PyObject__new(PyTypeObject * type, PyObject * args,
PyObject * kwargs)
{
Xine_VO_Driver_PyObject *self;
if (args) {
PyErr_SetString(xine_error, "Don't call me directly");
return NULL;
}
self = (Xine_VO_Driver_PyObject *) type->tp_alloc(type, 0);
self->driver = NULL;
self->xine = NULL;
self->owner_pyobject = NULL;
self->wrapper = Py_None;
Py_INCREF(Py_None);
return (PyObject *) self;
}
static int
Xine_VO_Driver_PyObject__init(Xine_VO_Driver_PyObject * self,
PyObject * args, PyObject * kwds)
{
return 0;
}
static PyMemberDef Xine_VO_Driver_PyObject_members[] = {
{"owner", T_OBJECT_EX, offsetof(Xine_VO_Driver_PyObject, owner_pyobject),
0, "Owner"},
{"wrapper", T_OBJECT_EX, offsetof(Xine_VO_Driver_PyObject, wrapper), 0,
"Wrapper object"},
{NULL}
};
void
Xine_VO_Driver_PyObject__dealloc(Xine_VO_Driver_PyObject * self)
{
printf("DEalloc VO Driver: %x\n", self->driver);
if (self->driver && self->xine_object_owner) {
Py_BEGIN_ALLOW_THREADS
self->driver->dispose(self->driver);
Py_END_ALLOW_THREADS
}
Py_DECREF(self->wrapper);
Xine_VO_Driver_PyObject__clear(self);
xine_object_to_pyobject_unregister(self->driver);
if (self->dealloc_cb)
self->dealloc_cb(self->dealloc_data);
self->ob_type->tp_free((PyObject *) self);
}
PyObject *
Xine_VO_Driver_PyObject_get_port(Xine_VO_Driver_PyObject *self, PyObject *args,
PyObject *kwargs)
{
xine_video_port_t *vo_port;
Xine_Video_Port_PyObject *vo;
if (Xine_Video_Port_PyObject_Check(self->owner_pyobject)) {
Py_INCREF(self->owner_pyobject);
return self->owner_pyobject;
}
vo_port = _x_vo_new_port(self->xine, self->driver, 0);
vo = pyxine_new_video_port_pyobject(self->owner_pyobject, vo_port,
(PyObject *)self, 1);
// VideoPort object assumes ownership of us.
Py_DECREF(self->owner_pyobject);
self->owner_pyobject = (PyObject *)vo;
Py_INCREF(vo);
self->xine_object_owner = 0;
return (PyObject *)vo;
}
PyMethodDef Xine_VO_Driver_PyObject_methods[] = {
{"get_port", (PyCFunction) Xine_VO_Driver_PyObject_get_port, METH_VARARGS },
{NULL, NULL}
};
PyTypeObject Xine_VO_Driver_PyObject_Type = {
PyObject_HEAD_INIT(NULL)
0, /* ob_size */
"_xine.VODriver", /* tp_name */
sizeof(Xine_VO_Driver_PyObject), /* tp_basicsize */
0, /* tp_itemsize */
(destructor) Xine_VO_Driver_PyObject__dealloc, /* tp_dealloc */
0, /* tp_print */
0, /* tp_getattr */
0, /* tp_setattr */
0, /* tp_compare */
0, /* tp_repr */
0, /* tp_as_number */
0, /* tp_as_sequence */
0, /* tp_as_mapping */
0, /* tp_hash */
0, /* tp_call */
0, /* tp_str */
PyObject_GenericGetAttr, /* tp_getattro */
PyObject_GenericSetAttr, /* tp_setattro */
0, /* tp_as_buffer */
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC, /* tp_flags
*/
"Xine VO Driver Object", /* tp_doc */
(traverseproc)Xine_VO_Driver_PyObject__traverse, /* tp_traverse */
(inquiry)Xine_VO_Driver_PyObject__clear, /* tp_clear */
0, /* tp_richcompare */
0, /* tp_weaklistoffset */
0, /* tp_iter */
0, /* tp_iternext */
Xine_VO_Driver_PyObject_methods, /* tp_methods */
Xine_VO_Driver_PyObject_members, /* tp_members */
0, /* tp_getset */
0, /* tp_base */
0, /* tp_dict */
0, /* tp_descr_get */
0, /* tp_descr_set */
0, /* tp_dictoffset */
(initproc)Xine_VO_Driver_PyObject__init, /* tp_init */
0, /* tp_alloc */
Xine_VO_Driver_PyObject__new, /* tp_new */
};
Index: post.c
===================================================================
RCS file: /cvsroot/freevo/kaa/xine/src/post.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -C2 -d -r1.7 -r1.8
*** post.c 23 Jul 2005 13:33:51 -0000 1.7
--- post.c 30 Jul 2005 20:55:15 -0000 1.8
***************
*** 60,64 ****
Xine_Post_PyObject__clear(Xine_Post_PyObject *self)
{
! PyObject **list[] = {&self->owner_pyobject, &self->inputs,
&self->outputs, NULL };
return pyxine_gc_helper_clear(list);
}
--- 60,64 ----
Xine_Post_PyObject__clear(Xine_Post_PyObject *self)
{
! PyObject **list[] = {&self->inputs, &self->outputs, NULL };
return pyxine_gc_helper_clear(list);
}
***************
*** 110,120 ****
Xine_Post_PyObject__dealloc(Xine_Post_PyObject *self)
{
! printf("DEalloc Post: %x\n", self->post);
if (self->post && self->xine_object_owner) {
// bug in xine:
http://sourceforge.net/mailarchive/forum.php?thread_id=7753300&forum_id=7131
! //xine_post_dispose(self->xine, self->post);
}
Py_DECREF(self->name);
Py_DECREF(self->wrapper);
Xine_Post_PyObject__clear(self);
xine_object_to_pyobject_unregister(self->post);
--- 110,121 ----
Xine_Post_PyObject__dealloc(Xine_Post_PyObject *self)
{
! printf("DEalloc Post: %x (%d)\n", self->post, self->xine_object_owner);
if (self->post && self->xine_object_owner) {
// bug in xine:
http://sourceforge.net/mailarchive/forum.php?thread_id=7753300&forum_id=7131
! xine_post_dispose(self->xine, self->post);
}
Py_DECREF(self->name);
Py_DECREF(self->wrapper);
+ Py_DECREF(self->owner_pyobject);
Xine_Post_PyObject__clear(self);
xine_object_to_pyobject_unregister(self->post);
Index: post_out.c
===================================================================
RCS file: /cvsroot/freevo/kaa/xine/src/post_out.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** post_out.c 23 Jul 2005 00:41:47 -0000 1.4
--- post_out.c 30 Jul 2005 20:55:15 -0000 1.5
***************
*** 46,50 ****
if (post_out->data && *(void **)post_out->data) {
xine_video_port_t *vo = *(xine_video_port_t **)post_out->data;
! o->port = (PyObject *)pyxine_new_video_port_pyobject((PyObject
*)o, vo, 0);
}
}
--- 46,50 ----
if (post_out->data && *(void **)post_out->data) {
xine_video_port_t *vo = *(xine_video_port_t **)post_out->data;
! o->port = (PyObject *)pyxine_new_video_port_pyobject((PyObject
*)o, vo, NULL, 0);
}
}
Index: xine.h
===================================================================
RCS file: /cvsroot/freevo/kaa/xine/src/xine.h,v
retrieving revision 1.6
retrieving revision 1.7
diff -C2 -d -r1.6 -r1.7
*** xine.h 23 Jul 2005 00:41:47 -0000 1.6
--- xine.h 30 Jul 2005 20:55:15 -0000 1.7
***************
*** 5,8 ****
--- 5,9 ----
#include <Python.h>
#include <xine.h>
+ #include <xine/xine_internal.h>
#include <assert.h>
Index: video_port.h
===================================================================
RCS file: /cvsroot/freevo/kaa/xine/src/video_port.h,v
retrieving revision 1.5
retrieving revision 1.6
diff -C2 -d -r1.5 -r1.6
*** video_port.h 21 Jul 2005 18:32:11 -0000 1.5
--- video_port.h 30 Jul 2005 20:55:15 -0000 1.6
***************
*** 12,25 ****
PyObject_HEAD
! PyObject *owner_pyobject; // Post object or Xine object
int xine_object_owner;
xine_t *xine;
xine_video_port_t *vo;
PyObject *wrapper;
PyObject *wire_object; // Wired object (PostOut/Stream source list or
PostIn/Port target)
- void (*driver_dealloc_cb)(void *);
- void *driver_dealloc_data;
} Xine_Video_Port_PyObject;
--- 12,24 ----
PyObject_HEAD
! PyObject *owner_pyobject; // Post In/Out, Xine, or Stream object
int xine_object_owner;
xine_t *xine;
xine_video_port_t *vo;
+ PyObject *driver; // VODriver or None
PyObject *wrapper;
PyObject *wire_object; // Wired object (PostOut/Stream source list or
PostIn/Port target)
} Xine_Video_Port_PyObject;
***************
*** 27,31 ****
PyObject *Xine_Video_Port_PyObject__new(PyTypeObject *, PyObject *, PyObject
*);
! Xine_Video_Port_PyObject *pyxine_new_video_port_pyobject(PyObject *,
xine_video_port_t *, int);
--- 26,30 ----
PyObject *Xine_Video_Port_PyObject__new(PyTypeObject *, PyObject *, PyObject
*);
! Xine_Video_Port_PyObject *pyxine_new_video_port_pyobject(PyObject *,
xine_video_port_t *, PyObject *, int);
Index: post_in.c
===================================================================
RCS file: /cvsroot/freevo/kaa/xine/src/post_in.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** post_in.c 23 Jul 2005 00:41:47 -0000 1.4
--- post_in.c 30 Jul 2005 20:55:15 -0000 1.5
***************
*** 36,40 ****
if (post_in->data) {
xine_video_port_t *vo = (xine_video_port_t *)post_in->data;
! o->port = (PyObject *)pyxine_new_video_port_pyobject((PyObject
*)o, vo, 0);
}
}
--- 36,40 ----
if (post_in->data) {
xine_video_port_t *vo = (xine_video_port_t *)post_in->data;
! o->port = (PyObject *)pyxine_new_video_port_pyobject((PyObject
*)o, vo, NULL, 0);
}
}
***************
*** 128,132 ****
if (self->post_in->data) {
xine_video_port_t *vo = (xine_video_port_t *)self->post_in->data;
! port = (PyObject
*)pyxine_new_video_port_pyobject(self->owner_pyobject, vo, 0);
}
}
--- 128,132 ----
if (self->post_in->data) {
xine_video_port_t *vo = (xine_video_port_t *)self->post_in->data;
! port = (PyObject
*)pyxine_new_video_port_pyobject(self->owner_pyobject, vo, NULL, 0);
}
}
--- NEW FILE: vo_driver.h ---
#ifndef __VO_DRIVER_H_
#define __VO_DRIVER_H_
#include "config.h"
#include <Python.h>
#include <xine.h>
#include <xine/video_out.h>
#define Xine_VO_Driver_PyObject_Check(v) ((v)->ob_type ==
&Xine_VO_Driver_PyObject_Type)
typedef struct {
PyObject_HEAD
PyObject *owner_pyobject; // Xine or VideoPort object
int xine_object_owner;
xine_t *xine;
vo_driver_t *driver;
PyObject *wrapper;
void (*dealloc_cb)(void *);
void *dealloc_data;
} Xine_VO_Driver_PyObject;
extern PyTypeObject Xine_VO_Driver_PyObject_Type;
PyObject *Xine_VO_Driver_PyObject__new(PyTypeObject *, PyObject *, PyObject *);
Xine_VO_Driver_PyObject *pyxine_new_vo_driver_pyobject(PyObject *, vo_driver_t
*, int);
#endif
Index: video_port.c
===================================================================
RCS file: /cvsroot/freevo/kaa/xine/src/video_port.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -C2 -d -r1.8 -r1.9
*** video_port.c 23 Jul 2005 00:41:47 -0000 1.8
--- video_port.c 30 Jul 2005 20:55:15 -0000 1.9
***************
*** 8,14 ****
// Owner must be a Post In, Post Out, Xine, or Stream object
- // XXX: if Xine, must be driver -- owner param deprecated then?
Xine_Video_Port_PyObject *
! pyxine_new_video_port_pyobject(PyObject *owner_pyobject, xine_video_port_t *
vo, int owner)
{
Xine_Video_Port_PyObject *o = (Xine_Video_Port_PyObject
*)xine_object_to_pyobject_find(vo);
--- 8,13 ----
// Owner must be a Post In, Post Out, Xine, or Stream object
Xine_Video_Port_PyObject *
! pyxine_new_video_port_pyobject(PyObject *owner_pyobject, xine_video_port_t *
vo, PyObject *driver, int owner)
{
Xine_Video_Port_PyObject *o = (Xine_Video_Port_PyObject
*)xine_object_to_pyobject_find(vo);
***************
*** 41,44 ****
--- 40,49 ----
Py_INCREF(owner_pyobject);
+ if (driver)
+ o->driver = driver;
+ else
+ o->driver = Py_None;
+ Py_INCREF(o->driver);
+
o->vo = vo;
o->xine_object_owner = owner;
***************
*** 52,56 ****
Xine_Video_Port_PyObject__clear(Xine_Video_Port_PyObject * self)
{
! PyObject **list[] = {&self->wire_object, NULL};
return pyxine_gc_helper_clear(list);
}
--- 57,61 ----
Xine_Video_Port_PyObject__clear(Xine_Video_Port_PyObject * self)
{
! PyObject **list[] = {&self->wire_object, NULL};
return pyxine_gc_helper_clear(list);
}
***************
*** 60,64 ****
visitproc visit, void *arg)
{
! PyObject **list[] = {&self->owner_pyobject, &self->wire_object, NULL};
return pyxine_gc_helper_traverse(list, visit, arg);
}
--- 65,69 ----
visitproc visit, void *arg)
{
! PyObject **list[] = {&self->owner_pyobject, &self->wire_object,
&self->driver, NULL};
return pyxine_gc_helper_traverse(list, visit, arg);
}
***************
*** 93,96 ****
--- 98,102 ----
static PyMemberDef Xine_Video_Port_PyObject_members[] = {
+ {"driver", T_OBJECT_EX, offsetof(Xine_Video_Port_PyObject, driver), 0,
"Video Driver object of this port"},
{"wire_object", T_OBJECT_EX, offsetof(Xine_Video_Port_PyObject,
wire_object), 0, "Object wired to"},
{"owner", T_OBJECT_EX, offsetof(Xine_Video_Port_PyObject,
owner_pyobject), 0, "Owner"},
***************
*** 103,107 ****
Xine_Video_Port_PyObject__dealloc(Xine_Video_Port_PyObject * self)
{
! printf("DEalloc Video Port: %x, driver=%x\n", self->vo,
((xine_video_port_t *)self->vo)->driver);
if (self->vo && self->xine_object_owner) {
Py_BEGIN_ALLOW_THREADS
--- 109,115 ----
Xine_Video_Port_PyObject__dealloc(Xine_Video_Port_PyObject * self)
{
! printf("DEalloc Video Port: %x, driver=%x (%d) owner=%s \n", self->vo,
! ((xine_video_port_t *)self->vo)->driver, self->xine_object_owner,
! self->owner_pyobject->ob_type->tp_name);
if (self->vo && self->xine_object_owner) {
Py_BEGIN_ALLOW_THREADS
***************
*** 109,112 ****
--- 117,121 ----
Py_END_ALLOW_THREADS
}
+ Py_DECREF(self->driver);
Py_DECREF(self->wrapper);
Xine_Video_Port_PyObject__clear(self);
***************
*** 114,120 ****
xine_object_to_pyobject_unregister(self->vo);
- if (self->driver_dealloc_cb)
- self->driver_dealloc_cb(self->driver_dealloc_data);
-
self->ob_type->tp_free((PyObject *) self);
}
--- 123,126 ----
Index: xine.c
===================================================================
RCS file: /cvsroot/freevo/kaa/xine/src/xine.c,v
retrieving revision 1.15
retrieving revision 1.16
diff -C2 -d -r1.15 -r1.16
*** xine.c 25 Jul 2005 23:23:57 -0000 1.15
--- xine.c 30 Jul 2005 20:55:15 -0000 1.16
***************
*** 2,5 ****
--- 2,6 ----
#include "structmember.h"
#include "drivers/x11.h"
+ #include "vo_driver.h"
#include "video_port.h"
#include "audio_port.h"
***************
*** 34,38 ****
Xine_PyObject__clear(Xine_PyObject *self)
{
! PyObject **list[] = {&self->dependencies, &self->log_callback, NULL};
return pyxine_gc_helper_clear(list);
}
--- 35,40 ----
Xine_PyObject__clear(Xine_PyObject *self)
{
! PyObject **list[] = {&self->log_callback, NULL};
! //printf("XINE CLEAR\n");
return pyxine_gc_helper_clear(list);
}
***************
*** 41,45 ****
Xine_PyObject__traverse(Xine_PyObject *self, visitproc visit, void *arg)
{
! PyObject **list[] = {&self->dependencies, &self->log_callback, NULL};
return pyxine_gc_helper_traverse(list, visit, arg);
}
--- 43,48 ----
Xine_PyObject__traverse(Xine_PyObject *self, visitproc visit, void *arg)
{
! PyObject **list[] = {/*&self->dependencies, */&self->log_callback, NULL};
! //printf("XINE TRAV: %d\n", PySequence_Length(self->dependencies));
return pyxine_gc_helper_traverse(list, visit, arg);
}
***************
*** 98,107 ****
{
printf("DEalloc Xine: %x\n", self->xine);
- if (self->xine) {
- xine_exit(self->xine);
- }
Py_DECREF(self->wrapper);
Xine_PyObject__clear(self);
xine_object_to_pyobject_unregister(self->xine);
self->ob_type->tp_free((PyObject*)self);
}
--- 101,114 ----
{
printf("DEalloc Xine: %x\n", self->xine);
Py_DECREF(self->wrapper);
+ Py_DECREF(self->dependencies);
Xine_PyObject__clear(self);
xine_object_to_pyobject_unregister(self->xine);
+
+ printf("XINE EXIT\n");
+ if (self->xine) {
+ xine_exit(self->xine);
+ }
+
self->ob_type->tp_free((PyObject*)self);
}
***************
*** 152,163 ****
}
PyObject *
! Xine_PyObject_open_video_driver(Xine_PyObject *self, PyObject *args, PyObject
*kwargs)
{
! xine_video_port_t *vo_port = NULL;
! Xine_Video_Port_PyObject *vo;
char *driver;
void *finalize_data = NULL;
- int own = 1;
if (!PyArg_ParseTuple(args, "s", &driver))
--- 159,170 ----
}
+
PyObject *
! Xine_PyObject_load_video_output_plugin(Xine_PyObject *self, PyObject *args,
PyObject *kwargs)
{
! vo_driver_t *vo_driver;
! Xine_VO_Driver_PyObject *vo_driver_pyobject;
char *driver;
void *finalize_data = NULL;
if (!PyArg_ParseTuple(args, "s", &driver))
***************
*** 165,177 ****
if (!strcmp(driver, "xv") || !strcmp(driver, "xshm") || !strcmp(driver,
"auto")) {
! vo_port = x11_open_video_driver(self, driver, kwargs, &finalize_data);
} else if (!strcmp(driver, "none")) {
! vo_port = xine_open_video_driver(self->xine, driver,
XINE_VISUAL_TYPE_NONE, 0);
} else if (!strcmp(driver, "buffer")) {
! vo_port = xine_open_video_driver(self->xine, driver,
XINE_VISUAL_TYPE_NONE, (void *)kwargs);
! own = 1;
}
! if (!vo_port) {
if (!PyErr_Occurred())
PyErr_Format(xine_error, "Failed to open driver: %s", driver);
--- 172,185 ----
if (!strcmp(driver, "xv") || !strcmp(driver, "xshm") || !strcmp(driver,
"auto")) {
! vo_driver = x11_open_video_driver(self, driver, kwargs,
&finalize_data);
} else if (!strcmp(driver, "none")) {
! //vo_port = xine_open_video_driver(self->xine, driver,
XINE_VISUAL_TYPE_NONE, 0);
! vo_driver = _x_load_video_output_plugin(self->xine, driver,
XINE_VISUAL_TYPE_NONE, 0);
} else if (!strcmp(driver, "buffer")) {
! //vo_port = xine_open_video_driver(self->xine, driver,
XINE_VISUAL_TYPE_NONE, (void *)kwargs);
! vo_driver = _x_load_video_output_plugin(self->xine, driver,
XINE_VISUAL_TYPE_NONE, (void *)kwargs);
}
! if (!vo_driver) {
if (!PyErr_Occurred())
PyErr_Format(xine_error, "Failed to open driver: %s", driver);
***************
*** 179,188 ****
}
! vo = pyxine_new_video_port_pyobject((PyObject *)self, vo_port, own);
if (!strcmp(driver, "xv") || !strcmp(driver, "auto") || !strcmp(driver,
"xshm")) {
! x11_open_video_driver_finalize(vo, finalize_data);
}
! return (PyObject *)vo;
}
--- 187,196 ----
}
! vo_driver_pyobject = pyxine_new_vo_driver_pyobject((PyObject *)self,
vo_driver, 1);
if (!strcmp(driver, "xv") || !strcmp(driver, "auto") || !strcmp(driver,
"xshm")) {
! x11_open_video_driver_finalize(vo_driver_pyobject, finalize_data);
}
! return (PyObject *)vo_driver_pyobject;
}
***************
*** 445,449 ****
PyMethodDef Xine_PyObject_methods[] = {
{"list_plugins", (PyCFunction) Xine_PyObject_list_plugins, METH_VARARGS },
! {"open_video_driver", (PyCFunction) Xine_PyObject_open_video_driver,
METH_VARARGS | METH_KEYWORDS},
{"open_audio_driver", (PyCFunction) Xine_PyObject_open_audio_driver,
METH_VARARGS | METH_KEYWORDS},
{"stream_new", (PyCFunction) Xine_PyObject_stream_new, METH_VARARGS },
--- 453,457 ----
PyMethodDef Xine_PyObject_methods[] = {
{"list_plugins", (PyCFunction) Xine_PyObject_list_plugins, METH_VARARGS },
! {"load_video_output_plugin", (PyCFunction)
Xine_PyObject_load_video_output_plugin, METH_VARARGS | METH_KEYWORDS},
{"open_audio_driver", (PyCFunction) Xine_PyObject_open_audio_driver,
METH_VARARGS | METH_KEYWORDS},
{"stream_new", (PyCFunction) Xine_PyObject_stream_new, METH_VARARGS },
***************
*** 540,543 ****
--- 548,556 ----
+ #define INIT_XINE_TYPE(s, label) \
+ if (PyType_Ready(& s ## _PyObject_Type) < 0) return; \
+ Py_INCREF(& s ## _PyObject_Type); \
+ PyModule_AddObject(m, label, (PyObject *)& s ## _PyObject_Type)
+
void
***************
*** 552,599 ****
PyModule_AddObject(m, "XineError", xine_error);
! if (PyType_Ready(&Xine_PyObject_Type) < 0)
! return;
! Py_INCREF(&Xine_PyObject_Type);
! PyModule_AddObject(m, "Xine", (PyObject *)&Xine_PyObject_Type);
!
! if (PyType_Ready(&Xine_Video_Port_PyObject_Type) < 0)
! return;
! Py_INCREF(&Xine_Video_Port_PyObject_Type);
! PyModule_AddObject(m, "VideoPort", (PyObject
*)&Xine_Video_Port_PyObject_Type);
!
! if (PyType_Ready(&Xine_Audio_Port_PyObject_Type) < 0)
! return;
! Py_INCREF(&Xine_Audio_Port_PyObject_Type);
! PyModule_AddObject(m, "AudioPort", (PyObject
*)&Xine_Audio_Port_PyObject_Type);
!
! if (PyType_Ready(&Xine_Stream_PyObject_Type) < 0)
! return;
! Py_INCREF(&Xine_Stream_PyObject_Type);
! PyModule_AddObject(m, "Stream", (PyObject *)&Xine_Stream_PyObject_Type);
!
! if (PyType_Ready(&Xine_Post_PyObject_Type) < 0)
! return;
! Py_INCREF(&Xine_Post_PyObject_Type);
! PyModule_AddObject(m, "Post", (PyObject *)&Xine_Post_PyObject_Type);
!
! if (PyType_Ready(&Xine_Post_Out_PyObject_Type) < 0)
! return;
! Py_INCREF(&Xine_Post_Out_PyObject_Type);
! PyModule_AddObject(m, "PostOut", (PyObject
*)&Xine_Post_Out_PyObject_Type);
!
! if (PyType_Ready(&Xine_Post_In_PyObject_Type) < 0)
! return;
! Py_INCREF(&Xine_Post_In_PyObject_Type);
! PyModule_AddObject(m, "PostIn", (PyObject *)&Xine_Post_In_PyObject_Type);
!
! if (PyType_Ready(&Xine_Event_Queue_PyObject_Type) < 0)
! return;
! Py_INCREF(&Xine_Event_Queue_PyObject_Type);
! PyModule_AddObject(m, "EventQueue", (PyObject
*)&Xine_Event_Queue_PyObject_Type);
!
! if (PyType_Ready(&Xine_Event_PyObject_Type) < 0)
! return;
! Py_INCREF(&Xine_Event_PyObject_Type);
! PyModule_AddObject(m, "Event", (PyObject *)&Xine_Event_PyObject_Type);
if (xine_object_to_pyobject_dict == NULL)
--- 565,578 ----
PyModule_AddObject(m, "XineError", xine_error);
! INIT_XINE_TYPE(Xine, "Xine");
! INIT_XINE_TYPE(Xine_VO_Driver, "VODriver");
! INIT_XINE_TYPE(Xine_Video_Port, "VideoPort");
! INIT_XINE_TYPE(Xine_Audio_Port, "AudioPort");
! INIT_XINE_TYPE(Xine_Stream, "Stream");
! INIT_XINE_TYPE(Xine_Post, "Post");
! INIT_XINE_TYPE(Xine_Post_In, "PostIn");
! INIT_XINE_TYPE(Xine_Post_Out, "PostOut");
! INIT_XINE_TYPE(Xine_Event_Queue, "EventQueue");
! INIT_XINE_TYPE(Xine_Event, "Event");
if (xine_object_to_pyobject_dict == NULL)
Index: __init__.py
===================================================================
RCS file: /cvsroot/freevo/kaa/xine/src/__init__.py,v
retrieving revision 1.16
retrieving revision 1.17
diff -C2 -d -r1.16 -r1.17
*** __init__.py 25 Jul 2005 23:23:57 -0000 1.16
--- __init__.py 30 Jul 2005 20:55:15 -0000 1.17
***************
*** 23,26 ****
--- 23,28 ----
if type(obj) == _xine.Xine:
o = Xine(obj)
+ elif type(obj) == _xine.VODriver:
+ o = VODriver(obj)
elif type(obj) == _xine.VideoPort:
o = VideoPort(obj)
***************
*** 131,134 ****
--- 133,137 ----
def _default_dest_size_cb(self, width, height, aspect, window):
+ #print "DEST SIZE CB", width, height, aspect, window
if window:
win_w, win_h = window.get_geometry()[1]
***************
*** 136,143 ****
win_w, win_h = 640, 480
movie_aspect = width / float(height)
! window.aspect = movie_aspect * aspect
return (win_w, win_h), 1
! def open_video_driver(self, driver = "auto", **kwargs):
if "window" in kwargs:
window = kwargs["window"]
--- 139,149 ----
win_w, win_h = 640, 480
movie_aspect = width / float(height)
! win_aspect = movie_aspect * aspect
! if window.aspect != win_aspect:
! window.aspect = win_aspect
! window.signals["aspect_changed"].emit(win_aspect)
return (win_w, win_h), 1
! def load_video_output_plugin(self, driver = "auto", **kwargs):
if "window" in kwargs:
window = kwargs["window"]
***************
*** 151,165 ****
window.aspect = -1
kwargs["window"] = window._window
! self._xine.dependencies.append(window._window)
if "passthrough" in kwargs:
! assert(isinstance(kwargs["passthrough"], VideoPort))
! kwargs["passthrough"] = kwargs["passthrough"]._port
! vo = self._xine.open_video_driver(driver, **kwargs)
! # This port is a driver, initialize wire_object to empty list.
! vo.wire_object = []
! return _wrap_xine_object(vo)
--- 157,177 ----
window.aspect = -1
kwargs["window"] = window._window
! #print "SET DEPS", window._window
! #self._xine.dependencies.append(window._window)
! #self._xine.dependencies.append(window._display)
if "passthrough" in kwargs:
! vo = kwargs["passthrough"]
! assert(isinstance(vo, VODriver))
! assert(type(vo._driver.owner) == _xine.Xine)
! kwargs["passthrough"] = vo._driver
! driver = self._xine.load_video_output_plugin(driver, **kwargs)
! return _wrap_xine_object(driver)
+ def open_video_driver(self, driver = "auto", **kwargs):
+ driver = self.load_video_output_plugin(driver, **kwargs)
+ vo = driver.get_port()
+ return vo
***************
*** 219,222 ****
--- 231,240 ----
def post_init(self, name, inputs = 0, audio_targets = [], video_targets =
[]):
+ """
+ This method is deprecated. Use new_post() instead.
+ """
+ return self.new_post(name, inputs, audio_targets, video_targets)
+
+ def new_post(self, name, inputs = 0, audio_targets = [], video_targets =
[]):
assert(type(audio_targets) in (list, tuple))
assert(type(video_targets) in (list, tuple))
***************
*** 295,298 ****
--- 313,331 ----
return types
+
+ class VODriver(object):
+ def __init__(self, driver):
+ self._driver = driver
+
+ def get_port(self):
+ # A new VODriver() is owned by a Xine object, but when get_port() is
+ # first called, the new VideoPort assumes ownership of us.
+ port = self._driver.get_port()
+ if port.wire_object == None:
+ # This port is a driver, initialize wire_object to empty list.
+ port.wire_object = []
+ return _wrap_xine_object(port)
+
+
class VideoPort(object):
def __init__(self, vo):
***************
*** 303,306 ****
--- 336,341 ----
return _wrap_xine_object(self._port.owner)
+ def get_driver(self):
+ return _wrap_xine_object(self._port.driver)
class AudioPort(object):
***************
*** 462,466 ****
--- 497,508 ----
for key, value in kwargs.items():
assert(key in parms)
+ # Check enums for value
+ if value in parms[key]["enums"]:
+ value = kwargs[key] = parms[key]["enums"].index(value)
+ elif parms[key]["enums"] and type(value) != parms[key]["type"]:
+ raise XineError, "Value '%s' for parameter '%s' invalid." %
(value, key)
+
assert(type(value) == parms[key]["type"])
+
return self._post.set_parameters(kwargs)
-------------------------------------------------------
SF.Net email is sponsored by: Discover Easy Linux Migration Strategies
from IBM. Find simple to follow Roadmaps, straightforward articles,
informative Webcasts and more! Get everything you need to get up to
speed, fast. http://ads.osdn.com/?ad_id=7477&alloc_id=16492&op=click
_______________________________________________
Freevo-cvslog mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/freevo-cvslog