blob: 85380f745e801b1904059ac719a3a1d4a9e2bc98 [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,
36 VideoFrame& 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_;
41 WebRtc_UWord32 external_renderer_width_;
42 WebRtc_UWord32 external_renderer_height_;
mflodman@webrtc.org7b3f3b12012-01-17 12:12:42 +000043 scoped_ptr<VideoFrame> converted_frame_;
niklase@google.com470e71d2011-07-07 08:21:25 +000044};
45
mflodman@webrtc.org5885a412011-12-09 05:52:32 +000046class ViERenderer: public ViEFrameCallback {
47 public:
48 static ViERenderer* CreateViERenderer(const WebRtc_Word32 render_id,
49 const WebRtc_Word32 engine_id,
50 VideoRender& render_module,
51 ViERenderManager& render_manager,
52 const WebRtc_UWord32 z_order,
53 const float left,
54 const float top,
55 const float right,
56 const float bottom);
niklase@google.com470e71d2011-07-07 08:21:25 +000057 ~ViERenderer(void);
58
59 WebRtc_Word32 StartRender();
60 WebRtc_Word32 StopRender();
61
mflodman@webrtc.org5885a412011-12-09 05:52:32 +000062 WebRtc_Word32 GetLastRenderedFrame(const WebRtc_Word32 renderID,
63 VideoFrame& video_frame);
niklase@google.com470e71d2011-07-07 08:21:25 +000064
mflodman@webrtc.orgf4f21452012-09-28 11:27:35 +000065 int SetExpectedRenderDelay(int render_delay);
66
mflodman@webrtc.org5885a412011-12-09 05:52:32 +000067 WebRtc_Word32 ConfigureRenderer(const unsigned int z_order,
68 const float left,
69 const float top,
70 const float right,
71 const float bottom);
niklase@google.com470e71d2011-07-07 08:21:25 +000072
73 VideoRender& RenderModule();
74
mflodman@webrtc.org5885a412011-12-09 05:52:32 +000075 WebRtc_Word32 EnableMirroring(const WebRtc_Word32 render_id,
76 const bool enable,
77 const bool mirror_xaxis,
78 const bool mirror_yaxis);
niklase@google.com470e71d2011-07-07 08:21:25 +000079
mflodman@webrtc.org5885a412011-12-09 05:52:32 +000080 WebRtc_Word32 SetTimeoutImage(const VideoFrame& timeout_image,
81 const WebRtc_Word32 timeout_value);
82 WebRtc_Word32 SetRenderStartImage(const VideoFrame& start_image);
83 WebRtc_Word32 SetExternalRenderer(const WebRtc_Word32 render_id,
84 RawVideoType video_input_format,
85 ExternalRenderer* external_renderer);
niklase@google.com470e71d2011-07-07 08:21:25 +000086
mflodman@webrtc.org5885a412011-12-09 05:52:32 +000087 private:
88 ViERenderer(const WebRtc_Word32 render_id, const WebRtc_Word32 engine_id,
89 VideoRender& render_module,
90 ViERenderManager& render_manager);
niklase@google.com470e71d2011-07-07 08:21:25 +000091
mflodman@webrtc.org5885a412011-12-09 05:52:32 +000092 WebRtc_Word32 Init(const WebRtc_UWord32 z_order,
93 const float left,
94 const float top,
95 const float right,
96 const float bottom);
niklase@google.com470e71d2011-07-07 08:21:25 +000097
98 // Implement ViEFrameCallback
mflodman@webrtc.org5885a412011-12-09 05:52:32 +000099 virtual void DeliverFrame(int id,
mflodman@webrtc.org8baed512012-06-21 12:11:50 +0000100 VideoFrame* video_frame,
mflodman@webrtc.org5885a412011-12-09 05:52:32 +0000101 int num_csrcs = 0,
niklase@google.com470e71d2011-07-07 08:21:25 +0000102 const WebRtc_UWord32 CSRC[kRtpCsrcSize] = NULL);
mflodman@webrtc.org5885a412011-12-09 05:52:32 +0000103 virtual void DelayChanged(int id, int frame_delay);
mflodman@webrtc.org8baed512012-06-21 12:11:50 +0000104 virtual int GetPreferedFrameSettings(int* width,
105 int* height,
106 int* frame_rate);
niklase@google.com470e71d2011-07-07 08:21:25 +0000107 virtual void ProviderDestroyed(int id);
108
mflodman@webrtc.org5885a412011-12-09 05:52:32 +0000109 WebRtc_UWord32 render_id_;
mflodman@webrtc.org5885a412011-12-09 05:52:32 +0000110 VideoRender& render_module_;
111 ViERenderManager& render_manager_;
112 VideoRenderCallback* render_callback_;
113 ViEExternalRendererImpl* incoming_external_callback_;
niklase@google.com470e71d2011-07-07 08:21:25 +0000114};
115
mflodman@webrtc.org5885a412011-12-09 05:52:32 +0000116} // namespace webrtc
niklase@google.com470e71d2011-07-07 08:21:25 +0000117
mflodman@webrtc.orge06ca3c2012-06-29 13:20:14 +0000118#endif // WEBRTC_VIDEO_ENGINE_VIE_RENDERER_H_