Update of /cvsroot/freevo/kaa/xine/src
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv12285

Modified Files:
        __init__.py audio_port.c post.c post.h post_in.c post_out.c 
        stream.c video_port.c xine.c xine.h 
Log Message:
Added get_post_plugin method to PostIn and PostOut objects; refactored
garbage collection functions (clear/traverse) for all types.


Index: stream.c
===================================================================
RCS file: /cvsroot/freevo/kaa/xine/src/stream.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -C2 -d -r1.5 -r1.6
*** stream.c    19 Jul 2005 05:51:59 -0000      1.5
--- stream.c    19 Jul 2005 16:22:20 -0000      1.6
***************
*** 37,62 ****
  Xine_Stream_PyObject__clear(Xine_Stream_PyObject *self)
  {
!     PyObject *tmp;
!     if (self->xine_pyobject) {
!         tmp = self->xine_pyobject;
!         self->xine_pyobject = 0;
!         Py_DECREF(tmp);
!     }
!     if (self->ao_pyobject) {
!         tmp = (PyObject *)self->ao_pyobject;
!         self->ao_pyobject = 0;
!         Py_DECREF(tmp);
!     }
!     if (self->vo_pyobject) {
!         tmp = (PyObject *)self->vo_pyobject;
!         self->vo_pyobject = 0;
!         Py_DECREF(tmp);
!     }
!     if (self->master) {
!         tmp = (PyObject *)self->master;
!         self->master= 0;
!         Py_DECREF(tmp);
!     }
!     return 0;
  }
  
--- 37,43 ----
  Xine_Stream_PyObject__clear(Xine_Stream_PyObject *self)
  {
!     PyObject **list[] = {&self->xine_pyobject, (PyObject 
**)&self->ao_pyobject,
!                          (PyObject **)&self->vo_pyobject, &self->master, 
NULL};
!     return pyxine_gc_helper_clear(list);
  }
  
***************
*** 64,89 ****
  Xine_Stream_PyObject__traverse(Xine_Stream_PyObject *self, visitproc visit, 
void *arg)
  {
!     int ret;
!     if (self->xine_pyobject) {
!         ret = visit((PyObject *)self->xine_pyobject, arg);
!         if (ret != 0)
!             return ret;
!     }
!     if (self->ao_pyobject) {
!         ret = visit((PyObject *)self->ao_pyobject, arg);
!         if (ret != 0)
!             return ret;
!     }
!     if (self->vo_pyobject) {
!         ret = visit((PyObject *)self->vo_pyobject, arg);
!         if (ret != 0)
!             return ret;
!     }
!     if (self->master) {
!         ret = visit((PyObject *)self->master, arg);
!         if (ret != 0)
!             return ret;
!     }
!     return 0;
  }
  
--- 45,51 ----
  Xine_Stream_PyObject__traverse(Xine_Stream_PyObject *self, visitproc visit, 
void *arg)
  {
!     PyObject **list[] = {&self->xine_pyobject, (PyObject 
**)&self->ao_pyobject,
!                          (PyObject **)&self->vo_pyobject, &self->master, 
NULL};
!     return pyxine_gc_helper_traverse(list, visit, arg);
  }
  
***************
*** 193,196 ****
--- 155,166 ----
  
  PyObject *
+ Xine_Stream_PyObject_close(Xine_Stream_PyObject *self, PyObject *args, 
PyObject *kwargs)
+ {
+     Py_BEGIN_ALLOW_THREADS
+     xine_close(self->stream);
+     Py_END_ALLOW_THREADS
+     return Py_INCREF(Py_None), Py_None;
+ }
+ PyObject *
  Xine_Stream_PyObject_get_source(Xine_Stream_PyObject *self, PyObject *args, 
PyObject *kwargs)
  {
***************
*** 332,335 ****
--- 302,306 ----
      {"stop", (PyCFunction) Xine_Stream_PyObject_stop, METH_VARARGS },
      {"eject", (PyCFunction) Xine_Stream_PyObject_eject, METH_VARARGS },
+     {"close", (PyCFunction) Xine_Stream_PyObject_close, METH_VARARGS },
      {"get_source", (PyCFunction) Xine_Stream_PyObject_get_source, 
METH_VARARGS },
      {"slave", (PyCFunction) Xine_Stream_PyObject_slave, METH_VARARGS },

Index: post.h
===================================================================
RCS file: /cvsroot/freevo/kaa/xine/src/post.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** post.h      18 Jul 2005 03:40:21 -0000      1.1
--- post.h      19 Jul 2005 16:22:20 -0000      1.2
***************
*** 5,8 ****
--- 5,9 ----
  #include <Python.h>
  #include <xine.h>
+ #include <xine/post.h>
  
  
***************
*** 19,22 ****
--- 20,24 ----
      PyObject *audio_targets, *video_targets;
  
+     PyObject *prev, *next; // ref to previous and next plugins in the chain
      PyObject *wrapper;
  } Xine_Post_PyObject;

Index: post_in.c
===================================================================
RCS file: /cvsroot/freevo/kaa/xine/src/post_in.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** post_in.c   18 Jul 2005 19:36:50 -0000      1.1
--- post_in.c   19 Jul 2005 16:22:20 -0000      1.2
***************
*** 28,38 ****
  Xine_Post_In_PyObject__clear(Xine_Post_In_PyObject *self)
  {
!     PyObject *tmp;
!     if (self->post_pyobject) {
!         tmp = self->post_pyobject;
!         self->post_pyobject = 0;
!         Py_DECREF(tmp);
!     }
!     return 0;
  }
  
--- 28,34 ----
  Xine_Post_In_PyObject__clear(Xine_Post_In_PyObject *self)
  {
!     PyObject **list[] = {&self->post_pyobject, &self->wrapper, NULL};
!     return pyxine_gc_helper_clear(list);
! 
  }
  
***************
*** 40,49 ****
  Xine_Post_In_PyObject__traverse(Xine_Post_In_PyObject *self, visitproc visit, 
void *arg)
  {
!     int ret;
!     if (self->post_pyobject) {
!         ret = visit((PyObject *)self->post_pyobject, arg);
!         if (ret != 0)
!             return ret;
!     }
  }
  
--- 36,41 ----
  Xine_Post_In_PyObject__traverse(Xine_Post_In_PyObject *self, visitproc visit, 
void *arg)
  {
!     PyObject **list[] = {&self->post_pyobject, &self->wrapper, NULL};
!     return pyxine_gc_helper_traverse(list, visit, arg);
  }
  
***************
*** 85,89 ****
      if (self->post_in && self->xine_object_owner) {
      }
-     Py_DECREF(self->wrapper);
      Xine_Post_In_PyObject__clear(self);
      xine_object_to_pyobject_unregister(self->post_in);
--- 77,80 ----

Index: xine.h
===================================================================
RCS file: /cvsroot/freevo/kaa/xine/src/xine.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** xine.h      19 Jul 2005 04:17:08 -0000      1.3
--- xine.h      19 Jul 2005 16:22:22 -0000      1.4
***************
*** 22,25 ****
--- 22,29 ----
  PyObject *xine_object_to_pyobject_find(void *ptr);
  
+ int pyxine_gc_helper_traverse(PyObject ***list, visitproc visit, void *arg);
+ int pyxine_gc_helper_clear(PyObject ***list);
+ 
+ 
  
  #endif

Index: post.c
===================================================================
RCS file: /cvsroot/freevo/kaa/xine/src/post.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** post.c      18 Jul 2005 19:36:49 -0000      1.2
--- post.c      19 Jul 2005 16:22:20 -0000      1.3
***************
*** 38,58 ****
  Xine_Post_PyObject__clear(Xine_Post_PyObject *self)
  {
!     PyObject *tmp;
!     if (self->xine_pyobject) {
!         tmp = self->xine_pyobject;
!         self->xine_pyobject = 0;
!         Py_DECREF(tmp);
!     }
!     if (self->audio_targets) {
!         tmp = self->audio_targets;
!         self->audio_targets = 0;
!         Py_DECREF(tmp);
!     }
!     if (self->video_targets) {
!         tmp = self->video_targets;
!         self->video_targets = 0;
!         Py_DECREF(tmp);
!     }
!     return 0;
  }
  
--- 38,44 ----
  Xine_Post_PyObject__clear(Xine_Post_PyObject *self)
  {
!     PyObject **list[] = {&self->xine_pyobject, &self->audio_targets, 
!                          &self->video_targets, &self->prev, &self->next, 
NULL};
!     return pyxine_gc_helper_clear(list);
  }
  
***************
*** 60,80 ****
  Xine_Post_PyObject__traverse(Xine_Post_PyObject *self, visitproc visit, void 
*arg)
  {
!     int ret;
!     if (self->xine_pyobject) {
!         ret = visit((PyObject *)self->xine_pyobject, arg);
!         if (ret != 0)
!             return ret;
!     }
!     if (self->audio_targets) {
!         ret = visit((PyObject *)self->audio_targets, arg);
!         if (ret != 0)
!             return ret;
!     }
!     if (self->video_targets) {
!         ret = visit((PyObject *)self->video_targets, arg);
!         if (ret != 0)
!             return ret;
!     }
!     return 0;
  }
  
--- 46,52 ----
  Xine_Post_PyObject__traverse(Xine_Post_PyObject *self, visitproc visit, void 
*arg)
  {
!     PyObject **list[] = {&self->xine_pyobject, &self->audio_targets, 
!                          &self->video_targets, &self->prev, &self->next, 
NULL};
!     return pyxine_gc_helper_traverse(list, visit, arg);
  }
  
***************
*** 93,97 ****
      self->xine = NULL;
      self->xine_pyobject = NULL;
!     self->wrapper = Py_None;
      Py_INCREF(Py_None);
      return (PyObject *)self;
--- 65,71 ----
      self->xine = NULL;
      self->xine_pyobject = NULL;
!     self->wrapper = self->prev = self->next = Py_None;
!     Py_INCREF(Py_None);
!     Py_INCREF(Py_None);
      Py_INCREF(Py_None);
      return (PyObject *)self;
***************
*** 105,108 ****
--- 79,84 ----
  
  static PyMemberDef Xine_Post_PyObject_members[] = {
+     {"prev", T_OBJECT_EX, offsetof(Xine_Post_PyObject, prev), 0, "Previous 
plugin in chain"},
+     {"next", T_OBJECT_EX, offsetof(Xine_Post_PyObject, next), 0, "Next plugin 
in chain"},
      {"wrapper", T_OBJECT_EX, offsetof(Xine_Post_PyObject, wrapper), 0, 
"Wrapper object"},
      {NULL}

Index: post_out.c
===================================================================
RCS file: /cvsroot/freevo/kaa/xine/src/post_out.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** post_out.c  18 Jul 2005 19:36:50 -0000      1.1
--- post_out.c  19 Jul 2005 16:22:20 -0000      1.2
***************
*** 26,29 ****
--- 26,30 ----
      Py_INCREF(post);
      o->xine_object_owner = owner;
+ 
      xine_object_to_pyobject_register(post_out, (PyObject *)o);
      return o;
***************
*** 34,44 ****
  Xine_Post_Out_PyObject__clear(Xine_Post_Out_PyObject *self)
  {
!     PyObject *tmp;
!     if (self->post_pyobject) {
!         tmp = self->post_pyobject;
!         self->post_pyobject = 0;
!         Py_DECREF(tmp);
!     }
!     return 0;
  }
  
--- 35,40 ----
  Xine_Post_Out_PyObject__clear(Xine_Post_Out_PyObject *self)
  {
!     PyObject **list[] = {&self->post_pyobject, &self->wrapper, NULL};
!     return pyxine_gc_helper_clear(list);
  }
  
***************
*** 46,55 ****
  Xine_Post_Out_PyObject__traverse(Xine_Post_Out_PyObject *self, visitproc 
visit, void *arg)
  {
!     int ret;
!     if (self->post_pyobject) {
!         ret = visit((PyObject *)self->post_pyobject, arg);
!         if (ret != 0)
!             return ret;
!     }
  }
  
--- 42,47 ----
  Xine_Post_Out_PyObject__traverse(Xine_Post_Out_PyObject *self, visitproc 
visit, void *arg)
  {
!     PyObject **list[] = {&self->post_pyobject, &self->wrapper, NULL};
!     return pyxine_gc_helper_traverse(list, visit, arg);
  }
  
***************
*** 91,95 ****
      if (self->post_out && self->xine_object_owner) {
      }
-     Py_DECREF(self->wrapper);
      Xine_Post_Out_PyObject__clear(self);
      xine_object_to_pyobject_unregister(self->post_out);
--- 83,86 ----

Index: video_port.c
===================================================================
RCS file: /cvsroot/freevo/kaa/xine/src/video_port.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** video_port.c        19 Jul 2005 02:07:24 -0000      1.4
--- video_port.c        19 Jul 2005 16:22:21 -0000      1.5
***************
*** 33,44 ****
  Xine_Video_Port_PyObject__clear(Xine_Video_Port_PyObject * self)
  {
!     PyObject *tmp;
! 
!     if (self->xine_pyobject) {
!         tmp = self->xine_pyobject;
!         self->xine_pyobject = 0;
!         Py_DECREF(tmp);
!     }
!     return 0;
  }
  
--- 33,38 ----
  Xine_Video_Port_PyObject__clear(Xine_Video_Port_PyObject * self)
  {
!     PyObject **list[] = {&self->xine_pyobject, NULL};
!     return pyxine_gc_helper_clear(list);
  }
  
***************
*** 47,58 ****
                                     visitproc visit, void *arg)
  {
!     int ret;
! 
!     if (self->xine_pyobject) {
!         ret = visit((PyObject *) self->xine_pyobject, arg);
!         if (ret != 0)
!             return ret;
!     }
!     return 0;
  }
  
--- 41,46 ----
                                     visitproc visit, void *arg)
  {
!     PyObject **list[] = {&self->xine_pyobject, NULL};
!     return pyxine_gc_helper_traverse(list, visit, arg);
  }
  

Index: xine.c
===================================================================
RCS file: /cvsroot/freevo/kaa/xine/src/xine.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -C2 -d -r1.7 -r1.8
*** xine.c      19 Jul 2005 06:01:24 -0000      1.7
--- xine.c      19 Jul 2005 16:22:22 -0000      1.8
***************
*** 53,57 ****
  }
  
! ///
  
  void
--- 53,84 ----
  }
  
! //
! // GC helper functions
! int
! pyxine_gc_helper_clear(PyObject ***list)
! {
!     int i;
!     for (i = 0; list[i] && *list[i]; i++) {
!         PyObject *tmp = *list[i];
!         *list[i] = 0;
!         Py_DECREF(tmp);
!     }
!     return 0;
! }
! 
! int
! pyxine_gc_helper_traverse(PyObject ***list, visitproc visit, void *arg)
! {
!     int i, ret;
!     for (i = 0; list[i] && *list[i]; i++) {
!         ret = visit(*list[i], arg);
!         if (ret != 0)
!             return ret;
!     }
!     return 0;
! }
! 
! //
! 
  
  void
***************
*** 73,88 ****
  Xine_PyObject__clear(Xine_PyObject *self)
  {
!     PyObject *tmp;
!     if (self->dependencies) {
!         tmp = self->dependencies;
!         self->dependencies= 0;
!         Py_DECREF(tmp);
!     }
!     if (self->log_callback) {
!         tmp = self->log_callback;
!         self->log_callback = 0;
!         Py_DECREF(tmp);
!     }
!     return 0;
  }
  
--- 100,105 ----
  Xine_PyObject__clear(Xine_PyObject *self)
  {
!     PyObject **list[] = {&self->dependencies, &self->log_callback, NULL};
!     return pyxine_gc_helper_clear(list);
  }
  
***************
*** 90,104 ****
  Xine_PyObject__traverse(Xine_PyObject *self, visitproc visit, void *arg)
  {
!     if (self->dependencies) {
!         int ret = visit(self->dependencies, arg);
!         if (ret != 0)
!             return ret;
!     }
!     if (self->log_callback) {
!         int ret = visit(self->log_callback, arg);
!         if (ret != 0)
!             return ret;
!     }
!     return 0;
  }
  
--- 107,112 ----
  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);
  }
  

Index: __init__.py
===================================================================
RCS file: /cvsroot/freevo/kaa/xine/src/__init__.py,v
retrieving revision 1.7
retrieving revision 1.8
diff -C2 -d -r1.7 -r1.8
*** __init__.py 19 Jul 2005 06:01:24 -0000      1.7
--- __init__.py 19 Jul 2005 16:22:18 -0000      1.8
***************
*** 11,14 ****
--- 11,17 ----
  
  def _wrap_xine_object(obj):
+     if obj == None:
+         return obj
+ 
      if obj.wrapper and obj.wrapper():
          return obj.wrapper()
***************
*** 140,147 ****
          self.signals["log"].emit(section)
   
!     def get_engine_param(self, param):
          return self._xine.get_engine_param(param)
  
!     def set_engine_param(self, param, value):
          return self._xine.set_engine_param(param, value)
        
--- 143,150 ----
          self.signals["log"].emit(section)
   
!     def get_parameter(self, param):
          return self._xine.get_engine_param(param)
  
!     def set_parameter(self, param, value):
          return self._xine.set_engine_param(param, value)
        
***************
*** 207,210 ****
--- 210,216 ----
          return self._stream.stop()
  
+     def close(self):
+         return self._stream.close()
+ 
      def eject(self):
          return self._stream.eject()
***************
*** 285,288 ****
--- 291,297 ----
          return _wrap_xine_object(self._post.post_input(name))
  
+ #    def wire(self, input):
+ #        output = self.get_output
+ 
  
  class PostOut(object):
***************
*** 300,305 ****
--- 309,320 ----
              raise XineError, "Unsupported input type: " + str(type(input))
  
+     def get_post_plugin(self):
+         return _wrap_xine_object(self._post_out.post)
+ 
  
  class PostIn(object):
      def __init__(self, post_in):
          self._post_in = post_in
+ 
+     def get_post_plugin(self):
+         return _wrap_xine_object(self._post_in.post)

Index: audio_port.c
===================================================================
RCS file: /cvsroot/freevo/kaa/xine/src/audio_port.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** audio_port.c        19 Jul 2005 02:07:24 -0000      1.4
--- audio_port.c        19 Jul 2005 16:22:20 -0000      1.5
***************
*** 29,39 ****
  Xine_Audio_Port_PyObject__clear(Xine_Audio_Port_PyObject *self)
  {
!     PyObject *tmp;
!     if (self->xine_pyobject) {
!         tmp = self->xine_pyobject;
!         self->xine_pyobject = 0;
!         Py_DECREF(tmp);
!     }
!     return 0;
  }
  
--- 29,34 ----
  Xine_Audio_Port_PyObject__clear(Xine_Audio_Port_PyObject *self)
  {
!     PyObject **list[] = {&self->xine_pyobject, NULL};
!     return pyxine_gc_helper_clear(list);
  }
  
***************
*** 41,51 ****
  Xine_Audio_Port_PyObject__traverse(Xine_Audio_Port_PyObject *self, visitproc 
visit, void *arg)
  {
!     int ret;
!     if (self->xine_pyobject) {
!         ret = visit((PyObject *)self->xine_pyobject, arg);
!         if (ret != 0)
!             return ret;
!     }
!     return 0;
  }
  
--- 36,41 ----
  Xine_Audio_Port_PyObject__traverse(Xine_Audio_Port_PyObject *self, visitproc 
visit, void *arg)
  {
!     PyObject **list[] = {&self->xine_pyobject, NULL};
!     return pyxine_gc_helper_traverse(list, visit, arg);
  }
  



-------------------------------------------------------
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