Update of /cvsroot/freevo/kaa/xine/src
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv7566/src
Modified Files:
__init__.py audio_port.c audio_port.h xine.c
Added Files:
event.c event.h event_queue.c event_queue.h
Log Message:
Add skeletons for EventQueue and Event types
Index: audio_port.h
===================================================================
RCS file: /cvsroot/freevo/kaa/xine/src/audio_port.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** audio_port.h 21 Jul 2005 18:32:11 -0000 1.4
--- audio_port.h 21 Jul 2005 19:20:58 -0000 1.5
***************
*** 18,22 ****
PyObject *wrapper;
PyObject *wire_object; // Wired object (PostOut/Stream or PostIn/Port)
- PyObject *up, *down;
} Xine_Audio_Port_PyObject;
--- 18,21 ----
--- NEW FILE: event.c ---
#include "xine.h"
#include "event.h"
#include "event_queue.h"
#include "structmember.h"
// Owner must be a EventQueue object
Xine_Event_PyObject *
pyxine_new_event_pyobject(PyObject *owner_pyobject, xine_event_t *event, int
owner)
{
Xine_Event_PyObject *o = (Xine_Event_PyObject
*)xine_object_to_pyobject_find(event);
if (o) {
Py_INCREF(o);
return o;
}
o = (Xine_Event_PyObject
*)Xine_Event_PyObject__new(&Xine_Event_PyObject_Type, NULL, NULL);
if (!o)
return NULL;
if (Xine_Event_Queue_PyObject_Check(owner_pyobject))
o->xine = ((Xine_Event_Queue_PyObject *)owner_pyobject)->xine;
else
PyErr_Format(xine_error, "Unsupported owner for AudioPort object");
o->event = event;
o->owner_pyobject = owner_pyobject;
Py_INCREF(owner_pyobject);
xine_object_to_pyobject_register(event, (PyObject *)o);
return o;
}
static int
Xine_Event_PyObject__clear(Xine_Event_PyObject *self)
{
PyObject **list[] = {&self->owner_pyobject, NULL};
return pyxine_gc_helper_clear(list);
}
static int
Xine_Event_PyObject__traverse(Xine_Event_PyObject *self, visitproc visit, void
*arg)
{
PyObject **list[] = {&self->owner_pyobject, NULL};
return pyxine_gc_helper_traverse(list, visit, arg);
}
PyObject *
Xine_Event_PyObject__new(PyTypeObject *type, PyObject * args, PyObject * kwargs)
{
Xine_Event_PyObject *self;
if (args) {
PyErr_SetString(xine_error, "Don't call me directly");
return NULL;
}
self = (Xine_Event_PyObject *)type->tp_alloc(type, 0);
self->wrapper = Py_None;
Py_INCREF(Py_None);
return (PyObject *)self;
}
static int
Xine_Event_PyObject__init(Xine_Event_PyObject *self, PyObject *args, PyObject
*kwds)
{
return 0;
}
static PyMemberDef Xine_Event_PyObject_members[] = {
{"owner", T_OBJECT_EX, offsetof(Xine_Event_PyObject, owner_pyobject), 0,
"Owner"},
{"wrapper", T_OBJECT_EX, offsetof(Xine_Event_PyObject, wrapper), 0,
"Wrapper object"},
{NULL}
};
void
Xine_Event_PyObject__dealloc(Xine_Event_PyObject *self)
{
printf("DEalloc Event: %x\n", self->event);
if (self->event && self->xine_object_owner) {
Py_BEGIN_ALLOW_THREADS
xine_event_free(self->event);
Py_END_ALLOW_THREADS
}
Py_DECREF(self->wrapper);
Xine_Event_PyObject__clear(self);
xine_object_to_pyobject_unregister(self->event);
self->ob_type->tp_free((PyObject*)self);
}
PyMethodDef Xine_Event_PyObject_methods[] = {
{NULL, NULL}
};
PyTypeObject Xine_Event_PyObject_Type = {
PyObject_HEAD_INIT(NULL)
0, /* ob_size */
"_xine.Event", /* tp_name */
sizeof(Xine_Event_PyObject), /* tp_basicsize */
0, /* tp_itemsize */
(destructor) Xine_Event_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 Event Object", /* tp_doc */
(traverseproc)Xine_Event_PyObject__traverse, /* tp_traverse */
(inquiry)Xine_Event_PyObject__clear, /* tp_clear */
0, /* tp_richcompare */
0, /* tp_weaklistoffset */
0, /* tp_iter */
0, /* tp_iternext */
Xine_Event_PyObject_methods, /* tp_methods */
Xine_Event_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_Event_PyObject__init, /* tp_init */
0, /* tp_alloc */
Xine_Event_PyObject__new, /* tp_new */
};
--- NEW FILE: event_queue.h ---
#ifndef __EVENT_QUEUE_H_
#define __EVENT_QUEUE_H_
#include "config.h"
#include <Python.h>
#include <xine.h>
#define Xine_Event_Queue_PyObject_Check(v) ((v)->ob_type ==
&Xine_Event_Queue_PyObject_Type)
typedef struct {
PyObject_HEAD
xine_event_queue_t *queue;
PyObject *owner_pyobject; // Event_Queue Queue object
int xine_object_owner;
xine_t *xine;
PyObject *wrapper;
} Xine_Event_Queue_PyObject;
extern PyTypeObject Xine_Event_Queue_PyObject_Type;
PyObject *Xine_Event_Queue_PyObject__new(PyTypeObject *, PyObject *, PyObject
*);
Xine_Event_Queue_PyObject *pyxine_new_event_queue_pyobject(PyObject *,
xine_event_queue_t *, int);
#endif
Index: audio_port.c
===================================================================
RCS file: /cvsroot/freevo/kaa/xine/src/audio_port.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -C2 -d -r1.7 -r1.8
*** audio_port.c 21 Jul 2005 18:32:11 -0000 1.7
--- audio_port.c 21 Jul 2005 19:20:58 -0000 1.8
***************
*** 22,28 ****
if (!o)
return NULL;
- o->ao = ao;
- o->owner_pyobject = owner_pyobject;
- Py_INCREF(owner_pyobject);
if (Xine_PyObject_Check(owner_pyobject))
--- 22,25 ----
***************
*** 37,40 ****
--- 34,40 ----
PyErr_Format(xine_error, "Unsupported owner for AudioPort object");
+ o->ao = ao;
+ o->owner_pyobject = owner_pyobject;
+ Py_INCREF(owner_pyobject);
xine_object_to_pyobject_register(ao, (PyObject *)o);
--- NEW FILE: event_queue.c ---
#include "xine.h"
#include "stream.h"
#include "event_queue.h"
#include "structmember.h"
// Owner must be a Stream object
Xine_Event_Queue_PyObject *
pyxine_new_event_queue_pyobject(PyObject *owner_pyobject, xine_event_queue_t
*queue, int owner)
{
Xine_Event_Queue_PyObject *o = (Xine_Event_Queue_PyObject
*)xine_object_to_pyobject_find(queue);
if (o) {
Py_INCREF(o);
return o;
}
o = (Xine_Event_Queue_PyObject
*)Xine_Event_Queue_PyObject__new(&Xine_Event_Queue_PyObject_Type, NULL, NULL);
if (!o)
return NULL;
o->queue = queue;
o->owner_pyobject = owner_pyobject;
Py_INCREF(owner_pyobject);
if (Xine_Stream_PyObject_Check(owner_pyobject))
o->xine = ((Xine_Stream_PyObject *)owner_pyobject)->xine;
else
PyErr_Format(xine_error, "Unsupported owner for AudioPort object");
xine_object_to_pyobject_register(queue, (PyObject *)o);
return o;
}
static int
Xine_Event_Queue_PyObject__clear(Xine_Event_Queue_PyObject *self)
{
PyObject **list[] = {&self->owner_pyobject, NULL};
return pyxine_gc_helper_clear(list);
}
static int
Xine_Event_Queue_PyObject__traverse(Xine_Event_Queue_PyObject *self, visitproc
visit, void *arg)
{
PyObject **list[] = {&self->owner_pyobject, NULL};
return pyxine_gc_helper_traverse(list, visit, arg);
}
PyObject *
Xine_Event_Queue_PyObject__new(PyTypeObject *type, PyObject * args, PyObject *
kwargs)
{
Xine_Event_Queue_PyObject *self;
if (args) {
PyErr_SetString(xine_error, "Don't call me directly");
return NULL;
}
self = (Xine_Event_Queue_PyObject *)type->tp_alloc(type, 0);
self->wrapper = Py_None;
Py_INCREF(Py_None);
return (PyObject *)self;
}
static int
Xine_Event_Queue_PyObject__init(Xine_Event_Queue_PyObject *self, PyObject
*args, PyObject *kwds)
{
return 0;
}
static PyMemberDef Xine_Event_Queue_PyObject_members[] = {
{"owner", T_OBJECT_EX, offsetof(Xine_Event_Queue_PyObject, owner_pyobject),
0, "Owner"},
{"wrapper", T_OBJECT_EX, offsetof(Xine_Event_Queue_PyObject, wrapper), 0,
"Wrapper object"},
{NULL}
};
void
Xine_Event_Queue_PyObject__dealloc(Xine_Event_Queue_PyObject *self)
{
printf("DEalloc Event Queue: %x\n", self->queue);
if (self->queue && self->xine_object_owner) {
Py_BEGIN_ALLOW_THREADS
xine_event_dipose_queue(self->queue);
Py_END_ALLOW_THREADS
}
Py_DECREF(self->wrapper);
Xine_Event_Queue_PyObject__clear(self);
xine_object_to_pyobject_unregister(self->queue);
self->ob_type->tp_free((PyObject*)self);
}
PyMethodDef Xine_Event_Queue_PyObject_methods[] = {
{NULL, NULL}
};
PyTypeObject Xine_Event_Queue_PyObject_Type = {
PyObject_HEAD_INIT(NULL)
0, /* ob_size */
"_xine.EventQueue", /* tp_name */
sizeof(Xine_Event_Queue_PyObject), /* tp_basicsize */
0, /* tp_itemsize */
(destructor) Xine_Event_Queue_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 Event Queue Object", /* tp_doc */
(traverseproc)Xine_Event_Queue_PyObject__traverse, /* tp_traverse */
(inquiry)Xine_Event_Queue_PyObject__clear, /* tp_clear */
0, /* tp_richcompare */
0, /* tp_weaklistoffset */
0, /* tp_iter */
0, /* tp_iternext */
Xine_Event_Queue_PyObject_methods, /* tp_methods */
Xine_Event_Queue_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_Event_Queue_PyObject__init, /* tp_init */
0, /* tp_alloc */
Xine_Event_Queue_PyObject__new, /* tp_new */
};
Index: xine.c
===================================================================
RCS file: /cvsroot/freevo/kaa/xine/src/xine.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -C2 -d -r1.11 -r1.12
*** xine.c 21 Jul 2005 18:48:18 -0000 1.11
--- xine.c 21 Jul 2005 19:20:58 -0000 1.12
***************
*** 8,11 ****
--- 8,13 ----
#include "post_out.h"
#include "post_in.h"
+ #include "event_queue.h"
+ #include "event.h"
#include "post/buffer.h"
***************
*** 677,680 ****
--- 679,692 ----
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)
xine_object_to_pyobject_dict = PyDict_New();
Index: __init__.py
===================================================================
RCS file: /cvsroot/freevo/kaa/xine/src/__init__.py,v
retrieving revision 1.10
retrieving revision 1.11
diff -C2 -d -r1.10 -r1.11
*** __init__.py 21 Jul 2005 18:31:57 -0000 1.10
--- __init__.py 21 Jul 2005 19:20:58 -0000 1.11
***************
*** 286,290 ****
return self._stream.open(mrl)
! def play(self, pos = 0, time = 0.0):
return self._stream.play(pos, int(time*1000))
--- 286,290 ----
return self._stream.open(mrl)
! def play(self, time = 0.0, pos = 0):
return self._stream.play(pos, int(time*1000))
***************
*** 328,332 ****
def get_pos_length(self):
! return self._stream.get_pos_length()
def get_info(self, info):
--- 328,343 ----
def get_pos_length(self):
! stream, time, length = self._stream.get_pos_length()
! time /= 1000.0
! return stream, time, length
!
! def get_stream_pos(self):
! return self.get_pos_length()[0]
!
! def get_time(self):
! return self.get_pos_length()[1]
!
! def get_length(self):
! return self.get_pos_length()[2]
def get_info(self, info):
***************
*** 342,345 ****
--- 353,378 ----
return self._stream.set_param(param, value)
+ def _seek(self, time):
+ if self.get_status() != STATUS_PLAY:
+ print "Stream not playing"
+ return False
+ speed = self.get_parameter(PARAM_SPEED)
+ self.set_parameter(PARAM_SPEED, SPEED_NORMAL)
+ if not self.get_parameter(STREAM_INFO_SEEKABLE):
+ print "Stream not seekable"
+ return False
+
+ self.play(time)
+ self.set_parameter(PARAM_SPEED, speed)
+
+ def seek_relative(self, offset):
+ t = max(0, self.get_time() + offset)
+ print t
+ return self._seek(t)
+
+ def seek_absolute(self, t):
+ t = max(0, time)
+ return self._seek(t)
+
--- NEW FILE: event.h ---
#ifndef __EVENT_H_
#define __EVENT_H_
#include "config.h"
#include <Python.h>
#include <xine.h>
#define Xine_Event_PyObject_Check(v) ((v)->ob_type == &Xine_Event_PyObject_Type)
typedef struct {
PyObject_HEAD
xine_event_t *event;
PyObject *owner_pyobject; // Event Queue object
int xine_object_owner;
xine_t *xine;
PyObject *wrapper;
} Xine_Event_PyObject;
extern PyTypeObject Xine_Event_PyObject_Type;
PyObject *Xine_Event_PyObject__new(PyTypeObject *, PyObject *, PyObject *);
Xine_Event_PyObject *pyxine_new_event_pyobject(PyObject *, xine_event_t *, int);
#endif
-------------------------------------------------------
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