149812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org/*
249812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org *  Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
349812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org *
449812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org *  Use of this source code is governed by a BSD-style license
549812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org *  that can be found in the LICENSE file in the root of the source
649812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org *  tree. An additional intellectual property rights grant can be found
749812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org *  in the file PATENTS.  All contributing project authors may
849812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org *  be found in the AUTHORS file in the root of the source tree.
949812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org */
1049812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org
1149812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org#ifndef WEBRTC_VIDEO_SEND_STATISTICS_PROXY_H_
1249812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org#define WEBRTC_VIDEO_SEND_STATISTICS_PROXY_H_
1349812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org
1449812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org#include <string>
1549812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org
16d54aa969545bd9c5ccc0077dd6645e742bf11418pbos@webrtc.org#include "webrtc/base/thread_annotations.h"
1749812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org#include "webrtc/common_types.h"
1849812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org#include "webrtc/video_engine/include/vie_codec.h"
1949812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org#include "webrtc/video_engine/include/vie_capture.h"
2049812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org#include "webrtc/video_send_stream.h"
2149812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org#include "webrtc/system_wrappers/interface/scoped_ptr.h"
2249812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org
2349812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.orgnamespace webrtc {
2449812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org
2549812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.orgclass CriticalSectionWrapper;
2649812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org
2749812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.orgclass SendStatisticsProxy : public RtcpStatisticsCallback,
2849812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org                            public StreamDataCountersCallback,
2949812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org                            public BitrateStatisticsObserver,
3049812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org                            public FrameCountObserver,
3149812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org                            public ViEEncoderObserver,
3255b0f2e500fac8fc0932ea5b60359d268371f8c5stefan@webrtc.org                            public ViECaptureObserver,
3355b0f2e500fac8fc0932ea5b60359d268371f8c5stefan@webrtc.org                            public SendSideDelayObserver {
3449812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org public:
3555b0f2e500fac8fc0932ea5b60359d268371f8c5stefan@webrtc.org  explicit SendStatisticsProxy(const VideoSendStream::Config& config);
3649812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org  virtual ~SendStatisticsProxy();
3749812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org
3849812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org  VideoSendStream::Stats GetStats() const;
3949812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org
4049812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org protected:
4149812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org  // From RtcpStatisticsCallback.
4249812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org  virtual void StatisticsUpdated(const RtcpStatistics& statistics,
4349812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org                                 uint32_t ssrc) OVERRIDE;
4449812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org  // From StreamDataCountersCallback.
4549812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org  virtual void DataCountersUpdated(const StreamDataCounters& counters,
4649812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org                                   uint32_t ssrc) OVERRIDE;
4749812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org
4849812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org  // From BitrateStatisticsObserver.
4949812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org  virtual void Notify(const BitrateStatistics& stats, uint32_t ssrc) OVERRIDE;
5049812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org
5149812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org  // From FrameCountObserver.
5249812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org  virtual void FrameCountUpdated(FrameType frame_type,
5349812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org                                 uint32_t frame_count,
5449812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org                                 const unsigned int ssrc) OVERRIDE;
5549812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org
5649812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org  // From ViEEncoderObserver.
5749812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org  virtual void OutgoingRate(const int video_channel,
5849812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org                            const unsigned int framerate,
5949812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org                            const unsigned int bitrate) OVERRIDE;
6049812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org
619376c690a76a995b8d198107b3dbe68616392ccbhenrik.lundin@webrtc.org  virtual void SuspendChange(int video_channel, bool is_suspended) OVERRIDE;
6249812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org
6349812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org  // From ViECaptureObserver.
6449812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org  virtual void BrightnessAlarm(const int capture_id,
6549812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org                               const Brightness brightness) OVERRIDE {}
6649812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org
6749812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org  virtual void CapturedFrameRate(const int capture_id,
6849812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org                                 const unsigned char frame_rate) OVERRIDE;
6949812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org
7049812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org  virtual void NoPictureAlarm(const int capture_id,
7149812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org                              const CaptureAlarm alarm) OVERRIDE {}
7249812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org
7355b0f2e500fac8fc0932ea5b60359d268371f8c5stefan@webrtc.org  virtual void SendSideDelayUpdated(int avg_delay_ms,
7455b0f2e500fac8fc0932ea5b60359d268371f8c5stefan@webrtc.org                                    int max_delay_ms,
7555b0f2e500fac8fc0932ea5b60359d268371f8c5stefan@webrtc.org                                    uint32_t ssrc) OVERRIDE;
7655b0f2e500fac8fc0932ea5b60359d268371f8c5stefan@webrtc.org
7749812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org private:
78c476e64d056c5e342bc5b23eecd493abf6d85d7fpbos@webrtc.org  StreamStats* GetStatsEntry(uint32_t ssrc) EXCLUSIVE_LOCKS_REQUIRED(crit_);
7949812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org
8049812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org  const VideoSendStream::Config config_;
81c476e64d056c5e342bc5b23eecd493abf6d85d7fpbos@webrtc.org  scoped_ptr<CriticalSectionWrapper> crit_;
82c476e64d056c5e342bc5b23eecd493abf6d85d7fpbos@webrtc.org  VideoSendStream::Stats stats_ GUARDED_BY(crit_);
8349812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org};
8449812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org
8549812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org}  // namespace webrtc
8649812e6680a6392d53897b82b1b8dbfca6dd4faasprang@webrtc.org#endif  // WEBRTC_VIDEO_SEND_STATISTICS_PROXY_H_
87