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

Reply via email to