/* * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ /* * vie_renderer.h */ #ifndef WEBRTC_VIDEO_ENGINE_MAIN_SOURCE_VIE_RENDERER_H_ #define WEBRTC_VIDEO_ENGINE_MAIN_SOURCE_VIE_RENDERER_H_ #include "vie_frame_provider_base.h" #include "map_wrapper.h" #include "vie_render.h" #include "video_render_defines.h" namespace webrtc { class VideoRender; class VideoRenderCallback; class ViERenderManager; class ViEExternalRendererImpl : public VideoRenderCallback { public: ViEExternalRendererImpl(); int SetViEExternalRenderer(ExternalRenderer* externalRenderer, webrtc::RawVideoType videoInputFormat); // implements VideoRenderCallback virtual WebRtc_Word32 RenderFrame(const WebRtc_UWord32 streamId, webrtc::VideoFrame& videoFrame); virtual ~ViEExternalRendererImpl(){}; private: ExternalRenderer* _externalRenderer; webrtc::RawVideoType _externalRendererFormat; WebRtc_UWord32 _externalRendererWidth; WebRtc_UWord32 _externalRendererHeight; }; class ViERenderer: public ViEFrameCallback { public: static ViERenderer* CreateViERenderer(const WebRtc_Word32 renderId, const WebRtc_Word32 engineId, VideoRender& renderModule, ViERenderManager& renderManager, const WebRtc_UWord32 zOrder, const float left, const float top, const float right, const float bottom); ~ViERenderer(void); WebRtc_Word32 StartRender(); WebRtc_Word32 StopRender(); WebRtc_Word32 GetLastRenderedFrame(const WebRtc_Word32 renderID, webrtc::VideoFrame& videoFrame); WebRtc_Word32 ConfigureRenderer(const unsigned int zOrder, const float left, const float top, const float right, const float bottom); VideoRender& RenderModule(); WebRtc_Word32 EnableMirroring(const WebRtc_Word32 renderId, const bool enable, const bool mirrorXAxis, const bool mirrorYAxis); WebRtc_Word32 SetTimeoutImage(const webrtc::VideoFrame& timeoutImage,const WebRtc_Word32 timeoutValue); WebRtc_Word32 SetRenderStartImage(const webrtc::VideoFrame& startImage); WebRtc_Word32 SetExternalRenderer(const WebRtc_Word32 renderId, webrtc::RawVideoType videoInputFormat, ExternalRenderer* externalRenderer); private: WebRtc_Word32 Init(const WebRtc_UWord32 zOrder, const float left, const float top, const float right, const float bottom); ViERenderer(const WebRtc_Word32 renderId,const WebRtc_Word32 engineId, VideoRender& renderModule, ViERenderManager& renderManager); // Implement ViEFrameCallback virtual void DeliverFrame(int id, VideoFrame& videoFrame, int numCSRCs = 0, const WebRtc_UWord32 CSRC[kRtpCsrcSize] = NULL); virtual void DelayChanged(int id, int frameDelay){return;} virtual int GetPreferedFrameSettings(int &width, int &height, int &frameRate){return -1;} virtual void ProviderDestroyed(int id); WebRtc_UWord32 _renderId; WebRtc_Word32 _engineId; VideoRender& _renderModule; ViERenderManager& _renderManager; VideoRenderCallback* _ptrRenderCallback; ViEExternalRendererImpl* _ptrIncomingExternalCallback; }; } //namespace webrtc #endif // WEBRTC_VIDEO_ENGINE_MAIN_SOURCE_VIE_RENDERER_H_