blob: 04295f71462f4b24a83fdf14a50974fbe74093e2 [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:
wu@webrtc.org9dba5252013-08-05 20:36:57 +000039 void NotifyFrameSizeChange(const uint32_t stream_id,
40 I420VideoFrame& video_frame);
mflodman@webrtc.org5885a412011-12-09 05:52:32 +000041 ExternalRenderer* external_renderer_;
42 RawVideoType external_renderer_format_;
mikhal@webrtc.org9fedff72012-10-24 18:33:04 +000043 int external_renderer_width_;
44 int external_renderer_height_;
45 // Converted_frame_ in color format specified by render_format_.
mflodman@webrtc.org7b3f3b12012-01-17 12:12:42 +000046 scoped_ptr<VideoFrame> converted_frame_;
niklase@google.com470e71d2011-07-07 08:21:25 +000047};
48
mflodman@webrtc.org5885a412011-12-09 05:52:32 +000049class ViERenderer: public ViEFrameCallback {
50 public:
pbos@webrtc.orgb238d122013-04-09 13:41:51 +000051 static ViERenderer* CreateViERenderer(const int32_t render_id,
52 const int32_t engine_id,
mflodman@webrtc.org5885a412011-12-09 05:52:32 +000053 VideoRender& render_module,
54 ViERenderManager& render_manager,
pbos@webrtc.orgb238d122013-04-09 13:41:51 +000055 const uint32_t z_order,
mflodman@webrtc.org5885a412011-12-09 05:52:32 +000056 const float left,
57 const float top,
58 const float right,
59 const float bottom);
niklase@google.com470e71d2011-07-07 08:21:25 +000060 ~ViERenderer(void);
61
pbos@webrtc.orgb238d122013-04-09 13:41:51 +000062 int32_t StartRender();
63 int32_t StopRender();
niklase@google.com470e71d2011-07-07 08:21:25 +000064
pbos@webrtc.orgb238d122013-04-09 13:41:51 +000065 int32_t GetLastRenderedFrame(const int32_t renderID,
66 I420VideoFrame& video_frame);
niklase@google.com470e71d2011-07-07 08:21:25 +000067
mflodman@webrtc.orgf4f21452012-09-28 11:27:35 +000068 int SetExpectedRenderDelay(int render_delay);
69
pbos@webrtc.orgb238d122013-04-09 13:41:51 +000070 int32_t ConfigureRenderer(const unsigned int z_order,
71 const float left,
72 const float top,
73 const float right,
74 const float bottom);
niklase@google.com470e71d2011-07-07 08:21:25 +000075
76 VideoRender& RenderModule();
77
pbos@webrtc.orgb238d122013-04-09 13:41:51 +000078 int32_t EnableMirroring(const int32_t render_id,
79 const bool enable,
80 const bool mirror_xaxis,
81 const bool mirror_yaxis);
niklase@google.com470e71d2011-07-07 08:21:25 +000082
pbos@webrtc.orgb238d122013-04-09 13:41:51 +000083 int32_t SetTimeoutImage(const I420VideoFrame& timeout_image,
84 const int32_t timeout_value);
85 int32_t SetRenderStartImage(const I420VideoFrame& start_image);
86 int32_t SetExternalRenderer(const int32_t render_id,
87 RawVideoType video_input_format,
88 ExternalRenderer* external_renderer);
niklase@google.com470e71d2011-07-07 08:21:25 +000089
mflodman@webrtc.org5885a412011-12-09 05:52:32 +000090 private:
pbos@webrtc.orgb238d122013-04-09 13:41:51 +000091 ViERenderer(const int32_t render_id, const int32_t engine_id,
mflodman@webrtc.org5885a412011-12-09 05:52:32 +000092 VideoRender& render_module,
93 ViERenderManager& render_manager);
niklase@google.com470e71d2011-07-07 08:21:25 +000094
pbos@webrtc.orgb238d122013-04-09 13:41:51 +000095 int32_t Init(const uint32_t z_order,
96 const float left,
97 const float top,
98 const float right,
99 const float bottom);
niklase@google.com470e71d2011-07-07 08:21:25 +0000100
101 // Implement ViEFrameCallback
mflodman@webrtc.org5885a412011-12-09 05:52:32 +0000102 virtual void DeliverFrame(int id,
mikhal@webrtc.org9fedff72012-10-24 18:33:04 +0000103 I420VideoFrame* video_frame,
mflodman@webrtc.org5885a412011-12-09 05:52:32 +0000104 int num_csrcs = 0,
pbos@webrtc.orgb238d122013-04-09 13:41:51 +0000105 const uint32_t CSRC[kRtpCsrcSize] = NULL);
mflodman@webrtc.org5885a412011-12-09 05:52:32 +0000106 virtual void DelayChanged(int id, int frame_delay);
mflodman@webrtc.org8baed512012-06-21 12:11:50 +0000107 virtual int GetPreferedFrameSettings(int* width,
108 int* height,
109 int* frame_rate);
niklase@google.com470e71d2011-07-07 08:21:25 +0000110 virtual void ProviderDestroyed(int id);
111
pbos@webrtc.orgb238d122013-04-09 13:41:51 +0000112 uint32_t render_id_;
mflodman@webrtc.org5885a412011-12-09 05:52:32 +0000113 VideoRender& render_module_;
114 ViERenderManager& render_manager_;
115 VideoRenderCallback* render_callback_;
116 ViEExternalRendererImpl* incoming_external_callback_;
niklase@google.com470e71d2011-07-07 08:21:25 +0000117};
118
mflodman@webrtc.org5885a412011-12-09 05:52:32 +0000119} // namespace webrtc
niklase@google.com470e71d2011-07-07 08:21:25 +0000120
mflodman@webrtc.orge06ca3c2012-06-29 13:20:14 +0000121#endif // WEBRTC_VIDEO_ENGINE_VIE_RENDERER_H_