diff options
| -rw-r--r-- | client/Makefile.am | 6 | ||||
| -rw-r--r-- | client/mainwindow.cc | 2 | ||||
| -rw-r--r-- | client/miav_client.cc | 2 | ||||
| -rw-r--r-- | client/player.cc | 41 | ||||
| -rw-r--r-- | client/player.h | 11 | ||||
| -rw-r--r-- | client/videowidget.cc | 10 | ||||
| -rw-r--r-- | client/xvaccelrenderer.cc | 635 | ||||
| -rw-r--r-- | client/xvaccelrenderer.h | 65 | 
8 files changed, 422 insertions, 350 deletions
| diff --git a/client/Makefile.am b/client/Makefile.am index b0b3ad8..0767a22 100644 --- a/client/Makefile.am +++ b/client/Makefile.am @@ -23,7 +23,8 @@ miav_client_SOURCES = $(shell ../tools/MocList cc ) \  	player.cc \  	splashscreen.cc \  	videowidget.cc \ -	yuv_draw.cc +	yuv_draw.cc \ +	xvaccelrenderer.cc  EXTRA_DIST = \  	aboutwindow.h \ @@ -42,7 +43,8 @@ EXTRA_DIST = \  	player.h \  	splashscreen.h \  	videowidget.h \ -	yuv_draw.h +	yuv_draw.h \ +	xvaccelrenderer.h  miav_client_LDADD := $(shell ../tools/MocList o ) \  	../lib/libmiav.la \ diff --git a/client/mainwindow.cc b/client/mainwindow.cc index cab6189..c3b8649 100644 --- a/client/mainwindow.cc +++ b/client/mainwindow.cc @@ -62,6 +62,8 @@ MainWindow::MainWindow(): QWidget()  {    MIaV::info->log("Starting MIaV v. %s.", VERSION); +  resize(800, 600); +    // Create the overlaying splashscreen    SplashScreen splash(this);    /* diff --git a/client/miav_client.cc b/client/miav_client.cc index 4051b16..ff38f09 100644 --- a/client/miav_client.cc +++ b/client/miav_client.cc @@ -52,7 +52,7 @@ int main(int argc, char *argv[])    NetworkSender sender;    decoder.start(); -  player.start(); +  player.start(500); // 25 frames / second    sender.start();    return app.exec(); diff --git a/client/player.cc b/client/player.cc index f44842c..fad7df4 100644 --- a/client/player.cc +++ b/client/player.cc @@ -26,6 +26,45 @@   */  #include "player.h" +static unsigned char yuv[720*576*4]; +static int num = 0; + +Player::Player(VideoWidget *w) +{ +  widget = w; + +  render.init(widget, 720, 576);//widget->getWidth(), widget->getHeight() + +  connect(this, SIGNAL(timeout()), this, SLOT(show_frame())); + +  for(int x = 1; x < 720; x++) +    for(int y = 1; y < 576; y++) { +      yuv[x + y * 576 * 1] = x % 720 * 255; +      yuv[x + y * 576 * 2] = y % 576 * 255; +      yuv[x + y * 576 * 3] = (unsigned char)x % y; +    } +} + +Player::~Player() +{ +  render.end(); +} + +void Player::show_frame() +{ +  fprintf(stderr, "Frame!%d\n", num++); +  render.width = widget->getWidth(); +  render.height = widget->getHeight(); +  render.display(yuv, 720, 576);//widget->width(), widget->height()); +} + + + + + + +#if 0 +  #define DBG(x) fprintf(stderr, x)  #include "info.h" @@ -284,7 +323,7 @@ void Player::run()  // From:  //  http://cvs.sourceforge.net/viewcvs.py/libmpeg2/MSSG/display_x11.c?rev=1.2 -#if 0 +//#if 0  #ifdef HAVE_XV  xv_port = 0;  if (Success == XvQueryExtension(mydisplay,&ver,&rel,&req,&ev,&err)) { diff --git a/client/player.h b/client/player.h index 24920a5..59e1f70 100644 --- a/client/player.h +++ b/client/player.h @@ -27,23 +27,28 @@  #ifndef __MIAV_PLAYER_H__  #define __MIAV_PLAYER_H__ -#include <QThread> +#include <QTimer>  #include "videowidget.h"  #include <X11/Xlib.h>  #include <X11/extensions/Xvlib.h> -class Player : public QThread +#include "xvaccelrenderer.h" + +class Player : public QTimer  { +Q_OBJECT  public:    Player(VideoWidget *widget);    ~Player(); -  void run(); +public slots: +  void show_frame();  private:    VideoWidget *widget; +  XvAccelRender render;    Display *display;    Drawable drawable; diff --git a/client/videowidget.cc b/client/videowidget.cc index a007df8..edabf71 100644 --- a/client/videowidget.cc +++ b/client/videowidget.cc @@ -38,9 +38,9 @@ VideoWidget::VideoWidget() : QWidget()    //  setenv("SDL_WINDOWID", ids.setNum(winId()).toStdString().c_str(), 1);    // Make it visible -  QPalette palette; -  palette.setColor(backgroundRole(), Qt::blue); -  setPalette(palette); +  //  QPalette palette; +  //  palette.setColor(backgroundRole(), Qt::blue); +  //  setPalette(palette);    //  setLineWidth(10);    //  setFrameStyle(QFrame::Raised); @@ -107,7 +107,7 @@ int VideoWidget::getWidth()  {    int val;     mutex.lock(); -  val = mysize.width(); +  val = mysize.width();//>720?720:mysize.width();    mutex.unlock();    return val;  } @@ -116,7 +116,7 @@ int VideoWidget::getHeight()  {    int val;     mutex.lock(); -  val = mysize.height(); +  val = mysize.height();//>576?576:mysize.height();    mutex.unlock();    return val;  } diff --git a/client/xvaccelrenderer.cc b/client/xvaccelrenderer.cc index b0e54db..188574e 100644 --- a/client/xvaccelrenderer.cc +++ b/client/xvaccelrenderer.cc @@ -1,324 +1,311 @@ -/***************************************************************************
 -                          gui_xv.cpp  -  description
 -                             -------------------
 -
 -	This part is strongly derivated from xine/mplayer/mpeg2dec
 -
 -    begin                : Tue Jan 1 2002
 -    copyright            : (C) 2002 by mean
 -    email                : fixounet@free.fr
 - ***************************************************************************/
 -
 -/***************************************************************************
 - *                                                                         *
 - *   This program is free software; you can redistribute it and/or modify  *
 - *   it under the terms of the GNU General Public License as published by  *
 - *   the Free Software Foundation; either version 2 of the License, or     *
 - *   (at your option) any later version.                                   *
 - *                                                                         *
 - ***************************************************************************/
 -#include <stdio.h>
 -#include <stdlib.h>
 -#include <string.h>
 -
 -#include "types.h"
 -#include <QX11Info>
 -
 -#define USE_XV
 -#define VERBOSE_XV
 -
 -#ifdef USE_XV
 -#include <X11/Xlib.h>
 -#include <X11/Xutil.h>
 -#include <sys/ipc.h>
 -#include <sys/shm.h>
 -#include <X11/extensions/XShm.h>
 -#include <X11/extensions/Xvlib.h>
 -#include <X11/extensions/XShm.h>
 -#include <errno.h>
 -
 -#include "xvaccelrenderer.h"
 -
 -static uint8_t 	GUI_XvList(Display *dis, uint32_t port, uint32_t * fmt);
 -static uint8_t 	GUI_XvInit(QWidget *window, uint32_t w, uint32_t h);
 -static void 	  GUI_XvEnd();
 -static uint8_t 	GUI_XvDisplay(uint8_t * src, uint32_t w, uint32_t h);
 -//static uint8_t 	GUI_XvSync(void);
 -
 -
 -//________________Wrapper around Xv_______________
 -XvAccelRender::XvAccelRender( void ) 
 -{
 -}
 -
 -uint8_t XvAccelRender::init(QWidget *window, uint32_t w, uint32_t h)
 -{
 -	printf("Xv start\n");
 -	return  GUI_XvInit(window, w, h);
 -}
 -
 -uint8_t XvAccelRender::end(void)
 -{
 -	GUI_XvEnd( );
 -	printf("Xv end\n");
 -	return 1;
 -}
 -
 -uint8_t XvAccelRender::display(uint8_t *ptr, uint32_t w, uint32_t h)
 -{
 -	return GUI_XvDisplay(ptr, w, h);
 -}
 -//________________Wrapper around Xv_______________
 -
 -static unsigned int xv_port;
 -static uint32_t xv_format;
 -static Display *xv_display;
 -static XvImage *xvimage = NULL;
 -static GC xv_gc;
 -static XGCValues xv_xgc;
 -static Window xv_win;
 -static XShmSegmentInfo Shminfo;
 -
 -//static uint8_t GUI_XvExpose( void );
 -//
 -//	Free all ressources allocated by xv
 -//
 -
 -
 -void GUI_XvEnd( void )
 -{
 -	ADM_assert(xv_port);
 - 	ADM_assert(xv_display);
 -
 -
 -	printf("\n Releasing Xv Port\n");
 -	XLockDisplay (xv_display);
 -	if(XvUngrabPort(xv_display,xv_port,0)!=Success)
 -		printf("\n Trouble releasing port...\n");
 -	XUnlockDisplay (xv_display);
 -
 -
 -	xvimage=NULL;
 -	xv_display=NULL;
 -	xv_port=0;
 -
 -}
 -
 -//------------------------------------
 -uint8_t GUI_XvDisplay(uint8_t * src, uint32_t w, uint32_t h)
 -{
 -
 -	if (xvimage)
 -		{
 -
 -			// put image in shared segment
 -
 -			// for YV12, 4 bits for Y 4 bits for u, 4 bits for v
 -			// total 1.5*
 -			memcpy(xvimage->data, src, (w*h*3)>>1);
 -			XLockDisplay (xv_display);
 -			// And display it !
 -#if 1
 -			XvShmPutImage(xv_display, xv_port, xv_win, xv_gc, xvimage, 0, 0, w, h,	// src
 -										0, 0, w, h,	// dst
 -										False);
 -#else
 -			XvPutImage(xv_display, xv_port, xv_win, xv_gc, xvimage, 0, 0, w, h,	// src
 -								 0, 0, w, h	// dst
 -								 );
 -
 -#endif
 -			//XSetForeground (xv_display, xv_gc, 0);
 -
 -			XSync(xv_display, False);
 -			XUnlockDisplay (xv_display);
 -			//GUI_XvExpose();
 -
 -		}
 -	return 1;
 -
 -}
 -uint8_t GUI_XvSync(void)
 -{
 -	if(xv_display)
 -		XSync(xv_display, False);
 -	return 1;		
 -}
 -//------------------------------------
 -//
 -//------------------------------------
 -uint8_t GUI_XvInit(QWidget * window, uint32_t w, uint32_t h)
 -{
 -	unsigned int ver, rel, req, ev, err;
 -	unsigned int port, adaptors;
 -	static XvAdaptorInfo *ai;
 -	static XvAdaptorInfo *curai;
 -   
 -
 -	//    win = gtk_widget_get_parent_window(window);
 -	xv_display = window->x11Info().display();//GDK_WINDOW_XDISPLAY(win);
 -	//      xv_win= RootWindow(xv_display,0);
 -	xv_win = window->winId();//GDK_WINDOW_XWINDOW(GTK_WIDGET(window)->window);
 -#define WDN xv_display
 -	xv_port = 0;
 -
 -	if (Success != XvQueryExtension(WDN, &ver, &rel, &req, &ev, &err))
 -		{
 -			printf("\n Query Extension failed\n");
 -			goto failed;
 -		}
 -	/* check for Xvideo support */
 -	if (Success != XvQueryAdaptors(WDN,
 -																 DefaultRootWindow(WDN), &adaptors, &ai))
 -		{
 -			printf("\n Query Adaptor failed\n");
 -			goto failed;
 -		}
 -	curai = ai;
 -	XvFormat *formats;
 -	// Dump infos
 -	port = 0;
 -	for (uint16_t i = 0; (!port) && (i < adaptors); i++)
 -		{
 -			/*
 -				XvPortID base_id;
 -				unsigned long num_ports;
 -				char type;
 -				char *name;
 -				unsigned long num_formats;
 -				XvFormat *formats;
 -				unsigned long num_adaptors;
 -			*/
 -#ifdef VERBOSE_XV
 -			printf("\n_______________________________\n");
 -			printf("\n Adaptator	: %d", i);
 -			printf("\n Base ID		: %ld", curai->base_id);
 -			printf("\n Nb Port	 	: %lu", curai->num_ports);
 -			printf("\n Type			 	: %d,",
 -						 curai->type);
 -#define CHECK(x) if(curai->type & x) printf("|"#x);
 -			CHECK(XvInputMask);
 -			CHECK(XvOutputMask);
 -			CHECK(XvVideoMask);
 -			CHECK(XvStillMask);
 -			CHECK(XvImageMask);
 -
 -			printf("\n Name			 	: %s",
 -						 curai->name);
 -			printf("\n Num Adap	 	: %lu", curai->num_adaptors);
 -			printf("\n Num fmt	 	: %lu", curai->num_formats);
 -#endif	  
 -			formats = curai->formats;
 -
 -			//
 -			uint16_t k;
 -
 -			for (k = 0; (k < curai->num_ports) && !port; k++)
 -				{
 -					if (GUI_XvList(WDN, k + curai->base_id, &xv_format))
 -						port = k + curai->base_id;
 -				}
 -
 -
 -			curai++;
 -		}
 -	//
 -	if (!port)
 -		{
 -			printf("\n no port found");
 -			goto failed;
 -		}
 -#ifdef 	COLORSPACE_YV12
 -	printf("\n Xv YV12 found at port :%d, format : %ld", port, xv_format);
 -#else
 -	printf("\n Xv YUY2 found at port :%d, format : %ld", port, xv_format);
 -#endif
 -
 -	if (Success != XvGrabPort(WDN, port, 0))
 -		goto failed;
 -	{
 -	
 -		xv_port = port;
 -		/*
 -			Display *display,
 -			XvPortID port,
 -			int id,
 -			char* data,
 -			int width,
 -			int height,
 -			XShmSegmentInfo *shminfo
 -
 -		*/
 -		xvimage = XvShmCreateImage(WDN, xv_port,
 -															 xv_format, 0, w, h, &Shminfo);
 -
 -		Shminfo.shmid = shmget(IPC_PRIVATE, xvimage->data_size,
 -													 IPC_CREAT | 0777);
 -		Shminfo.shmaddr = (char *) shmat(Shminfo.shmid, 0, 0);
 -		Shminfo.readOnly = False;
 -		xvimage->data = Shminfo.shmaddr;
 -		XShmAttach(WDN, &Shminfo);
 -		XSync(WDN, False);
 -		shmctl(Shminfo.shmid, IPC_RMID, 0);
 -		memset(xvimage->data, 0, xvimage->data_size);
 -
 -		xv_xgc.graphics_exposures = False;
 -
 -		xv_gc = XCreateGC(xv_display, xv_win, 0L, &xv_xgc);
 -	
 -		//ADM_assert(BadWindow!=XSelectInput(xv_display, xv_win, ExposureMask | VisibilityChangeMask));
 -
 -	}
 -	printf("\n Xv init succeedeed\n");
 -
 -	return 1;
 - failed:
 -	printf("\n Xv init failed..\n");
 -	return 0;
 -}
 -
 -// _________________________________________________
 -//
 -// _________________________________________________
 -uint8_t GUI_XvList(Display * dis, uint32_t port, uint32_t * fmt)
 -{
 -	XvImageFormatValues *formatValues;
 -	int imgfmt;
 -	int k, f = 0;
 -
 -	formatValues = XvListImageFormats(dis, port, &imgfmt);
 -	if (formatValues)
 -		for (k = 0; !f || (k < imgfmt); k++)
 -			{
 -#ifdef VERVOSE_XV
 -	      printf("\n %lx %d --> %s", port, formatValues[k].id,
 -							 formatValues[k].guid);
 -#endif
 -#ifdef 	COLORSPACE_YV12
 -	      if (!strcmp(formatValues[k].guid, "YV12"))
 -#else
 -					if (!strcmp(formatValues[k].guid, "YUY2"))
 -#endif
 -						{
 -							f = 1;
 -							*fmt = formatValues[k].id;
 -						}
 -			} else
 -				f = 0;
 -	XFree(formatValues);
 -	return f;
 -}
 -void GUI_XvBuildAtom(Display * dis, Atom * atom, char *string)
 -{
 -	dis = dis;
 -	atom = atom;
 -	string = string;
 -}
 -
 -
 -uint8_t GUI_XvRedraw( void )
 -{
 -	printf("Xv need redraw !\n");
 -	return 0;
 -}
 -#endif
 +/*************************************************************************** +                          gui_xv.cpp  -  description +                             ------------------- + +	This part is strongly derivated from xine/mplayer/mpeg2dec + +    begin                : Tue Jan 1 2002 +    copyright            : (C) 2002 by mean +    email                : fixounet@free.fr + ***************************************************************************/ + +/*************************************************************************** + *                                                                         * + *   This program is free software; you can redistribute it and/or modify  * + *   it under the terms of the GNU General Public License as published by  * + *   the Free Software Foundation; either version 2 of the License, or     * + *   (at your option) any later version.                                   * + *                                                                         * + ***************************************************************************/ +#include "xvaccelrenderer.h" + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include <QX11Info> + +// Use this define for verbose output +#define VERBOSE_XV + +// Use this define for YV12 colorspace, default is YUY2 +//#define COLORSPACE_YV12 + + + +//static uint8_t 	GUI_XvSync(void); + + +//________________Wrapper around Xv_______________ +XvAccelRender::XvAccelRender( void )  +{ +	xvimage = NULL; +} + +uint8_t XvAccelRender::init(QWidget *window, uint32_t w, uint32_t h) +{ +#ifdef VERBOSE_XV +	printf("Xv start\n"); +#endif +	width = w; +	height = h; +	return  GUI_XvInit(window, w, h); +} + +uint8_t XvAccelRender::end(void) +{ +	GUI_XvEnd( ); +#ifdef VERBOSE_XV +	printf("Xv end\n"); +#endif +	return 1; +} + +uint8_t XvAccelRender::display(uint8_t *ptr, uint32_t w, uint32_t h) +{ +	return GUI_XvDisplay(ptr, w, h); +} +//________________Wrapper around Xv_______________ + + +//static uint8_t GUI_XvExpose( void ); +// +//	Free all ressources allocated by xv +// + + +void XvAccelRender::GUI_XvEnd( void ) +{ +	ADM_assert(xv_port); + 	ADM_assert(xv_display); + + +#ifdef VERBOSE_XV +	printf("\n Releasing Xv Port\n"); +#endif +	XLockDisplay (xv_display); +	if(XvUngrabPort(xv_display,xv_port,0)!=Success) +		printf("\n Trouble releasing port...\n"); +	XUnlockDisplay (xv_display); + + +	xvimage=NULL; +	xv_display=NULL; +	xv_port=0; + +} + +//------------------------------------ +uint8_t XvAccelRender::GUI_XvDisplay(uint8_t * src, uint32_t w, uint32_t h) +{ + +	if (xvimage) +		{ + +			// put image in shared segment + +			// for YV12, 4 bits for Y 4 bits for u, 4 bits for v +			// total 1.5* +			memcpy(xvimage->data, src, (w*h*3)>>1); +			XLockDisplay (xv_display); +			// And display it ! +#if 1 +			XvShmPutImage(xv_display, xv_port, xv_win, xv_gc, xvimage,  +										0, 0, w, h, // src +										//										0, 0, w / 4, h / 4, // dst +										0, 0, width, height, // dst +										False); +#else +			XvPutImage(xv_display, xv_port, xv_win, xv_gc, xvimage,  +								 0, 0, w, h,	// src +								 0, 0, w / 3, h / 3	// dst +								 ); + +#endif +			//XSetForeground (xv_display, xv_gc, 0); + +			XSync(xv_display, False); +			XUnlockDisplay (xv_display); +			//GUI_XvExpose(); + +		} +	return 1; + +} +/* +uint8_t XvAccelRender::GUI_XvSync(void) +{ +	if(xv_display) +		XSync(xv_display, False); +	return 1;		 +} +*/ +//------------------------------------ +// +//------------------------------------ +uint8_t XvAccelRender::GUI_XvInit(QWidget * window, uint32_t w, uint32_t h) +{ +	unsigned int ver, rel, req, ev, err; +	unsigned int port, adaptors; +	static XvAdaptorInfo *ai; +	static XvAdaptorInfo *curai; +    + +	//    win = gtk_widget_get_parent_window(window); +	xv_display = window->x11Info().display();//GDK_WINDOW_XDISPLAY(win); +	//      xv_win= RootWindow(xv_display,0); +	xv_win = window->winId();//GDK_WINDOW_XWINDOW(GTK_WIDGET(window)->window); +#define WDN xv_display +	xv_port = 0; + +	if (Success != XvQueryExtension(WDN, &ver, &rel, &req, &ev, &err)) +		{ +			printf("\n Query Extension failed\n"); +			goto failed; +		} +	/* check for Xvideo support */ +	if (Success != XvQueryAdaptors(WDN, +																 DefaultRootWindow(WDN), &adaptors, &ai)) +		{ +			printf("\n Query Adaptor failed\n"); +			goto failed; +		} +	curai = ai; +	XvFormat *formats; +	// Dump infos +	port = 0; +	for (uint16_t i = 0; (!port) && (i < adaptors); i++) +		{ +			/* +				XvPortID base_id; +				unsigned long num_ports; +				char type; +				char *name; +				unsigned long num_formats; +				XvFormat *formats; +				unsigned long num_adaptors; +			*/ +#ifdef VERBOSE_XV +			printf("\n_______________________________\n"); +			printf("\n Adaptator  : %d", i); +			printf("\n Base ID    : %ld", curai->base_id); +			printf("\n Nb Port    : %lu", curai->num_ports); +			printf("\n Type       : %d,", +						 curai->type); +#define CHECK(x) if(curai->type & x) printf("|"#x); +			CHECK(XvInputMask); +			CHECK(XvOutputMask); +			CHECK(XvVideoMask); +			CHECK(XvStillMask); +			CHECK(XvImageMask); + +			printf("\n Name       : %s", +						 curai->name); +			printf("\n Num Adap   : %lu", curai->num_adaptors); +			printf("\n Num fmt    : %lu", curai->num_formats); +#endif	   +			formats = curai->formats; + +			// +			uint16_t k; + +			for (k = 0; (k < curai->num_ports) && !port; k++) +				{ +					if (GUI_XvList(WDN, k + curai->base_id, &xv_format)) +						port = k + curai->base_id; +				} + + +			curai++; +		} +	// +	if (!port) +		{ +			printf("\n no port found"); +			goto failed; +		} +#ifdef 	COLORSPACE_YV12 +#ifdef VERBOSE_XV +	printf("\n Xv YV12 found at port :%d, format : %ld", port, xv_format); +#endif +#else +#ifdef VERBOSE_XV +	printf("\n Xv YUY2 found at port :%d, format : %ld", port, xv_format); +#endif +#endif + +	if (Success != XvGrabPort(WDN, port, 0)) +		goto failed; +	{ +	 +		xv_port = port; +		/* +			Display *display, +			XvPortID port, +			int id, +			char* data, +			int width, +			int height, +			XShmSegmentInfo *shminfo + +		*/ +		xvimage = XvShmCreateImage(WDN, xv_port, +															 xv_format, 0, w, h, &Shminfo); + +		Shminfo.shmid = shmget(IPC_PRIVATE, xvimage->data_size, +													 IPC_CREAT | 0777); +		Shminfo.shmaddr = (char *) shmat(Shminfo.shmid, 0, 0); +		Shminfo.readOnly = False; +		xvimage->data = Shminfo.shmaddr; +		XShmAttach(WDN, &Shminfo); +		XSync(WDN, False); +		shmctl(Shminfo.shmid, IPC_RMID, 0); +		memset(xvimage->data, 0, xvimage->data_size); + +		xv_xgc.graphics_exposures = False; + +		xv_gc = XCreateGC(xv_display, xv_win, 0L, &xv_xgc); +	 +		//ADM_assert(BadWindow!=XSelectInput(xv_display, xv_win, ExposureMask | VisibilityChangeMask)); + +	} +#ifdef VERBOSE_XV +	printf("\n Xv init succeedeed\n"); +#endif +	return 1; + failed: +	printf("\n Xv init failed..\n"); +	return 0; +} + +// _________________________________________________ +// +// _________________________________________________ +uint8_t XvAccelRender::GUI_XvList(Display * dis, uint32_t port, uint32_t * fmt) +{ +	XvImageFormatValues *formatValues; +	int imgfmt; +	int k, f = 0; + +	formatValues = XvListImageFormats(dis, port, &imgfmt); +	if (formatValues) +		for (k = 0; !f || (k < imgfmt); k++) +			{ +#ifdef VERVOSE_XV +	      printf("\n %lx %d --> %s", port, formatValues[k].id, +							 formatValues[k].guid); +#endif +#ifdef 	COLORSPACE_YV12 +	      if (!strcmp(formatValues[k].guid, "YV12")) +#else +					if (!strcmp(formatValues[k].guid, "YUY2")) +#endif +						{ +							f = 1; +							*fmt = formatValues[k].id; +						} +			} else +				f = 0; +	XFree(formatValues); +	return f; +} diff --git a/client/xvaccelrenderer.h b/client/xvaccelrenderer.h index b6a37f3..588516f 100644 --- a/client/xvaccelrenderer.h +++ b/client/xvaccelrenderer.h @@ -1,14 +1,51 @@ -/* -*- mode: c++ -*- */
 -#include "types.h"
 -
 -class XvAccelRender//: public AccelRender
 -{
 -public:
 -	XvAccelRender();
 -	uint8_t init(QWidget *window, uint32_t w, uint32_t h);
 -	uint8_t end(void);				
 -	uint8_t display(uint8_t *ptr, uint32_t w, uint32_t h);
 -};
 -
 -
 -
 +/* -*- mode: c++ -*- */ +#ifndef __XVACCELRENDERER_H__ +#define  __XVACCELRENDERER_H__ + +#include <assert.h> + +#include <QWidget> + +#include <X11/Xlib.h> +#include <X11/Xutil.h> +#include <sys/ipc.h> +#include <sys/shm.h> +#include <X11/extensions/XShm.h> +#include <X11/extensions/Xvlib.h> +#include <X11/extensions/XShm.h> +#include <errno.h> + +//typedef unsigned long int QWidget; +typedef unsigned char uint8_t; +typedef unsigned short int uint16_t; +typedef unsigned long int uint32_t; + +#define ADM_assert(x) assert(x) + +class XvAccelRender +{ +public: +	XvAccelRender(); +	uint8_t init(QWidget *window, uint32_t w, uint32_t h); +	uint8_t end(void);				 +	uint8_t display(uint8_t *ptr, uint32_t w, uint32_t h); + +	unsigned int width, height; + +private: +	unsigned int xv_port; +	uint32_t xv_format; +	Display *xv_display; +	XvImage *xvimage; +	GC xv_gc; +	XGCValues xv_xgc; +	Window xv_win; +	XShmSegmentInfo Shminfo; + +	uint8_t GUI_XvList(Display *dis, uint32_t port, uint32_t * fmt); +	uint8_t GUI_XvInit(QWidget *window, uint32_t w, uint32_t h); +	void GUI_XvEnd(); +	uint8_t GUI_XvDisplay(uint8_t * src, uint32_t w, uint32_t h); +}; + +#endif/*__XVACCELRENDERER_H__*/ | 
