summaryrefslogtreecommitdiffstats
path: root/mpeglib/lib/util/render/x11/imageDeskX11.h
blob: efbd4e90b8936bcdbfdf37e650cb5058a04729dd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
/*
  standard and shared mem  X11 images 
  Copyright (C) 2000  Martin Vogt

  This program is free software; you can redistribute it and/or modify
  it under the terms of the GNU Library General Public License as published by
  the Free Software Foundation.

  For more information look at the file COPYRIGHT in this package

 */


#ifndef __IMAGEDESKX11_H
#define __IMAGEDESKX11_H
#include <limits.h>
#include "xinit.h"

#include "../imageBase.h"

#define VIDEO_XI_NONE         0x00 /* No access defined */
#define VIDEO_XI_STANDARD     0x01 /* Use standard Xlib calls */
#define VIDEO_XI_SHMSTD       0X02 /* Use Xlib shared memory extension */

/**
   
   Displays and renders X11 images in software with the help
   of the ditherWrapper class.
*/


class ImageDeskX11 : public ImageBase {

#ifdef X11_SHARED_MEM
  XShmSegmentInfo *shmseginfo;
#endif
  
  unsigned char *virtualscreen;
  int videoaccesstype;
  XImage *ximage;
  int lSupport;

  int XShmMajor,XShmMinor;
  Bool XShmPixmaps;

  XWindow* xWindow;
  int imageMode;
  DitherWrapper* ditherWrapper;

  int iOffsetX;
  int iOffsetY;
  int iWidth;
  int iHeight;

#ifdef X11_XVIDMODE
  XF86VidModeModeInfo **vm_modelines;

  int iOldMode;
#endif

  bool bZoom;

 public:
  ImageDeskX11();
  ~ImageDeskX11();

  void init(XWindow* xWindow, YUVPicture* pic = NULL);
  
  int support();

  int openImage(int ditherSize);
  int closeImage();

  void ditherImage(YUVPicture* pic);
  void putImage();

 private:
  int createImage(int createType,int size);
  int destroyImage();

  bool switchMode(int width, int height, bool zoom);

};

#endif