| OLD | NEW | 
|    1 /* |    1 /* | 
|    2  *  Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. |    2  *  Copyright (c) 2016 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  | 
| (...skipping 10 matching lines...) Expand all  Loading... | 
|   21 #include "webrtc/base/event.h" |   21 #include "webrtc/base/event.h" | 
|   22 #include "webrtc/base/thread_annotations.h" |   22 #include "webrtc/base/thread_annotations.h" | 
|   23 #include "webrtc/modules/video_coding/frame_object.h" |   23 #include "webrtc/modules/video_coding/frame_object.h" | 
|   24 #include "webrtc/modules/video_coding/include/video_coding_defines.h" |   24 #include "webrtc/modules/video_coding/include/video_coding_defines.h" | 
|   25 #include "webrtc/modules/video_coding/inter_frame_delay.h" |   25 #include "webrtc/modules/video_coding/inter_frame_delay.h" | 
|   26 #include "webrtc/modules/video_coding/sequence_number_util.h" |   26 #include "webrtc/modules/video_coding/sequence_number_util.h" | 
|   27  |   27  | 
|   28 namespace webrtc { |   28 namespace webrtc { | 
|   29  |   29  | 
|   30 class Clock; |   30 class Clock; | 
|   31 class VCMReceiveStatisticsCallback; |  | 
|   32 class VCMJitterEstimator; |   31 class VCMJitterEstimator; | 
|   33 class VCMTiming; |   32 class VCMTiming; | 
|   34  |   33  | 
|   35 namespace video_coding { |   34 namespace video_coding { | 
|   36  |   35  | 
|   37 class FrameBuffer { |   36 class FrameBuffer { | 
|   38  public: |   37  public: | 
|   39   enum ReturnReason { kFrameFound, kTimeout, kStopped }; |   38   enum ReturnReason { kFrameFound, kTimeout, kStopped }; | 
|   40  |   39  | 
|   41   FrameBuffer(Clock* clock, |   40   FrameBuffer(Clock* clock, | 
|   42               VCMJitterEstimator* jitter_estimator, |   41               VCMJitterEstimator* jitter_estimator, | 
|   43               VCMTiming* timing, |   42               VCMTiming* timing); | 
|   44               VCMReceiveStatisticsCallback* stats_proxy); |  | 
|   45  |   43  | 
|   46   virtual ~FrameBuffer(); |   44   virtual ~FrameBuffer(); | 
|   47  |   45  | 
|   48   // Insert a frame into the frame buffer. Returns the picture id |   46   // Insert a frame into the frame buffer. Returns the picture id | 
|   49   // of the last continuous frame or -1 if there is no continuous frame. |   47   // of the last continuous frame or -1 if there is no continuous frame. | 
|   50   int InsertFrame(std::unique_ptr<FrameObject> frame); |   48   int InsertFrame(std::unique_ptr<FrameObject> frame); | 
|   51  |   49  | 
|   52   // Get the next frame for decoding. Will return at latest after |   50   // Get the next frame for decoding. Will return at latest after | 
|   53   // |max_wait_time_ms|. |   51   // |max_wait_time_ms|. | 
|   54   //  - If a frame is available within |max_wait_time_ms| it will return |   52   //  - If a frame is available within |max_wait_time_ms| it will return | 
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  136  |  134  | 
|  137   // Update the corresponding FrameInfo of |frame| and all FrameInfos that |  135   // Update the corresponding FrameInfo of |frame| and all FrameInfos that | 
|  138   // |frame| references. |  136   // |frame| references. | 
|  139   // Return false if |frame| will never be decodable, true otherwise. |  137   // Return false if |frame| will never be decodable, true otherwise. | 
|  140   bool UpdateFrameInfoWithIncomingFrame(const FrameObject& frame, |  138   bool UpdateFrameInfoWithIncomingFrame(const FrameObject& frame, | 
|  141                                         FrameMap::iterator info) |  139                                         FrameMap::iterator info) | 
|  142       EXCLUSIVE_LOCKS_REQUIRED(crit_); |  140       EXCLUSIVE_LOCKS_REQUIRED(crit_); | 
|  143  |  141  | 
|  144   void UpdateJitterDelay() EXCLUSIVE_LOCKS_REQUIRED(crit_); |  142   void UpdateJitterDelay() EXCLUSIVE_LOCKS_REQUIRED(crit_); | 
|  145  |  143  | 
 |  144   void UpdateHistograms() const; | 
 |  145  | 
|  146   void ClearFramesAndHistory() EXCLUSIVE_LOCKS_REQUIRED(crit_); |  146   void ClearFramesAndHistory() EXCLUSIVE_LOCKS_REQUIRED(crit_); | 
|  147  |  147  | 
|  148   FrameMap frames_ GUARDED_BY(crit_); |  148   FrameMap frames_ GUARDED_BY(crit_); | 
|  149  |  149  | 
|  150   rtc::CriticalSection crit_; |  150   rtc::CriticalSection crit_; | 
|  151   Clock* const clock_; |  151   Clock* const clock_; | 
|  152   rtc::Event new_countinuous_frame_event_; |  152   rtc::Event new_countinuous_frame_event_; | 
|  153   VCMJitterEstimator* const jitter_estimator_ GUARDED_BY(crit_); |  153   VCMJitterEstimator* const jitter_estimator_ GUARDED_BY(crit_); | 
|  154   VCMTiming* const timing_ GUARDED_BY(crit_); |  154   VCMTiming* const timing_ GUARDED_BY(crit_); | 
|  155   VCMInterFrameDelay inter_frame_delay_ GUARDED_BY(crit_); |  155   VCMInterFrameDelay inter_frame_delay_ GUARDED_BY(crit_); | 
|  156   uint32_t last_decoded_frame_timestamp_ GUARDED_BY(crit_); |  156   uint32_t last_decoded_frame_timestamp_ GUARDED_BY(crit_); | 
|  157   FrameMap::iterator last_decoded_frame_it_ GUARDED_BY(crit_); |  157   FrameMap::iterator last_decoded_frame_it_ GUARDED_BY(crit_); | 
|  158   FrameMap::iterator last_continuous_frame_it_ GUARDED_BY(crit_); |  158   FrameMap::iterator last_continuous_frame_it_ GUARDED_BY(crit_); | 
|  159   FrameMap::iterator next_frame_it_ GUARDED_BY(crit_); |  159   FrameMap::iterator next_frame_it_ GUARDED_BY(crit_); | 
|  160   int num_frames_history_ GUARDED_BY(crit_); |  160   int num_frames_history_ GUARDED_BY(crit_); | 
|  161   int num_frames_buffered_ GUARDED_BY(crit_); |  161   int num_frames_buffered_ GUARDED_BY(crit_); | 
|  162   bool stopped_ GUARDED_BY(crit_); |  162   bool stopped_ GUARDED_BY(crit_); | 
|  163   VCMVideoProtection protection_mode_ GUARDED_BY(crit_); |  163   VCMVideoProtection protection_mode_ GUARDED_BY(crit_); | 
|  164   VCMReceiveStatisticsCallback* const stats_callback_; |  | 
|  165  |  164  | 
|  166   RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(FrameBuffer); |  165   RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(FrameBuffer); | 
 |  166  | 
 |  167   // For WebRTC.Video.JitterBufferDelayInMs metric. | 
 |  168   int64_t accumulated_delay_ = 0; | 
 |  169   int64_t accumulated_delay_samples_ = 0; | 
 |  170  | 
 |  171   // For WebRTC.Video.KeyFramesReceivedInPermille metric. | 
 |  172   int64_t num_total_frames_ = 0; | 
 |  173   int64_t num_key_frames_ = 0; | 
|  167 }; |  174 }; | 
|  168  |  175  | 
|  169 }  // namespace video_coding |  176 }  // namespace video_coding | 
|  170 }  // namespace webrtc |  177 }  // namespace webrtc | 
|  171  |  178  | 
|  172 #endif  // WEBRTC_MODULES_VIDEO_CODING_FRAME_BUFFER2_H_ |  179 #endif  // WEBRTC_MODULES_VIDEO_CODING_FRAME_BUFFER2_H_ | 
| OLD | NEW |