/* * 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_frame_provider_base.h */ #ifndef WEBRTC_VIDEO_ENGINE_MAIN_SOURCE_VIE_FRAME_PROVIDER_BASE_H_ #define WEBRTC_VIDEO_ENGINE_MAIN_SOURCE_VIE_FRAME_PROVIDER_BASE_H_ // Defines #include "typedefs.h" #include "module_common_types.h" #include "map_wrapper.h" namespace webrtc { class CriticalSectionWrapper; class VideoEncoder; class ViEFrameCallback { public: virtual void DeliverFrame(int id, VideoFrame& videoFrame, int numCSRCs = 0, const WebRtc_UWord32 CSRC[kRtpCsrcSize] = NULL) = 0; /* * Delay has changed from the provider. * frameDelay new capture delay in Ms. */ virtual void DelayChanged(int id, int frameDelay)=0; /* Fetch the width, height and frame rate preferred by this observer. return 0 on success, -1 otherwise. */ virtual int GetPreferedFrameSettings(int &width, int &height, int &frameRate)=0; virtual void ProviderDestroyed(int id) = 0; protected: virtual ~ViEFrameCallback() { } ; }; class ViEFrameProviderBase { public: ViEFrameProviderBase(int Id, int engineId); virtual ~ViEFrameProviderBase(); int Id(); // Register frame callbacks, i.e. a receiver of the captured frame. virtual int RegisterFrameCallback(int observerId, ViEFrameCallback* callbackObject); virtual int DeregisterFrameCallback(const ViEFrameCallback* callbackObject); virtual bool IsFrameCallbackRegistered(const ViEFrameCallback* callbackObject); int NumberOfRegistersFrameCallbacks(); // FrameCallbackChanged // Inherited classes should check for new frameSettings and reconfigure output if possible. // Return 0 on success, -1 otherwise. virtual int FrameCallbackChanged() = 0; protected: void DeliverFrame(VideoFrame& videoFrame, int numCSRCs = 0, const WebRtc_UWord32 CSRC[kRtpCsrcSize] = NULL); void SetFrameDelay(int frameDelay); int FrameDelay(); int GetBestFormat(int& bestWidth, int& bestHeight, int& bestFrameRate); int _id; int _engineId; protected: // Frame callbacks MapWrapper _frameCallbackMap; CriticalSectionWrapper& _providerCritSect; private: VideoFrame* _ptrExtraFrame; //Members int _frameDelay; }; } //namespace webrtc #endif // WEBRTC_VIDEO_ENGINE_MAIN_SOURCE_VIE_FRAME_PROVIDER_BASE_H_