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_I_VIDEO_RENDER_H_
12#define WEBRTC_MODULES_VIDEO_RENDER_MAIN_SOURCE_I_VIDEO_RENDER_H_
13
14#include "webrtc/modules/video_render/video_render.h"
15
16namespace webrtc {
17
18// Class definitions
19class IVideoRender
20{
21public:
22    /*
23     *   Constructor/destructor
24     */
25
26    virtual ~IVideoRender() {}
27
28    virtual int32_t Init() = 0;
29
30    virtual int32_t ChangeWindow(void* window) = 0;
31
32    /**************************************************************************
33     *
34     *   Incoming Streams
35     *
36     ***************************************************************************/
37
38    virtual VideoRenderCallback
39            * AddIncomingRenderStream(const uint32_t streamId,
40                                      const uint32_t zOrder,
41                                      const float left,
42                                      const float top,
43                                      const float right,
44                                      const float bottom) = 0;
45
46    virtual int32_t
47            DeleteIncomingRenderStream(const uint32_t streamId) = 0;
48
49    virtual int32_t
50            GetIncomingRenderStreamProperties(const uint32_t streamId,
51                                              uint32_t& zOrder,
52                                              float& left,
53                                              float& top,
54                                              float& right,
55                                              float& bottom) const = 0;
56    // Implemented in common code?
57    //virtual uint32_t GetNumIncomingRenderStreams() const = 0;
58    //virtual bool HasIncomingRenderStream(const uint16_t stramId) const = 0;
59
60
61    /**************************************************************************
62     *
63     *   Start/Stop
64     *
65     ***************************************************************************/
66
67    virtual int32_t StartRender() = 0;
68
69    virtual int32_t StopRender() = 0;
70
71    /**************************************************************************
72     *
73     *   Properties
74     *
75     ***************************************************************************/
76    virtual VideoRenderType RenderType() = 0;
77
78    virtual RawVideoType PerferedVideoType() = 0;
79
80    virtual bool FullScreen() = 0;
81
82    // TODO: This should be treated in platform specific code only
83    virtual int32_t
84            GetGraphicsMemory(uint64_t& totalGraphicsMemory,
85                              uint64_t& availableGraphicsMemory) const = 0;
86
87    virtual int32_t
88            GetScreenResolution(uint32_t& screenWidth,
89                                uint32_t& screenHeight) const = 0;
90
91    virtual uint32_t RenderFrameRate(const uint32_t streamId) = 0;
92
93    virtual int32_t SetStreamCropping(const uint32_t streamId,
94                                      const float left,
95                                      const float top,
96                                      const float right,
97                                      const float bottom) = 0;
98
99    virtual int32_t ConfigureRenderer(const uint32_t streamId,
100                                      const unsigned int zOrder,
101                                      const float left,
102                                      const float top,
103                                      const float right,
104                                      const float bottom) = 0;
105
106    virtual int32_t SetTransparentBackground(const bool enable) = 0;
107
108    virtual int32_t SetText(const uint8_t textId,
109                            const uint8_t* text,
110                            const int32_t textLength,
111                            const uint32_t textColorRef,
112                            const uint32_t backgroundColorRef,
113                            const float left,
114                            const float top,
115                            const float rigth,
116                            const float bottom) = 0;
117
118    virtual int32_t SetBitmap(const void* bitMap,
119                              const uint8_t pictureId,
120                              const void* colorKey,
121                              const float left,
122                              const float top,
123                              const float right,
124                              const float bottom) = 0;
125
126};
127}  // namespace webrtc
128
129#endif  // WEBRTC_MODULES_VIDEO_RENDER_MAIN_SOURCE_I_VIDEO_RENDER_H_
130