00001
00002
00003 #ifndef _XVMC_TEXTURES_H_
00004 #define _XVMC_TEXTURES_H_
00005
00006 #include <qsize.h>
00007
00008 class OSD;
00009
00010 #ifndef USING_XVMC_OPENGL
00011
00012 #ifdef USING_XVMC
00013 #include <X11/extensions/XvMC.h>
00014 #else
00015 struct XvMCSurface;
00016 #endif
00017
00018 class XvMCTextures
00019 {
00020 public:
00021 XvMCTextures() {}
00022 ~XvMCTextures() {}
00023
00024 static XvMCTextures *Create(
00025 Display*, Window, int, const QSize&, const QSize&)
00026 { return NULL; }
00027
00028 bool Init(Display*, Window, int, const QSize&, const QSize&)
00029 { return false; }
00030
00031 void PrepareFrame(XvMCSurface*, const QRect&, int) {}
00032 void DeInit(void) {}
00033 void Show(int) {}
00034 bool ProcessOSD(OSD*) { return false; }
00035 };
00036
00037 #else // ifdef USING_XVMC_OPENGL
00038
00039 #include "util-opengl.h"
00040
00041 class XvMCTextures
00042 {
00043 public:
00044 XvMCTextures() :
00045 XJ_disp(NULL), last_video_rect(0,0,0,0),
00046 gl_video_size(0,0), gl_display_size(0,0),
00047 gl_vid_tex_index(0), gl_osd_tex_index(0),
00048 gl_osd_revision(-1),
00049 gl_osd_tmp_buf(NULL), gl_osd_tmp_buf_size(0),
00050 gl_osd_visible(false),
00051 gl_window(0), glx_window(0),
00052 glx_pbuffer(0), glx_context(0),
00053 glx_fbconfig(0) {}
00054 ~XvMCTextures()
00055 {
00056 DeInit();
00057 if (gl_osd_tmp_buf)
00058 delete [] gl_osd_tmp_buf;
00059 }
00060
00061 static XvMCTextures *Create(Display *XJ_disp, Window XJ_curwin,
00062 int XJ_screen_num,
00063 const QSize &video_dim,
00064 const QSize &window_size);
00065
00066 bool Init(Display *XJ_disp, Window XJ_curwin, int XJ_screen_num,
00067 const QSize &video_dim, const QSize &window_size);
00068
00069 void DeInit(void);
00070
00071 void PrepareFrame(XvMCSurface *surf, const QRect &video_rect, int field);
00072
00073 void Show(int field);
00074
00075 bool ProcessOSD(OSD *osd);
00076
00077 private:
00078 void CompositeFrameAndOSD(int scan);
00079
00080 private:
00081 Display *XJ_disp;
00082 QRect last_video_rect;
00083 QSize gl_video_size;
00084 QSize gl_display_size;
00085 vector<GLuint> gl_vid_textures;
00086 vector<QSize> gl_vid_tex_size;
00087 uint gl_vid_tex_index;
00088 vector<GLuint> gl_osd_textures;
00089 vector<QSize> gl_osd_tex_size;
00090 uint gl_osd_tex_index;
00091 int gl_osd_revision;
00092 unsigned char *gl_osd_tmp_buf;
00093 uint gl_osd_tmp_buf_size;
00094 bool gl_osd_visible;
00095 Window gl_window;
00096 GLXWindow glx_window;
00097 GLXPbuffer glx_pbuffer;
00098 GLXContext glx_context;
00099 GLXFBConfig glx_fbconfig;
00100 private:
00101 };
00102
00103 #endif // USING_XVMC_OPENGL
00104
00105 #endif // _XVMC_TEXTURES_H_