10e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org/* 20e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * libjingle 30e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * Copyright 2010 Google Inc. 40e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * 50e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * Redistribution and use in source and binary forms, with or without 60e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * modification, are permitted provided that the following conditions are met: 70e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * 80e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * 1. Redistributions of source code must retain the above copyright notice, 90e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * this list of conditions and the following disclaimer. 100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * 2. Redistributions in binary form must reproduce the above copyright notice, 110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * this list of conditions and the following disclaimer in the documentation 120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * and/or other materials provided with the distribution. 130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * 3. The name of the author may not be used to endorse or promote products 140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * derived from this software without specific prior written permission. 150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * 160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org */ 270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#ifndef TALK_MEDIA_WEBRTC_FAKEWEBRTCVIDEOENGINE_H_ 290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#define TALK_MEDIA_WEBRTC_FAKEWEBRTCVIDEOENGINE_H_ 300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include <map> 320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include <set> 330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include <vector> 340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "talk/base/basictypes.h" 36cfd624796c7321c5ffac2249b407cdd0d496e00awu@webrtc.org#include "talk/base/gunit.h" 370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "talk/base/stringutils.h" 380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "talk/media/base/codec.h" 390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "talk/media/webrtc/fakewebrtccommon.h" 400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "talk/media/webrtc/webrtcvideodecoderfactory.h" 410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "talk/media/webrtc/webrtcvideoencoderfactory.h" 420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#include "talk/media/webrtc/webrtcvie.h" 430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgnamespace cricket { 450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#define WEBRTC_CHECK_CAPTURER(capturer) \ 470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (capturers_.find(capturer) == capturers_.end()) return -1; 480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#define WEBRTC_ASSERT_CAPTURER(capturer) \ 500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ASSERT(capturers_.find(capturer) != capturers_.end()); 510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgstatic const int kMinVideoBitrate = 100; 530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgstatic const int kStartVideoBitrate = 300; 540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgstatic const int kMaxVideoBitrate = 1000; 550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// WebRtc channel id and capture id share the same number space. 570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// This is how AddRenderer(renderId, ...) is able to tell if it is adding a 580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// renderer for a channel or it is adding a renderer for a capturer. 590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgstatic const int kViEChannelIdBase = 0; 600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgstatic const int kViEChannelIdMax = 1000; 610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgstatic const int kViECaptureIdBase = 10000; // Make sure there is a gap. 620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgstatic const int kViECaptureIdMax = 11000; 630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Fake class for mocking out webrtc::VideoDecoder 650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgclass FakeWebRtcVideoDecoder : public webrtc::VideoDecoder { 660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org public: 670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org FakeWebRtcVideoDecoder() 680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org : num_frames_received_(0) { 690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual int32 InitDecode(const webrtc::VideoCodec*, int32) { 720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return WEBRTC_VIDEO_CODEC_OK; 730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual int32 Decode( 760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const webrtc::EncodedImage&, bool, const webrtc::RTPFragmentationHeader*, 770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const webrtc::CodecSpecificInfo*, int64) { 780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org num_frames_received_++; 790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return WEBRTC_VIDEO_CODEC_OK; 800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual int32 RegisterDecodeCompleteCallback( 830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org webrtc::DecodedImageCallback*) { 840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return WEBRTC_VIDEO_CODEC_OK; 850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual int32 Release() { 880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return WEBRTC_VIDEO_CODEC_OK; 890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual int32 Reset() { 920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return WEBRTC_VIDEO_CODEC_OK; 930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int GetNumFramesReceived() const { 960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return num_frames_received_; 970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org private: 1000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int num_frames_received_; 1010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org}; 1020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Fake class for mocking out WebRtcVideoDecoderFactory. 1040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgclass FakeWebRtcVideoDecoderFactory : public WebRtcVideoDecoderFactory { 1050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org public: 1060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org FakeWebRtcVideoDecoderFactory() 1070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org : num_created_decoders_(0) { 1080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 1090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual webrtc::VideoDecoder* CreateVideoDecoder( 1110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org webrtc::VideoCodecType type) { 1120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (supported_codec_types_.count(type) == 0) { 1130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return NULL; 1140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 1150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org FakeWebRtcVideoDecoder* decoder = new FakeWebRtcVideoDecoder(); 1160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org decoders_.push_back(decoder); 1170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org num_created_decoders_++; 1180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return decoder; 1190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 1200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void DestroyVideoDecoder(webrtc::VideoDecoder* decoder) { 1220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org decoders_.erase( 1230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::remove(decoders_.begin(), decoders_.end(), decoder), 1240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org decoders_.end()); 1250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org delete decoder; 1260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 1270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void AddSupportedVideoCodecType(webrtc::VideoCodecType type) { 1290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org supported_codec_types_.insert(type); 1300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 1310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int GetNumCreatedDecoders() { 1330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return num_created_decoders_; 1340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 1350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const std::vector<FakeWebRtcVideoDecoder*>& decoders() { 1370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return decoders_; 1380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 1390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org private: 1410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::set<webrtc::VideoCodecType> supported_codec_types_; 1420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::vector<FakeWebRtcVideoDecoder*> decoders_; 1430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int num_created_decoders_; 1440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org}; 1450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Fake class for mocking out webrtc::VideoEnoder 1470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgclass FakeWebRtcVideoEncoder : public webrtc::VideoEncoder { 1480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org public: 1490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org FakeWebRtcVideoEncoder() {} 1500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual int32 InitEncode(const webrtc::VideoCodec* codecSettings, 1520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int32 numberOfCores, 1530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org uint32 maxPayloadSize) { 1540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return WEBRTC_VIDEO_CODEC_OK; 1550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 1560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual int32 Encode( 1580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const webrtc::I420VideoFrame& inputImage, 1590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const webrtc::CodecSpecificInfo* codecSpecificInfo, 1600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const std::vector<webrtc::VideoFrameType>* frame_types) { 1610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return WEBRTC_VIDEO_CODEC_OK; 1620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 1630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual int32 RegisterEncodeCompleteCallback( 1650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org webrtc::EncodedImageCallback* callback) { 1660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return WEBRTC_VIDEO_CODEC_OK; 1670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 1680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual int32 Release() { 1700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return WEBRTC_VIDEO_CODEC_OK; 1710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 1720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual int32 SetChannelParameters(uint32 packetLoss, 1740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int rtt) { 1750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return WEBRTC_VIDEO_CODEC_OK; 1760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 1770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual int32 SetRates(uint32 newBitRate, 1790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org uint32 frameRate) { 1800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return WEBRTC_VIDEO_CODEC_OK; 1810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 1820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org}; 1830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org// Fake class for mocking out WebRtcVideoEncoderFactory. 1850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgclass FakeWebRtcVideoEncoderFactory : public WebRtcVideoEncoderFactory { 1860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org public: 1870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org FakeWebRtcVideoEncoderFactory() 1880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org : num_created_encoders_(0) { 1890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 1900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 1910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual webrtc::VideoEncoder* CreateVideoEncoder( 1920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org webrtc::VideoCodecType type) { 1930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (supported_codec_types_.count(type) == 0) { 1940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return NULL; 1950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 1960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org FakeWebRtcVideoEncoder* encoder = new FakeWebRtcVideoEncoder(); 1970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org encoders_.push_back(encoder); 1980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org num_created_encoders_++; 1990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return encoder; 2000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 2010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void DestroyVideoEncoder(webrtc::VideoEncoder* encoder) { 2030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org encoders_.erase( 2040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::remove(encoders_.begin(), encoders_.end(), encoder), 2050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org encoders_.end()); 2060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org delete encoder; 2070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 2080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void AddObserver(WebRtcVideoEncoderFactory::Observer* observer) { 2100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool inserted = observers_.insert(observer).second; 2110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_TRUE(inserted); 2120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 2130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual void RemoveObserver(WebRtcVideoEncoderFactory::Observer* observer) { 2150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org size_t erased = observers_.erase(observer); 2160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(erased, 1UL); 2170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 2180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual const std::vector<WebRtcVideoEncoderFactory::VideoCodec>& codecs() 2200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const { 2210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return codecs_; 2220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 2230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void AddSupportedVideoCodecType(webrtc::VideoCodecType type, 2250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const std::string& name) { 2260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org supported_codec_types_.insert(type); 2270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org codecs_.push_back( 2280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WebRtcVideoEncoderFactory::VideoCodec(type, name, 1280, 720, 30)); 2290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 2300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void NotifyCodecsAvailable() { 2320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::set<WebRtcVideoEncoderFactory::Observer*>::iterator it; 2330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org for (it = observers_.begin(); it != observers_.end(); ++it) 2340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org (*it)->OnCodecsAvailable(); 2350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 2360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 23792ad4370e12c1017bcc1137e738d81957a2d038ewu@webrtc.org int GetNumCreatedEncoders() { 23892ad4370e12c1017bcc1137e738d81957a2d038ewu@webrtc.org return num_created_encoders_; 23992ad4370e12c1017bcc1137e738d81957a2d038ewu@webrtc.org } 24092ad4370e12c1017bcc1137e738d81957a2d038ewu@webrtc.org 2410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const std::vector<FakeWebRtcVideoEncoder*>& encoders() { 2420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return encoders_; 2430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 2440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org private: 2460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::set<webrtc::VideoCodecType> supported_codec_types_; 2470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::vector<WebRtcVideoEncoderFactory::VideoCodec> codecs_; 2480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::vector<FakeWebRtcVideoEncoder*> encoders_; 2490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::set<WebRtcVideoEncoderFactory::Observer*> observers_; 2500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int num_created_encoders_; 2510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org}; 2520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 2530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.orgclass FakeWebRtcVideoEngine 2540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org : public webrtc::ViEBase, 2550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org public webrtc::ViECodec, 2560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org public webrtc::ViECapture, 2570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org public webrtc::ViENetwork, 2580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org public webrtc::ViERender, 2590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org public webrtc::ViERTP_RTCP, 2600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org public webrtc::ViEImageProcess, 2610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org public webrtc::ViEExternalCodec { 2620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org public: 2630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org struct Channel { 2640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Channel() 2650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org : capture_id_(-1), 2660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org original_channel_id_(-1), 2670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org has_renderer_(false), 2680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org render_started_(false), 2690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org send(false), 2700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org receive_(false), 2710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org can_transmit_(true), 27297fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org remote_rtx_ssrc_(-1), 27397fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org rtx_send_payload_type(-1), 2746049526e284c9ffb1629b963dc5a1fc09c84ae83buildbot@webrtc.org rtx_recv_payload_type(-1), 2750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org rtcp_status_(webrtc::kRtcpNone), 2760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org key_frame_request_method_(webrtc::kViEKeyFrameRequestNone), 2770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org tmmbr_(false), 2780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org remb_contribute_(false), 2790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org remb_bw_partition_(false), 2802ccf00b08449e81bc72367010d65f4210f7fb60ebuildbot@webrtc.org rtp_offset_send_id_(-1), 2812ccf00b08449e81bc72367010d65f4210f7fb60ebuildbot@webrtc.org rtp_offset_receive_id_(-1), 2822ccf00b08449e81bc72367010d65f4210f7fb60ebuildbot@webrtc.org rtp_absolute_send_time_send_id_(-1), 2832ccf00b08449e81bc72367010d65f4210f7fb60ebuildbot@webrtc.org rtp_absolute_send_time_receive_id_(-1), 2840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org sender_target_delay_(0), 2850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org receiver_target_delay_(0), 2860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org transmission_smoothing_(false), 2870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org nack_(false), 2880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org hybrid_nack_fec_(false), 2890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org send_video_bitrate_(0), 2900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org send_fec_bitrate_(0), 2910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org send_nack_bitrate_(0), 2920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org send_bandwidth_(0), 293bf64da011cfd8fc4c0243d7c52caa6db0d298bddhenrike@webrtc.org receive_bandwidth_(0), 294afaf4d10603cf012a13d43a62fbc43c0757ec3b9buildbot@webrtc.org reserved_transmit_bitrate_bps_(0), 295bf64da011cfd8fc4c0243d7c52caa6db0d298bddhenrike@webrtc.org suspend_below_min_bitrate_(false), 2966049526e284c9ffb1629b963dc5a1fc09c84ae83buildbot@webrtc.org overuse_observer_(NULL), 2976049526e284c9ffb1629b963dc5a1fc09c84ae83buildbot@webrtc.org last_recvd_payload_type_(-1) { 2980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ssrcs_[0] = 0; // default ssrc. 2990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org memset(&send_codec, 0, sizeof(send_codec)); 3003865f242aa057847ca2c3728d24874882ef227eehenrike@webrtc.org memset(&overuse_options_, 0, sizeof(overuse_options_)); 3010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 3020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int capture_id_; 3030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int original_channel_id_; 3040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool has_renderer_; 3050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool render_started_; 3060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool send; 3070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool receive_; 3080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool can_transmit_; 3090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::map<int, int> ssrcs_; 31097fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org std::map<int, int> rtx_ssrcs_; 31197fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org int remote_rtx_ssrc_; 31297fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org int rtx_send_payload_type; 3136049526e284c9ffb1629b963dc5a1fc09c84ae83buildbot@webrtc.org int rtx_recv_payload_type; 3140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::string cname_; 3150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org webrtc::ViERTCPMode rtcp_status_; 3160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org webrtc::ViEKeyFrameRequestMethod key_frame_request_method_; 3170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool tmmbr_; 3180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool remb_contribute_; // This channel contributes to the remb report. 3190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool remb_bw_partition_; // This channel is allocated part of total bw. 3200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int rtp_offset_send_id_; 3210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int rtp_offset_receive_id_; 3220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int rtp_absolute_send_time_send_id_; 3230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int rtp_absolute_send_time_receive_id_; 3240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int sender_target_delay_; 3250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int receiver_target_delay_; 3260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool transmission_smoothing_; 3270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool nack_; 3280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool hybrid_nack_fec_; 3290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::vector<webrtc::VideoCodec> recv_codecs; 3300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::set<unsigned int> ext_decoder_pl_types_; 3310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::set<unsigned int> ext_encoder_pl_types_; 3320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org webrtc::VideoCodec send_codec; 3330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org unsigned int send_video_bitrate_; 3340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org unsigned int send_fec_bitrate_; 3350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org unsigned int send_nack_bitrate_; 3360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org unsigned int send_bandwidth_; 3370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org unsigned int receive_bandwidth_; 338afaf4d10603cf012a13d43a62fbc43c0757ec3b9buildbot@webrtc.org unsigned int reserved_transmit_bitrate_bps_; 339bf64da011cfd8fc4c0243d7c52caa6db0d298bddhenrike@webrtc.org bool suspend_below_min_bitrate_; 340bf64da011cfd8fc4c0243d7c52caa6db0d298bddhenrike@webrtc.org webrtc::CpuOveruseObserver* overuse_observer_; 3413865f242aa057847ca2c3728d24874882ef227eehenrike@webrtc.org webrtc::CpuOveruseOptions overuse_options_; 3426049526e284c9ffb1629b963dc5a1fc09c84ae83buildbot@webrtc.org int last_recvd_payload_type_; 3430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org }; 3440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org class Capturer : public webrtc::ViEExternalCapture { 3450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org public: 34640ce06146a24b60291ebcbec6f49e02ce381ba7bwu@webrtc.org Capturer() : channel_id_(-1), denoising_(false), 34740ce06146a24b60291ebcbec6f49e02ce381ba7bwu@webrtc.org last_capture_time_(0), incoming_frame_num_(0) { } 3480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int channel_id() const { return channel_id_; } 3490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void set_channel_id(int channel_id) { channel_id_ = channel_id; } 3500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool denoising() const { return denoising_; } 3510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void set_denoising(bool denoising) { denoising_ = denoising; } 35240ce06146a24b60291ebcbec6f49e02ce381ba7bwu@webrtc.org int64 last_capture_time() const { return last_capture_time_; } 35340ce06146a24b60291ebcbec6f49e02ce381ba7bwu@webrtc.org int incoming_frame_num() const { return incoming_frame_num_; } 3540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 3550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // From ViEExternalCapture 3560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual int IncomingFrame(unsigned char* videoFrame, 3570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org unsigned int videoFrameLength, 3580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org unsigned short width, 3590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org unsigned short height, 3600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org webrtc::RawVideoType videoType, 3610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org unsigned long long captureTime) { 3620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 3630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 3640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual int IncomingFrameI420( 3650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const webrtc::ViEVideoFrameI420& video_frame, 3660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org unsigned long long captureTime) { 3670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org last_capture_time_ = captureTime; 36840ce06146a24b60291ebcbec6f49e02ce381ba7bwu@webrtc.org ++incoming_frame_num_; 3690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 3700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 3710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 3720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org private: 3730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int channel_id_; 3740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool denoising_; 3750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int64 last_capture_time_; 37640ce06146a24b60291ebcbec6f49e02ce381ba7bwu@webrtc.org int incoming_frame_num_; 3770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org }; 3780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 3790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org FakeWebRtcVideoEngine(const cricket::VideoCodec* const* codecs, 3800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int num_codecs) 3810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org : inited_(false), 3820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org last_channel_(kViEChannelIdBase - 1), 3830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org fail_create_channel_(false), 3840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org last_capturer_(kViECaptureIdBase - 1), 3850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org fail_alloc_capturer_(false), 3860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org codecs_(codecs), 3870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org num_codecs_(num_codecs), 3880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org num_set_send_codecs_(0) { 3890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 3900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 3910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ~FakeWebRtcVideoEngine() { 3920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ASSERT(0 == channels_.size()); 3930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ASSERT(0 == capturers_.size()); 3940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 3950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool IsInited() const { return inited_; } 3960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 3970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int GetLastChannel() const { return last_channel_; } 3980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int GetChannelFromLocalSsrc(int local_ssrc) const { 3990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // ssrcs_[0] is the default local ssrc. 4000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org for (std::map<int, Channel*>::const_iterator iter = channels_.begin(); 4010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org iter != channels_.end(); ++iter) { 4020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (local_ssrc == iter->second->ssrcs_[0]) { 4030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return iter->first; 4040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 4050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 4060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return -1; 4070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 4080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 4091a04b881e0ef480802fb01b4fbe9bcd5388d2c69henrike@webrtc.org int GetNumChannels() const { return static_cast<int>(channels_.size()); } 4100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool IsChannel(int channel) const { 4110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return (channels_.find(channel) != channels_.end()); 4120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 4130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void set_fail_create_channel(bool fail_create_channel) { 4140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org fail_create_channel_ = fail_create_channel; 4150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 4160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 4170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int GetLastCapturer() const { return last_capturer_; } 4181a04b881e0ef480802fb01b4fbe9bcd5388d2c69henrike@webrtc.org int GetNumCapturers() const { return static_cast<int>(capturers_.size()); } 41940ce06146a24b60291ebcbec6f49e02ce381ba7bwu@webrtc.org int GetIncomingFrameNum(int channel_id) const { 42040ce06146a24b60291ebcbec6f49e02ce381ba7bwu@webrtc.org for (std::map<int, Capturer*>::const_iterator iter = capturers_.begin(); 42140ce06146a24b60291ebcbec6f49e02ce381ba7bwu@webrtc.org iter != capturers_.end(); ++iter) { 42240ce06146a24b60291ebcbec6f49e02ce381ba7bwu@webrtc.org Capturer* capturer = iter->second; 42340ce06146a24b60291ebcbec6f49e02ce381ba7bwu@webrtc.org if (capturer->channel_id() == channel_id) { 42440ce06146a24b60291ebcbec6f49e02ce381ba7bwu@webrtc.org return capturer->incoming_frame_num(); 42540ce06146a24b60291ebcbec6f49e02ce381ba7bwu@webrtc.org } 42640ce06146a24b60291ebcbec6f49e02ce381ba7bwu@webrtc.org } 42740ce06146a24b60291ebcbec6f49e02ce381ba7bwu@webrtc.org return -1; 42840ce06146a24b60291ebcbec6f49e02ce381ba7bwu@webrtc.org } 4290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void set_fail_alloc_capturer(bool fail_alloc_capturer) { 4300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org fail_alloc_capturer_ = fail_alloc_capturer; 4310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 432a32dfc68b5624bdc8e3901c1a91adb869f919ef8wu@webrtc.org int GetNumSetSendCodecs() const { return num_set_send_codecs_; } 4330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 4340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int GetCaptureId(int channel) const { 4350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_ASSERT_CHANNEL(channel); 4360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return channels_.find(channel)->second->capture_id_; 4370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 4380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int GetOriginalChannelId(int channel) const { 4390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_ASSERT_CHANNEL(channel); 4400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return channels_.find(channel)->second->original_channel_id_; 4410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 4420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool GetHasRenderer(int channel) const { 4430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_ASSERT_CHANNEL(channel); 4440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return channels_.find(channel)->second->has_renderer_; 4450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 4460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool GetRenderStarted(int channel) const { 4470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_ASSERT_CHANNEL(channel); 4480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return channels_.find(channel)->second->render_started_; 4490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 4500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool GetSend(int channel) const { 4510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_ASSERT_CHANNEL(channel); 4520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return channels_.find(channel)->second->send; 4530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 4548a77f5bd83ba9386c19ff92f277c7268c1e9ef4awu@webrtc.org bool GetReceive(int channel) const { 4558a77f5bd83ba9386c19ff92f277c7268c1e9ef4awu@webrtc.org WEBRTC_ASSERT_CHANNEL(channel); 4568a77f5bd83ba9386c19ff92f277c7268c1e9ef4awu@webrtc.org return channels_.find(channel)->second->receive_; 4578a77f5bd83ba9386c19ff92f277c7268c1e9ef4awu@webrtc.org } 4580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int GetCaptureChannelId(int capture_id) const { 4590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_ASSERT_CAPTURER(capture_id); 4600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return capturers_.find(capture_id)->second->channel_id(); 4610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 4620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool GetCaptureDenoising(int capture_id) const { 4630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_ASSERT_CAPTURER(capture_id); 4640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return capturers_.find(capture_id)->second->denoising(); 4650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 4660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int64 GetCaptureLastTimestamp(int capture_id) const { 4670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_ASSERT_CAPTURER(capture_id); 4680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return capturers_.find(capture_id)->second->last_capture_time(); 4690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 4700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org webrtc::ViERTCPMode GetRtcpStatus(int channel) const { 4710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_ASSERT_CHANNEL(channel); 4720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return channels_.find(channel)->second->rtcp_status_; 4730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 4740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org webrtc::ViEKeyFrameRequestMethod GetKeyFrameRequestMethod(int channel) const { 4750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_ASSERT_CHANNEL(channel); 4760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return channels_.find(channel)->second->key_frame_request_method_; 4770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 4780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool GetTmmbrStatus(int channel) const { 4790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_ASSERT_CHANNEL(channel); 4800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return channels_.find(channel)->second->tmmbr_; 4810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 4820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool GetRembStatusBwPartition(int channel) const { 4830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_ASSERT_CHANNEL(channel); 4840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return channels_.find(channel)->second->remb_bw_partition_; 4850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 4860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool GetRembStatusContribute(int channel) const { 4870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_ASSERT_CHANNEL(channel); 4880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return channels_.find(channel)->second->remb_contribute_; 4890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 4902ccf00b08449e81bc72367010d65f4210f7fb60ebuildbot@webrtc.org int GetSendRtpExtensionId(int channel, const std::string& extension) { 4910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_ASSERT_CHANNEL(channel); 4922ccf00b08449e81bc72367010d65f4210f7fb60ebuildbot@webrtc.org if (extension == kRtpTimestampOffsetHeaderExtension) { 4932ccf00b08449e81bc72367010d65f4210f7fb60ebuildbot@webrtc.org return channels_.find(channel)->second->rtp_offset_send_id_; 4942ccf00b08449e81bc72367010d65f4210f7fb60ebuildbot@webrtc.org } else if (extension == kRtpAbsoluteSenderTimeHeaderExtension) { 4952ccf00b08449e81bc72367010d65f4210f7fb60ebuildbot@webrtc.org return channels_.find(channel)->second->rtp_absolute_send_time_send_id_; 4962ccf00b08449e81bc72367010d65f4210f7fb60ebuildbot@webrtc.org } 4972ccf00b08449e81bc72367010d65f4210f7fb60ebuildbot@webrtc.org return -1; 4980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 4992ccf00b08449e81bc72367010d65f4210f7fb60ebuildbot@webrtc.org int GetReceiveRtpExtensionId(int channel, const std::string& extension) { 5000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_ASSERT_CHANNEL(channel); 5012ccf00b08449e81bc72367010d65f4210f7fb60ebuildbot@webrtc.org if (extension == kRtpTimestampOffsetHeaderExtension) { 5022ccf00b08449e81bc72367010d65f4210f7fb60ebuildbot@webrtc.org return channels_.find(channel)->second->rtp_offset_receive_id_; 5032ccf00b08449e81bc72367010d65f4210f7fb60ebuildbot@webrtc.org } else if (extension == kRtpAbsoluteSenderTimeHeaderExtension) { 5042ccf00b08449e81bc72367010d65f4210f7fb60ebuildbot@webrtc.org return 5052ccf00b08449e81bc72367010d65f4210f7fb60ebuildbot@webrtc.org channels_.find(channel)->second->rtp_absolute_send_time_receive_id_; 5062ccf00b08449e81bc72367010d65f4210f7fb60ebuildbot@webrtc.org } 5072ccf00b08449e81bc72367010d65f4210f7fb60ebuildbot@webrtc.org return -1; 5080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 5090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool GetTransmissionSmoothingStatus(int channel) { 5100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_ASSERT_CHANNEL(channel); 5110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return channels_.find(channel)->second->transmission_smoothing_; 5120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 5130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int GetSenderTargetDelay(int channel) { 5140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_ASSERT_CHANNEL(channel); 5150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return channels_.find(channel)->second->sender_target_delay_; 5160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 5170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int GetReceiverTargetDelay(int channel) { 5180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_ASSERT_CHANNEL(channel); 5190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return channels_.find(channel)->second->receiver_target_delay_; 5200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 5210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool GetNackStatus(int channel) const { 5220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_ASSERT_CHANNEL(channel); 5230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return channels_.find(channel)->second->nack_; 5240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 5250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool GetHybridNackFecStatus(int channel) const { 5260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_ASSERT_CHANNEL(channel); 5270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return channels_.find(channel)->second->hybrid_nack_fec_; 5280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 5290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int GetNumSsrcs(int channel) const { 5300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_ASSERT_CHANNEL(channel); 5311a04b881e0ef480802fb01b4fbe9bcd5388d2c69henrike@webrtc.org return static_cast<int>( 5321a04b881e0ef480802fb01b4fbe9bcd5388d2c69henrike@webrtc.org channels_.find(channel)->second->ssrcs_.size()); 5330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 53497fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org int GetNumRtxSsrcs(int channel) const { 53597fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org WEBRTC_ASSERT_CHANNEL(channel); 53697fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org return static_cast<int>( 53797fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org channels_.find(channel)->second->rtx_ssrcs_.size()); 53897fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org } 5390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool GetIsTransmitting(int channel) const { 5400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_ASSERT_CHANNEL(channel); 5410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return channels_.find(channel)->second->can_transmit_; 5420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 543bf64da011cfd8fc4c0243d7c52caa6db0d298bddhenrike@webrtc.org webrtc::CpuOveruseObserver* GetCpuOveruseObserver(int channel) const { 544bf64da011cfd8fc4c0243d7c52caa6db0d298bddhenrike@webrtc.org WEBRTC_ASSERT_CHANNEL(channel); 545bf64da011cfd8fc4c0243d7c52caa6db0d298bddhenrike@webrtc.org return channels_.find(channel)->second->overuse_observer_; 546bf64da011cfd8fc4c0243d7c52caa6db0d298bddhenrike@webrtc.org } 5473865f242aa057847ca2c3728d24874882ef227eehenrike@webrtc.org webrtc::CpuOveruseOptions GetCpuOveruseOptions(int channel) const { 5483865f242aa057847ca2c3728d24874882ef227eehenrike@webrtc.org WEBRTC_ASSERT_CHANNEL(channel); 5493865f242aa057847ca2c3728d24874882ef227eehenrike@webrtc.org return channels_.find(channel)->second->overuse_options_; 5503865f242aa057847ca2c3728d24874882ef227eehenrike@webrtc.org } 55197fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org int GetRtxSsrc(int channel, int simulcast_idx) const { 55297fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org WEBRTC_ASSERT_CHANNEL(channel); 55397fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org if (channels_.find(channel)->second->rtx_ssrcs_.find(simulcast_idx) == 55497fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org channels_.find(channel)->second->rtx_ssrcs_.end()) { 55597fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org return -1; 55697fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org } 55797fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org return channels_.find(channel)->second->rtx_ssrcs_[simulcast_idx]; 55897fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org } 5590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool ReceiveCodecRegistered(int channel, 5600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const webrtc::VideoCodec& codec) const { 5610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_ASSERT_CHANNEL(channel); 5626049526e284c9ffb1629b963dc5a1fc09c84ae83buildbot@webrtc.org const std::vector<webrtc::VideoCodec>& codecs = 5636049526e284c9ffb1629b963dc5a1fc09c84ae83buildbot@webrtc.org channels_.find(channel)->second->recv_codecs; 5646049526e284c9ffb1629b963dc5a1fc09c84ae83buildbot@webrtc.org return std::find(codecs.begin(), codecs.end(), codec) != codecs.end(); 5650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org }; 5660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool ExternalDecoderRegistered(int channel, 5670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org unsigned int pl_type) const { 5680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_ASSERT_CHANNEL(channel); 5690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return channels_.find(channel)->second-> 5700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ext_decoder_pl_types_.count(pl_type) != 0; 5710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org }; 5720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int GetNumExternalDecoderRegistered(int channel) const { 5730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_ASSERT_CHANNEL(channel); 5741a04b881e0ef480802fb01b4fbe9bcd5388d2c69henrike@webrtc.org return static_cast<int>( 5751a04b881e0ef480802fb01b4fbe9bcd5388d2c69henrike@webrtc.org channels_.find(channel)->second->ext_decoder_pl_types_.size()); 5760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org }; 5770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool ExternalEncoderRegistered(int channel, 5780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org unsigned int pl_type) const { 5790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_ASSERT_CHANNEL(channel); 5800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return channels_.find(channel)->second-> 5810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ext_encoder_pl_types_.count(pl_type) != 0; 5820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org }; 5830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int GetNumExternalEncoderRegistered(int channel) const { 5840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_ASSERT_CHANNEL(channel); 5851a04b881e0ef480802fb01b4fbe9bcd5388d2c69henrike@webrtc.org return static_cast<int>( 5861a04b881e0ef480802fb01b4fbe9bcd5388d2c69henrike@webrtc.org channels_.find(channel)->second->ext_encoder_pl_types_.size()); 5870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org }; 5880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int GetTotalNumExternalEncoderRegistered() const { 5890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::map<int, Channel*>::const_iterator it; 5900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int total_num_registered = 0; 5910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org for (it = channels_.begin(); it != channels_.end(); ++it) 5921a04b881e0ef480802fb01b4fbe9bcd5388d2c69henrike@webrtc.org total_num_registered += 5931a04b881e0ef480802fb01b4fbe9bcd5388d2c69henrike@webrtc.org static_cast<int>(it->second->ext_encoder_pl_types_.size()); 5940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return total_num_registered; 5950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 5960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void SetSendBitrates(int channel, unsigned int video_bitrate, 5970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org unsigned int fec_bitrate, unsigned int nack_bitrate) { 5980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_ASSERT_CHANNEL(channel); 5990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channels_[channel]->send_video_bitrate_ = video_bitrate; 6000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channels_[channel]->send_fec_bitrate_ = fec_bitrate; 6010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channels_[channel]->send_nack_bitrate_ = nack_bitrate; 6020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 6030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void SetSendBandwidthEstimate(int channel, unsigned int send_bandwidth) { 6040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_ASSERT_CHANNEL(channel); 605e9dd75328a7c9d9525fcc72d7485335a7d5fa41ebuildbot@webrtc.org channels_[GetOriginalChannelId(channel)]->send_bandwidth_ = send_bandwidth; 6060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 6070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org void SetReceiveBandwidthEstimate(int channel, 6080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org unsigned int receive_bandwidth) { 6090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_ASSERT_CHANNEL(channel); 610e9dd75328a7c9d9525fcc72d7485335a7d5fa41ebuildbot@webrtc.org channels_[GetOriginalChannelId(channel)]->receive_bandwidth_ = 611e9dd75328a7c9d9525fcc72d7485335a7d5fa41ebuildbot@webrtc.org receive_bandwidth; 6120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org }; 61397fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org int GetRtxSendPayloadType(int channel) { 61497fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org WEBRTC_CHECK_CHANNEL(channel); 61597fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org return channels_[channel]->rtx_send_payload_type; 61697fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org } 6176049526e284c9ffb1629b963dc5a1fc09c84ae83buildbot@webrtc.org int GetRtxRecvPayloadType(int channel) { 6186049526e284c9ffb1629b963dc5a1fc09c84ae83buildbot@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 6196049526e284c9ffb1629b963dc5a1fc09c84ae83buildbot@webrtc.org return channels_[channel]->rtx_recv_payload_type; 6206049526e284c9ffb1629b963dc5a1fc09c84ae83buildbot@webrtc.org } 62197fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org int GetRemoteRtxSsrc(int channel) { 62297fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org WEBRTC_CHECK_CHANNEL(channel); 62397fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org return channels_.find(channel)->second->remote_rtx_ssrc_; 62497fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org } 625bf64da011cfd8fc4c0243d7c52caa6db0d298bddhenrike@webrtc.org bool GetSuspendBelowMinBitrateStatus(int channel) { 626bf64da011cfd8fc4c0243d7c52caa6db0d298bddhenrike@webrtc.org WEBRTC_ASSERT_CHANNEL(channel); 627bf64da011cfd8fc4c0243d7c52caa6db0d298bddhenrike@webrtc.org return channels_.find(channel)->second->suspend_below_min_bitrate_; 628bf64da011cfd8fc4c0243d7c52caa6db0d298bddhenrike@webrtc.org } 6296049526e284c9ffb1629b963dc5a1fc09c84ae83buildbot@webrtc.org int GetLastRecvdPayloadType(int channel) const { 6306049526e284c9ffb1629b963dc5a1fc09c84ae83buildbot@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 6316049526e284c9ffb1629b963dc5a1fc09c84ae83buildbot@webrtc.org return channels_.find(channel)->second->last_recvd_payload_type_; 6326049526e284c9ffb1629b963dc5a1fc09c84ae83buildbot@webrtc.org } 633afaf4d10603cf012a13d43a62fbc43c0757ec3b9buildbot@webrtc.org unsigned int GetReservedTransmitBitrate(int channel) { 634afaf4d10603cf012a13d43a62fbc43c0757ec3b9buildbot@webrtc.org WEBRTC_ASSERT_CHANNEL(channel); 635afaf4d10603cf012a13d43a62fbc43c0757ec3b9buildbot@webrtc.org return channels_.find(channel)->second->reserved_transmit_bitrate_bps_; 636afaf4d10603cf012a13d43a62fbc43c0757ec3b9buildbot@webrtc.org } 6370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 6380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(Release, ()); 6390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 6400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // webrtc::ViEBase 6410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(Init, ()) { 6420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org inited_ = true; 6430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 6440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org }; 6450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(SetVoiceEngine, (webrtc::VoiceEngine*)); 6460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(CreateChannel, (int& channel)) { // NOLINT 6470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (fail_create_channel_) { 6480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return -1; 6490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 6500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (kViEChannelIdMax == last_channel_) { 6510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return -1; 6520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 6530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Channel* ch = new Channel(); 654e9dd75328a7c9d9525fcc72d7485335a7d5fa41ebuildbot@webrtc.org ++last_channel_; 655e9dd75328a7c9d9525fcc72d7485335a7d5fa41ebuildbot@webrtc.org // The original channel of the first channel in a group refers to itself 656e9dd75328a7c9d9525fcc72d7485335a7d5fa41ebuildbot@webrtc.org // for code simplicity. 657e9dd75328a7c9d9525fcc72d7485335a7d5fa41ebuildbot@webrtc.org ch->original_channel_id_ = last_channel_; 658e9dd75328a7c9d9525fcc72d7485335a7d5fa41ebuildbot@webrtc.org channels_[last_channel_] = ch; 6590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channel = last_channel_; 6600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 6610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org }; 6620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(CreateChannel, (int& channel, int original_channel)) { 6630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(original_channel); 6640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (CreateChannel(channel) != 0) { 6650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return -1; 6660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 6670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channels_[channel]->original_channel_id_ = original_channel; 6680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 6690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 6700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(CreateReceiveChannel, (int& channel, int original_channel)) { 6710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return CreateChannel(channel, original_channel); 6720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 6730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(DeleteChannel, (const int channel)) { 6740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 6750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Make sure we deregister all the decoders before deleting a channel. 6760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org EXPECT_EQ(0, GetNumExternalDecoderRegistered(channel)); 6770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org delete channels_[channel]; 6780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channels_.erase(channel); 6790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 6800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 681bf64da011cfd8fc4c0243d7c52caa6db0d298bddhenrike@webrtc.org WEBRTC_FUNC(RegisterCpuOveruseObserver, 682bf64da011cfd8fc4c0243d7c52caa6db0d298bddhenrike@webrtc.org (int channel, webrtc::CpuOveruseObserver* observer)) { 683bf64da011cfd8fc4c0243d7c52caa6db0d298bddhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 684bf64da011cfd8fc4c0243d7c52caa6db0d298bddhenrike@webrtc.org channels_[channel]->overuse_observer_ = observer; 685bf64da011cfd8fc4c0243d7c52caa6db0d298bddhenrike@webrtc.org return 0; 686bf64da011cfd8fc4c0243d7c52caa6db0d298bddhenrike@webrtc.org } 687cfd624796c7321c5ffac2249b407cdd0d496e00awu@webrtc.org WEBRTC_STUB(CpuOveruseMeasures, (int, int*, int*, int*, int*)); 6883865f242aa057847ca2c3728d24874882ef227eehenrike@webrtc.org WEBRTC_FUNC(SetCpuOveruseOptions, 6893865f242aa057847ca2c3728d24874882ef227eehenrike@webrtc.org (int channel, const webrtc::CpuOveruseOptions& options)) { 6903865f242aa057847ca2c3728d24874882ef227eehenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 6913865f242aa057847ca2c3728d24874882ef227eehenrike@webrtc.org channels_[channel]->overuse_options_ = options; 6923865f242aa057847ca2c3728d24874882ef227eehenrike@webrtc.org return 0; 6933865f242aa057847ca2c3728d24874882ef227eehenrike@webrtc.org } 6940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(ConnectAudioChannel, (const int, const int)); 6950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(DisconnectAudioChannel, (const int)); 6960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(StartSend, (const int channel)) { 6970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 6980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channels_[channel]->send = true; 6990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 7000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 7010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(StopSend, (const int channel)) { 7020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 7030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channels_[channel]->send = false; 7040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 7050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 7060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(StartReceive, (const int channel)) { 7070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 7080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channels_[channel]->receive_ = true; 7090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 7100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 7110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(StopReceive, (const int channel)) { 7120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 7130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channels_[channel]->receive_ = false; 7140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 7150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 7160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(GetVersion, (char version[1024])); 7170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(LastError, ()); 7180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 7190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // webrtc::ViECodec 7200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC_CONST(NumberOfCodecs, ()) { 7210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return num_codecs_; 7220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org }; 7230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC_CONST(GetCodec, (const unsigned char list_number, 7240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org webrtc::VideoCodec& out_codec)) { 7250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (list_number >= NumberOfCodecs()) { 7260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return -1; 7270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 7280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org memset(&out_codec, 0, sizeof(out_codec)); 7290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const cricket::VideoCodec& c(*codecs_[list_number]); 7300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if ("I420" == c.name) { 7310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org out_codec.codecType = webrtc::kVideoCodecI420; 7320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } else if ("VP8" == c.name) { 7330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org out_codec.codecType = webrtc::kVideoCodecVP8; 7340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } else if ("red" == c.name) { 7350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org out_codec.codecType = webrtc::kVideoCodecRED; 7360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } else if ("ulpfec" == c.name) { 7370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org out_codec.codecType = webrtc::kVideoCodecULPFEC; 7380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } else { 7390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org out_codec.codecType = webrtc::kVideoCodecUnknown; 7400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 7410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org talk_base::strcpyn(out_codec.plName, sizeof(out_codec.plName), 7420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org c.name.c_str()); 7430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org out_codec.plType = c.id; 7440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org out_codec.width = c.width; 7450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org out_codec.height = c.height; 7460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org out_codec.startBitrate = kStartVideoBitrate; 7470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org out_codec.maxBitrate = kMaxVideoBitrate; 7480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org out_codec.minBitrate = kMinVideoBitrate; 7490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org out_codec.maxFramerate = c.framerate; 7500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 7510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org }; 7520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(SetSendCodec, (const int channel, 7530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const webrtc::VideoCodec& codec)) { 7540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 7550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channels_[channel]->send_codec = codec; 7560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ++num_set_send_codecs_; 7570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 7580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org }; 7590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC_CONST(GetSendCodec, (const int channel, 7600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org webrtc::VideoCodec& codec)) { // NOLINT 7610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 7620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org codec = channels_.find(channel)->second->send_codec; 7630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 7640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org }; 7650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(SetReceiveCodec, (const int channel, 7660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const webrtc::VideoCodec& codec)) { // NOLINT 7670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 7680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channels_[channel]->recv_codecs.push_back(codec); 7690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 7700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org }; 7710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB_CONST(GetReceiveCodec, (const int, webrtc::VideoCodec&)); 7720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB_CONST(GetCodecConfigParameters, (const int, 7730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org unsigned char*, unsigned char&)); 7740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(SetImageScaleStatus, (const int, const bool)); 7750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB_CONST(GetSendCodecStastistics, (const int, 7760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org unsigned int&, unsigned int&)); 7770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB_CONST(GetReceiveCodecStastistics, (const int, 7780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org unsigned int&, unsigned int&)); 7790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB_CONST(GetReceiveSideDelay, (const int video_channel, 7800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int* delay_ms)); 7810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC_CONST(GetCodecTargetBitrate, (const int channel, 7820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org unsigned int* codec_target_bitrate)) { 7830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 7840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 7850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::map<int, Channel*>::const_iterator it = channels_.find(channel); 7860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (it->second->send) { 7870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Assume the encoder produces the expected rate. 7880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org *codec_target_bitrate = it->second->send_video_bitrate_; 7890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } else { 7900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org *codec_target_bitrate = 0; 7910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 7920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 7930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 7940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual unsigned int GetDiscardedPackets(const int channel) const { 7950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 7960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 7970e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 7980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(SetKeyFrameRequestCallbackStatus, (const int, const bool)); 7990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(SetSignalKeyPacketLossStatus, (const int, const bool, 8000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const bool)); 8010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(RegisterEncoderObserver, (const int, 8020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org webrtc::ViEEncoderObserver&)); 8030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(DeregisterEncoderObserver, (const int)); 8040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(RegisterDecoderObserver, (const int, 8050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org webrtc::ViEDecoderObserver&)); 8060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(DeregisterDecoderObserver, (const int)); 8070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(SendKeyFrame, (const int)); 8080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(WaitForFirstKeyFrame, (const int, const bool)); 809692d748e58db01318ef10a7a19147da601e13e93henrike@webrtc.org WEBRTC_STUB(StartDebugRecording, (int, const char*)); 810692d748e58db01318ef10a7a19147da601e13e93henrike@webrtc.org WEBRTC_STUB(StopDebugRecording, (int)); 811bf64da011cfd8fc4c0243d7c52caa6db0d298bddhenrike@webrtc.org WEBRTC_VOID_FUNC(SuspendBelowMinBitrate, (int channel)) { 812bf64da011cfd8fc4c0243d7c52caa6db0d298bddhenrike@webrtc.org WEBRTC_ASSERT_CHANNEL(channel); 813bf64da011cfd8fc4c0243d7c52caa6db0d298bddhenrike@webrtc.org channels_[channel]->suspend_below_min_bitrate_ = true; 814bf64da011cfd8fc4c0243d7c52caa6db0d298bddhenrike@webrtc.org } 8150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 8160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // webrtc::ViECapture 8170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(NumberOfCaptureDevices, ()); 8180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(GetCaptureDevice, (unsigned int, char*, 8190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const unsigned int, char*, const unsigned int)); 8200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(AllocateCaptureDevice, (const char*, const unsigned int, int&)); 8210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(AllocateExternalCaptureDevice, 8220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org (int& capture_id, webrtc::ViEExternalCapture*& capture)) { 8230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (fail_alloc_capturer_) { 8240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return -1; 8250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 8260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (kViECaptureIdMax == last_capturer_) { 8270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return -1; 8280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 8290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org Capturer* cap = new Capturer(); 8300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org capturers_[++last_capturer_] = cap; 8310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org capture_id = last_capturer_; 8320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org capture = cap; 8330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 8340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 8350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(AllocateCaptureDevice, (webrtc::VideoCaptureModule&, int&)); 8360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(ReleaseCaptureDevice, (const int capture_id)) { 8370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CAPTURER(capture_id); 8380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org delete capturers_[capture_id]; 8390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org capturers_.erase(capture_id); 8400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 8410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 8420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(ConnectCaptureDevice, (const int capture_id, 8430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const int channel)) { 8440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 8450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CAPTURER(capture_id); 8460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channels_[channel]->capture_id_ = capture_id; 8470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org capturers_[capture_id]->set_channel_id(channel); 8480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 8490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 8500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(DisconnectCaptureDevice, (const int channel)) { 8510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 8520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int capture_id = channels_[channel]->capture_id_; 8530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CAPTURER(capture_id); 8540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channels_[channel]->capture_id_ = -1; 8550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org capturers_[capture_id]->set_channel_id(-1); 8560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 8570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 8580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(StartCapture, (const int, const webrtc::CaptureCapability&)); 8590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(StopCapture, (const int)); 8600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(SetRotateCapturedFrames, (const int, 8610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const webrtc::RotateCapturedFrame)); 8620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(SetCaptureDelay, (const int, const unsigned int)); 8630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(NumberOfCapabilities, (const char*, const unsigned int)); 8640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(GetCaptureCapability, (const char*, const unsigned int, 8650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const unsigned int, webrtc::CaptureCapability&)); 8660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(ShowCaptureSettingsDialogBox, (const char*, const unsigned int, 8670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const char*, void*, const unsigned int, const unsigned int)); 8680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(GetOrientation, (const char*, webrtc::RotateCapturedFrame&)); 8690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(EnableBrightnessAlarm, (const int, const bool)); 8700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(RegisterObserver, (const int, webrtc::ViECaptureObserver&)); 8710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(DeregisterObserver, (const int)); 8720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 8730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // webrtc::ViENetwork 8740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_VOID_FUNC(SetNetworkTransmissionState, (const int channel, 8750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const bool is_transmitting)) { 8760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_ASSERT_CHANNEL(channel); 8770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channels_[channel]->can_transmit_ = is_transmitting; 8780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 8790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(RegisterSendTransport, (const int, webrtc::Transport&)); 8800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(DeregisterSendTransport, (const int)); 8816049526e284c9ffb1629b963dc5a1fc09c84ae83buildbot@webrtc.org 8826049526e284c9ffb1629b963dc5a1fc09c84ae83buildbot@webrtc.org WEBRTC_FUNC(ReceivedRTPPacket, (const int channel, 8836049526e284c9ffb1629b963dc5a1fc09c84ae83buildbot@webrtc.org const void* packet, 8846049526e284c9ffb1629b963dc5a1fc09c84ae83buildbot@webrtc.org const int length, 8856049526e284c9ffb1629b963dc5a1fc09c84ae83buildbot@webrtc.org const webrtc::PacketTime& packet_time)) { 8866049526e284c9ffb1629b963dc5a1fc09c84ae83buildbot@webrtc.org WEBRTC_ASSERT_CHANNEL(channel); 8876049526e284c9ffb1629b963dc5a1fc09c84ae83buildbot@webrtc.org ASSERT(length > 1); 8886049526e284c9ffb1629b963dc5a1fc09c84ae83buildbot@webrtc.org uint8_t payload_type = static_cast<const uint8_t*>(packet)[1] & 0x7F; 8896049526e284c9ffb1629b963dc5a1fc09c84ae83buildbot@webrtc.org channels_[channel]->last_recvd_payload_type_ = payload_type; 8906049526e284c9ffb1629b963dc5a1fc09c84ae83buildbot@webrtc.org return 0; 8916049526e284c9ffb1629b963dc5a1fc09c84ae83buildbot@webrtc.org } 8926049526e284c9ffb1629b963dc5a1fc09c84ae83buildbot@webrtc.org 8930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(ReceivedRTCPPacket, (const int, const void*, const int)); 8940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Not using WEBRTC_STUB due to bool return value 8950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org virtual bool IsIPv6Enabled(int channel) { return true; } 8960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(SetMTU, (int, unsigned int)); 897afaf4d10603cf012a13d43a62fbc43c0757ec3b9buildbot@webrtc.org WEBRTC_STUB(ReceivedBWEPacket, (const int, int64_t, int, 898afaf4d10603cf012a13d43a62fbc43c0757ec3b9buildbot@webrtc.org const webrtc::RTPHeader&)); 8990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 9000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // webrtc::ViERender 9010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(RegisterVideoRenderModule, (webrtc::VideoRender&)); 9020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(DeRegisterVideoRenderModule, (webrtc::VideoRender&)); 9030e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(AddRenderer, (const int, void*, const unsigned int, const float, 9040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const float, const float, const float)); 9050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(RemoveRenderer, (const int render_id)) { 9060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (IsCapturerId(render_id)) { 9070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CAPTURER(render_id); 9080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 9090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } else if (IsChannelId(render_id)) { 9100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(render_id); 9110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channels_[render_id]->has_renderer_ = false; 9120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 9130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 9140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return -1; 9150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 9160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(StartRender, (const int render_id)) { 9170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (IsCapturerId(render_id)) { 9180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CAPTURER(render_id); 9190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 9200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } else if (IsChannelId(render_id)) { 9210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(render_id); 9220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channels_[render_id]->render_started_ = true; 9230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 9240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 9250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return -1; 9260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 9270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(StopRender, (const int render_id)) { 9280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (IsCapturerId(render_id)) { 9290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CAPTURER(render_id); 9300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 9310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } else if (IsChannelId(render_id)) { 9320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(render_id); 9330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channels_[render_id]->render_started_ = false; 9340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 9350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 9360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return -1; 9370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 9380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(SetExpectedRenderDelay, (int render_id, int render_delay)); 9390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(ConfigureRender, (int, const unsigned int, const float, 9400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const float, const float, const float)); 9410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(MirrorRenderStream, (const int, const bool, const bool, 9420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const bool)); 9430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(AddRenderer, (const int render_id, 9440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org webrtc::RawVideoType video_type, 9450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org webrtc::ExternalRenderer* renderer)) { 9460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (IsCapturerId(render_id)) { 9470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CAPTURER(render_id); 9480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 9490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } else if (IsChannelId(render_id)) { 9500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(render_id); 9510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channels_[render_id]->has_renderer_ = true; 9520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 9530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 9540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return -1; 9550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 9560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 9570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // webrtc::ViERTP_RTCP 9580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(SetLocalSSRC, (const int channel, 9590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const unsigned int ssrc, 9600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const webrtc::StreamType usage, 9610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const unsigned char idx)) { 9620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 96397fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org switch (usage) { 96497fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org case webrtc::kViEStreamTypeNormal: 96597fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org channels_[channel]->ssrcs_[idx] = ssrc; 96697fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org break; 96797fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org case webrtc::kViEStreamTypeRtx: 96897fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org channels_[channel]->rtx_ssrcs_[idx] = ssrc; 96997fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org break; 97097fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org default: 97197fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org return -1; 97297fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org } 9730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 9740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 97597fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org 97697fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org WEBRTC_FUNC_CONST(SetRemoteSSRCType, (const int channel, 97797fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org const webrtc::StreamType usage, const unsigned int ssrc)) { 97897fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org WEBRTC_CHECK_CHANNEL(channel); 97997fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org if (usage == webrtc::kViEStreamTypeRtx) { 98097fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org channels_.find(channel)->second->remote_rtx_ssrc_ = ssrc; 98197fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org return 0; 98297fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org } 98397fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org return -1; 98497fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org } 9850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 9860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC_CONST(GetLocalSSRC, (const int channel, 9870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org unsigned int& ssrc)) { 9880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // ssrcs_[0] is the default local ssrc. 9890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 9900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org ssrc = channels_.find(channel)->second->ssrcs_[0]; 9910e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 9920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 9930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB_CONST(GetRemoteSSRC, (const int, unsigned int&)); 9940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB_CONST(GetRemoteCSRCs, (const int, unsigned int*)); 9950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 99697fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org WEBRTC_FUNC(SetRtxSendPayloadType, (const int channel, 99797fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org const uint8 payload_type)) { 99897fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org WEBRTC_CHECK_CHANNEL(channel); 99997fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org channels_[channel]->rtx_send_payload_type = payload_type; 100097fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org return 0; 100197fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org } 10026049526e284c9ffb1629b963dc5a1fc09c84ae83buildbot@webrtc.org 1003d25cd982c474849f04f8a3670f3abe19ada78b11buildbot@webrtc.org#ifdef USE_WEBRTC_DEV_BRANCH 1004d25cd982c474849f04f8a3670f3abe19ada78b11buildbot@webrtc.org WEBRTC_STUB(SetPadWithRedundantPayloads, (int, bool)); 1005d25cd982c474849f04f8a3670f3abe19ada78b11buildbot@webrtc.org#endif 1006d25cd982c474849f04f8a3670f3abe19ada78b11buildbot@webrtc.org 10076049526e284c9ffb1629b963dc5a1fc09c84ae83buildbot@webrtc.org WEBRTC_FUNC(SetRtxReceivePayloadType, (const int channel, 10086049526e284c9ffb1629b963dc5a1fc09c84ae83buildbot@webrtc.org const uint8 payload_type)) { 10096049526e284c9ffb1629b963dc5a1fc09c84ae83buildbot@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 10106049526e284c9ffb1629b963dc5a1fc09c84ae83buildbot@webrtc.org channels_[channel]->rtx_recv_payload_type = payload_type; 10116049526e284c9ffb1629b963dc5a1fc09c84ae83buildbot@webrtc.org return 0; 10126049526e284c9ffb1629b963dc5a1fc09c84ae83buildbot@webrtc.org } 10130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 10140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(SetStartSequenceNumber, (const int, unsigned short)); 10150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(SetRTCPStatus, 10160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org (const int channel, const webrtc::ViERTCPMode mode)) { 10170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 10180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channels_[channel]->rtcp_status_ = mode; 10190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 10200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 10210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB_CONST(GetRTCPStatus, (const int, webrtc::ViERTCPMode&)); 10220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(SetRTCPCName, (const int channel, 10230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const char rtcp_cname[KMaxRTCPCNameLength])) { 10240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 10250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channels_[channel]->cname_.assign(rtcp_cname); 10260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 10270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 10280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC_CONST(GetRTCPCName, (const int channel, 10290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org char rtcp_cname[KMaxRTCPCNameLength])) { 10300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 10310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org talk_base::strcpyn(rtcp_cname, KMaxRTCPCNameLength, 10320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channels_.find(channel)->second->cname_.c_str()); 10330e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 10340e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 10350e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB_CONST(GetRemoteRTCPCName, (const int, char*)); 10360e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(SendApplicationDefinedRTCPPacket, (const int, const unsigned char, 10370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org unsigned int, const char*, unsigned short)); 10380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(SetNACKStatus, (const int channel, const bool enable)) { 10390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 10400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channels_[channel]->nack_ = enable; 10410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channels_[channel]->hybrid_nack_fec_ = false; 10420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 10430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 1044fb2b140b70936f05d5edff3aa9e6968981e7e299buildbot@webrtc.org WEBRTC_STUB(SetFECStatus, (const int, const bool, const unsigned char, 1045fb2b140b70936f05d5edff3aa9e6968981e7e299buildbot@webrtc.org const unsigned char)); 10460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(SetHybridNACKFECStatus, (const int channel, const bool enable, 10470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const unsigned char red_type, const unsigned char fec_type)) { 10480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 1049fb2b140b70936f05d5edff3aa9e6968981e7e299buildbot@webrtc.org if (red_type == fec_type || 10500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org red_type == channels_[channel]->send_codec.plType || 1051fb2b140b70936f05d5edff3aa9e6968981e7e299buildbot@webrtc.org fec_type == channels_[channel]->send_codec.plType) { 10520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return -1; 10530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 10540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channels_[channel]->nack_ = false; 10550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channels_[channel]->hybrid_nack_fec_ = enable; 10560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 10570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 10580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(SetKeyFrameRequestMethod, 10590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org (const int channel, 10600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const webrtc::ViEKeyFrameRequestMethod method)) { 10610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 10620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channels_[channel]->key_frame_request_method_ = method; 10630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 10640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 10650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(SetSenderBufferingMode, (int channel, int target_delay)) { 10660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 10670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channels_[channel]->sender_target_delay_ = target_delay; 10680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 10690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 10700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(SetReceiverBufferingMode, (int channel, int target_delay)) { 10710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 10720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channels_[channel]->receiver_target_delay_ = target_delay; 10730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 10740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 10750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // |Send| and |receive| are stored locally in variables that more clearly 10760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // explain what they mean. 10770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(SetRembStatus, (int channel, bool send, bool receive)) { 10780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 10790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channels_[channel]->remb_contribute_ = receive; 10800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channels_[channel]->remb_bw_partition_ = send; 10810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 10820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 10830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(SetTMMBRStatus, (const int channel, const bool enable)) { 10840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 10850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channels_[channel]->tmmbr_ = enable; 10860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 10870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 10880e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(SetSendTimestampOffsetStatus, (int channel, bool enable, 10890e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int id)) { 10900e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 10912ccf00b08449e81bc72367010d65f4210f7fb60ebuildbot@webrtc.org channels_[channel]->rtp_offset_send_id_ = (enable) ? id : -1; 10920e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 10930e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 10940e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(SetReceiveTimestampOffsetStatus, (int channel, bool enable, 10950e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int id)) { 10960e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 10972ccf00b08449e81bc72367010d65f4210f7fb60ebuildbot@webrtc.org channels_[channel]->rtp_offset_receive_id_ = (enable) ? id : -1; 10980e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 10990e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 11000e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(SetSendAbsoluteSendTimeStatus, (int channel, bool enable, 11010e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int id)) { 11020e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 11032ccf00b08449e81bc72367010d65f4210f7fb60ebuildbot@webrtc.org channels_[channel]->rtp_absolute_send_time_send_id_ = (enable) ? id : -1; 11040e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 11050e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 11060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(SetReceiveAbsoluteSendTimeStatus, (int channel, bool enable, 11070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int id)) { 11080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 11092ccf00b08449e81bc72367010d65f4210f7fb60ebuildbot@webrtc.org channels_[channel]->rtp_absolute_send_time_receive_id_ = (enable) ? id : -1; 11100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 11110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 1112cfd624796c7321c5ffac2249b407cdd0d496e00awu@webrtc.org WEBRTC_STUB(SetRtcpXrRrtrStatus, (int, bool)); 11130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(SetTransmissionSmoothingStatus, (int channel, bool enable)) { 11140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 11150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channels_[channel]->transmission_smoothing_ = enable; 11160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 11170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 1118d25cd982c474849f04f8a3670f3abe19ada78b11buildbot@webrtc.org WEBRTC_FUNC(SetReservedTransmitBitrate, (int channel, 1119afaf4d10603cf012a13d43a62fbc43c0757ec3b9buildbot@webrtc.org unsigned int reserved_transmit_bitrate_bps)) { 1120afaf4d10603cf012a13d43a62fbc43c0757ec3b9buildbot@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 1121afaf4d10603cf012a13d43a62fbc43c0757ec3b9buildbot@webrtc.org channels_[channel]->reserved_transmit_bitrate_bps_ = 1122afaf4d10603cf012a13d43a62fbc43c0757ec3b9buildbot@webrtc.org reserved_transmit_bitrate_bps; 1123afaf4d10603cf012a13d43a62fbc43c0757ec3b9buildbot@webrtc.org return 0; 1124afaf4d10603cf012a13d43a62fbc43c0757ec3b9buildbot@webrtc.org } 11257587c5e0b2fb5100b52bf271370ee1369ba18690henrike@webrtc.org WEBRTC_STUB_CONST(GetRtcpPacketTypeCounters, (int, 11267587c5e0b2fb5100b52bf271370ee1369ba18690henrike@webrtc.org webrtc::RtcpPacketTypeCounter*, webrtc::RtcpPacketTypeCounter*)); 11270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB_CONST(GetReceivedRTCPStatistics, (const int, unsigned short&, 11280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org unsigned int&, unsigned int&, unsigned int&, int&)); 11290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB_CONST(GetSentRTCPStatistics, (const int, unsigned short&, 11300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org unsigned int&, unsigned int&, unsigned int&, int&)); 11310e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB_CONST(GetRTPStatistics, (const int, unsigned int&, unsigned int&, 11320e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org unsigned int&, unsigned int&)); 113397fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org WEBRTC_STUB_CONST(GetReceiveChannelRtcpStatistics, (const int, 113497fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org webrtc::RtcpStatistics&, int&)); 113597fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org WEBRTC_STUB_CONST(GetSendChannelRtcpStatistics, (const int, 113697fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org webrtc::RtcpStatistics&, int&)); 113797fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org WEBRTC_STUB_CONST(GetRtpStatistics, (const int, webrtc::StreamDataCounters&, 113897fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org webrtc::StreamDataCounters&)); 11390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC_CONST(GetBandwidthUsage, (const int channel, 11400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org unsigned int& total_bitrate, unsigned int& video_bitrate, 11410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org unsigned int& fec_bitrate, unsigned int& nack_bitrate)) { 11420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 11430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::map<int, Channel*>::const_iterator it = channels_.find(channel); 11440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (it->second->send) { 11450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org video_bitrate = it->second->send_video_bitrate_; 11460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org fec_bitrate = it->second->send_fec_bitrate_; 11470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org nack_bitrate = it->second->send_nack_bitrate_; 11480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org total_bitrate = video_bitrate + fec_bitrate + nack_bitrate; 11490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } else { 11500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org total_bitrate = 0; 11510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org video_bitrate = 0; 11520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org fec_bitrate = 0; 11530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org nack_bitrate = 0; 11540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 11550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 11560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 11570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC_CONST(GetEstimatedSendBandwidth, (const int channel, 11580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org unsigned int* send_bandwidth_estimate)) { 11590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 11600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::map<int, Channel*>::const_iterator it = channels_.find(channel); 11610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // Assume the current video, fec and nack bitrate sums up to our estimate. 11620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (it->second->send) { 1163e9dd75328a7c9d9525fcc72d7485335a7d5fa41ebuildbot@webrtc.org it = channels_.find(GetOriginalChannelId(channel)); 11640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org *send_bandwidth_estimate = it->second->send_bandwidth_; 11650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } else { 11660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org *send_bandwidth_estimate = 0; 11670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 11680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 11690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 11700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC_CONST(GetEstimatedReceiveBandwidth, (const int channel, 11710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org unsigned int* receive_bandwidth_estimate)) { 11720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 11730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::map<int, Channel*>::const_iterator it = channels_.find(channel); 11740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org if (it->second->receive_) { 1175e9dd75328a7c9d9525fcc72d7485335a7d5fa41ebuildbot@webrtc.org it = channels_.find(GetOriginalChannelId(channel)); 11760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org *receive_bandwidth_estimate = it->second->receive_bandwidth_; 11770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } else { 11780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org *receive_bandwidth_estimate = 0; 11790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 11800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 11810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 118297fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org WEBRTC_STUB(RegisterSendChannelRtcpStatisticsCallback, 118397fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org (int, webrtc::RtcpStatisticsCallback*)); 118497fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org WEBRTC_STUB(DeregisterSendChannelRtcpStatisticsCallback, 118597fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org (int, webrtc::RtcpStatisticsCallback*)); 118697fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org WEBRTC_STUB(RegisterReceiveChannelRtcpStatisticsCallback, 118797fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org (int, webrtc::RtcpStatisticsCallback*)); 118897fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org WEBRTC_STUB(DeregisterReceiveChannelRtcpStatisticsCallback, 118997fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org (int, webrtc::RtcpStatisticsCallback*)); 119097fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org WEBRTC_STUB(RegisterSendChannelRtpStatisticsCallback, 119197fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org (int, webrtc::StreamDataCountersCallback*)); 119297fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org WEBRTC_STUB(DeregisterSendChannelRtpStatisticsCallback, 119397fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org (int, webrtc::StreamDataCountersCallback*)); 119497fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org WEBRTC_STUB(RegisterReceiveChannelRtpStatisticsCallback, 119597fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org (int, webrtc::StreamDataCountersCallback*)); 119697fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org WEBRTC_STUB(DeregisterReceiveChannelRtpStatisticsCallback, 119797fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org (int, webrtc::StreamDataCountersCallback*)); 119897fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org WEBRTC_STUB(RegisterSendBitrateObserver, 119997fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org (int, webrtc::BitrateStatisticsObserver*)); 120097fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org WEBRTC_STUB(DeregisterSendBitrateObserver, 120197fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org (int, webrtc::BitrateStatisticsObserver*)); 120297fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org WEBRTC_STUB(RegisterSendFrameCountObserver, 120397fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org (int, webrtc::FrameCountObserver*)); 120497fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org WEBRTC_STUB(DeregisterSendFrameCountObserver, 120597fbd309a28be4e38d138b40662507d50cab6d26sergeyu@chromium.org (int, webrtc::FrameCountObserver*)); 12060e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 12070e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(StartRTPDump, (const int, const char*, webrtc::RTPDirections)); 12080e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(StopRTPDump, (const int, webrtc::RTPDirections)); 12090e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(RegisterRTPObserver, (const int, webrtc::ViERTPObserver&)); 12100e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(DeregisterRTPObserver, (const int)); 12110e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(RegisterRTCPObserver, (const int, webrtc::ViERTCPObserver&)); 12120e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(DeregisterRTCPObserver, (const int)); 12130e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 12140e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // webrtc::ViEImageProcess 12150e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(RegisterCaptureEffectFilter, (const int, 12160e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org webrtc::ViEEffectFilter&)); 12170e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(DeregisterCaptureEffectFilter, (const int)); 12180e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(RegisterSendEffectFilter, (const int, 12190e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org webrtc::ViEEffectFilter&)); 12200e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(DeregisterSendEffectFilter, (const int)); 12210e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(RegisterRenderEffectFilter, (const int, 12220e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org webrtc::ViEEffectFilter&)); 12230e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(DeregisterRenderEffectFilter, (const int)); 12240e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(EnableDeflickering, (const int, const bool)); 12250e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(EnableDenoising, (const int capture_id, const bool denoising)) { 12260e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CAPTURER(capture_id); 12270e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org capturers_[capture_id]->set_denoising(denoising); 12280e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 12290e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 12300e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_STUB(EnableColorEnhancement, (const int, const bool)); 12315c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org WEBRTC_VOID_STUB(RegisterPreEncodeCallback, 12325c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org (int, webrtc::I420FrameCallback*)); 12335c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org WEBRTC_VOID_STUB(DeRegisterPreEncodeCallback, (int)); 12345c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org WEBRTC_VOID_STUB(RegisterPreRenderCallback, 12355c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org (int, webrtc::I420FrameCallback*)); 12365c9dd59107e049112f2e9a62d08a02ef4448a957wu@webrtc.org WEBRTC_VOID_STUB(DeRegisterPreRenderCallback, (int)); 12370e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org // webrtc::ViEExternalCodec 12380e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(RegisterExternalSendCodec, 12390e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org (const int channel, const unsigned char pl_type, webrtc::VideoEncoder*, 12400e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool)) { 12410e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 12420e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channels_[channel]->ext_encoder_pl_types_.insert(pl_type); 12430e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 12440e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 12450e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(DeRegisterExternalSendCodec, 12460e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org (const int channel, const unsigned char pl_type)) { 12470e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 12480e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channels_[channel]->ext_encoder_pl_types_.erase(pl_type); 12490e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 12500e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 12510e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(RegisterExternalReceiveCodec, 12520e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org (const int channel, const unsigned int pl_type, webrtc::VideoDecoder*, 12530e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool, int)) { 12540e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 12550e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channels_[channel]->ext_decoder_pl_types_.insert(pl_type); 12560e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 12570e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 12580e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_FUNC(DeRegisterExternalReceiveCodec, 12590e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org (const int channel, const unsigned char pl_type)) { 12600e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org WEBRTC_CHECK_CHANNEL(channel); 12610e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org channels_[channel]->ext_decoder_pl_types_.erase(pl_type); 12620e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return 0; 12630e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 12640e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 12650e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org private: 12660e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool IsChannelId(int id) const { 12670e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return (id >= kViEChannelIdBase && id <= kViEChannelIdMax); 12680e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 12690e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool IsCapturerId(int id) const { 12700e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org return (id >= kViECaptureIdBase && id <= kViECaptureIdMax); 12710e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org } 12720e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 12730e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool inited_; 12740e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int last_channel_; 12750e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::map<int, Channel*> channels_; 12760e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool fail_create_channel_; 12770e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int last_capturer_; 12780e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org std::map<int, Capturer*> capturers_; 12790e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org bool fail_alloc_capturer_; 12800e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org const cricket::VideoCodec* const* codecs_; 12810e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int num_codecs_; 12820e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org int num_set_send_codecs_; // how many times we call SetSendCodec(). 12830e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org}; 12840e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 12850e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org} // namespace cricket 12860e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org 12870e118e7129884fbea117e78d6f2068139a414dbhenrike@webrtc.org#endif // TALK_MEDIA_WEBRTC_FAKEWEBRTCVIDEOENGINE_H_ 1288