send_statistics_proxy.h revision 00b8f6b3643332cce1ee711715f7fbb824d793ca
1ccd42840bcee8db145be91b3308912a24f710a6fsprang@webrtc.org/* 2ccd42840bcee8db145be91b3308912a24f710a6fsprang@webrtc.org * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. 3ccd42840bcee8db145be91b3308912a24f710a6fsprang@webrtc.org * 4ccd42840bcee8db145be91b3308912a24f710a6fsprang@webrtc.org * Use of this source code is governed by a BSD-style license 5ccd42840bcee8db145be91b3308912a24f710a6fsprang@webrtc.org * that can be found in the LICENSE file in the root of the source 6ccd42840bcee8db145be91b3308912a24f710a6fsprang@webrtc.org * tree. An additional intellectual property rights grant can be found 7ccd42840bcee8db145be91b3308912a24f710a6fsprang@webrtc.org * in the file PATENTS. All contributing project authors may 8ccd42840bcee8db145be91b3308912a24f710a6fsprang@webrtc.org * be found in the AUTHORS file in the root of the source tree. 9ccd42840bcee8db145be91b3308912a24f710a6fsprang@webrtc.org */ 10ccd42840bcee8db145be91b3308912a24f710a6fsprang@webrtc.org 11ccd42840bcee8db145be91b3308912a24f710a6fsprang@webrtc.org#ifndef WEBRTC_VIDEO_SEND_STATISTICS_PROXY_H_ 12ccd42840bcee8db145be91b3308912a24f710a6fsprang@webrtc.org#define WEBRTC_VIDEO_SEND_STATISTICS_PROXY_H_ 13ccd42840bcee8db145be91b3308912a24f710a6fsprang@webrtc.org 14ccd42840bcee8db145be91b3308912a24f710a6fsprang@webrtc.org#include <string> 15ccd42840bcee8db145be91b3308912a24f710a6fsprang@webrtc.org 1600b8f6b3643332cce1ee711715f7fbb824d793cakwiberg@webrtc.org#include "webrtc/base/scoped_ptr.h" 1738344ed2806c8fed60d67d280ca44c32e36707c0pbos@webrtc.org#include "webrtc/base/thread_annotations.h" 18ccd42840bcee8db145be91b3308912a24f710a6fsprang@webrtc.org#include "webrtc/common_types.h" 19273a414b0ec2e58fdf3b817ad8b1a02f4ce15287pbos@webrtc.org#include "webrtc/modules/video_coding/codecs/interface/video_codec_interface.h" 20891d48393e5ccd2f5e03d509c544c00a3d88cbbcpbos@webrtc.org#include "webrtc/modules/video_coding/main/interface/video_coding_defines.h" 21273a414b0ec2e58fdf3b817ad8b1a02f4ce15287pbos@webrtc.org#include "webrtc/system_wrappers/interface/clock.h" 223e6e271ec3253e78ae0eb72156e5236d43f8731dpbos@webrtc.org#include "webrtc/video_engine/include/vie_base.h" 23ccd42840bcee8db145be91b3308912a24f710a6fsprang@webrtc.org#include "webrtc/video_engine/include/vie_capture.h" 24273a414b0ec2e58fdf3b817ad8b1a02f4ce15287pbos@webrtc.org#include "webrtc/video_engine/include/vie_codec.h" 25ccd42840bcee8db145be91b3308912a24f710a6fsprang@webrtc.org#include "webrtc/video_send_stream.h" 26ccd42840bcee8db145be91b3308912a24f710a6fsprang@webrtc.org 27ccd42840bcee8db145be91b3308912a24f710a6fsprang@webrtc.orgnamespace webrtc { 28ccd42840bcee8db145be91b3308912a24f710a6fsprang@webrtc.org 29ccd42840bcee8db145be91b3308912a24f710a6fsprang@webrtc.orgclass CriticalSectionWrapper; 30ccd42840bcee8db145be91b3308912a24f710a6fsprang@webrtc.org 313e6e271ec3253e78ae0eb72156e5236d43f8731dpbos@webrtc.orgclass SendStatisticsProxy : public CpuOveruseMetricsObserver, 323e6e271ec3253e78ae0eb72156e5236d43f8731dpbos@webrtc.org public RtcpStatisticsCallback, 331d0fa5d352fe12092201fade249905c7e1ff974bpbos@webrtc.org public RtcpPacketTypeCounterObserver, 34ccd42840bcee8db145be91b3308912a24f710a6fsprang@webrtc.org public StreamDataCountersCallback, 35ccd42840bcee8db145be91b3308912a24f710a6fsprang@webrtc.org public BitrateStatisticsObserver, 36ccd42840bcee8db145be91b3308912a24f710a6fsprang@webrtc.org public FrameCountObserver, 37ccd42840bcee8db145be91b3308912a24f710a6fsprang@webrtc.org public ViEEncoderObserver, 38168f23faa5b8a49d4dd709c6649e77d5fecf36bfstefan@webrtc.org public ViECaptureObserver, 39891d48393e5ccd2f5e03d509c544c00a3d88cbbcpbos@webrtc.org public VideoEncoderRateObserver, 40168f23faa5b8a49d4dd709c6649e77d5fecf36bfstefan@webrtc.org public SendSideDelayObserver { 41ccd42840bcee8db145be91b3308912a24f710a6fsprang@webrtc.org public: 42273a414b0ec2e58fdf3b817ad8b1a02f4ce15287pbos@webrtc.org static const int kStatsTimeoutMs; 43273a414b0ec2e58fdf3b817ad8b1a02f4ce15287pbos@webrtc.org 44273a414b0ec2e58fdf3b817ad8b1a02f4ce15287pbos@webrtc.org SendStatisticsProxy(Clock* clock, const VideoSendStream::Config& config); 45ccd42840bcee8db145be91b3308912a24f710a6fsprang@webrtc.org virtual ~SendStatisticsProxy(); 46ccd42840bcee8db145be91b3308912a24f710a6fsprang@webrtc.org 47273a414b0ec2e58fdf3b817ad8b1a02f4ce15287pbos@webrtc.org VideoSendStream::Stats GetStats(); 48273a414b0ec2e58fdf3b817ad8b1a02f4ce15287pbos@webrtc.org 49273a414b0ec2e58fdf3b817ad8b1a02f4ce15287pbos@webrtc.org virtual void OnSendEncodedImage(const EncodedImage& encoded_image, 50273a414b0ec2e58fdf3b817ad8b1a02f4ce15287pbos@webrtc.org const RTPVideoHeader* rtp_video_header); 51ccd42840bcee8db145be91b3308912a24f710a6fsprang@webrtc.org 52891d48393e5ccd2f5e03d509c544c00a3d88cbbcpbos@webrtc.org // From VideoEncoderRateObserver. 53891d48393e5ccd2f5e03d509c544c00a3d88cbbcpbos@webrtc.org void OnSetRates(uint32_t bitrate_bps, int framerate) override; 54891d48393e5ccd2f5e03d509c544c00a3d88cbbcpbos@webrtc.org 55ccd42840bcee8db145be91b3308912a24f710a6fsprang@webrtc.org protected: 563e6e271ec3253e78ae0eb72156e5236d43f8731dpbos@webrtc.org // From CpuOveruseMetricsObserver. 573e6e271ec3253e78ae0eb72156e5236d43f8731dpbos@webrtc.org void CpuOveruseMetricsUpdated(const CpuOveruseMetrics& metrics) OVERRIDE; 58ccd42840bcee8db145be91b3308912a24f710a6fsprang@webrtc.org // From RtcpStatisticsCallback. 59ccd42840bcee8db145be91b3308912a24f710a6fsprang@webrtc.org virtual void StatisticsUpdated(const RtcpStatistics& statistics, 60ccd42840bcee8db145be91b3308912a24f710a6fsprang@webrtc.org uint32_t ssrc) OVERRIDE; 61ce4e9a356200170abcdd44ff2af95f87a6781b8epbos@webrtc.org virtual void CNameChanged(const char *cname, uint32_t ssrc) OVERRIDE; 621d0fa5d352fe12092201fade249905c7e1ff974bpbos@webrtc.org // From RtcpPacketTypeCounterObserver 631d0fa5d352fe12092201fade249905c7e1ff974bpbos@webrtc.org virtual void RtcpPacketTypesCounterUpdated( 641d0fa5d352fe12092201fade249905c7e1ff974bpbos@webrtc.org uint32_t ssrc, 651d0fa5d352fe12092201fade249905c7e1ff974bpbos@webrtc.org const RtcpPacketTypeCounter& packet_counter) OVERRIDE; 66ccd42840bcee8db145be91b3308912a24f710a6fsprang@webrtc.org // From StreamDataCountersCallback. 67ccd42840bcee8db145be91b3308912a24f710a6fsprang@webrtc.org virtual void DataCountersUpdated(const StreamDataCounters& counters, 68ccd42840bcee8db145be91b3308912a24f710a6fsprang@webrtc.org uint32_t ssrc) OVERRIDE; 69ccd42840bcee8db145be91b3308912a24f710a6fsprang@webrtc.org 70ccd42840bcee8db145be91b3308912a24f710a6fsprang@webrtc.org // From BitrateStatisticsObserver. 710bae1fab4adb9bb8164e53142bf419049eafec38stefan@webrtc.org virtual void Notify(const BitrateStatistics& total_stats, 720bae1fab4adb9bb8164e53142bf419049eafec38stefan@webrtc.org const BitrateStatistics& retransmit_stats, 730bae1fab4adb9bb8164e53142bf419049eafec38stefan@webrtc.org uint32_t ssrc) OVERRIDE; 74ccd42840bcee8db145be91b3308912a24f710a6fsprang@webrtc.org 75ccd42840bcee8db145be91b3308912a24f710a6fsprang@webrtc.org // From FrameCountObserver. 76ce4e9a356200170abcdd44ff2af95f87a6781b8epbos@webrtc.org virtual void FrameCountUpdated(const FrameCounts& frame_counts, 77ce4e9a356200170abcdd44ff2af95f87a6781b8epbos@webrtc.org uint32_t ssrc) OVERRIDE; 78ccd42840bcee8db145be91b3308912a24f710a6fsprang@webrtc.org 79ccd42840bcee8db145be91b3308912a24f710a6fsprang@webrtc.org // From ViEEncoderObserver. 80ccd42840bcee8db145be91b3308912a24f710a6fsprang@webrtc.org virtual void OutgoingRate(const int video_channel, 81ccd42840bcee8db145be91b3308912a24f710a6fsprang@webrtc.org const unsigned int framerate, 82ccd42840bcee8db145be91b3308912a24f710a6fsprang@webrtc.org const unsigned int bitrate) OVERRIDE; 83ccd42840bcee8db145be91b3308912a24f710a6fsprang@webrtc.org 84b10363f3b63222b0f6ec7e916ef4ccac15d7205bhenrik.lundin@webrtc.org virtual void SuspendChange(int video_channel, bool is_suspended) OVERRIDE; 85ccd42840bcee8db145be91b3308912a24f710a6fsprang@webrtc.org 86ccd42840bcee8db145be91b3308912a24f710a6fsprang@webrtc.org // From ViECaptureObserver. 87ccd42840bcee8db145be91b3308912a24f710a6fsprang@webrtc.org virtual void BrightnessAlarm(const int capture_id, 88ccd42840bcee8db145be91b3308912a24f710a6fsprang@webrtc.org const Brightness brightness) OVERRIDE {} 89ccd42840bcee8db145be91b3308912a24f710a6fsprang@webrtc.org 90ccd42840bcee8db145be91b3308912a24f710a6fsprang@webrtc.org virtual void CapturedFrameRate(const int capture_id, 91ccd42840bcee8db145be91b3308912a24f710a6fsprang@webrtc.org const unsigned char frame_rate) OVERRIDE; 92ccd42840bcee8db145be91b3308912a24f710a6fsprang@webrtc.org 93ccd42840bcee8db145be91b3308912a24f710a6fsprang@webrtc.org virtual void NoPictureAlarm(const int capture_id, 94ccd42840bcee8db145be91b3308912a24f710a6fsprang@webrtc.org const CaptureAlarm alarm) OVERRIDE {} 95ccd42840bcee8db145be91b3308912a24f710a6fsprang@webrtc.org 96168f23faa5b8a49d4dd709c6649e77d5fecf36bfstefan@webrtc.org virtual void SendSideDelayUpdated(int avg_delay_ms, 97168f23faa5b8a49d4dd709c6649e77d5fecf36bfstefan@webrtc.org int max_delay_ms, 98168f23faa5b8a49d4dd709c6649e77d5fecf36bfstefan@webrtc.org uint32_t ssrc) OVERRIDE; 99168f23faa5b8a49d4dd709c6649e77d5fecf36bfstefan@webrtc.org 100ccd42840bcee8db145be91b3308912a24f710a6fsprang@webrtc.org private: 101273a414b0ec2e58fdf3b817ad8b1a02f4ce15287pbos@webrtc.org struct StatsUpdateTimes { 102273a414b0ec2e58fdf3b817ad8b1a02f4ce15287pbos@webrtc.org StatsUpdateTimes() : resolution_update_ms(0) {} 103273a414b0ec2e58fdf3b817ad8b1a02f4ce15287pbos@webrtc.org int64_t resolution_update_ms; 104273a414b0ec2e58fdf3b817ad8b1a02f4ce15287pbos@webrtc.org }; 105273a414b0ec2e58fdf3b817ad8b1a02f4ce15287pbos@webrtc.org void PurgeOldStats() EXCLUSIVE_LOCKS_REQUIRED(crit_); 10609c77b95bb62566be64da662f0b3b6a838ec6553pbos@webrtc.org VideoSendStream::StreamStats* GetStatsEntry(uint32_t ssrc) 10709c77b95bb62566be64da662f0b3b6a838ec6553pbos@webrtc.org EXCLUSIVE_LOCKS_REQUIRED(crit_); 108ccd42840bcee8db145be91b3308912a24f710a6fsprang@webrtc.org 109273a414b0ec2e58fdf3b817ad8b1a02f4ce15287pbos@webrtc.org Clock* const clock_; 110ccd42840bcee8db145be91b3308912a24f710a6fsprang@webrtc.org const VideoSendStream::Config config_; 11100b8f6b3643332cce1ee711715f7fbb824d793cakwiberg@webrtc.org rtc::scoped_ptr<CriticalSectionWrapper> crit_; 112de1429e9ad9a3a207ca191e1d748aa7271066860pbos@webrtc.org VideoSendStream::Stats stats_ GUARDED_BY(crit_); 113273a414b0ec2e58fdf3b817ad8b1a02f4ce15287pbos@webrtc.org std::map<uint32_t, StatsUpdateTimes> update_times_ GUARDED_BY(crit_); 114ccd42840bcee8db145be91b3308912a24f710a6fsprang@webrtc.org}; 115ccd42840bcee8db145be91b3308912a24f710a6fsprang@webrtc.org 116ccd42840bcee8db145be91b3308912a24f710a6fsprang@webrtc.org} // namespace webrtc 117ccd42840bcee8db145be91b3308912a24f710a6fsprang@webrtc.org#endif // WEBRTC_VIDEO_SEND_STATISTICS_PROXY_H_ 118