OLD | NEW |
| (Empty) |
1 /* | |
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | |
3 * | |
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 | |
6 * tree. An additional intellectual property rights grant can be found | |
7 * in the file PATENTS. All contributing project authors may | |
8 * be found in the AUTHORS file in the root of the source tree. | |
9 */ | |
10 | |
11 // TODO(mflodman) ViEEncoder has a time check to not send key frames too often, | |
12 // move the logic to this class. | |
13 | |
14 #ifndef WEBRTC_VIDEO_ENCODER_STATE_FEEDBACK_H_ | |
15 #define WEBRTC_VIDEO_ENCODER_STATE_FEEDBACK_H_ | |
16 | |
17 #include <map> | |
18 #include <vector> | |
19 | |
20 #include "webrtc/base/constructormagic.h" | |
21 #include "webrtc/base/scoped_ptr.h" | |
22 #include "webrtc/typedefs.h" | |
23 | |
24 namespace webrtc { | |
25 | |
26 class CriticalSectionWrapper; | |
27 class EncoderStateFeedbackObserver; | |
28 class RtcpIntraFrameObserver; | |
29 class ViEEncoder; | |
30 | |
31 class EncoderStateFeedback { | |
32 public: | |
33 friend class EncoderStateFeedbackObserver; | |
34 | |
35 EncoderStateFeedback(); | |
36 ~EncoderStateFeedback(); | |
37 | |
38 // Adds an encoder to receive feedback for a set of SSRCs. | |
39 void AddEncoder(const std::vector<uint32_t>& ssrc, ViEEncoder* encoder); | |
40 | |
41 // Removes a registered ViEEncoder. | |
42 void RemoveEncoder(const ViEEncoder* encoder); | |
43 | |
44 // Returns an observer to register at the requesting class. The observer has | |
45 // the same lifetime as the EncoderStateFeedback instance. | |
46 RtcpIntraFrameObserver* GetRtcpIntraFrameObserver(); | |
47 | |
48 protected: | |
49 // Called by EncoderStateFeedbackObserver when a new key frame is requested. | |
50 void OnReceivedIntraFrameRequest(uint32_t ssrc); | |
51 void OnReceivedSLI(uint32_t ssrc, uint8_t picture_id); | |
52 void OnReceivedRPSI(uint32_t ssrc, uint64_t picture_id); | |
53 void OnLocalSsrcChanged(uint32_t old_ssrc, uint32_t new_ssrc); | |
54 | |
55 private: | |
56 typedef std::map<uint32_t, ViEEncoder*> SsrcEncoderMap; | |
57 | |
58 rtc::scoped_ptr<CriticalSectionWrapper> crit_; | |
59 | |
60 // Instance registered at the class requesting new key frames. | |
61 rtc::scoped_ptr<EncoderStateFeedbackObserver> observer_; | |
62 | |
63 // Maps a unique ssrc to the given encoder. | |
64 SsrcEncoderMap encoders_; | |
65 | |
66 RTC_DISALLOW_COPY_AND_ASSIGN(EncoderStateFeedback); | |
67 }; | |
68 | |
69 } // namespace webrtc | |
70 | |
71 #endif // WEBRTC_VIDEO_ENCODER_STATE_FEEDBACK_H_ | |
OLD | NEW |