libxine-1.2 video_out_xvmc

Arvind R <[email protected]> Thu, 3 Jan 2013 01:25:13 +0530
Newsgroups gmane.comp.video.xine.devel
Message-ID <CAA_L+UNoLr-GP4x_fJSaELakej2RnJCidJ5aTJBHOW_j8hKhMw@mail.gmail.com>
Hi all,

I use a GeForce nVidia Card with nouveau driver. After seeing Mplayer
work with the libXvMC_nouveau driver (mesa-9.0.1), I tried xine. Ended
up locking up my screen.  After using the foll. patch, I manage to get
a single frame display using XvMCsoftpipe, but when using XvMCnouveau,
I seem to see many continuous
video_out_xvmc: (xvmc_update_frame_format:770) xvmc_update_frame_format
messages.
Both crash, but I think there is a clue here. The softpipe being slow,
allows the frame_format to be updated; but the faster nouveau does not
- so a string of calls.
The patch gets execution past XvMCCreateSurface in xvmc_set_context;
and upto XvMCPutSurface in xvmc_display_frame (past the
XvMCSyncSurface.

Can anyone help? BTW, this patch, which basically executes
XvMCCreateSurface with the display locked, I think, is needed.

Arvind R.

diff -uprN a/src/video_out/video_out_xvmc.c b/src/video_out/video_out_xvmc.c
--- a/src/video_out/video_out_xvmc.c	2012-12-26 04:50:34 +0530
+++ b/src/video_out/video_out_xvmc.c	2013-01-02 23:18:14.000000000 +0530
@@ -646,17 +646,21 @@ static cxid_t *xvmc_set_context (xvmc_dr

     this->context_id.xid = (void *)this->context.context_id;

+    lprintf ("  Creating %d surfaces\n", this->num_frame_buffers);
     for(i = 0; i < this->num_frame_buffers; i++) {
+      XLockDisplay(this->display);
       result = XvMCCreateSurface(this->display, &this->context,
 				 &this->frames[i]->surface);
+      XUnlockDisplay(this->display);
       if(result != Success) {
-	XvMCDestroyContext(this->display, &this->context);
-	xprintf(this->xine, XINE_VERBOSITY_DEBUG, "set_context: couldn't
create XvMCSurfaces\n");
-	this->context_id.xid            = NULL;
-	macroblocks->xine_mc.xvmc_accel = 0;
-	_x_abort();
+        XLockDisplay(this->display);
+        XvMCDestroyContext(this->display, &this->context);
+        XUnlockDisplay(this->display);
+        xprintf(this->xine, XINE_VERBOSITY_DEBUG, "set_context:
couldn't create XvMCSurfaces\n");
+        this->context_id.xid            = NULL;
+        macroblocks->xine_mc.xvmc_accel = 0;
+        _x_abort();
       }
-
       lprintf ("  CreatedSurface %d
0x%lx\n",i,(long)&this->frames[i]->surface);
     }

------------------------------------------------------------------------------
Master Java SE, Java EE, Eclipse, Spring, Hibernate, JavaScript, jQuery
and much more. Keep your Java skills current with LearnJavaNow -
200+ hours of step-by-step video tutorials by Java experts.
SALE $49.99 this month only -- learn more at:
http://p.sf.net/sfu/learnmore_122612