diff options
Diffstat (limited to 'webrtc/modules/video_coding/main/source/generic_encoder.h')
-rw-r--r-- | webrtc/modules/video_coding/main/source/generic_encoder.h | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/webrtc/modules/video_coding/main/source/generic_encoder.h b/webrtc/modules/video_coding/main/source/generic_encoder.h new file mode 100644 index 0000000000..3a7132860f --- /dev/null +++ b/webrtc/modules/video_coding/main/source/generic_encoder.h @@ -0,0 +1,142 @@ +/* + * Copyright (c) 2012 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. + */ + +#ifndef WEBRTC_MODULES_VIDEO_CODING_GENERIC_ENCODER_H_ +#define WEBRTC_MODULES_VIDEO_CODING_GENERIC_ENCODER_H_ + +#include "webrtc/modules/video_coding/codecs/interface/video_codec_interface.h" +#include "webrtc/modules/video_coding/main/interface/video_coding_defines.h" + +#include <stdio.h> + +#include "webrtc/base/criticalsection.h" +#include "webrtc/base/scoped_ptr.h" + +namespace webrtc { +class CriticalSectionWrapper; + +namespace media_optimization { +class MediaOptimization; +} // namespace media_optimization + +struct EncoderParameters { + uint32_t target_bitrate; + uint8_t loss_rate; + int64_t rtt; + uint32_t input_frame_rate; +}; + +/*************************************/ +/* VCMEncodeFrameCallback class */ +/***********************************/ +class VCMEncodedFrameCallback : public EncodedImageCallback +{ +public: + VCMEncodedFrameCallback(EncodedImageCallback* post_encode_callback); + virtual ~VCMEncodedFrameCallback(); + + /* + * Callback implementation - codec encode complete + */ + int32_t Encoded( + const EncodedImage& encodedImage, + const CodecSpecificInfo* codecSpecificInfo = NULL, + const RTPFragmentationHeader* fragmentationHeader = NULL); + /* + * Callback implementation - generic encoder encode complete + */ + int32_t SetTransportCallback(VCMPacketizationCallback* transport); + /** + * Set media Optimization + */ + void SetMediaOpt (media_optimization::MediaOptimization* mediaOpt); + + void SetPayloadType(uint8_t payloadType) { _payloadType = payloadType; }; + void SetInternalSource(bool internalSource) { _internalSource = internalSource; }; + + void SetRotation(VideoRotation rotation) { _rotation = rotation; } + +private: + VCMPacketizationCallback* _sendCallback; + media_optimization::MediaOptimization* _mediaOpt; + uint8_t _payloadType; + bool _internalSource; + VideoRotation _rotation; + + EncodedImageCallback* post_encode_callback_; + +#ifdef DEBUG_ENCODER_BIT_STREAM + FILE* _bitStreamAfterEncoder; +#endif +};// end of VCMEncodeFrameCallback class + + +/******************************/ +/* VCMGenericEncoder class */ +/******************************/ +class VCMGenericEncoder +{ + friend class VCMCodecDataBase; +public: + VCMGenericEncoder(VideoEncoder* encoder, + VideoEncoderRateObserver* rate_observer, + VCMEncodedFrameCallback* encoded_frame_callback, + bool internalSource); + ~VCMGenericEncoder(); + /** + * Free encoder memory + */ + int32_t Release(); + /** + * Initialize the encoder with the information from the VideoCodec + */ + int32_t InitEncode(const VideoCodec* settings, + int32_t numberOfCores, + size_t maxPayloadSize); + /** + * Encode raw image + * inputFrame : Frame containing raw image + * codecSpecificInfo : Specific codec data + * cameraFrameRate : Request or information from the remote side + * frameType : The requested frame type to encode + */ + int32_t Encode(const VideoFrame& inputFrame, + const CodecSpecificInfo* codecSpecificInfo, + const std::vector<FrameType>& frameTypes); + + void SetEncoderParameters(const EncoderParameters& params); + EncoderParameters GetEncoderParameters() const; + + int32_t SetPeriodicKeyFrames(bool enable); + + int32_t RequestFrame(const std::vector<FrameType>& frame_types); + + bool InternalSource() const; + + void OnDroppedFrame(); + + bool SupportsNativeHandle() const; + + int GetTargetFramerate(); + +private: + VideoEncoder* const encoder_; + VideoEncoderRateObserver* const rate_observer_; + VCMEncodedFrameCallback* const vcm_encoded_frame_callback_; + const bool internal_source_; + mutable rtc::CriticalSection params_lock_; + EncoderParameters encoder_params_ GUARDED_BY(params_lock_); + VideoRotation rotation_; + bool is_screenshare_; +}; // end of VCMGenericEncoder class + +} // namespace webrtc + +#endif // WEBRTC_MODULES_VIDEO_CODING_GENERIC_ENCODER_H_ |