1b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* 2b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 3b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 4b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Use of this source code is governed by a BSD-style license 5b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * that can be found in the LICENSE file in the root of the source 6b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * tree. An additional intellectual property rights grant can be found 7b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * in the file PATENTS. All contributing project authors may 8b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * be found in the AUTHORS file in the root of the source tree. 9b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */ 10b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 11b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifndef WEBRTC_VIDEO_ENGINE_VIE_ENCODER_H_ 12b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define WEBRTC_VIDEO_ENGINE_VIE_ENCODER_H_ 13b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 14b6d9cfc6347e490751e142ba5fb89e4a975ed442mflodman@webrtc.org#include <list> 15b6d9cfc6347e490751e142ba5fb89e4a975ed442mflodman@webrtc.org#include <map> 16b6d9cfc6347e490751e142ba5fb89e4a975ed442mflodman@webrtc.org 17d54aa969545bd9c5ccc0077dd6645e742bf11418pbos@webrtc.org#include "webrtc/base/thread_annotations.h" 18281cff8cd679728fe395f7f0203c05e763c0c789pbos@webrtc.org#include "webrtc/common_types.h" 19281cff8cd679728fe395f7f0203c05e763c0c789pbos@webrtc.org#include "webrtc/modules/bitrate_controller/include/bitrate_controller.h" 20281cff8cd679728fe395f7f0203c05e763c0c789pbos@webrtc.org#include "webrtc/modules/rtp_rtcp/interface/rtp_rtcp_defines.h" 21281cff8cd679728fe395f7f0203c05e763c0c789pbos@webrtc.org#include "webrtc/modules/video_coding/main/interface/video_coding_defines.h" 22281cff8cd679728fe395f7f0203c05e763c0c789pbos@webrtc.org#include "webrtc/modules/video_processing/main/interface/video_processing.h" 23281cff8cd679728fe395f7f0203c05e763c0c789pbos@webrtc.org#include "webrtc/system_wrappers/interface/scoped_ptr.h" 24281cff8cd679728fe395f7f0203c05e763c0c789pbos@webrtc.org#include "webrtc/typedefs.h" 2524e2089750e9e51228b82d6c7ebf4fa064c797bapbos@webrtc.org#include "webrtc/frame_callback.h" 26281cff8cd679728fe395f7f0203c05e763c0c789pbos@webrtc.org#include "webrtc/video_engine/vie_defines.h" 27281cff8cd679728fe395f7f0203c05e763c0c789pbos@webrtc.org#include "webrtc/video_engine/vie_frame_provider_base.h" 28b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 29b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgnamespace webrtc { 30b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 31ac6d919eec548c708588f29923f617a17283c7e2andresp@webrtc.orgclass Config; 32bf76ae2bdfc0b4e8e875f6cce1c85d4d66357bebmflodman@webrtc.orgclass CriticalSectionWrapper; 332e98d45e2455d3b48ceac1ad5457623d39802c9esprang@webrtc.orgclass EncodedImageCallback; 345e87b5f032780f6941a27c2d5068ab1e89e659a6pwestin@webrtc.orgclass PacedSender; 35b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass ProcessThread; 36b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass QMVideoSettingsCallback; 37b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass RtpRtcp; 38b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass ViEBitrateObserver; 39b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass ViEEffectFilter; 40b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass ViEEncoderObserver; 41bf76ae2bdfc0b4e8e875f6cce1c85d4d66357bebmflodman@webrtc.orgclass VideoCodingModule; 425e87b5f032780f6941a27c2d5068ab1e89e659a6pwestin@webrtc.orgclass ViEPacedSenderCallback; 43b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 44b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass ViEEncoder 45b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org : public RtcpIntraFrameObserver, 46b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org public VCMPacketizationCallback, 47b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org public VCMProtectionCallback, 48b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org public VCMSendStatisticsCallback, 49b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org public ViEFrameCallback { 50b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org public: 51b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org friend class ViEBitrateObserver; 525e87b5f032780f6941a27c2d5068ab1e89e659a6pwestin@webrtc.org friend class ViEPacedSenderCallback; 53b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 5467879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org ViEEncoder(int32_t engine_id, 5567879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t channel_id, 5667879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org uint32_t number_of_cores, 57ac6d919eec548c708588f29923f617a17283c7e2andresp@webrtc.org const Config& config, 58b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ProcessThread& module_process_thread, 59b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org BitrateController* bitrate_controller); 60b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ~ViEEncoder(); 61b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 62b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool Init(); 63b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 64dca71b270896a8501d9f12506e7da48cde9abb20stefan@webrtc.org void SetNetworkTransmissionState(bool is_transmitting); 65dca71b270896a8501d9f12506e7da48cde9abb20stefan@webrtc.org 66b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Returns the id of the owning channel. 67b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int Owner() const; 68b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 69b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Drops incoming packets before they get to the encoder. 70b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org void Pause(); 71b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org void Restart(); 72b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 73b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Codec settings. 7467879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org uint8_t NumberOfCodecs(); 7567879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t GetCodec(uint8_t list_index, VideoCodec* video_codec); 7667879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t RegisterExternalEncoder(VideoEncoder* encoder, 7767879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org uint8_t pl_type, 7867879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org bool internal_source); 7967879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t DeRegisterExternalEncoder(uint8_t pl_type); 8067879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t SetEncoder(const VideoCodec& video_codec); 8167879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t GetEncoder(VideoCodec* video_codec); 8267879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org 8367879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t GetCodecConfigParameters( 84b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org unsigned char config_parameters[kConfigParameterSize], 85b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org unsigned char& config_parameters_size); 86b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 875e87b5f032780f6941a27c2d5068ab1e89e659a6pwestin@webrtc.org PacedSender* GetPacedSender(); 885e87b5f032780f6941a27c2d5068ab1e89e659a6pwestin@webrtc.org 89b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Scale or crop/pad image. 9067879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t ScaleInputImage(bool enable); 91b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 92b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // RTP settings. 93b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org RtpRtcp* SendRtpRtcpModule(); 94b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 95b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Implementing ViEFrameCallback. 96b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual void DeliverFrame(int id, 973bbed74cdcf1f27ce82104ce645ec0dcdd36902dmikhal@webrtc.org I420VideoFrame* video_frame, 98b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int num_csrcs = 0, 999cd0bbc6e184925752a04ed33ccbdc6e125e318ahenrike@webrtc.org const uint32_t CSRC[kRtpCsrcSize] = NULL) OVERRIDE; 1009cd0bbc6e184925752a04ed33ccbdc6e125e318ahenrike@webrtc.org virtual void DelayChanged(int id, int frame_delay) OVERRIDE; 101b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int GetPreferedFrameSettings(int* width, 102b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int* height, 1039cd0bbc6e184925752a04ed33ccbdc6e125e318ahenrike@webrtc.org int* frame_rate) OVERRIDE; 104b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1059cd0bbc6e184925752a04ed33ccbdc6e125e318ahenrike@webrtc.org virtual void ProviderDestroyed(int id) OVERRIDE { 106b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return; 107b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 108b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 10967879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t SendKeyFrame(); 11067879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t SendCodecStatistics(uint32_t* num_key_frames, 11167879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org uint32_t* num_delta_frames); 112b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 11355a2a27d1a1aa9bf8401312a0b31250af4e3bd11jiayl@webrtc.org int PacerQueuingDelayMs() const; 114b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 11567879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int CodecTargetBitrate(uint32_t* bitrate) const; 116b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Loss protection. 1177fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org int32_t UpdateProtectionMethod(bool enable_nack); 1187fc75bbb65cc1cd99fdf45d9fce44bcce1396dfawu@webrtc.org bool nack_enabled() const { return nack_enabled_; } 119b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1209d6fcb37be4c9f49e1bb0b32bb01314c31f5e1ddmikhal@webrtc.org // Buffering mode. 1219d6fcb37be4c9f49e1bb0b32bb01314c31f5e1ddmikhal@webrtc.org void SetSenderBufferingMode(int target_delay_ms); 1220c66de6e75821a8e86fcbd166d725a5a859cab79mikhal@webrtc.org 123b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Implements VCMPacketizationCallback. 12467879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org virtual int32_t SendData( 125b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org FrameType frame_type, 12667879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org uint8_t payload_type, 12767879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org uint32_t time_stamp, 128b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int64_t capture_time_ms, 12967879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org const uint8_t* payload_data, 13067879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org uint32_t payload_size, 131b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org const RTPFragmentationHeader& fragmentation_header, 1329cd0bbc6e184925752a04ed33ccbdc6e125e318ahenrike@webrtc.org const RTPVideoHeader* rtp_video_hdr) OVERRIDE; 133b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 134b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Implements VideoProtectionCallback. 135b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org virtual int ProtectionRequest( 136b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org const FecProtectionParams* delta_fec_params, 137b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org const FecProtectionParams* key_fec_params, 13867879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org uint32_t* sent_video_rate_bps, 13967879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org uint32_t* sent_nack_rate_bps, 1409cd0bbc6e184925752a04ed33ccbdc6e125e318ahenrike@webrtc.org uint32_t* sent_fec_rate_bps) OVERRIDE; 141b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 142b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Implements VideoSendStatisticsCallback. 14367879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org virtual int32_t SendStatistics(const uint32_t bit_rate, 1449cd0bbc6e184925752a04ed33ccbdc6e125e318ahenrike@webrtc.org const uint32_t frame_rate) OVERRIDE; 1459cd0bbc6e184925752a04ed33ccbdc6e125e318ahenrike@webrtc.org 14667879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t RegisterCodecObserver(ViEEncoderObserver* observer); 147b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 148b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Implements RtcpIntraFrameObserver. 1499cd0bbc6e184925752a04ed33ccbdc6e125e318ahenrike@webrtc.org virtual void OnReceivedIntraFrameRequest(uint32_t ssrc) OVERRIDE; 1509cd0bbc6e184925752a04ed33ccbdc6e125e318ahenrike@webrtc.org virtual void OnReceivedSLI(uint32_t ssrc, uint8_t picture_id) OVERRIDE; 1519cd0bbc6e184925752a04ed33ccbdc6e125e318ahenrike@webrtc.org virtual void OnReceivedRPSI(uint32_t ssrc, uint64_t picture_id) OVERRIDE; 1529cd0bbc6e184925752a04ed33ccbdc6e125e318ahenrike@webrtc.org virtual void OnLocalSsrcChanged(uint32_t old_ssrc, 1539cd0bbc6e184925752a04ed33ccbdc6e125e318ahenrike@webrtc.org uint32_t new_ssrc) OVERRIDE; 154b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 155b6d9cfc6347e490751e142ba5fb89e4a975ed442mflodman@webrtc.org // Sets SSRCs for all streams. 156b6d9cfc6347e490751e142ba5fb89e4a975ed442mflodman@webrtc.org bool SetSsrcs(const std::list<unsigned int>& ssrcs); 157b6d9cfc6347e490751e142ba5fb89e4a975ed442mflodman@webrtc.org 1583f83f9cae99b605aee71b46839e902653baeb3f6pbos@webrtc.org void SetMinTransmitBitrate(int min_transmit_bitrate_kbps); 1593f83f9cae99b605aee71b46839e902653baeb3f6pbos@webrtc.org 160b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Effect filter. 16167879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t RegisterEffectFilter(ViEEffectFilter* effect_filter); 162b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 163b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Enables recording of debugging information. 1649cd0bbc6e184925752a04ed33ccbdc6e125e318ahenrike@webrtc.org int StartDebugRecording(const char* fileNameUTF8); 165b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 166b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Disables recording of debugging information. 1679cd0bbc6e184925752a04ed33ccbdc6e125e318ahenrike@webrtc.org int StopDebugRecording(); 168b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1694590177aa3346a742e8f71c8bcc5b81618d21919henrik.lundin@webrtc.org // Lets the sender suspend video when the rate drops below 17039079d1ee84faab899c8af92bce984c20e60fd29henrik.lundin@webrtc.org // |threshold_bps|, and turns back on when the rate goes back up above 17139079d1ee84faab899c8af92bce984c20e60fd29henrik.lundin@webrtc.org // |threshold_bps| + |window_bps|. 1729cd0bbc6e184925752a04ed33ccbdc6e125e318ahenrike@webrtc.org void SuspendBelowMinBitrate(); 17339079d1ee84faab899c8af92bce984c20e60fd29henrik.lundin@webrtc.org 1742e98d45e2455d3b48ceac1ad5457623d39802c9esprang@webrtc.org // New-style callbacks, used by VideoSendStream. 17563301bd03e009d309d1fdca1217f8708be610f32pbos@webrtc.org void RegisterPreEncodeCallback(I420FrameCallback* pre_encode_callback); 17663301bd03e009d309d1fdca1217f8708be610f32pbos@webrtc.org void DeRegisterPreEncodeCallback(); 1772e98d45e2455d3b48ceac1ad5457623d39802c9esprang@webrtc.org void RegisterPostEncodeImageCallback( 1782e98d45e2455d3b48ceac1ad5457623d39802c9esprang@webrtc.org EncodedImageCallback* post_encode_callback); 1792e98d45e2455d3b48ceac1ad5457623d39802c9esprang@webrtc.org void DeRegisterPostEncodeImageCallback(); 18063301bd03e009d309d1fdca1217f8708be610f32pbos@webrtc.org 181ff9854b939dd2dfb7321ca08be5cc33f78f3cbbbmflodman@webrtc.org int channel_id() const { return channel_id_; } 1822e98d45e2455d3b48ceac1ad5457623d39802c9esprang@webrtc.org 183b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org protected: 184b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Called by BitrateObserver. 185b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org void OnNetworkChanged(const uint32_t bitrate_bps, 186b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org const uint8_t fraction_lost, 187b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org const uint32_t round_trip_time_ms); 188b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 1895e87b5f032780f6941a27c2d5068ab1e89e659a6pwestin@webrtc.org // Called by PacedSender. 1900f6f7cb4232fea07a4b2a5a53f8eec6933c08a23hclam@chromium.org bool TimeToSendPacket(uint32_t ssrc, uint16_t sequence_number, 191b748c9d2022042b2cc04eaf89052945ba7149ba6stefan@webrtc.org int64_t capture_time_ms, bool retransmission); 19269f76054f5dc242b313e7e0642c8657a885682bastefan@webrtc.org int TimeToSendPadding(int bytes); 193b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org private: 194fedbe8b196306135b3834b34b19fd455c037172astefan@webrtc.org bool EncoderPaused() const EXCLUSIVE_LOCKS_REQUIRED(data_cs_); 195dca71b270896a8501d9f12506e7da48cde9abb20stefan@webrtc.org 19667879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org int32_t engine_id_; 197b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org const int channel_id_; 19867879bc2e69d7907b7ceb92135a34f77fe643e7fpbos@webrtc.org const uint32_t number_of_cores_; 199b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 200b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VideoCodingModule& vcm_; 201b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org VideoProcessingModule& vpm_; 202b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org scoped_ptr<RtpRtcp> default_rtp_rtcp_; 203b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org scoped_ptr<CriticalSectionWrapper> callback_cs_; 204b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org scoped_ptr<CriticalSectionWrapper> data_cs_; 205b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org scoped_ptr<BitrateObserver> bitrate_observer_; 2065e87b5f032780f6941a27c2d5068ab1e89e659a6pwestin@webrtc.org scoped_ptr<PacedSender> paced_sender_; 2075e87b5f032780f6941a27c2d5068ab1e89e659a6pwestin@webrtc.org scoped_ptr<ViEPacedSenderCallback> pacing_callback_; 208b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 209b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org BitrateController* bitrate_controller_; 210b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 211fedbe8b196306135b3834b34b19fd455c037172astefan@webrtc.org int64_t time_of_last_incoming_frame_ms_ GUARDED_BY(data_cs_); 212fedbe8b196306135b3834b34b19fd455c037172astefan@webrtc.org bool send_padding_ GUARDED_BY(data_cs_); 2133f83f9cae99b605aee71b46839e902653baeb3f6pbos@webrtc.org int min_transmit_bitrate_kbps_ GUARDED_BY(data_cs_); 214fedbe8b196306135b3834b34b19fd455c037172astefan@webrtc.org int target_delay_ms_ GUARDED_BY(data_cs_); 215fedbe8b196306135b3834b34b19fd455c037172astefan@webrtc.org bool network_is_transmitting_ GUARDED_BY(data_cs_); 216fedbe8b196306135b3834b34b19fd455c037172astefan@webrtc.org bool encoder_paused_ GUARDED_BY(data_cs_); 217fedbe8b196306135b3834b34b19fd455c037172astefan@webrtc.org bool encoder_paused_and_dropped_frame_ GUARDED_BY(data_cs_); 218fedbe8b196306135b3834b34b19fd455c037172astefan@webrtc.org std::map<unsigned int, int64_t> time_last_intra_request_ms_ 219fedbe8b196306135b3834b34b19fd455c037172astefan@webrtc.org GUARDED_BY(data_cs_); 220b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 221b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool fec_enabled_; 222b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool nack_enabled_; 223b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2243f83f9cae99b605aee71b46839e902653baeb3f6pbos@webrtc.org ViEEncoderObserver* codec_observer_ GUARDED_BY(callback_cs_); 225fedbe8b196306135b3834b34b19fd455c037172astefan@webrtc.org ViEEffectFilter* effect_filter_ GUARDED_BY(callback_cs_); 226b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ProcessThread& module_process_thread_; 227b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 228fedbe8b196306135b3834b34b19fd455c037172astefan@webrtc.org bool has_received_sli_ GUARDED_BY(data_cs_); 229fedbe8b196306135b3834b34b19fd455c037172astefan@webrtc.org uint8_t picture_id_sli_ GUARDED_BY(data_cs_); 230fedbe8b196306135b3834b34b19fd455c037172astefan@webrtc.org bool has_received_rpsi_ GUARDED_BY(data_cs_); 231fedbe8b196306135b3834b34b19fd455c037172astefan@webrtc.org uint64_t picture_id_rpsi_ GUARDED_BY(data_cs_); 232fedbe8b196306135b3834b34b19fd455c037172astefan@webrtc.org std::map<unsigned int, int> ssrc_streams_ GUARDED_BY(data_cs_); 233b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 234b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Quality modes callback 235b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org QMVideoSettingsCallback* qm_callback_; 236fedbe8b196306135b3834b34b19fd455c037172astefan@webrtc.org bool video_suspended_ GUARDED_BY(data_cs_); 237fedbe8b196306135b3834b34b19fd455c037172astefan@webrtc.org I420FrameCallback* pre_encode_callback_ GUARDED_BY(callback_cs_); 238b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}; 239b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 240b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} // namespace webrtc 241b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 242b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif // WEBRTC_VIDEO_ENGINE_VIE_ENCODER_H_ 243