blob: c1314cdedccbf31075473f464be1441968abe2a3 [file] [log] [blame]
andrew@webrtc.orgb015cbe2012-10-22 18:19:23 +00001/*
2 * Copyright (c) 2012 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_VIDEO_ENGINE_VIE_RENDER_MANAGER_H_
12#define WEBRTC_VIDEO_ENGINE_VIE_RENDER_MANAGER_H_
13
henrike@webrtc.org083049f2014-01-13 15:21:30 +000014#include <list>
pbos@webrtc.org52c5c702013-08-12 19:51:57 +000015#include <map>
16
pbos@webrtc.org281cff82013-05-17 13:44:48 +000017#include "webrtc/system_wrappers/interface/scoped_ptr.h"
18#include "webrtc/typedefs.h"
pbos@webrtc.org281cff82013-05-17 13:44:48 +000019#include "webrtc/video_engine/vie_manager_base.h"
andrew@webrtc.orgb015cbe2012-10-22 18:19:23 +000020
21namespace webrtc {
22
23class CriticalSectionWrapper;
24class RWLockWrapper;
25class VideoRender;
26class VideoRenderCallback;
27class ViERenderer;
28
29class ViERenderManager : private ViEManagerBase {
30 friend class ViERenderManagerScoped;
31 public:
pbos@webrtc.org67879bc2013-04-09 13:41:51 +000032 explicit ViERenderManager(int32_t engine_id);
andrew@webrtc.orgb015cbe2012-10-22 18:19:23 +000033 ~ViERenderManager();
34
pbos@webrtc.org67879bc2013-04-09 13:41:51 +000035 int32_t RegisterVideoRenderModule(VideoRender* render_module);
36 int32_t DeRegisterVideoRenderModule(VideoRender* render_module);
andrew@webrtc.orgb015cbe2012-10-22 18:19:23 +000037
pbos@webrtc.org67879bc2013-04-09 13:41:51 +000038 ViERenderer* AddRenderStream(const int32_t render_id,
andrew@webrtc.orgb015cbe2012-10-22 18:19:23 +000039 void* window,
pbos@webrtc.org67879bc2013-04-09 13:41:51 +000040 const uint32_t z_order,
andrew@webrtc.orgb015cbe2012-10-22 18:19:23 +000041 const float left,
42 const float top,
43 const float right,
44 const float bottom);
45
pbos@webrtc.org67879bc2013-04-09 13:41:51 +000046 int32_t RemoveRenderStream(int32_t render_id);
andrew@webrtc.orgb015cbe2012-10-22 18:19:23 +000047
48 private:
henrike@webrtc.org083049f2014-01-13 15:21:30 +000049 typedef std::list<VideoRender*> RenderList;
andrew@webrtc.orgb015cbe2012-10-22 18:19:23 +000050 // Returns a pointer to the render module if it exists in the render list.
51 // Assumed protected.
52 VideoRender* FindRenderModule(void* window);
53
54 // Methods used by ViERenderScoped.
pbos@webrtc.org67879bc2013-04-09 13:41:51 +000055 ViERenderer* ViERenderPtr(int32_t render_id) const;
andrew@webrtc.orgb015cbe2012-10-22 18:19:23 +000056
57 scoped_ptr<CriticalSectionWrapper> list_cs_;
pbos@webrtc.org67879bc2013-04-09 13:41:51 +000058 int32_t engine_id_;
pbos@webrtc.org52c5c702013-08-12 19:51:57 +000059 // Protected by ViEManagerBase.
60 typedef std::map<int32_t, ViERenderer*> RendererMap;
61 RendererMap stream_to_vie_renderer_;
henrike@webrtc.org083049f2014-01-13 15:21:30 +000062 RenderList render_list_;
andrew@webrtc.orgb015cbe2012-10-22 18:19:23 +000063 bool use_external_render_module_;
64};
65
66class ViERenderManagerScoped: private ViEManagerScopedBase {
67 public:
68 explicit ViERenderManagerScoped(const ViERenderManager& vie_render_manager);
69
70 // Returns a pointer to the ViERender object.
pbos@webrtc.org67879bc2013-04-09 13:41:51 +000071 ViERenderer* Renderer(int32_t render_id) const;
andrew@webrtc.orgb015cbe2012-10-22 18:19:23 +000072};
73
74} // namespace webrtc
75
76#endif // WEBRTC_VIDEO_ENGINE_VIE_RENDER_MANAGER_H_