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_VIDEO_RENDER_IMPL_H_
12b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define WEBRTC_MODULES_VIDEO_RENDER_MAIN_SOURCE_VIDEO_RENDER_IMPL_H_
13b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
1452c5c708de6f5bcf9c2a58cece45013aa5efacd7pbos@webrtc.org#include <map>
1552c5c708de6f5bcf9c2a58cece45013aa5efacd7pbos@webrtc.org
167e5dc8741fbd5f07a709e6fd4d2cd8b08b7cee94pbos@webrtc.org#include "webrtc/engine_configurations.h"
177e5dc8741fbd5f07a709e6fd4d2cd8b08b7cee94pbos@webrtc.org#include "webrtc/modules/video_render/include/video_render.h"
18b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
19b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgnamespace webrtc {
20b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass CriticalSectionWrapper;
21b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass IncomingVideoStream;
22b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass IVideoRender;
23b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
24b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Class definitions
25b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass ModuleVideoRenderImpl: public VideoRender
26b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{
27b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgpublic:
28b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    /*
29b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org     *   VideoRenderer constructor/destructor
30b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org     */
31e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org    ModuleVideoRenderImpl(const int32_t id,
32b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                          const VideoRenderType videoRenderType,
33b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                          void* window, const bool fullscreen);
34b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
35b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    virtual ~ModuleVideoRenderImpl();
36b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
37b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    /*
38b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org     *   Change the unique identifier of this object
39b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org     */
40e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org    virtual int32_t ChangeUniqueId(const int32_t id);
41b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
42e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org    virtual int32_t TimeUntilNextProcess();
43e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org    virtual int32_t Process();
44b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
45b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    /*
46b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org     *   Returns the render window
47b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org     */
48b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    virtual void* Window();
49b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
50b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    /*
51b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org     *   Change render window
52b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org     */
53e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org    virtual int32_t ChangeWindow(void* window);
54b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
55b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    /*
56b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org     *   Returns module id
57b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org     */
58e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org    int32_t Id();
59b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
60b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    /**************************************************************************
61b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org     *
62b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org     *   Incoming Streams
63b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org     *
64b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org     ***************************************************************************/
65b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
66b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    /*
67b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org     *   Add incoming render stream
68b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org     */
69b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    virtual VideoRenderCallback
70e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org            * AddIncomingRenderStream(const uint32_t streamId,
71e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org                                      const uint32_t zOrder,
72b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                                      const float left, const float top,
73b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                                      const float right, const float bottom);
74b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    /*
75b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org     *   Delete incoming render stream
76b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org     */
77e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org    virtual int32_t
78e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org            DeleteIncomingRenderStream(const uint32_t streamId);
79b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
80b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    /*
81b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org     *   Add incoming render callback, used for external rendering
82b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org     */
83e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org    virtual int32_t
84e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org            AddExternalRenderCallback(const uint32_t streamId,
85b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                                      VideoRenderCallback* renderObject);
86b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
87b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    /*
88b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org     *   Get the porperties for an incoming render stream
89b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org     */
90e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org    virtual int32_t
91e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org            GetIncomingRenderStreamProperties(const uint32_t streamId,
92e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org                                              uint32_t& zOrder,
93b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                                              float& left, float& top,
94b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                                              float& right, float& bottom) const;
95b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    /*
96b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org     *   Incoming frame rate for the specified stream.
97b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org     */
98e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org    virtual uint32_t GetIncomingFrameRate(const uint32_t streamId);
99b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
100b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    /*
101b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org     *   Returns the number of incoming streams added to this render module
102b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org     */
103e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org    virtual uint32_t GetNumIncomingRenderStreams() const;
104b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
105b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    /*
106b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org     *   Returns true if this render module has the streamId added, false otherwise.
107b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org     */
108e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org    virtual bool HasIncomingRenderStream(const uint32_t streamId) const;
109b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
110b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    /*
111b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org     *
112b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org     */
113e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org    virtual int32_t
114e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org            RegisterRawFrameCallback(const uint32_t streamId,
115b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                                     VideoRenderCallback* callbackObj);
116b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
117e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org    virtual int32_t GetLastRenderedFrame(const uint32_t streamId,
118e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org                                         I420VideoFrame &frame) const;
119b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
120e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org    virtual int32_t SetExpectedRenderDelay(uint32_t stream_id,
121e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org                                           int32_t delay_ms);
122b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
123b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    /**************************************************************************
124b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org     *
125b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org     *   Start/Stop
126b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org     *
127b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org     ***************************************************************************/
128b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
129b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    /*
130b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org     *   Starts rendering the specified stream
131b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org     */
132e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org    virtual int32_t StartRender(const uint32_t streamId);
133b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
134b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    /*
135b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org     *   Stops the renderer
136b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org     */
137e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org    virtual int32_t StopRender(const uint32_t streamId);
138b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
139b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    /*
140b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org     *   Sets the renderer in start state, no streams removed.
141b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org     */
142e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org    virtual int32_t ResetRender();
143b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
144b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    /**************************************************************************
145b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org     *
146b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org     *   Properties
147b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org     *
148b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org     ***************************************************************************/
149b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
150b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    /*
151b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org     *   Returns the prefered render video type
152b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org     */
153b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    virtual RawVideoType PreferredVideoType() const;
154b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
155b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    /*
156b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org     *   Returns true if the renderer is in fullscreen mode, otherwise false.
157b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org     */
158b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    virtual bool IsFullScreen();
159b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
160b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    /*
161b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org     *   Gets screen resolution in pixels
162b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org     */
163e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org    virtual int32_t
164e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org            GetScreenResolution(uint32_t& screenWidth,
165e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org                                uint32_t& screenHeight) const;
166b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
167b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    /*
168b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org     *   Get the actual render rate for this stream. I.e rendered frame rate,
169b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org     *   not frames delivered to the renderer.
170b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org     */
171e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org    virtual uint32_t RenderFrameRate(const uint32_t streamId);
172b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
173b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    /*
174b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org     *   Set cropping of incoming stream
175b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org     */
176e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org    virtual int32_t SetStreamCropping(const uint32_t streamId,
177e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org                                      const float left, const float top,
178e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org                                      const float right, const float bottom);
179b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
180e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org    virtual int32_t ConfigureRenderer(const uint32_t streamId,
181e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org                                      const unsigned int zOrder,
182e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org                                      const float left, const float top,
183e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org                                      const float right, const float bottom);
184b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
185e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org    virtual int32_t SetTransparentBackground(const bool enable);
186b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
187e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org    virtual int32_t FullScreenRender(void* window, const bool enable);
188b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
189e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org    virtual int32_t SetBitmap(const void* bitMap,
190e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org                              const uint8_t pictureId,
191e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org                              const void* colorKey,
192e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org                              const float left, const float top,
193e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org                              const float right, const float bottom);
194b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
195e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org    virtual int32_t SetText(const uint8_t textId,
196e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org                            const uint8_t* text,
197e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org                            const int32_t textLength,
198e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org                            const uint32_t textColorRef,
199e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org                            const uint32_t backgroundColorRef,
200e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org                            const float left, const float top,
201e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org                            const float right, const float bottom);
202b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
203e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org    virtual int32_t SetStartImage(const uint32_t streamId,
204e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org                                  const I420VideoFrame& videoFrame);
205b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
206e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org    virtual int32_t SetTimeoutImage(const uint32_t streamId,
207e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org                                    const I420VideoFrame& videoFrame,
208e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org                                    const uint32_t timeout);
209b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
210e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org    virtual int32_t MirrorRenderStream(const int renderId,
211e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org                                       const bool enable,
212e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org                                       const bool mirrorXAxis,
213e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org                                       const bool mirrorYAxis);
214b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
215b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgprivate:
216e1ca446434022ad0d05ebd5ed2feafb08ae940e3pbos@webrtc.org    int32_t _id;
217b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    CriticalSectionWrapper& _moduleCrit;
218b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    void* _ptrWindow;
219b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    bool _fullScreen;
220b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
221b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    IVideoRender* _ptrRenderer;
22252c5c708de6f5bcf9c2a58cece45013aa5efacd7pbos@webrtc.org    typedef std::map<uint32_t, IncomingVideoStream*> IncomingVideoStreamMap;
22352c5c708de6f5bcf9c2a58cece45013aa5efacd7pbos@webrtc.org    IncomingVideoStreamMap _streamRenderMap;
224b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org};
225b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
2263b89e10f31160da35b408fd00cb8f89d2b08862dpbos@webrtc.org}  // namespace webrtc
227b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
228b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif  // WEBRTC_MODULES_VIDEO_RENDER_MAIN_SOURCE_VIDEO_RENDER_IMPL_H_
229