Home | History | Annotate | Download | only in windows
      1 /*
      2  *  Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
      3  *
      4  *  Use of this source code is governed by a BSD-style license
      5  *  that can be found in the LICENSE file in the root of the source
      6  *  tree. An additional intellectual property rights grant can be found
      7  *  in the file PATENTS.  All contributing project authors may
      8  *  be found in the AUTHORS file in the root of the source tree.
      9  */
     10 
     11 #ifndef WEBRTC_MODULES_VIDEO_RENDER_MAIN_SOURCE_WINDOWS_VIDEO_RENDER_WINDOWS_IMPL_H_
     12 #define WEBRTC_MODULES_VIDEO_RENDER_MAIN_SOURCE_WINDOWS_VIDEO_RENDER_WINDOWS_IMPL_H_
     13 
     14 #include <Winerror.h>
     15 #include <dxdiag.h>
     16 
     17 #include "webrtc/modules/video_render/i_video_render.h"
     18 #include "webrtc/modules/video_render/windows/i_video_render_win.h"
     19 
     20 namespace webrtc {
     21 class CriticalSectionWrapper;
     22 
     23 #define EXPAND(x)            x, sizeof(x)/sizeof(TCHAR)
     24 
     25 enum VideoRenderWinMethod {
     26   kVideoRenderWinD3D9 = 0,
     27 };
     28 
     29 // Class definitions
     30 class VideoRenderWindowsImpl: IVideoRender
     31 {
     32 public:
     33     /*
     34      *   Constructor/destructor
     35      */
     36 
     37     VideoRenderWindowsImpl(const int32_t id,
     38                            const VideoRenderType videoRenderType,
     39                            void* window, const bool fullscreen);
     40 
     41     virtual ~VideoRenderWindowsImpl();
     42 
     43     virtual int32_t Init();
     44 
     45     virtual int32_t ChangeUniqueId(const int32_t id);
     46 
     47     virtual int32_t ChangeWindow(void* window);
     48 
     49     /**************************************************************************
     50      *
     51      *   Incoming Streams
     52      *
     53      ***************************************************************************/
     54 
     55     virtual VideoRenderCallback
     56             * AddIncomingRenderStream(const uint32_t streamId,
     57                                       const uint32_t zOrder,
     58                                       const float left, const float top,
     59                                       const float right, const float bottom);
     60 
     61     virtual int32_t
     62             DeleteIncomingRenderStream(const uint32_t streamId);
     63 
     64     virtual int32_t
     65             GetIncomingRenderStreamProperties(const uint32_t streamId,
     66                                               uint32_t& zOrder,
     67                                               float& left, float& top,
     68                                               float& right, float& bottom) const;
     69 
     70     /**************************************************************************
     71      *
     72      *   Start/Stop
     73      *
     74      ***************************************************************************/
     75 
     76     virtual int32_t StartRender();
     77 
     78     virtual int32_t StopRender();
     79 
     80     /**************************************************************************
     81      *
     82      *   Properties
     83      *
     84      ***************************************************************************/
     85 
     86     virtual VideoRenderType RenderType();
     87 
     88     virtual RawVideoType PerferedVideoType();
     89 
     90     virtual bool FullScreen();
     91 
     92     virtual int32_t
     93             GetGraphicsMemory(uint64_t& totalGraphicsMemory,
     94                               uint64_t& availableGraphicsMemory) const;
     95 
     96     virtual int32_t
     97             GetScreenResolution(uint32_t& screenWidth,
     98                                 uint32_t& screenHeight) const;
     99 
    100     virtual uint32_t RenderFrameRate(const uint32_t streamId);
    101 
    102     virtual int32_t SetStreamCropping(const uint32_t streamId,
    103                                       const float left, const float top,
    104                                       const float right, const float bottom);
    105 
    106     virtual int32_t ConfigureRenderer(const uint32_t streamId,
    107                                       const unsigned int zOrder,
    108                                       const float left, const float top,
    109                                       const float right, const float bottom);
    110 
    111     virtual int32_t SetTransparentBackground(const bool enable);
    112 
    113     virtual int32_t SetText(const uint8_t textId,
    114                             const uint8_t* text,
    115                             const int32_t textLength,
    116                             const uint32_t textColorRef,
    117                             const uint32_t backgroundColorRef,
    118                             const float left, const float top,
    119                             const float right, const float bottom);
    120 
    121     virtual int32_t SetBitmap(const void* bitMap,
    122                               const uint8_t pictureId,
    123                               const void* colorKey,
    124                               const float left, const float top,
    125                               const float right, const float bottom);
    126 
    127 private:
    128     int32_t _id;
    129     CriticalSectionWrapper& _renderWindowsCritsect;
    130 
    131     void* _prtWindow;
    132     bool _fullscreen;
    133 
    134     VideoRenderWinMethod _renderMethod;
    135     IVideoRenderWin* _ptrRendererWin;
    136 };
    137 
    138 }  // namespace webrtc
    139 
    140 #endif  // WEBRTC_MODULES_VIDEO_RENDER_MAIN_SOURCE_WINDOWS_VIDEO_RENDER_WINDOWS_IMPL_H_
    141