Update of /cvsroot/xine/xine-plugin/src
In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv11883
Modified Files:
plugin.c
Log Message:
Avoid calling XInitThreads and use the new x11 visual instead.
Calling XInitThreads from the plugin is a bit buggy because
XInitThreads should be called before other Xlib functions.
Index: plugin.c
===================================================================
RCS file: /cvsroot/xine/xine-plugin/src/plugin.c,v
retrieving revision 1.40
retrieving revision 1.41
diff -u -r1.40 -r1.41
--- plugin.c 19 Nov 2006 11:46:49 -0000 1.40
+++ plugin.c 23 Nov 2006 16:38:42 -0000 1.41
@@ -108,11 +108,11 @@
/*****************************************************************************/
-static void
-dest_size_cb (void *data,
- int video_width, int video_height,
- double video_pixel_aspect,
- int *dest_width, int *dest_height, double *dest_pixel_aspect)
+static void dest_size_cb (void *data,
+ int video_width, int video_height,
+ double video_pixel_aspect,
+ int *dest_width, int *dest_height,
+ double *dest_pixel_aspect)
{
xine_plugin_t *this = data;
@@ -121,13 +121,12 @@
*dest_pixel_aspect = video_pixel_aspect ? : 1.0;
}
-static void
-frame_output_cb (void *data,
- int video_width, int video_height,
- double video_pixel_aspect,
- int *dest_x, int *dest_y,
- int *dest_width, int *dest_height,
- double *dest_pixel_aspect, int *win_x, int *win_y)
+static void frame_output_cb (void *data,
+ int video_width, int video_height,
+ double video_pixel_aspect,
+ int *dest_x, int *dest_y,
+ int *dest_width, int *dest_height,
+ double *dest_pixel_aspect, int *win_x, int *win_y)
{
xine_plugin_t *this = data;
@@ -140,6 +139,24 @@
*dest_pixel_aspect = video_pixel_aspect ? : 1.0;
}
+#ifdef XINE_VISUAL_TYPE_X11_2
+static void lock_display_cb (void *data)
+{
+ xine_plugin_t *this = data;
+
+ pthread_mutex_lock (&this->mutex);
+ XLockDisplay (this->display);
+}
+
+static void unlock_display_cb (void *data)
+{
+ xine_plugin_t *this = data;
+
+ XUnlockDisplay (this->display);
+ pthread_mutex_unlock (&this->mutex);
+}
+#endif
+
/*****************************************************************************/
static void osd_show_text (xine_plugin_t *this, const char *text) {
@@ -279,9 +296,8 @@
switch (key) {
case XK_Escape:
osd_show_text (this, OSD_TEXT_QUIT);
- xine_stop (this->stream);
- xine_close (this->stream);
- return (void *) 0;
+ this->playing = 0;
+ break;
case XK_Return:
if (xine_get_status (this->stream) == XINE_STATUS_PLAY) {
xine_stop (this->stream);
@@ -588,17 +604,23 @@
visual.screen = this->screen;
visual.d = this->window;
+ visual.user_data = this;
visual.dest_size_cb = dest_size_cb;
visual.frame_output_cb = frame_output_cb;
- visual.user_data = this;
+
+#ifdef XINE_VISUAL_TYPE_X11_2
+ visual.lock_display = lock_display_cb;
+ visual.unlock_display = unlock_display_cb;
this->vo_driver = xine_open_video_driver (this->xine, driver,
- XINE_VISUAL_TYPE_X11,
- &visual);
+ XINE_VISUAL_TYPE_X11_2,
&visual);
+#else
+ this->vo_driver = xine_open_video_driver (this->xine, driver,
+ XINE_VISUAL_TYPE_X11, &visual);
+#endif
} else {
this->vo_driver = xine_open_video_driver (this->xine, "none",
- XINE_VISUAL_TYPE_NONE,
- NULL);
+ XINE_VISUAL_TYPE_NONE, NULL);
}
if (!this->vo_driver) {
@@ -713,10 +735,13 @@
NPError NPP_Initialize (void) {
log ("NPP_Initialize()");
+ /* XInitThreads is buggy when called after other Xlib functions! */
+#ifndef XINE_VISUAL_TYPE_X11_2
if (!XInitThreads ()) {
log ("XInitThreads() failed!");
return NPERR_GENERIC_ERROR;
}
+#endif
return NPERR_NO_ERROR;
}
@@ -724,14 +749,15 @@
NPError NPP_New (NPMIMEType mimetype, NPP instance, uint16 mode,
int16 argc, char *argn[], char *argv[],
NPSavedData * saved) {
- xine_plugin_t *this;
- char *mrl = NULL;
- int loop = 1;
- char *demux;
- int i;
+ xine_plugin_t *this;
+ pthread_mutexattr_t attr;
+ char *mrl = NULL;
+ int loop = 1;
+ char *demux;
+ int i;
- log ("NPP_New( mimetype=%s, instance=%p, mode=%d )",
- mimetype, instance, mode);
+ log ("NPP_New( mimetype=%s, instance=%p, mode=%d, saved=%p )",
+ mimetype, instance, mode, saved);
if (!instance)
return NPERR_INVALID_INSTANCE_ERROR;
@@ -797,7 +823,10 @@
if (mrl && *mrl)
this->track = playlist_insert (&this->list, mrl);
- pthread_mutex_init (&this->mutex, NULL);
+ pthread_mutexattr_init (&attr);
+ pthread_mutexattr_settype (&attr, PTHREAD_MUTEX_RECURSIVE);
+ pthread_mutex_init (&this->mutex, &attr);
+ pthread_mutexattr_destroy (&attr);
instance->pdata = this;
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Xine-cvslog mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/xine-cvslog