blob: 2afd78971c8d7370e7a59e197eab8d2f352d7b0f [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
mflodman@webrtc.org5885a412011-12-09 05:52:32 +000014#include "modules/video_render/main/interface/video_render_defines.h"
15#include "system_wrappers/interface/map_wrapper.h"
mflodman@webrtc.org7b3f3b12012-01-17 12:12:42 +000016#include "system_wrappers/interface/scoped_ptr.h"
mflodman@webrtc.orga4863db2011-12-22 08:51:52 +000017#include "video_engine/include/vie_render.h"
mflodman@webrtc.org5885a412011-12-09 05:52:32 +000018#include "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.
35 virtual WebRtc_Word32 RenderFrame(const WebRtc_UWord32 stream_id,
mikhal@webrtc.org9fedff72012-10-24 18:33:04 +000036 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:
49 static ViERenderer* CreateViERenderer(const WebRtc_Word32 render_id,
50 const WebRtc_Word32 engine_id,
51 VideoRender& render_module,
52 ViERenderManager& render_manager,
53 const WebRtc_UWord32 z_order,
54 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
60 WebRtc_Word32 StartRender();
61 WebRtc_Word32 StopRender();
62
mflodman@webrtc.org5885a412011-12-09 05:52:32 +000063 WebRtc_Word32 GetLastRenderedFrame(const WebRtc_Word32 renderID,
mikhal@webrtc.org9fedff72012-10-24 18:33:04 +000064 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
mflodman@webrtc.org5885a412011-12-09 05:52:32 +000068 WebRtc_Word32 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
mflodman@webrtc.org5885a412011-12-09 05:52:32 +000076 WebRtc_Word32 EnableMirroring(const WebRtc_Word32 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
mikhal@webrtc.org9fedff72012-10-24 18:33:04 +000081 WebRtc_Word32 SetTimeoutImage(const I420VideoFrame& timeout_image,
mflodman@webrtc.org5885a412011-12-09 05:52:32 +000082 const WebRtc_Word32 timeout_value);
mikhal@webrtc.org9fedff72012-10-24 18:33:04 +000083 WebRtc_Word32 SetRenderStartImage(const I420VideoFrame& start_image);
mflodman@webrtc.org5885a412011-12-09 05:52:32 +000084 WebRtc_Word32 SetExternalRenderer(const WebRtc_Word32 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:
89 ViERenderer(const WebRtc_Word32 render_id, const WebRtc_Word32 engine_id,
90 VideoRender& render_module,
91 ViERenderManager& render_manager);
niklase@google.com470e71d2011-07-07 08:21:25 +000092
mflodman@webrtc.org5885a412011-12-09 05:52:32 +000093 WebRtc_Word32 Init(const WebRtc_UWord32 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,
niklase@google.com470e71d2011-07-07 08:21:25 +0000103 const WebRtc_UWord32 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
mflodman@webrtc.org5885a412011-12-09 05:52:32 +0000110 WebRtc_UWord32 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_