blob: a4a1e2230e5d37301416710e53325ef1731a6f88 [file] [log] [blame]
niklase@google.com470e71d2011-07-07 08:21:25 +00001/*
mflodman@webrtc.org8baed512012-06-21 12:11:50 +00002 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
niklase@google.com470e71d2011-07-07 08:21:25 +00003 *
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
mflodman@webrtc.orge06ca3c2012-06-29 13:20:14 +000011#ifndef WEBRTC_VIDEO_ENGINE_VIE_RENDERER_H_
12#define WEBRTC_VIDEO_ENGINE_VIE_RENDERER_H_
niklase@google.com470e71d2011-07-07 08:21:25 +000013
andrew@webrtc.org9841d922012-10-31 05:22:11 +000014#include "webrtc/modules/video_render/include/video_render_defines.h"
pbos@webrtc.orgf5d4cb12013-05-17 13:44:48 +000015#include "webrtc/system_wrappers/interface/map_wrapper.h"
16#include "webrtc/system_wrappers/interface/scoped_ptr.h"
17#include "webrtc/video_engine/include/vie_render.h"
18#include "webrtc/video_engine/vie_frame_provider_base.h"
niklase@google.com470e71d2011-07-07 08:21:25 +000019
20namespace webrtc {
21
22class VideoRender;
23class VideoRenderCallback;
24class ViERenderManager;
25
mflodman@webrtc.org5885a412011-12-09 05:52:32 +000026class ViEExternalRendererImpl : public VideoRenderCallback {
27 public:
niklase@google.com470e71d2011-07-07 08:21:25 +000028 ViEExternalRendererImpl();
mflodman@webrtc.org5885a412011-12-09 05:52:32 +000029 virtual ~ViEExternalRendererImpl() {}
niklase@google.com470e71d2011-07-07 08:21:25 +000030
mflodman@webrtc.org5885a412011-12-09 05:52:32 +000031 int SetViEExternalRenderer(ExternalRenderer* external_renderer,
32 RawVideoType video_input_format);
niklase@google.com470e71d2011-07-07 08:21:25 +000033
mflodman@webrtc.org5885a412011-12-09 05:52:32 +000034 // Implements VideoRenderCallback.
pbos@webrtc.orgb238d122013-04-09 13:41:51 +000035 virtual int32_t RenderFrame(const uint32_t stream_id,
36 I420VideoFrame& video_frame);
niklase@google.com470e71d2011-07-07 08:21:25 +000037
mflodman@webrtc.org5885a412011-12-09 05:52:32 +000038 private:
39 ExternalRenderer* external_renderer_;
40 RawVideoType external_renderer_format_;
mikhal@webrtc.org9fedff72012-10-24 18:33:04 +000041 int external_renderer_width_;
42 int external_renderer_height_;
43 // Converted_frame_ in color format specified by render_format_.
mflodman@webrtc.org7b3f3b12012-01-17 12:12:42 +000044 scoped_ptr<VideoFrame> converted_frame_;
niklase@google.com470e71d2011-07-07 08:21:25 +000045};
46
mflodman@webrtc.org5885a412011-12-09 05:52:32 +000047class ViERenderer: public ViEFrameCallback {
48 public:
pbos@webrtc.orgb238d122013-04-09 13:41:51 +000049 static ViERenderer* CreateViERenderer(const int32_t render_id,
50 const int32_t engine_id,
mflodman@webrtc.org5885a412011-12-09 05:52:32 +000051 VideoRender& render_module,
52 ViERenderManager& render_manager,
pbos@webrtc.orgb238d122013-04-09 13:41:51 +000053 const uint32_t z_order,
mflodman@webrtc.org5885a412011-12-09 05:52:32 +000054 const float left,
55 const float top,
56 const float right,
57 const float bottom);
niklase@google.com470e71d2011-07-07 08:21:25 +000058 ~ViERenderer(void);
59
pbos@webrtc.orgb238d122013-04-09 13:41:51 +000060 int32_t StartRender();
61 int32_t StopRender();
niklase@google.com470e71d2011-07-07 08:21:25 +000062
pbos@webrtc.orgb238d122013-04-09 13:41:51 +000063 int32_t GetLastRenderedFrame(const int32_t renderID,
64 I420VideoFrame& video_frame);
niklase@google.com470e71d2011-07-07 08:21:25 +000065
mflodman@webrtc.orgf4f21452012-09-28 11:27:35 +000066 int SetExpectedRenderDelay(int render_delay);
67
pbos@webrtc.orgb238d122013-04-09 13:41:51 +000068 int32_t ConfigureRenderer(const unsigned int z_order,
69 const float left,
70 const float top,
71 const float right,
72 const float bottom);
niklase@google.com470e71d2011-07-07 08:21:25 +000073
74 VideoRender& RenderModule();
75
pbos@webrtc.orgb238d122013-04-09 13:41:51 +000076 int32_t EnableMirroring(const int32_t render_id,
77 const bool enable,
78 const bool mirror_xaxis,
79 const bool mirror_yaxis);
niklase@google.com470e71d2011-07-07 08:21:25 +000080
pbos@webrtc.orgb238d122013-04-09 13:41:51 +000081 int32_t SetTimeoutImage(const I420VideoFrame& timeout_image,
82 const int32_t timeout_value);
83 int32_t SetRenderStartImage(const I420VideoFrame& start_image);
84 int32_t SetExternalRenderer(const int32_t render_id,
85 RawVideoType video_input_format,
86 ExternalRenderer* external_renderer);
niklase@google.com470e71d2011-07-07 08:21:25 +000087
mflodman@webrtc.org5885a412011-12-09 05:52:32 +000088 private:
pbos@webrtc.orgb238d122013-04-09 13:41:51 +000089 ViERenderer(const int32_t render_id, const int32_t engine_id,
mflodman@webrtc.org5885a412011-12-09 05:52:32 +000090 VideoRender& render_module,
91 ViERenderManager& render_manager);
niklase@google.com470e71d2011-07-07 08:21:25 +000092
pbos@webrtc.orgb238d122013-04-09 13:41:51 +000093 int32_t Init(const uint32_t z_order,
94 const float left,
95 const float top,
96 const float right,
97 const float bottom);
niklase@google.com470e71d2011-07-07 08:21:25 +000098
99 // Implement ViEFrameCallback
mflodman@webrtc.org5885a412011-12-09 05:52:32 +0000100 virtual void DeliverFrame(int id,
mikhal@webrtc.org9fedff72012-10-24 18:33:04 +0000101 I420VideoFrame* video_frame,
mflodman@webrtc.org5885a412011-12-09 05:52:32 +0000102 int num_csrcs = 0,
pbos@webrtc.orgb238d122013-04-09 13:41:51 +0000103 const uint32_t CSRC[kRtpCsrcSize] = NULL);
mflodman@webrtc.org5885a412011-12-09 05:52:32 +0000104 virtual void DelayChanged(int id, int frame_delay);
mflodman@webrtc.org8baed512012-06-21 12:11:50 +0000105 virtual int GetPreferedFrameSettings(int* width,
106 int* height,
107 int* frame_rate);
niklase@google.com470e71d2011-07-07 08:21:25 +0000108 virtual void ProviderDestroyed(int id);
109
pbos@webrtc.orgb238d122013-04-09 13:41:51 +0000110 uint32_t render_id_;
mflodman@webrtc.org5885a412011-12-09 05:52:32 +0000111 VideoRender& render_module_;
112 ViERenderManager& render_manager_;
113 VideoRenderCallback* render_callback_;
114 ViEExternalRendererImpl* incoming_external_callback_;
niklase@google.com470e71d2011-07-07 08:21:25 +0000115};
116
mflodman@webrtc.org5885a412011-12-09 05:52:32 +0000117} // namespace webrtc
niklase@google.com470e71d2011-07-07 08:21:25 +0000118
mflodman@webrtc.orge06ca3c2012-06-29 13:20:14 +0000119#endif // WEBRTC_VIDEO_ENGINE_VIE_RENDERER_H_