|  | /* | 
|  | *  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. | 
|  | */ | 
|  |  | 
|  | // TODO(mflodman) ViEEncoder has a time check to not send key frames too often, | 
|  | // move the logic to this class. | 
|  |  | 
|  | #ifndef WEBRTC_VIDEO_ENGINE_ENCODER_STATE_FEEDBACK_H_ | 
|  | #define WEBRTC_VIDEO_ENGINE_ENCODER_STATE_FEEDBACK_H_ | 
|  |  | 
|  | #include <map> | 
|  | #include <vector> | 
|  |  | 
|  | #include "webrtc/base/constructormagic.h" | 
|  | #include "webrtc/base/scoped_ptr.h" | 
|  | #include "webrtc/typedefs.h" | 
|  |  | 
|  | namespace webrtc { | 
|  |  | 
|  | class CriticalSectionWrapper; | 
|  | class EncoderStateFeedbackObserver; | 
|  | class RtcpIntraFrameObserver; | 
|  | class ViEEncoder; | 
|  |  | 
|  | class EncoderStateFeedback { | 
|  | public: | 
|  | friend class EncoderStateFeedbackObserver; | 
|  |  | 
|  | EncoderStateFeedback(); | 
|  | ~EncoderStateFeedback(); | 
|  |  | 
|  | // Adds an encoder to receive feedback for a set of SSRCs. | 
|  | void AddEncoder(const std::vector<uint32_t>& ssrc, ViEEncoder* encoder); | 
|  |  | 
|  | // Removes a registered ViEEncoder. | 
|  | void RemoveEncoder(const ViEEncoder* encoder); | 
|  |  | 
|  | // Returns an observer to register at the requesting class. The observer has | 
|  | // the same lifetime as the EncoderStateFeedback instance. | 
|  | RtcpIntraFrameObserver* GetRtcpIntraFrameObserver(); | 
|  |  | 
|  | protected: | 
|  | // Called by EncoderStateFeedbackObserver when a new key frame is requested. | 
|  | void OnReceivedIntraFrameRequest(uint32_t ssrc); | 
|  | void OnReceivedSLI(uint32_t ssrc, uint8_t picture_id); | 
|  | void OnReceivedRPSI(uint32_t ssrc, uint64_t picture_id); | 
|  | void OnLocalSsrcChanged(uint32_t old_ssrc, uint32_t new_ssrc); | 
|  |  | 
|  | private: | 
|  | typedef std::map<uint32_t,  ViEEncoder*> SsrcEncoderMap; | 
|  |  | 
|  | rtc::scoped_ptr<CriticalSectionWrapper> crit_; | 
|  |  | 
|  | // Instance registered at the class requesting new key frames. | 
|  | rtc::scoped_ptr<EncoderStateFeedbackObserver> observer_; | 
|  |  | 
|  | // Maps a unique ssrc to the given encoder. | 
|  | SsrcEncoderMap encoders_; | 
|  |  | 
|  | RTC_DISALLOW_COPY_AND_ASSIGN(EncoderStateFeedback); | 
|  | }; | 
|  |  | 
|  | }  // namespace webrtc | 
|  |  | 
|  | #endif  // WEBRTC_VIDEO_ENGINE_ENCODER_STATE_FEEDBACK_H_ |