blob: 907735cad725d09e4f1726355e11612f6abde796 [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/scoped_ptr.h"
16#include "webrtc/video_engine/include/vie_render.h"
17#include "webrtc/video_engine/vie_frame_provider_base.h"
niklase@google.com470e71d2011-07-07 08:21:25 +000018
19namespace webrtc {
20
21class VideoRender;
22class VideoRenderCallback;
23class ViERenderManager;
24
mflodman@webrtc.org5885a412011-12-09 05:52:32 +000025class ViEExternalRendererImpl : public VideoRenderCallback {
26 public:
niklase@google.com470e71d2011-07-07 08:21:25 +000027 ViEExternalRendererImpl();
mflodman@webrtc.org5885a412011-12-09 05:52:32 +000028 virtual ~ViEExternalRendererImpl() {}
niklase@google.com470e71d2011-07-07 08:21:25 +000029
mflodman@webrtc.org5885a412011-12-09 05:52:32 +000030 int SetViEExternalRenderer(ExternalRenderer* external_renderer,
31 RawVideoType video_input_format);
niklase@google.com470e71d2011-07-07 08:21:25 +000032
mflodman@webrtc.org5885a412011-12-09 05:52:32 +000033 // Implements VideoRenderCallback.
pbos@webrtc.orgb238d122013-04-09 13:41:51 +000034 virtual int32_t RenderFrame(const uint32_t stream_id,
35 I420VideoFrame& video_frame);
niklase@google.com470e71d2011-07-07 08:21:25 +000036
mflodman@webrtc.org5885a412011-12-09 05:52:32 +000037 private:
wu@webrtc.org9dba5252013-08-05 20:36:57 +000038 void NotifyFrameSizeChange(const uint32_t stream_id,
39 I420VideoFrame& video_frame);
mflodman@webrtc.org5885a412011-12-09 05:52:32 +000040 ExternalRenderer* external_renderer_;
41 RawVideoType external_renderer_format_;
mikhal@webrtc.org9fedff72012-10-24 18:33:04 +000042 int external_renderer_width_;
43 int external_renderer_height_;
44 // Converted_frame_ in color format specified by render_format_.
mflodman@webrtc.org7b3f3b12012-01-17 12:12:42 +000045 scoped_ptr<VideoFrame> converted_frame_;
niklase@google.com470e71d2011-07-07 08:21:25 +000046};
47
mflodman@webrtc.org5885a412011-12-09 05:52:32 +000048class ViERenderer: public ViEFrameCallback {
49 public:
pbos@webrtc.orgb238d122013-04-09 13:41:51 +000050 static ViERenderer* CreateViERenderer(const int32_t render_id,
51 const int32_t engine_id,
mflodman@webrtc.org5885a412011-12-09 05:52:32 +000052 VideoRender& render_module,
53 ViERenderManager& render_manager,
pbos@webrtc.orgb238d122013-04-09 13:41:51 +000054 const uint32_t z_order,
mflodman@webrtc.org5885a412011-12-09 05:52:32 +000055 const float left,
56 const float top,
57 const float right,
58 const float bottom);
niklase@google.com470e71d2011-07-07 08:21:25 +000059 ~ViERenderer(void);
60
pbos@webrtc.orgb238d122013-04-09 13:41:51 +000061 int32_t StartRender();
62 int32_t StopRender();
niklase@google.com470e71d2011-07-07 08:21:25 +000063
pbos@webrtc.orgb238d122013-04-09 13:41:51 +000064 int32_t GetLastRenderedFrame(const int32_t renderID,
65 I420VideoFrame& video_frame);
niklase@google.com470e71d2011-07-07 08:21:25 +000066
mflodman@webrtc.orgf4f21452012-09-28 11:27:35 +000067 int SetExpectedRenderDelay(int render_delay);
68
pbos@webrtc.orgb238d122013-04-09 13:41:51 +000069 int32_t ConfigureRenderer(const unsigned int z_order,
70 const float left,
71 const float top,
72 const float right,
73 const float bottom);
niklase@google.com470e71d2011-07-07 08:21:25 +000074
75 VideoRender& RenderModule();
76
pbos@webrtc.orgb238d122013-04-09 13:41:51 +000077 int32_t EnableMirroring(const int32_t render_id,
78 const bool enable,
79 const bool mirror_xaxis,
80 const bool mirror_yaxis);
niklase@google.com470e71d2011-07-07 08:21:25 +000081
pbos@webrtc.orgb238d122013-04-09 13:41:51 +000082 int32_t SetTimeoutImage(const I420VideoFrame& timeout_image,
83 const int32_t timeout_value);
84 int32_t SetRenderStartImage(const I420VideoFrame& start_image);
85 int32_t SetExternalRenderer(const int32_t render_id,
86 RawVideoType video_input_format,
87 ExternalRenderer* external_renderer);
niklase@google.com470e71d2011-07-07 08:21:25 +000088
pbos@webrtc.orgd29d4e92013-11-20 13:19:54 +000089 int32_t SetVideoRenderCallback(const int32_t render_id,
90 VideoRenderCallback* callback);
91
mflodman@webrtc.org5885a412011-12-09 05:52:32 +000092 private:
pbos@webrtc.orgb238d122013-04-09 13:41:51 +000093 ViERenderer(const int32_t render_id, const int32_t engine_id,
mflodman@webrtc.org5885a412011-12-09 05:52:32 +000094 VideoRender& render_module,
95 ViERenderManager& render_manager);
niklase@google.com470e71d2011-07-07 08:21:25 +000096
pbos@webrtc.orgb238d122013-04-09 13:41:51 +000097 int32_t Init(const uint32_t z_order,
98 const float left,
99 const float top,
100 const float right,
101 const float bottom);
niklase@google.com470e71d2011-07-07 08:21:25 +0000102
103 // Implement ViEFrameCallback
mflodman@webrtc.org5885a412011-12-09 05:52:32 +0000104 virtual void DeliverFrame(int id,
mikhal@webrtc.org9fedff72012-10-24 18:33:04 +0000105 I420VideoFrame* video_frame,
mflodman@webrtc.org5885a412011-12-09 05:52:32 +0000106 int num_csrcs = 0,
pbos@webrtc.orgb238d122013-04-09 13:41:51 +0000107 const uint32_t CSRC[kRtpCsrcSize] = NULL);
mflodman@webrtc.org5885a412011-12-09 05:52:32 +0000108 virtual void DelayChanged(int id, int frame_delay);
mflodman@webrtc.org8baed512012-06-21 12:11:50 +0000109 virtual int GetPreferedFrameSettings(int* width,
110 int* height,
111 int* frame_rate);
niklase@google.com470e71d2011-07-07 08:21:25 +0000112 virtual void ProviderDestroyed(int id);
113
pbos@webrtc.orgb238d122013-04-09 13:41:51 +0000114 uint32_t render_id_;
mflodman@webrtc.org5885a412011-12-09 05:52:32 +0000115 VideoRender& render_module_;
116 ViERenderManager& render_manager_;
117 VideoRenderCallback* render_callback_;
118 ViEExternalRendererImpl* incoming_external_callback_;
niklase@google.com470e71d2011-07-07 08:21:25 +0000119};
120
mflodman@webrtc.org5885a412011-12-09 05:52:32 +0000121} // namespace webrtc
niklase@google.com470e71d2011-07-07 08:21:25 +0000122
mflodman@webrtc.orge06ca3c2012-06-29 13:20:14 +0000123#endif // WEBRTC_VIDEO_ENGINE_VIE_RENDERER_H_