1b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* 2b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. 3b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 4b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Use of this source code is governed by a BSD-style license 5b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * that can be found in the LICENSE file in the root of the source 6b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * tree. An additional intellectual property rights grant can be found 7b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * in the file PATENTS. All contributing project authors may 8b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * be found in the AUTHORS file in the root of the source tree. 9b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */ 10b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 11b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifndef WEBRTC_MODULES_VIDEO_RENDER_MAIN_SOURCE_WINDOWS_VIDEO_RENDER_DIRECT3D9_H_ 12b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define WEBRTC_MODULES_VIDEO_RENDER_MAIN_SOURCE_WINDOWS_VIDEO_RENDER_DIRECT3D9_H_ 13b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 14b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// WebRtc includes 157e5dc8741fbd5f07a709e6fd4d2cd8b08b7cee94pbos@webrtc.org#include "webrtc/modules/video_render/windows/i_video_render_win.h" 16b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 17b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <d3d9.h> 18b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <d3dx9.h> 197e5dc8741fbd5f07a709e6fd4d2cd8b08b7cee94pbos@webrtc.org#include <ddraw.h> 20b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 21b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <Map> 22b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 23b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Added 247e5dc8741fbd5f07a709e6fd4d2cd8b08b7cee94pbos@webrtc.org#include "webrtc/modules/video_render/include/video_render_defines.h" 25b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 26b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#pragma comment(lib, "d3d9.lib") // located in DirectX SDK 27b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 28b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgnamespace webrtc { 29b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass CriticalSectionWrapper; 30b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass EventWrapper; 31b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass Trace; 32b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass ThreadWrapper; 33b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 34b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass D3D9Channel: public VideoRenderCallback 35b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 36b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgpublic: 37b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org D3D9Channel(LPDIRECT3DDEVICE9 pd3DDevice, 38b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CriticalSectionWrapper* critSect, Trace* trace); 39b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 40b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual ~D3D9Channel(); 41b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 42b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Inherited from VideoRencerCallback, called from VideoAPI class. 43b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Called when the incomming frame size and/or number of streams in mix changes 44b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int FrameSizeChange(int width, int height, int numberOfStreams); 45b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 46b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // A new frame is delivered. 473bbed74cdcf1f27ce82104ce645ec0dcdd36902dmikhal@webrtc.org virtual int DeliverFrame(const I420VideoFrame& videoFrame); 48e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org virtual int32_t RenderFrame(const uint32_t streamId, 49e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org I420VideoFrame& videoFrame); 50b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 51b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Called to check if the video frame is updated. 52b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int IsUpdated(bool& isUpdated); 53b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Called after the video frame has been render to the screen 54b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int RenderOffFrame(); 55b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Called to get the texture that contains the video frame 56b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org LPDIRECT3DTEXTURE9 GetTexture(); 57b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Called to get the texture(video frame) size 58b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int GetTextureWidth(); 59b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int GetTextureHeight(); 60b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // 61e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org void SetStreamSettings(uint16_t streamId, 62e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org uint32_t zOrder, 63b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org float startWidth, 64b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org float startHeight, 65b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org float stopWidth, 66b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org float stopHeight); 67e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org int GetStreamSettings(uint16_t streamId, 68e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org uint32_t& zOrder, 69b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org float& startWidth, 70b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org float& startHeight, 71b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org float& stopWidth, 72b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org float& stopHeight); 73b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 74b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int ReleaseTexture(); 75b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int RecreateTexture(LPDIRECT3DDEVICE9 pd3DDevice); 76b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 77b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgprotected: 78b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 79b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgprivate: 80b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org //critical section passed from the owner 81b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CriticalSectionWrapper* _critSect; 82b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org LPDIRECT3DDEVICE9 _pd3dDevice; 83b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org LPDIRECT3DTEXTURE9 _pTexture; 84b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 85b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool _bufferIsUpdated; 86b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // the frame size 87b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int _width; 88b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int _height; 89b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org //sream settings 90b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org //TODO support multiple streams in one channel 91e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org uint16_t _streamId; 92e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org uint32_t _zOrder; 93b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org float _startWidth; 94b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org float _startHeight; 95b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org float _stopWidth; 96b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org float _stopHeight; 97b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}; 98b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 99b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass VideoRenderDirect3D9: IVideoRenderWin 100b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 101b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgpublic: 102b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VideoRenderDirect3D9(Trace* trace, HWND hWnd, bool fullScreen); 103b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ~VideoRenderDirect3D9(); 104b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 105b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgpublic: 106b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org //IVideoRenderWin 107b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 108b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org /************************************************************************** 109b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 110b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Init 111b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 112b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ***************************************************************************/ 113e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org virtual int32_t Init(); 114b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 115b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org /************************************************************************** 116b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 117b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Incoming Streams 118b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 119b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ***************************************************************************/ 120b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual VideoRenderCallback 121e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org * CreateChannel(const uint32_t streamId, 122e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org const uint32_t zOrder, 123b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org const float left, 124b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org const float top, 125b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org const float right, 126b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org const float bottom); 127b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 128e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org virtual int32_t DeleteChannel(const uint32_t streamId); 129b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 130e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org virtual int32_t GetStreamSettings(const uint32_t channel, 131e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org const uint16_t streamId, 132e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org uint32_t& zOrder, 133e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org float& left, float& top, 134e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org float& right, float& bottom); 135b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 136b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org /************************************************************************** 137b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 138b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Start/Stop 139b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 140b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ***************************************************************************/ 141b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 142e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org virtual int32_t StartRender(); 143e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org virtual int32_t StopRender(); 144b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 145b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org /************************************************************************** 146b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 147b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Properties 148b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 149b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ***************************************************************************/ 150b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 151b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual bool IsFullScreen(); 152b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 153e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org virtual int32_t SetCropping(const uint32_t channel, 154e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org const uint16_t streamId, 155e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org const float left, const float top, 156e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org const float right, const float bottom); 157e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org 158e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org virtual int32_t ConfigureRenderer(const uint32_t channel, 159e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org const uint16_t streamId, 160e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org const unsigned int zOrder, 161e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org const float left, const float top, 162e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org const float right, const float bottom); 163e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org 164e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org virtual int32_t SetTransparentBackground(const bool enable); 165e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org 166e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org virtual int32_t ChangeWindow(void* window); 167e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org 168e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org virtual int32_t GetGraphicsMemory(uint64_t& totalMemory, 169e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org uint64_t& availableMemory); 170e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org 171e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org virtual int32_t SetText(const uint8_t textId, 172e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org const uint8_t* text, 173e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org const int32_t textLength, 174e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org const uint32_t colorText, 175e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org const uint32_t colorBg, 176e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org const float left, const float top, 177e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org const float rigth, const float bottom); 178e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org 179e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org virtual int32_t SetBitmap(const void* bitMap, 180e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org const uint8_t pictureId, 181e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org const void* colorKey, 182e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org const float left, const float top, 183e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org const float right, const float bottom); 184b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 185b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgpublic: 186b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Get a channel by channel id 187b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org D3D9Channel* GetD3DChannel(int channel); 188b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int UpdateRenderSurface(); 189b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 190b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgprotected: 191b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // The thread rendering the screen 192b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org static bool ScreenUpdateThreadProc(void* obj); 193b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool ScreenUpdateProcess(); 194b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 195b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgprivate: 196b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Init/close the d3d device 197b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int InitDevice(); 198b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int CloseDevice(); 199b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 200b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Transparent related functions 201b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int SetTransparentColor(LPDIRECT3DTEXTURE9 pTexture, 202b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org DDCOLORKEY* transparentColorKey, 203b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org DWORD width, 204b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org DWORD height); 205b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 206b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CriticalSectionWrapper& _refD3DCritsect; 207b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org Trace* _trace; 208b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ThreadWrapper* _screenUpdateThread; 209b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org EventWrapper* _screenUpdateEvent; 210b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 211b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org HWND _hWnd; 212b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool _fullScreen; 213b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org RECT _originalHwndRect; 214b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org //FIXME we probably don't need this since all the information can be get from _d3dChannels 215b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int _channel; 216b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org //Window size 217b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org UINT _winWidth; 218b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org UINT _winHeight; 219b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 220b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Device 221b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org LPDIRECT3D9 _pD3D; // Used to create the D3DDevice 222b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org LPDIRECT3DDEVICE9 _pd3dDevice; // Our rendering device 223b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org LPDIRECT3DVERTEXBUFFER9 _pVB; // Buffer to hold Vertices 224b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org LPDIRECT3DTEXTURE9 _pTextureLogo; 225b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 226b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org std::map<int, D3D9Channel*> _d3dChannels; 227b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org std::multimap<int, unsigned int> _d3dZorder; 228b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 229b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // The position where the logo will be placed 230b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org float _logoLeft; 231b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org float _logoTop; 232b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org float _logoRight; 233b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org float _logoBottom; 234b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 235b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org typedef HRESULT (WINAPI *DIRECT3DCREATE9EX)(UINT SDKVersion, IDirect3D9Ex**); 236b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org LPDIRECT3DSURFACE9 _pd3dSurface; 237b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 238b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org DWORD GetVertexProcessingCaps(); 239b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int InitializeD3D(HWND hWnd, D3DPRESENT_PARAMETERS* pd3dpp); 240b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 241b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org D3DPRESENT_PARAMETERS _d3dpp; 242b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int ResetDevice(); 243b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 244b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int UpdateVerticeBuffer(LPDIRECT3DVERTEXBUFFER9 pVB, int offset, 245b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org float startWidth, float startHeight, 246b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org float stopWidth, float stopHeight); 247b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 248b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org //code for providing graphics settings 249b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org DWORD _totalMemory; 250b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org DWORD _availableMemory; 251b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}; 252b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2533b89e10f31160da35b408fd00cb8f89d2b08862dpbos@webrtc.org} // namespace webrtc 254b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 255b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif // WEBRTC_MODULES_VIDEO_RENDER_MAIN_SOURCE_WINDOWS_VIDEO_RENDER_DIRECT3D9_H_ 256