|  | /* | 
|  | *  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. | 
|  | */ | 
|  |  | 
|  | // This sub-API supports the following functionalities: | 
|  | //  - Effect filters | 
|  | //  - Deflickering | 
|  | //  - Color enhancement | 
|  |  | 
|  | #ifndef WEBRTC_VIDEO_ENGINE_INCLUDE_VIE_IMAGE_PROCESS_H_ | 
|  | #define WEBRTC_VIDEO_ENGINE_INCLUDE_VIE_IMAGE_PROCESS_H_ | 
|  |  | 
|  | #include "webrtc/common_types.h" | 
|  |  | 
|  | namespace webrtc { | 
|  |  | 
|  | class EncodedImageCallback; | 
|  | class I420FrameCallback; | 
|  | class VideoEngine; | 
|  |  | 
|  | // This class declares an abstract interface for a user defined effect filter. | 
|  | // The effect filter is registered using RegisterCaptureEffectFilter(), | 
|  | // RegisterSendEffectFilter() or RegisterRenderEffectFilter() and deregistered | 
|  | // with the corresponding deregister function. | 
|  | class WEBRTC_DLLEXPORT ViEEffectFilter { | 
|  | public: | 
|  | // This method is called with an I420 video frame allowing the user to | 
|  | // modify the video frame. | 
|  | virtual int Transform(int size, | 
|  | unsigned char* frame_buffer, | 
|  | int64_t ntp_time_ms, | 
|  | unsigned int timestamp, | 
|  | unsigned int width, | 
|  | unsigned int height) = 0; | 
|  | protected: | 
|  | ViEEffectFilter() {} | 
|  | virtual ~ViEEffectFilter() {} | 
|  | }; | 
|  |  | 
|  | class WEBRTC_DLLEXPORT ViEImageProcess { | 
|  | public: | 
|  | // Factory for the ViEImageProcess subāAPI and increases an internal | 
|  | // reference counter if successful. Returns NULL if the API is not supported | 
|  | // or if construction fails. | 
|  | static ViEImageProcess* GetInterface(VideoEngine* video_engine); | 
|  |  | 
|  | // Releases the ViEImageProcess sub-API and decreases an internal reference | 
|  | // counter. Returns the new reference count. This value should be zero | 
|  | // for all sub-API:s before the VideoEngine object can be safely deleted. | 
|  | virtual int Release() = 0; | 
|  |  | 
|  | // This function registers a EffectFilter to use for a specified capture | 
|  | // device. | 
|  | virtual int RegisterCaptureEffectFilter(const int capture_id, | 
|  | ViEEffectFilter& capture_filter) = 0; | 
|  |  | 
|  | // This function deregisters a EffectFilter for a specified capture device. | 
|  | virtual int DeregisterCaptureEffectFilter(const int capture_id) = 0; | 
|  |  | 
|  | // This function registers an EffectFilter to use for a specified channel. | 
|  | virtual int RegisterSendEffectFilter(const int video_channel, | 
|  | ViEEffectFilter& send_filter) = 0; | 
|  |  | 
|  | // This function deregisters a send effect filter for a specified channel. | 
|  | virtual int DeregisterSendEffectFilter(const int video_channel) = 0; | 
|  |  | 
|  | // This function registers a EffectFilter to use for the rendered video | 
|  | // stream on an incoming channel. | 
|  | virtual int RegisterRenderEffectFilter(const int video_channel, | 
|  | ViEEffectFilter& render_filter) = 0; | 
|  |  | 
|  | // This function deregisters a render effect filter for a specified channel. | 
|  | virtual int DeregisterRenderEffectFilter(const int video_channel) = 0; | 
|  |  | 
|  | // All cameras run the risk of getting in almost perfect sync with | 
|  | // florescent lamps, which will result in a very annoying flickering of the | 
|  | // image. Most cameras have some type of filter to protect against this but | 
|  | // not all of them succeed. Enabling this function will remove the flicker. | 
|  | virtual int EnableDeflickering(const int capture_id, const bool enable) = 0; | 
|  |  | 
|  | // TODO(pbos): Remove this function when removed from fakewebrtcvideoengine.h. | 
|  | virtual int EnableDenoising(const int capture_id, const bool enable) { | 
|  | return -1; | 
|  | } | 
|  |  | 
|  | // This function enhances the colors on the decoded video stream, enabled by | 
|  | // default. | 
|  | virtual int EnableColorEnhancement(const int video_channel, | 
|  | const bool enable) = 0; | 
|  |  | 
|  | // New-style callbacks, used by VideoSendStream/VideoReceiveStream. | 
|  | virtual void RegisterPreEncodeCallback( | 
|  | int video_channel, | 
|  | I420FrameCallback* pre_encode_callback) = 0; | 
|  | virtual void DeRegisterPreEncodeCallback(int video_channel) = 0; | 
|  |  | 
|  | virtual void RegisterPostEncodeImageCallback( | 
|  | int video_channel, | 
|  | EncodedImageCallback* post_encode_callback) {} | 
|  | virtual void DeRegisterPostEncodeCallback(int video_channel) {} | 
|  |  | 
|  | virtual void RegisterPreDecodeImageCallback( | 
|  | int video_channel, | 
|  | EncodedImageCallback* pre_decode_callback) {} | 
|  | virtual void DeRegisterPreDecodeCallback(int video_channel) {} | 
|  |  | 
|  | virtual void RegisterPreRenderCallback( | 
|  | int video_channel, | 
|  | I420FrameCallback* pre_render_callback) = 0; | 
|  | virtual void DeRegisterPreRenderCallback(int video_channel) = 0; | 
|  |  | 
|  | protected: | 
|  | ViEImageProcess() {} | 
|  | virtual ~ViEImageProcess() {} | 
|  | }; | 
|  |  | 
|  | }  // namespace webrtc | 
|  |  | 
|  | #endif  // WEBRTC_VIDEO_ENGINE_INCLUDE_VIE_IMAGE_PROCESS_H_ |