| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 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 | 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 | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 | 10 |
| 11 #ifndef WEBRTC_MODULES_VIDEO_CODING_GENERIC_ENCODER_H_ | 11 #ifndef WEBRTC_MODULES_VIDEO_CODING_GENERIC_ENCODER_H_ |
| 12 #define WEBRTC_MODULES_VIDEO_CODING_GENERIC_ENCODER_H_ | 12 #define WEBRTC_MODULES_VIDEO_CODING_GENERIC_ENCODER_H_ |
| 13 | 13 |
| 14 #include <stdio.h> |
| 15 #include <vector> |
| 16 |
| 14 #include "webrtc/modules/video_coding/include/video_codec_interface.h" | 17 #include "webrtc/modules/video_coding/include/video_codec_interface.h" |
| 15 #include "webrtc/modules/video_coding/include/video_coding_defines.h" | 18 #include "webrtc/modules/video_coding/include/video_coding_defines.h" |
| 16 | 19 |
| 17 #include <stdio.h> | |
| 18 | |
| 19 #include "webrtc/base/criticalsection.h" | 20 #include "webrtc/base/criticalsection.h" |
| 20 #include "webrtc/base/scoped_ptr.h" | 21 #include "webrtc/base/scoped_ptr.h" |
| 21 | 22 |
| 22 namespace webrtc { | 23 namespace webrtc { |
| 23 class CriticalSectionWrapper; | 24 class CriticalSectionWrapper; |
| 24 | 25 |
| 25 namespace media_optimization { | 26 namespace media_optimization { |
| 26 class MediaOptimization; | 27 class MediaOptimization; |
| 27 } // namespace media_optimization | 28 } // namespace media_optimization |
| 28 | 29 |
| 29 struct EncoderParameters { | 30 struct EncoderParameters { |
| 30 uint32_t target_bitrate; | 31 uint32_t target_bitrate; |
| 31 uint8_t loss_rate; | 32 uint8_t loss_rate; |
| 32 int64_t rtt; | 33 int64_t rtt; |
| 33 uint32_t input_frame_rate; | 34 uint32_t input_frame_rate; |
| 34 }; | 35 }; |
| 35 | 36 |
| 36 /*************************************/ | 37 /*************************************/ |
| 37 /* VCMEncodeFrameCallback class */ | 38 /* VCMEncodeFrameCallback class */ |
| 38 /***********************************/ | 39 /***********************************/ |
| 39 class VCMEncodedFrameCallback : public EncodedImageCallback | 40 class VCMEncodedFrameCallback : public EncodedImageCallback { |
| 40 { | 41 public: |
| 41 public: | 42 explicit VCMEncodedFrameCallback( |
| 42 VCMEncodedFrameCallback(EncodedImageCallback* post_encode_callback); | 43 EncodedImageCallback* post_encode_callback); |
| 43 virtual ~VCMEncodedFrameCallback(); | 44 virtual ~VCMEncodedFrameCallback(); |
| 44 | 45 |
| 45 /* | 46 /* |
| 46 * Callback implementation - codec encode complete | 47 * Callback implementation - codec encode complete |
| 47 */ | 48 */ |
| 48 int32_t Encoded( | 49 int32_t Encoded( |
| 49 const EncodedImage& encodedImage, | 50 const EncodedImage& encodedImage, |
| 50 const CodecSpecificInfo* codecSpecificInfo = NULL, | 51 const CodecSpecificInfo* codecSpecificInfo = NULL, |
| 51 const RTPFragmentationHeader* fragmentationHeader = NULL); | 52 const RTPFragmentationHeader* fragmentationHeader = NULL); |
| 52 /* | 53 /* |
| 53 * Callback implementation - generic encoder encode complete | 54 * Callback implementation - generic encoder encode complete |
| 54 */ | 55 */ |
| 55 int32_t SetTransportCallback(VCMPacketizationCallback* transport); | 56 int32_t SetTransportCallback(VCMPacketizationCallback* transport); |
| 56 /** | 57 /** |
| 57 * Set media Optimization | 58 * Set media Optimization |
| 58 */ | 59 */ |
| 59 void SetMediaOpt (media_optimization::MediaOptimization* mediaOpt); | 60 void SetMediaOpt(media_optimization::MediaOptimization* mediaOpt); |
| 60 | 61 |
| 61 void SetPayloadType(uint8_t payloadType) { _payloadType = payloadType; }; | 62 void SetPayloadType(uint8_t payloadType) { |
| 62 void SetInternalSource(bool internalSource) { _internalSource = internalSour
ce; }; | 63 _payloadType = payloadType; |
| 64 } |
| 65 |
| 66 void SetInternalSource(bool internalSource) { |
| 67 _internalSource = internalSource; |
| 68 } |
| 63 | 69 |
| 64 void SetRotation(VideoRotation rotation) { _rotation = rotation; } | 70 void SetRotation(VideoRotation rotation) { _rotation = rotation; } |
| 65 void SignalLastEncoderImplementationUsed( | 71 void SignalLastEncoderImplementationUsed( |
| 66 const char* encoder_implementation_name); | 72 const char* encoder_implementation_name); |
| 67 | 73 |
| 68 private: | 74 private: |
| 69 VCMPacketizationCallback* send_callback_; | 75 VCMPacketizationCallback* send_callback_; |
| 70 media_optimization::MediaOptimization* _mediaOpt; | 76 media_optimization::MediaOptimization* _mediaOpt; |
| 71 uint8_t _payloadType; | 77 uint8_t _payloadType; |
| 72 bool _internalSource; | 78 bool _internalSource; |
| 73 VideoRotation _rotation; | 79 VideoRotation _rotation; |
| 74 | 80 |
| 75 EncodedImageCallback* post_encode_callback_; | 81 EncodedImageCallback* post_encode_callback_; |
| 76 | 82 |
| 77 #ifdef DEBUG_ENCODER_BIT_STREAM | 83 #ifdef DEBUG_ENCODER_BIT_STREAM |
| 78 FILE* _bitStreamAfterEncoder; | 84 FILE* _bitStreamAfterEncoder; |
| 79 #endif | 85 #endif |
| 80 };// end of VCMEncodeFrameCallback class | 86 }; // end of VCMEncodeFrameCallback class |
| 81 | |
| 82 | 87 |
| 83 /******************************/ | 88 /******************************/ |
| 84 /* VCMGenericEncoder class */ | 89 /* VCMGenericEncoder class */ |
| 85 /******************************/ | 90 /******************************/ |
| 86 class VCMGenericEncoder | 91 class VCMGenericEncoder { |
| 87 { | 92 friend class VCMCodecDataBase; |
| 88 friend class VCMCodecDataBase; | |
| 89 public: | |
| 90 VCMGenericEncoder(VideoEncoder* encoder, | |
| 91 VideoEncoderRateObserver* rate_observer, | |
| 92 VCMEncodedFrameCallback* encoded_frame_callback, | |
| 93 bool internalSource); | |
| 94 ~VCMGenericEncoder(); | |
| 95 /** | |
| 96 * Free encoder memory | |
| 97 */ | |
| 98 int32_t Release(); | |
| 99 /** | |
| 100 * Initialize the encoder with the information from the VideoCodec | |
| 101 */ | |
| 102 int32_t InitEncode(const VideoCodec* settings, | |
| 103 int32_t numberOfCores, | |
| 104 size_t maxPayloadSize); | |
| 105 /** | |
| 106 * Encode raw image | |
| 107 * inputFrame : Frame containing raw image | |
| 108 * codecSpecificInfo : Specific codec data | |
| 109 * cameraFrameRate : Request or information from the remote side | |
| 110 * frameType : The requested frame type to encode | |
| 111 */ | |
| 112 int32_t Encode(const VideoFrame& inputFrame, | |
| 113 const CodecSpecificInfo* codecSpecificInfo, | |
| 114 const std::vector<FrameType>& frameTypes); | |
| 115 | 93 |
| 116 void SetEncoderParameters(const EncoderParameters& params); | 94 public: |
| 117 EncoderParameters GetEncoderParameters() const; | 95 VCMGenericEncoder(VideoEncoder* encoder, |
| 96 VideoEncoderRateObserver* rate_observer, |
| 97 VCMEncodedFrameCallback* encoded_frame_callback, |
| 98 bool internalSource); |
| 99 ~VCMGenericEncoder(); |
| 100 /** |
| 101 * Free encoder memory |
| 102 */ |
| 103 int32_t Release(); |
| 104 /** |
| 105 * Initialize the encoder with the information from the VideoCodec |
| 106 */ |
| 107 int32_t InitEncode(const VideoCodec* settings, |
| 108 int32_t numberOfCores, |
| 109 size_t maxPayloadSize); |
| 110 /** |
| 111 * Encode raw image |
| 112 * inputFrame : Frame containing raw image |
| 113 * codecSpecificInfo : Specific codec data |
| 114 * cameraFrameRate : Request or information from the remote side |
| 115 * frameType : The requested frame type to encode |
| 116 */ |
| 117 int32_t Encode(const VideoFrame& inputFrame, |
| 118 const CodecSpecificInfo* codecSpecificInfo, |
| 119 const std::vector<FrameType>& frameTypes); |
| 118 | 120 |
| 119 int32_t SetPeriodicKeyFrames(bool enable); | 121 void SetEncoderParameters(const EncoderParameters& params); |
| 122 EncoderParameters GetEncoderParameters() const; |
| 120 | 123 |
| 121 int32_t RequestFrame(const std::vector<FrameType>& frame_types); | 124 int32_t SetPeriodicKeyFrames(bool enable); |
| 122 | 125 |
| 123 bool InternalSource() const; | 126 int32_t RequestFrame(const std::vector<FrameType>& frame_types); |
| 124 | 127 |
| 125 void OnDroppedFrame(); | 128 bool InternalSource() const; |
| 126 | 129 |
| 127 bool SupportsNativeHandle() const; | 130 void OnDroppedFrame(); |
| 128 | 131 |
| 129 int GetTargetFramerate(); | 132 bool SupportsNativeHandle() const; |
| 130 | 133 |
| 131 private: | 134 int GetTargetFramerate(); |
| 132 VideoEncoder* const encoder_; | 135 |
| 133 VideoEncoderRateObserver* const rate_observer_; | 136 private: |
| 134 VCMEncodedFrameCallback* const vcm_encoded_frame_callback_; | 137 VideoEncoder* const encoder_; |
| 135 const bool internal_source_; | 138 VideoEncoderRateObserver* const rate_observer_; |
| 136 mutable rtc::CriticalSection params_lock_; | 139 VCMEncodedFrameCallback* const vcm_encoded_frame_callback_; |
| 137 EncoderParameters encoder_params_ GUARDED_BY(params_lock_); | 140 const bool internal_source_; |
| 138 VideoRotation rotation_; | 141 mutable rtc::CriticalSection params_lock_; |
| 139 bool is_screenshare_; | 142 EncoderParameters encoder_params_ GUARDED_BY(params_lock_); |
| 140 }; // end of VCMGenericEncoder class | 143 VideoRotation rotation_; |
| 144 bool is_screenshare_; |
| 145 }; // end of VCMGenericEncoder class |
| 141 | 146 |
| 142 } // namespace webrtc | 147 } // namespace webrtc |
| 143 | 148 |
| 144 #endif // WEBRTC_MODULES_VIDEO_CODING_GENERIC_ENCODER_H_ | 149 #endif // WEBRTC_MODULES_VIDEO_CODING_GENERIC_ENCODER_H_ |
| OLD | NEW |