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

vdr mailing list

Reply via email to