00001
00002
00003 #ifndef VIDEOOUT_D3D_H_
00004 #define VIDEOOUT_D3D_H_
00005
00006
00007
00008
00009
00010 #include <windows.h>
00011 #include <d3d9.h>
00012
00013
00014 #include "videooutbase.h"
00015
00016 class VideoOutputD3D : public VideoOutput
00017 {
00018 public:
00019 VideoOutputD3D();
00020 ~VideoOutputD3D();
00021
00022 bool Init(int width, int height, float aspect, WId winid,
00023 int winx, int winy, int winw, int winh, WId embedid = 0);
00024
00025 bool InitD3D();
00026 void UnInitD3D();
00027 void PrepareFrame(VideoFrame *buffer, FrameScanType);
00028 void ProcessFrame(VideoFrame *frame, OSD *osd,
00029 FilterChain *filterList,
00030 NuppelVideoPlayer *pipPlayer);
00031 void Show(FrameScanType );
00032
00033 bool InputChanged(const QSize &input_size,
00034 float aspect,
00035 MythCodecID av_codec_id,
00036 void *codec_private);
00037 int GetRefreshRate(void);
00038 void UpdatePauseFrame(void);
00039 void DrawUnusedRects(bool);
00040 void Zoom(ZoomDirection direction);
00041 void EmbedInWidget(WId wid, int x, int y, int w, int h);
00042 virtual void StopEmbedding(void);
00043
00044 float GetDisplayAspect(void) const;
00045
00046 static QStringList GetAllowedRenderers(MythCodecID myth_codec_id,
00047 const QSize &video_dim);
00048
00049 private:
00050 void Exit(void);
00051
00052 private:
00053 int m_InputCX;
00054 int m_InputCY;
00055
00056 VideoFrame m_pauseFrame;
00057 QMutex m_lock;
00058
00059 int m_RefreshRate;
00060 HWND m_hWnd;
00061 HWND m_hEmbedWnd;
00062 D3DFORMAT m_ddFormat;
00063 IDirect3D9 *m_pD3D;
00064 IDirect3DDevice9 *m_pd3dDevice;
00065 IDirect3DSurface9 *m_pSurface;
00066 IDirect3DTexture9 *m_pTexture;
00067 IDirect3DVertexBuffer9 *m_pVertexBuffer;
00068 };
00069
00070 #endif