[vdr] xineliboutput problem

Scott Waye scott at waye.co.uk
Fri Nov 18 00:09:53 CET 2011


I upgraded my xinelib-1.2 to the latest from hg, recompiled 
xineliboutput and its frontends and now vdr-sxfe will not start.  I get 
this in the log:

Nov 17 22:56:26 giradot vdr-sxfe[6256]: [6256] [scrnsaver] Error: The 
name org.gnome.ScreenSaver was not provided by any .service files
Nov 17 22:56:26 giradot vdr-sxfe[6256]: [6256] [xine-vo  ] 
wire_video_driver() FAILED (vo_driver != vos_driver)
Nov 17 22:56:26 giradot kernel: vdr-sxfe[6256]: segfault at 0 ip (null) 
sp 00007fffa201d2b8 error 14 in vdr-sxfe[400000+22000]
Nov 17 22:56:26 giradot vdr-sxfe[6256]: [6256] [vdr-fe]    
wire_video_driver() for osdscaler failed

Looking at the code for wire_video_driver, I dont understand how this is 
meant to work.  It seems to take the driver element from the 
xine_video_port_t (or xine_video_port_s) and compare it to the same 
variable but cast to a vos_t and its ->driver:

typedef struct {
   xine_video_port_t         vo; /* public part */
   vo_driver_t              *driver;
   /* ... */
} vos_t;

int wire_video_driver(xine_video_port_t *video_port, vo_driver_t *hook)
   vo_driver_t *vos_driver = ((vos_t*)video_port)->driver;

   if (video_port->driver != vos_driver) {
     LOGMSG("wire_video_driver() FAILED (vo_driver != vos_driver)");
     return 0;

But how is this meant to work as in xine_video_port_t  the driver is the 
last element, but in vos_t driver is after the xine_video_port, so 
wouldn't that be 4 bytes later (on a 32 bit system)?

Obviously my C is not up to scratch :-(

More information about the vdr mailing list