⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 skl_drv_dga.cpp

📁 mpeg4编解码器
💻 CPP
字号:
/******************************************************** * Some code. Copyright (C) 2003 by Pascal Massimino.   * * All Rights Reserved.      (http://skal.planet-d.net) * * For Educational/Academic use ONLY. See 'LICENSE.TXT'.* ********************************************************//* * skl_drv_dga.cpp * * DGA video driver (sub of X11) ********************************************************/#if !defined(SKL_NO_VIDEO)#if defined(SKL_USE_X11) && defined(SKL_USE_DGA)#include "skl_video.h"#include "./skl_drv_x11.h"#include <X11/extensions/xf86dga.h>//#include <X11/extensions/xf86vmode.h>//////////////////////////////////////////////////////////// SKL_DGA_INFO//////////////////////////////////////////////////////////int SKL_DGA_INFO::Init(Display *Dsp, int screen){  if ( geteuid() ) return 0;  if (!XF86DGAQueryDirectVideo(Dsp, screen, &_Flags)) return 0;  if (!(_Flags&XF86DGADirectPresent)) return 0;  if (!XF86DGAQueryVersion(Dsp, &_Maj, &_Min)) return 0;  if (!XF86DGAQueryExtension(Dsp, &_Completion_Type, &_Error_Base))    return 0;  if (!XF86DGAGetVideo(Dsp, screen,         (char **)&_Base_Ptr, &_Line_Width,         &_Bank_Size, &_Mem_Size))    return 0;  if ( _Bank_Size >= _Mem_Size ) {    _Bank_Nb = 0; // <- means:  Linear buffer    _Left_Over = 0;  }  else {    _Bank_Nb = _Mem_Size/_Bank_Size;    _Left_Over = _Mem_Size - _Bank_Size*_Bank_Nb;  }  Get_Viewport_Size(Dsp, screen);  return 1;}void SKL_DGA_INFO::Get_Viewport_Size(Display *XDsp, int screen) {  XF86DGAGetViewPortSize(XDsp, screen, &_View_W, &_View_H);}void SKL_DGA_INFO::Print_Infos() const {  printf( "  Bank:%d View=%dx%d\n", _Bank_Size, _View_W, _View_H);}//////////////////////////////////////////////////////////// SKL_X11_DGA_WIN//////////////////////////////////////////////////////////class SKL_X11_DGA_WIN : public SKL_X11_RAW_WIN{  protected:    void Clean_DGA();    virtual int Create_XWindow();    const SKL_DGA_INFO *Get_DGA_Infos() const { return Drv()->Get_DGA_Infos(); }  public:    SKL_X11_DGA_WIN(SKL_X11_WIN *w, int W=0, int H=0);    virtual ~SKL_X11_DGA_WIN();    virtual void Store_CMap();    virtual void Print_Infos() const;};//////////////////////////////////////////////////////////#define MASKS_DGA KeyReleaseMask | KeyPressMask       \/* | ButtonPressMask*/ | ButtonReleaseMask    \   | ButtonMotionMask | PointerMotionMask//////////////////////////////////////////////////////////SKL_X11_DGA_WIN::SKL_X11_DGA_WIN(SKL_X11_WIN *w, int W, int H) : SKL_X11_RAW_WIN(w, W, H){}SKL_X11_DGA_WIN::~SKL_X11_DGA_WIN() {  Clean_DGA();}//////////////////////////////////////////////////////////int SKL_X11_DGA_WIN::Create_XWindow(){  setuid(0);  Display *Dsp = Get_XDisplay();  _Win = DefaultRootWindow( Dsp );  XSelectInput(Dsp, _Win, MASKS_DGA);  XStoreName(Dsp, _Win, Get_Name());  XGrabPointer(Dsp, _Win, True, PointerMotionMask,               GrabModeAsync, GrabModeAsync,               None, None, CurrentTime);  XGrabKeyboard(Dsp, _Win, True, GrabModeAsync, GrabModeAsync, CurrentTime);  setuid( getuid() );  // Give up root privileges  return 1;}void SKL_X11_DGA_WIN::Clean_DGA(){  if (_Win==0) return;  Display *Dsp = Get_XDisplay();  int Screen = Get_Screen();  XFlush( Dsp );  XF86DGADirectVideo(Dsp, Screen, 0x0);  XUngrabKeyboard(Dsp, CurrentTime);  XUngrabPointer(Dsp, CurrentTime);  _Win = 0;}void SKL_X11_DGA_WIN::Store_CMap(){  SKL_X11_WIN::Store_CMap();  Display *Dsp = Get_XDisplay();  int Screen = Get_Screen();  XF86DGAInstallColormap( Dsp, Screen, _XCMap );}void SKL_X11_DGA_WIN::Print_Infos() const {  SKL_X11_RAW_WIN::Print_Infos();  Get_DGA_Infos()->Print_Infos();}//////////////////////////////////////////////////////////#endif  /* SKL_USE_X11 && SKL_USE_DGA */#endif  /* SKL_NO_VIDEO */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -