1c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org/* 2c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. 3c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org * 4c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org * Use of this source code is governed by a BSD-style license 5c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org * that can be found in the LICENSE file in the root of the source 6c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org * tree. An additional intellectual property rights grant can be found 7c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org * in the file PATENTS. All contributing project authors may 8c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org * be found in the AUTHORS file in the root of the source tree. 9c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org */ 10c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org 11c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org#ifndef WEBRTC_VIDEO_RECEIVE_STATISTICS_PROXY_H_ 12c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org#define WEBRTC_VIDEO_RECEIVE_STATISTICS_PROXY_H_ 13c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org 14c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org#include <string> 15c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org 16d54aa969545bd9c5ccc0077dd6645e742bf11418pbos@webrtc.org#include "webrtc/base/thread_annotations.h" 17c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org#include "webrtc/common_types.h" 18c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org#include "webrtc/frame_callback.h" 19c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org#include "webrtc/modules/remote_bitrate_estimator/rate_statistics.h" 20c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org#include "webrtc/video_engine/include/vie_codec.h" 21c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org#include "webrtc/video_engine/include/vie_rtp_rtcp.h" 22c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org#include "webrtc/video_receive_stream.h" 23c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org#include "webrtc/video_renderer.h" 24c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org 25c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.orgnamespace webrtc { 26c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org 27c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.orgclass Clock; 28c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.orgclass CriticalSectionWrapper; 29c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.orgclass ViECodec; 30c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.orgclass ViEDecoderObserver; 31c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org 32c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.orgnamespace internal { 33c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org 34c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.orgclass ReceiveStatisticsProxy : public ViEDecoderObserver, 35c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org public RtcpStatisticsCallback, 36c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org public StreamDataCountersCallback { 37c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org public: 38c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org ReceiveStatisticsProxy(uint32_t ssrc, 39c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org Clock* clock, 40c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org ViERTP_RTCP* rtp_rtcp, 41c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org ViECodec* codec, 42c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org int channel); 43c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org virtual ~ReceiveStatisticsProxy(); 44c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org 45c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org VideoReceiveStream::Stats GetStats() const; 46c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org 47c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org void OnDecodedFrame(); 48c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org void OnRenderedFrame(); 49c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org 50c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org // Overrides ViEDecoderObserver. 51c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org virtual void IncomingCodecChanged(const int video_channel, 52c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org const VideoCodec& video_codec) OVERRIDE {} 53c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org virtual void IncomingRate(const int video_channel, 54c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org const unsigned int framerate, 55c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org const unsigned int bitrate) OVERRIDE; 56c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org virtual void DecoderTiming(int decode_ms, 57c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org int max_decode_ms, 58c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org int current_delay_ms, 59c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org int target_delay_ms, 60c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org int jitter_buffer_ms, 61c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org int min_playout_delay_ms, 62c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org int render_delay_ms) OVERRIDE {} 63c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org virtual void RequestNewKeyFrame(const int video_channel) OVERRIDE {} 64c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org 65c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org // Overrides RtcpStatisticsBallback. 66c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org virtual void StatisticsUpdated(const webrtc::RtcpStatistics& statistics, 67c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org uint32_t ssrc) OVERRIDE; 68c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org 69c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org // Overrides StreamDataCountersCallback. 70c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org virtual void DataCountersUpdated(const webrtc::StreamDataCounters& counters, 71c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org uint32_t ssrc) OVERRIDE; 72c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org 73c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org private: 74c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org std::string GetCName() const; 75c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org 76c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org const int channel_; 77c476e64d056c5e342bc5b23eecd493abf6d85d7fpbos@webrtc.org Clock* const clock_; 78c476e64d056c5e342bc5b23eecd493abf6d85d7fpbos@webrtc.org ViECodec* const codec_; 79c476e64d056c5e342bc5b23eecd493abf6d85d7fpbos@webrtc.org ViERTP_RTCP* const rtp_rtcp_; 80c476e64d056c5e342bc5b23eecd493abf6d85d7fpbos@webrtc.org 81c476e64d056c5e342bc5b23eecd493abf6d85d7fpbos@webrtc.org scoped_ptr<CriticalSectionWrapper> crit_; 82c476e64d056c5e342bc5b23eecd493abf6d85d7fpbos@webrtc.org VideoReceiveStream::Stats stats_ GUARDED_BY(crit_); 83c476e64d056c5e342bc5b23eecd493abf6d85d7fpbos@webrtc.org RateStatistics decode_fps_estimator_ GUARDED_BY(crit_); 84c476e64d056c5e342bc5b23eecd493abf6d85d7fpbos@webrtc.org RateStatistics renders_fps_estimator_ GUARDED_BY(crit_); 85c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org}; 86c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org 87c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org} // namespace internal 88c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org} // namespace webrtc 89c8ab7215c005f95e375f6e07f2a08ab6c7431f51sprang@webrtc.org#endif // WEBRTC_VIDEO_RECEIVE_STATISTICS_PROXY_H_ 90