3 * Copyright 2010 Google Inc.
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
8 * 1. Redistributions of source code must retain the above copyright notice,
9 * this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright notice,
11 * this list of conditions and the following disclaimer in the documentation
12 * and/or other materials provided with the distribution.
13 * 3. The name of the author may not be used to endorse or promote products
14 * derived from this software without specific prior written permission.
16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
17 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
18 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
19 * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
20 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
21 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
22 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
23 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
24 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
25 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 #ifndef TALK_MEDIA_WEBRTC_FAKEWEBRTCVIDEOENGINE_H_
29 #define TALK_MEDIA_WEBRTC_FAKEWEBRTCVIDEOENGINE_H_
35 #include "talk/base/basictypes.h"
36 #include "talk/base/gunit.h"
37 #include "talk/base/stringutils.h"
38 #include "talk/media/base/codec.h"
39 #include "talk/media/webrtc/fakewebrtccommon.h"
40 #include "talk/media/webrtc/webrtcvideodecoderfactory.h"
41 #include "talk/media/webrtc/webrtcvideoencoderfactory.h"
42 #include "talk/media/webrtc/webrtcvie.h"
46 #define WEBRTC_CHECK_CAPTURER(capturer) \
47 if (capturers_.find(capturer) == capturers_.end()) return -1;
49 #define WEBRTC_ASSERT_CAPTURER(capturer) \
50 ASSERT(capturers_.find(capturer) != capturers_.end());
52 static const int kMinVideoBitrate = 100;
53 static const int kStartVideoBitrate = 300;
54 static const int kMaxVideoBitrate = 1000;
56 // WebRtc channel id and capture id share the same number space.
57 // This is how AddRenderer(renderId, ...) is able to tell if it is adding a
58 // renderer for a channel or it is adding a renderer for a capturer.
59 static const int kViEChannelIdBase = 0;
60 static const int kViEChannelIdMax = 1000;
61 static const int kViECaptureIdBase = 10000; // Make sure there is a gap.
62 static const int kViECaptureIdMax = 11000;
64 // Fake class for mocking out webrtc::VideoDecoder
65 class FakeWebRtcVideoDecoder : public webrtc::VideoDecoder {
67 FakeWebRtcVideoDecoder()
68 : num_frames_received_(0) {
71 virtual int32 InitDecode(const webrtc::VideoCodec*, int32) {
72 return WEBRTC_VIDEO_CODEC_OK;
76 const webrtc::EncodedImage&, bool, const webrtc::RTPFragmentationHeader*,
77 const webrtc::CodecSpecificInfo*, int64) {
78 num_frames_received_++;
79 return WEBRTC_VIDEO_CODEC_OK;
82 virtual int32 RegisterDecodeCompleteCallback(
83 webrtc::DecodedImageCallback*) {
84 return WEBRTC_VIDEO_CODEC_OK;
87 virtual int32 Release() {
88 return WEBRTC_VIDEO_CODEC_OK;
91 virtual int32 Reset() {
92 return WEBRTC_VIDEO_CODEC_OK;
95 int GetNumFramesReceived() const {
96 return num_frames_received_;
100 int num_frames_received_;
103 // Fake class for mocking out WebRtcVideoDecoderFactory.
104 class FakeWebRtcVideoDecoderFactory : public WebRtcVideoDecoderFactory {
106 FakeWebRtcVideoDecoderFactory()
107 : num_created_decoders_(0) {
110 virtual webrtc::VideoDecoder* CreateVideoDecoder(
111 webrtc::VideoCodecType type) {
112 if (supported_codec_types_.count(type) == 0) {
115 FakeWebRtcVideoDecoder* decoder = new FakeWebRtcVideoDecoder();
116 decoders_.push_back(decoder);
117 num_created_decoders_++;
121 virtual void DestroyVideoDecoder(webrtc::VideoDecoder* decoder) {
123 std::remove(decoders_.begin(), decoders_.end(), decoder),
128 void AddSupportedVideoCodecType(webrtc::VideoCodecType type) {
129 supported_codec_types_.insert(type);
132 int GetNumCreatedDecoders() {
133 return num_created_decoders_;
136 const std::vector<FakeWebRtcVideoDecoder*>& decoders() {
141 std::set<webrtc::VideoCodecType> supported_codec_types_;
142 std::vector<FakeWebRtcVideoDecoder*> decoders_;
143 int num_created_decoders_;
146 // Fake class for mocking out webrtc::VideoEnoder
147 class FakeWebRtcVideoEncoder : public webrtc::VideoEncoder {
149 FakeWebRtcVideoEncoder() {}
151 virtual int32 InitEncode(const webrtc::VideoCodec* codecSettings,
153 uint32 maxPayloadSize) {
154 return WEBRTC_VIDEO_CODEC_OK;
157 virtual int32 Encode(
158 const webrtc::I420VideoFrame& inputImage,
159 const webrtc::CodecSpecificInfo* codecSpecificInfo,
160 const std::vector<webrtc::VideoFrameType>* frame_types) {
161 return WEBRTC_VIDEO_CODEC_OK;
164 virtual int32 RegisterEncodeCompleteCallback(
165 webrtc::EncodedImageCallback* callback) {
166 return WEBRTC_VIDEO_CODEC_OK;
169 virtual int32 Release() {
170 return WEBRTC_VIDEO_CODEC_OK;
173 virtual int32 SetChannelParameters(uint32 packetLoss,
175 return WEBRTC_VIDEO_CODEC_OK;
178 virtual int32 SetRates(uint32 newBitRate,
180 return WEBRTC_VIDEO_CODEC_OK;
184 // Fake class for mocking out WebRtcVideoEncoderFactory.
185 class FakeWebRtcVideoEncoderFactory : public WebRtcVideoEncoderFactory {
187 FakeWebRtcVideoEncoderFactory()
188 : num_created_encoders_(0) {
191 virtual webrtc::VideoEncoder* CreateVideoEncoder(
192 webrtc::VideoCodecType type) {
193 if (supported_codec_types_.count(type) == 0) {
196 FakeWebRtcVideoEncoder* encoder = new FakeWebRtcVideoEncoder();
197 encoders_.push_back(encoder);
198 num_created_encoders_++;
202 virtual void DestroyVideoEncoder(webrtc::VideoEncoder* encoder) {
204 std::remove(encoders_.begin(), encoders_.end(), encoder),
209 virtual void AddObserver(WebRtcVideoEncoderFactory::Observer* observer) {
210 bool inserted = observers_.insert(observer).second;
211 EXPECT_TRUE(inserted);
214 virtual void RemoveObserver(WebRtcVideoEncoderFactory::Observer* observer) {
215 size_t erased = observers_.erase(observer);
216 EXPECT_EQ(erased, 1UL);
219 virtual const std::vector<WebRtcVideoEncoderFactory::VideoCodec>& codecs()
224 void AddSupportedVideoCodecType(webrtc::VideoCodecType type,
225 const std::string& name) {
226 supported_codec_types_.insert(type);
228 WebRtcVideoEncoderFactory::VideoCodec(type, name, 1280, 720, 30));
231 void NotifyCodecsAvailable() {
232 std::set<WebRtcVideoEncoderFactory::Observer*>::iterator it;
233 for (it = observers_.begin(); it != observers_.end(); ++it)
234 (*it)->OnCodecsAvailable();
237 int GetNumCreatedEncoders() {
238 return num_created_encoders_;
241 const std::vector<FakeWebRtcVideoEncoder*>& encoders() {
246 std::set<webrtc::VideoCodecType> supported_codec_types_;
247 std::vector<WebRtcVideoEncoderFactory::VideoCodec> codecs_;
248 std::vector<FakeWebRtcVideoEncoder*> encoders_;
249 std::set<WebRtcVideoEncoderFactory::Observer*> observers_;
250 int num_created_encoders_;
253 class FakeWebRtcVideoEngine
254 : public webrtc::ViEBase,
255 public webrtc::ViECodec,
256 public webrtc::ViECapture,
257 public webrtc::ViENetwork,
258 public webrtc::ViERender,
259 public webrtc::ViERTP_RTCP,
260 public webrtc::ViEImageProcess,
261 public webrtc::ViEExternalCodec {
266 original_channel_id_(-1),
267 has_renderer_(false),
268 render_started_(false),
272 remote_rtx_ssrc_(-1),
273 rtx_send_payload_type(-1),
274 rtx_recv_payload_type(-1),
275 rtcp_status_(webrtc::kRtcpNone),
276 key_frame_request_method_(webrtc::kViEKeyFrameRequestNone),
278 remb_contribute_(false),
279 remb_bw_partition_(false),
280 rtp_offset_send_id_(-1),
281 rtp_offset_receive_id_(-1),
282 rtp_absolute_send_time_send_id_(-1),
283 rtp_absolute_send_time_receive_id_(-1),
284 sender_target_delay_(0),
285 receiver_target_delay_(0),
286 transmission_smoothing_(false),
288 hybrid_nack_fec_(false),
289 send_video_bitrate_(0),
290 send_fec_bitrate_(0),
291 send_nack_bitrate_(0),
293 receive_bandwidth_(0),
294 reserved_transmit_bitrate_bps_(0),
295 suspend_below_min_bitrate_(false),
296 overuse_observer_(NULL),
297 last_recvd_payload_type_(-1) {
298 ssrcs_[0] = 0; // default ssrc.
299 memset(&send_codec, 0, sizeof(send_codec));
300 memset(&overuse_options_, 0, sizeof(overuse_options_));
303 int original_channel_id_;
305 bool render_started_;
309 std::map<int, int> ssrcs_;
310 std::map<int, int> rtx_ssrcs_;
311 int remote_rtx_ssrc_;
312 int rtx_send_payload_type;
313 int rtx_recv_payload_type;
315 webrtc::ViERTCPMode rtcp_status_;
316 webrtc::ViEKeyFrameRequestMethod key_frame_request_method_;
318 bool remb_contribute_; // This channel contributes to the remb report.
319 bool remb_bw_partition_; // This channel is allocated part of total bw.
320 int rtp_offset_send_id_;
321 int rtp_offset_receive_id_;
322 int rtp_absolute_send_time_send_id_;
323 int rtp_absolute_send_time_receive_id_;
324 int sender_target_delay_;
325 int receiver_target_delay_;
326 bool transmission_smoothing_;
328 bool hybrid_nack_fec_;
329 std::vector<webrtc::VideoCodec> recv_codecs;
330 std::set<unsigned int> ext_decoder_pl_types_;
331 std::set<unsigned int> ext_encoder_pl_types_;
332 webrtc::VideoCodec send_codec;
333 unsigned int send_video_bitrate_;
334 unsigned int send_fec_bitrate_;
335 unsigned int send_nack_bitrate_;
336 unsigned int send_bandwidth_;
337 unsigned int receive_bandwidth_;
338 unsigned int reserved_transmit_bitrate_bps_;
339 bool suspend_below_min_bitrate_;
340 webrtc::CpuOveruseObserver* overuse_observer_;
341 webrtc::CpuOveruseOptions overuse_options_;
342 int last_recvd_payload_type_;
344 class Capturer : public webrtc::ViEExternalCapture {
346 Capturer() : channel_id_(-1), denoising_(false),
347 last_capture_time_(0), incoming_frame_num_(0) { }
348 int channel_id() const { return channel_id_; }
349 void set_channel_id(int channel_id) { channel_id_ = channel_id; }
350 bool denoising() const { return denoising_; }
351 void set_denoising(bool denoising) { denoising_ = denoising; }
352 int64 last_capture_time() const { return last_capture_time_; }
353 int incoming_frame_num() const { return incoming_frame_num_; }
355 // From ViEExternalCapture
356 virtual int IncomingFrame(unsigned char* videoFrame,
357 unsigned int videoFrameLength,
358 unsigned short width,
359 unsigned short height,
360 webrtc::RawVideoType videoType,
361 unsigned long long captureTime) {
364 virtual int IncomingFrameI420(
365 const webrtc::ViEVideoFrameI420& video_frame,
366 unsigned long long captureTime) {
367 last_capture_time_ = captureTime;
368 ++incoming_frame_num_;
375 int64 last_capture_time_;
376 int incoming_frame_num_;
379 FakeWebRtcVideoEngine(const cricket::VideoCodec* const* codecs,
382 last_channel_(kViEChannelIdBase - 1),
383 fail_create_channel_(false),
384 last_capturer_(kViECaptureIdBase - 1),
385 fail_alloc_capturer_(false),
387 num_codecs_(num_codecs),
388 num_set_send_codecs_(0) {
391 ~FakeWebRtcVideoEngine() {
392 ASSERT(0 == channels_.size());
393 ASSERT(0 == capturers_.size());
395 bool IsInited() const { return inited_; }
397 int GetLastChannel() const { return last_channel_; }
398 int GetChannelFromLocalSsrc(int local_ssrc) const {
399 // ssrcs_[0] is the default local ssrc.
400 for (std::map<int, Channel*>::const_iterator iter = channels_.begin();
401 iter != channels_.end(); ++iter) {
402 if (local_ssrc == iter->second->ssrcs_[0]) {
409 int GetNumChannels() const { return static_cast<int>(channels_.size()); }
410 bool IsChannel(int channel) const {
411 return (channels_.find(channel) != channels_.end());
413 void set_fail_create_channel(bool fail_create_channel) {
414 fail_create_channel_ = fail_create_channel;
417 int GetLastCapturer() const { return last_capturer_; }
418 int GetNumCapturers() const { return static_cast<int>(capturers_.size()); }
419 int GetIncomingFrameNum(int channel_id) const {
420 for (std::map<int, Capturer*>::const_iterator iter = capturers_.begin();
421 iter != capturers_.end(); ++iter) {
422 Capturer* capturer = iter->second;
423 if (capturer->channel_id() == channel_id) {
424 return capturer->incoming_frame_num();
429 void set_fail_alloc_capturer(bool fail_alloc_capturer) {
430 fail_alloc_capturer_ = fail_alloc_capturer;
432 int GetNumSetSendCodecs() const { return num_set_send_codecs_; }
434 int GetCaptureId(int channel) const {
435 WEBRTC_ASSERT_CHANNEL(channel);
436 return channels_.find(channel)->second->capture_id_;
438 int GetOriginalChannelId(int channel) const {
439 WEBRTC_ASSERT_CHANNEL(channel);
440 return channels_.find(channel)->second->original_channel_id_;
442 bool GetHasRenderer(int channel) const {
443 WEBRTC_ASSERT_CHANNEL(channel);
444 return channels_.find(channel)->second->has_renderer_;
446 bool GetRenderStarted(int channel) const {
447 WEBRTC_ASSERT_CHANNEL(channel);
448 return channels_.find(channel)->second->render_started_;
450 bool GetSend(int channel) const {
451 WEBRTC_ASSERT_CHANNEL(channel);
452 return channels_.find(channel)->second->send;
454 bool GetReceive(int channel) const {
455 WEBRTC_ASSERT_CHANNEL(channel);
456 return channels_.find(channel)->second->receive_;
458 int GetCaptureChannelId(int capture_id) const {
459 WEBRTC_ASSERT_CAPTURER(capture_id);
460 return capturers_.find(capture_id)->second->channel_id();
462 bool GetCaptureDenoising(int capture_id) const {
463 WEBRTC_ASSERT_CAPTURER(capture_id);
464 return capturers_.find(capture_id)->second->denoising();
466 int64 GetCaptureLastTimestamp(int capture_id) const {
467 WEBRTC_ASSERT_CAPTURER(capture_id);
468 return capturers_.find(capture_id)->second->last_capture_time();
470 webrtc::ViERTCPMode GetRtcpStatus(int channel) const {
471 WEBRTC_ASSERT_CHANNEL(channel);
472 return channels_.find(channel)->second->rtcp_status_;
474 webrtc::ViEKeyFrameRequestMethod GetKeyFrameRequestMethod(int channel) const {
475 WEBRTC_ASSERT_CHANNEL(channel);
476 return channels_.find(channel)->second->key_frame_request_method_;
478 bool GetTmmbrStatus(int channel) const {
479 WEBRTC_ASSERT_CHANNEL(channel);
480 return channels_.find(channel)->second->tmmbr_;
482 bool GetRembStatusBwPartition(int channel) const {
483 WEBRTC_ASSERT_CHANNEL(channel);
484 return channels_.find(channel)->second->remb_bw_partition_;
486 bool GetRembStatusContribute(int channel) const {
487 WEBRTC_ASSERT_CHANNEL(channel);
488 return channels_.find(channel)->second->remb_contribute_;
490 int GetSendRtpExtensionId(int channel, const std::string& extension) {
491 WEBRTC_ASSERT_CHANNEL(channel);
492 if (extension == kRtpTimestampOffsetHeaderExtension) {
493 return channels_.find(channel)->second->rtp_offset_send_id_;
494 } else if (extension == kRtpAbsoluteSenderTimeHeaderExtension) {
495 return channels_.find(channel)->second->rtp_absolute_send_time_send_id_;
499 int GetReceiveRtpExtensionId(int channel, const std::string& extension) {
500 WEBRTC_ASSERT_CHANNEL(channel);
501 if (extension == kRtpTimestampOffsetHeaderExtension) {
502 return channels_.find(channel)->second->rtp_offset_receive_id_;
503 } else if (extension == kRtpAbsoluteSenderTimeHeaderExtension) {
505 channels_.find(channel)->second->rtp_absolute_send_time_receive_id_;
509 bool GetTransmissionSmoothingStatus(int channel) {
510 WEBRTC_ASSERT_CHANNEL(channel);
511 return channels_.find(channel)->second->transmission_smoothing_;
513 int GetSenderTargetDelay(int channel) {
514 WEBRTC_ASSERT_CHANNEL(channel);
515 return channels_.find(channel)->second->sender_target_delay_;
517 int GetReceiverTargetDelay(int channel) {
518 WEBRTC_ASSERT_CHANNEL(channel);
519 return channels_.find(channel)->second->receiver_target_delay_;
521 bool GetNackStatus(int channel) const {
522 WEBRTC_ASSERT_CHANNEL(channel);
523 return channels_.find(channel)->second->nack_;
525 bool GetHybridNackFecStatus(int channel) const {
526 WEBRTC_ASSERT_CHANNEL(channel);
527 return channels_.find(channel)->second->hybrid_nack_fec_;
529 int GetNumSsrcs(int channel) const {
530 WEBRTC_ASSERT_CHANNEL(channel);
531 return static_cast<int>(
532 channels_.find(channel)->second->ssrcs_.size());
534 int GetNumRtxSsrcs(int channel) const {
535 WEBRTC_ASSERT_CHANNEL(channel);
536 return static_cast<int>(
537 channels_.find(channel)->second->rtx_ssrcs_.size());
539 bool GetIsTransmitting(int channel) const {
540 WEBRTC_ASSERT_CHANNEL(channel);
541 return channels_.find(channel)->second->can_transmit_;
543 webrtc::CpuOveruseObserver* GetCpuOveruseObserver(int channel) const {
544 WEBRTC_ASSERT_CHANNEL(channel);
545 return channels_.find(channel)->second->overuse_observer_;
547 webrtc::CpuOveruseOptions GetCpuOveruseOptions(int channel) const {
548 WEBRTC_ASSERT_CHANNEL(channel);
549 return channels_.find(channel)->second->overuse_options_;
551 int GetRtxSsrc(int channel, int simulcast_idx) const {
552 WEBRTC_ASSERT_CHANNEL(channel);
553 if (channels_.find(channel)->second->rtx_ssrcs_.find(simulcast_idx) ==
554 channels_.find(channel)->second->rtx_ssrcs_.end()) {
557 return channels_.find(channel)->second->rtx_ssrcs_[simulcast_idx];
559 bool ReceiveCodecRegistered(int channel,
560 const webrtc::VideoCodec& codec) const {
561 WEBRTC_ASSERT_CHANNEL(channel);
562 const std::vector<webrtc::VideoCodec>& codecs =
563 channels_.find(channel)->second->recv_codecs;
564 return std::find(codecs.begin(), codecs.end(), codec) != codecs.end();
566 bool ExternalDecoderRegistered(int channel,
567 unsigned int pl_type) const {
568 WEBRTC_ASSERT_CHANNEL(channel);
569 return channels_.find(channel)->second->
570 ext_decoder_pl_types_.count(pl_type) != 0;
572 int GetNumExternalDecoderRegistered(int channel) const {
573 WEBRTC_ASSERT_CHANNEL(channel);
574 return static_cast<int>(
575 channels_.find(channel)->second->ext_decoder_pl_types_.size());
577 bool ExternalEncoderRegistered(int channel,
578 unsigned int pl_type) const {
579 WEBRTC_ASSERT_CHANNEL(channel);
580 return channels_.find(channel)->second->
581 ext_encoder_pl_types_.count(pl_type) != 0;
583 int GetNumExternalEncoderRegistered(int channel) const {
584 WEBRTC_ASSERT_CHANNEL(channel);
585 return static_cast<int>(
586 channels_.find(channel)->second->ext_encoder_pl_types_.size());
588 int GetTotalNumExternalEncoderRegistered() const {
589 std::map<int, Channel*>::const_iterator it;
590 int total_num_registered = 0;
591 for (it = channels_.begin(); it != channels_.end(); ++it)
592 total_num_registered +=
593 static_cast<int>(it->second->ext_encoder_pl_types_.size());
594 return total_num_registered;
596 void SetSendBitrates(int channel, unsigned int video_bitrate,
597 unsigned int fec_bitrate, unsigned int nack_bitrate) {
598 WEBRTC_ASSERT_CHANNEL(channel);
599 channels_[channel]->send_video_bitrate_ = video_bitrate;
600 channels_[channel]->send_fec_bitrate_ = fec_bitrate;
601 channels_[channel]->send_nack_bitrate_ = nack_bitrate;
603 void SetSendBandwidthEstimate(int channel, unsigned int send_bandwidth) {
604 WEBRTC_ASSERT_CHANNEL(channel);
605 channels_[GetOriginalChannelId(channel)]->send_bandwidth_ = send_bandwidth;
607 void SetReceiveBandwidthEstimate(int channel,
608 unsigned int receive_bandwidth) {
609 WEBRTC_ASSERT_CHANNEL(channel);
610 channels_[GetOriginalChannelId(channel)]->receive_bandwidth_ =
613 int GetRtxSendPayloadType(int channel) {
614 WEBRTC_CHECK_CHANNEL(channel);
615 return channels_[channel]->rtx_send_payload_type;
617 int GetRtxRecvPayloadType(int channel) {
618 WEBRTC_CHECK_CHANNEL(channel);
619 return channels_[channel]->rtx_recv_payload_type;
621 int GetRemoteRtxSsrc(int channel) {
622 WEBRTC_CHECK_CHANNEL(channel);
623 return channels_.find(channel)->second->remote_rtx_ssrc_;
625 bool GetSuspendBelowMinBitrateStatus(int channel) {
626 WEBRTC_ASSERT_CHANNEL(channel);
627 return channels_.find(channel)->second->suspend_below_min_bitrate_;
629 int GetLastRecvdPayloadType(int channel) const {
630 WEBRTC_CHECK_CHANNEL(channel);
631 return channels_.find(channel)->second->last_recvd_payload_type_;
633 unsigned int GetReservedTransmitBitrate(int channel) {
634 WEBRTC_ASSERT_CHANNEL(channel);
635 return channels_.find(channel)->second->reserved_transmit_bitrate_bps_;
638 WEBRTC_STUB(Release, ());
641 WEBRTC_FUNC(Init, ()) {
645 WEBRTC_STUB(SetVoiceEngine, (webrtc::VoiceEngine*));
646 WEBRTC_FUNC(CreateChannel, (int& channel)) { // NOLINT
647 if (fail_create_channel_) {
650 if (kViEChannelIdMax == last_channel_) {
653 Channel* ch = new Channel();
655 // The original channel of the first channel in a group refers to itself
656 // for code simplicity.
657 ch->original_channel_id_ = last_channel_;
658 channels_[last_channel_] = ch;
659 channel = last_channel_;
662 WEBRTC_FUNC(CreateChannel, (int& channel, int original_channel)) {
663 WEBRTC_CHECK_CHANNEL(original_channel);
664 if (CreateChannel(channel) != 0) {
667 channels_[channel]->original_channel_id_ = original_channel;
670 WEBRTC_FUNC(CreateReceiveChannel, (int& channel, int original_channel)) {
671 return CreateChannel(channel, original_channel);
673 WEBRTC_FUNC(DeleteChannel, (const int channel)) {
674 WEBRTC_CHECK_CHANNEL(channel);
675 // Make sure we deregister all the decoders before deleting a channel.
676 EXPECT_EQ(0, GetNumExternalDecoderRegistered(channel));
677 delete channels_[channel];
678 channels_.erase(channel);
681 WEBRTC_FUNC(RegisterCpuOveruseObserver,
682 (int channel, webrtc::CpuOveruseObserver* observer)) {
683 WEBRTC_CHECK_CHANNEL(channel);
684 channels_[channel]->overuse_observer_ = observer;
687 WEBRTC_STUB(CpuOveruseMeasures, (int, int*, int*, int*, int*));
688 WEBRTC_FUNC(SetCpuOveruseOptions,
689 (int channel, const webrtc::CpuOveruseOptions& options)) {
690 WEBRTC_CHECK_CHANNEL(channel);
691 channels_[channel]->overuse_options_ = options;
694 WEBRTC_STUB(ConnectAudioChannel, (const int, const int));
695 WEBRTC_STUB(DisconnectAudioChannel, (const int));
696 WEBRTC_FUNC(StartSend, (const int channel)) {
697 WEBRTC_CHECK_CHANNEL(channel);
698 channels_[channel]->send = true;
701 WEBRTC_FUNC(StopSend, (const int channel)) {
702 WEBRTC_CHECK_CHANNEL(channel);
703 channels_[channel]->send = false;
706 WEBRTC_FUNC(StartReceive, (const int channel)) {
707 WEBRTC_CHECK_CHANNEL(channel);
708 channels_[channel]->receive_ = true;
711 WEBRTC_FUNC(StopReceive, (const int channel)) {
712 WEBRTC_CHECK_CHANNEL(channel);
713 channels_[channel]->receive_ = false;
716 WEBRTC_STUB(GetVersion, (char version[1024]));
717 WEBRTC_STUB(LastError, ());
720 WEBRTC_FUNC_CONST(NumberOfCodecs, ()) {
723 WEBRTC_FUNC_CONST(GetCodec, (const unsigned char list_number,
724 webrtc::VideoCodec& out_codec)) {
725 if (list_number >= NumberOfCodecs()) {
728 memset(&out_codec, 0, sizeof(out_codec));
729 const cricket::VideoCodec& c(*codecs_[list_number]);
730 if ("I420" == c.name) {
731 out_codec.codecType = webrtc::kVideoCodecI420;
732 } else if ("VP8" == c.name) {
733 out_codec.codecType = webrtc::kVideoCodecVP8;
734 } else if ("red" == c.name) {
735 out_codec.codecType = webrtc::kVideoCodecRED;
736 } else if ("ulpfec" == c.name) {
737 out_codec.codecType = webrtc::kVideoCodecULPFEC;
739 out_codec.codecType = webrtc::kVideoCodecUnknown;
741 talk_base::strcpyn(out_codec.plName, sizeof(out_codec.plName),
743 out_codec.plType = c.id;
744 out_codec.width = c.width;
745 out_codec.height = c.height;
746 out_codec.startBitrate = kStartVideoBitrate;
747 out_codec.maxBitrate = kMaxVideoBitrate;
748 out_codec.minBitrate = kMinVideoBitrate;
749 out_codec.maxFramerate = c.framerate;
752 WEBRTC_FUNC(SetSendCodec, (const int channel,
753 const webrtc::VideoCodec& codec)) {
754 WEBRTC_CHECK_CHANNEL(channel);
755 channels_[channel]->send_codec = codec;
756 ++num_set_send_codecs_;
759 WEBRTC_FUNC_CONST(GetSendCodec, (const int channel,
760 webrtc::VideoCodec& codec)) { // NOLINT
761 WEBRTC_CHECK_CHANNEL(channel);
762 codec = channels_.find(channel)->second->send_codec;
765 WEBRTC_FUNC(SetReceiveCodec, (const int channel,
766 const webrtc::VideoCodec& codec)) { // NOLINT
767 WEBRTC_CHECK_CHANNEL(channel);
768 channels_[channel]->recv_codecs.push_back(codec);
771 WEBRTC_STUB_CONST(GetReceiveCodec, (const int, webrtc::VideoCodec&));
772 WEBRTC_STUB_CONST(GetCodecConfigParameters, (const int,
773 unsigned char*, unsigned char&));
774 WEBRTC_STUB(SetImageScaleStatus, (const int, const bool));
775 WEBRTC_STUB_CONST(GetSendCodecStastistics, (const int,
776 unsigned int&, unsigned int&));
777 WEBRTC_STUB_CONST(GetReceiveCodecStastistics, (const int,
778 unsigned int&, unsigned int&));
779 WEBRTC_STUB_CONST(GetReceiveSideDelay, (const int video_channel,
781 WEBRTC_FUNC_CONST(GetCodecTargetBitrate, (const int channel,
782 unsigned int* codec_target_bitrate)) {
783 WEBRTC_CHECK_CHANNEL(channel);
785 std::map<int, Channel*>::const_iterator it = channels_.find(channel);
786 if (it->second->send) {
787 // Assume the encoder produces the expected rate.
788 *codec_target_bitrate = it->second->send_video_bitrate_;
790 *codec_target_bitrate = 0;
794 virtual unsigned int GetDiscardedPackets(const int channel) const {
798 WEBRTC_STUB(SetKeyFrameRequestCallbackStatus, (const int, const bool));
799 WEBRTC_STUB(SetSignalKeyPacketLossStatus, (const int, const bool,
801 WEBRTC_STUB(RegisterEncoderObserver, (const int,
802 webrtc::ViEEncoderObserver&));
803 WEBRTC_STUB(DeregisterEncoderObserver, (const int));
804 WEBRTC_STUB(RegisterDecoderObserver, (const int,
805 webrtc::ViEDecoderObserver&));
806 WEBRTC_STUB(DeregisterDecoderObserver, (const int));
807 WEBRTC_STUB(SendKeyFrame, (const int));
808 WEBRTC_STUB(WaitForFirstKeyFrame, (const int, const bool));
809 WEBRTC_STUB(StartDebugRecording, (int, const char*));
810 WEBRTC_STUB(StopDebugRecording, (int));
811 WEBRTC_VOID_FUNC(SuspendBelowMinBitrate, (int channel)) {
812 WEBRTC_ASSERT_CHANNEL(channel);
813 channels_[channel]->suspend_below_min_bitrate_ = true;
816 // webrtc::ViECapture
817 WEBRTC_STUB(NumberOfCaptureDevices, ());
818 WEBRTC_STUB(GetCaptureDevice, (unsigned int, char*,
819 const unsigned int, char*, const unsigned int));
820 WEBRTC_STUB(AllocateCaptureDevice, (const char*, const unsigned int, int&));
821 WEBRTC_FUNC(AllocateExternalCaptureDevice,
822 (int& capture_id, webrtc::ViEExternalCapture*& capture)) {
823 if (fail_alloc_capturer_) {
826 if (kViECaptureIdMax == last_capturer_) {
829 Capturer* cap = new Capturer();
830 capturers_[++last_capturer_] = cap;
831 capture_id = last_capturer_;
835 WEBRTC_STUB(AllocateCaptureDevice, (webrtc::VideoCaptureModule&, int&));
836 WEBRTC_FUNC(ReleaseCaptureDevice, (const int capture_id)) {
837 WEBRTC_CHECK_CAPTURER(capture_id);
838 delete capturers_[capture_id];
839 capturers_.erase(capture_id);
842 WEBRTC_FUNC(ConnectCaptureDevice, (const int capture_id,
843 const int channel)) {
844 WEBRTC_CHECK_CHANNEL(channel);
845 WEBRTC_CHECK_CAPTURER(capture_id);
846 channels_[channel]->capture_id_ = capture_id;
847 capturers_[capture_id]->set_channel_id(channel);
850 WEBRTC_FUNC(DisconnectCaptureDevice, (const int channel)) {
851 WEBRTC_CHECK_CHANNEL(channel);
852 int capture_id = channels_[channel]->capture_id_;
853 WEBRTC_CHECK_CAPTURER(capture_id);
854 channels_[channel]->capture_id_ = -1;
855 capturers_[capture_id]->set_channel_id(-1);
858 WEBRTC_STUB(StartCapture, (const int, const webrtc::CaptureCapability&));
859 WEBRTC_STUB(StopCapture, (const int));
860 WEBRTC_STUB(SetRotateCapturedFrames, (const int,
861 const webrtc::RotateCapturedFrame));
862 WEBRTC_STUB(SetCaptureDelay, (const int, const unsigned int));
863 WEBRTC_STUB(NumberOfCapabilities, (const char*, const unsigned int));
864 WEBRTC_STUB(GetCaptureCapability, (const char*, const unsigned int,
865 const unsigned int, webrtc::CaptureCapability&));
866 WEBRTC_STUB(ShowCaptureSettingsDialogBox, (const char*, const unsigned int,
867 const char*, void*, const unsigned int, const unsigned int));
868 WEBRTC_STUB(GetOrientation, (const char*, webrtc::RotateCapturedFrame&));
869 WEBRTC_STUB(EnableBrightnessAlarm, (const int, const bool));
870 WEBRTC_STUB(RegisterObserver, (const int, webrtc::ViECaptureObserver&));
871 WEBRTC_STUB(DeregisterObserver, (const int));
873 // webrtc::ViENetwork
874 WEBRTC_VOID_FUNC(SetNetworkTransmissionState, (const int channel,
875 const bool is_transmitting)) {
876 WEBRTC_ASSERT_CHANNEL(channel);
877 channels_[channel]->can_transmit_ = is_transmitting;
879 WEBRTC_STUB(RegisterSendTransport, (const int, webrtc::Transport&));
880 WEBRTC_STUB(DeregisterSendTransport, (const int));
882 WEBRTC_FUNC(ReceivedRTPPacket, (const int channel,
885 const webrtc::PacketTime& packet_time)) {
886 WEBRTC_ASSERT_CHANNEL(channel);
888 uint8_t payload_type = static_cast<const uint8_t*>(packet)[1] & 0x7F;
889 channels_[channel]->last_recvd_payload_type_ = payload_type;
893 WEBRTC_STUB(ReceivedRTCPPacket, (const int, const void*, const int));
894 // Not using WEBRTC_STUB due to bool return value
895 virtual bool IsIPv6Enabled(int channel) { return true; }
896 WEBRTC_STUB(SetMTU, (int, unsigned int));
897 WEBRTC_STUB(ReceivedBWEPacket, (const int, int64_t, int,
898 const webrtc::RTPHeader&));
901 WEBRTC_STUB(RegisterVideoRenderModule, (webrtc::VideoRender&));
902 WEBRTC_STUB(DeRegisterVideoRenderModule, (webrtc::VideoRender&));
903 WEBRTC_STUB(AddRenderer, (const int, void*, const unsigned int, const float,
904 const float, const float, const float));
905 WEBRTC_FUNC(RemoveRenderer, (const int render_id)) {
906 if (IsCapturerId(render_id)) {
907 WEBRTC_CHECK_CAPTURER(render_id);
909 } else if (IsChannelId(render_id)) {
910 WEBRTC_CHECK_CHANNEL(render_id);
911 channels_[render_id]->has_renderer_ = false;
916 WEBRTC_FUNC(StartRender, (const int render_id)) {
917 if (IsCapturerId(render_id)) {
918 WEBRTC_CHECK_CAPTURER(render_id);
920 } else if (IsChannelId(render_id)) {
921 WEBRTC_CHECK_CHANNEL(render_id);
922 channels_[render_id]->render_started_ = true;
927 WEBRTC_FUNC(StopRender, (const int render_id)) {
928 if (IsCapturerId(render_id)) {
929 WEBRTC_CHECK_CAPTURER(render_id);
931 } else if (IsChannelId(render_id)) {
932 WEBRTC_CHECK_CHANNEL(render_id);
933 channels_[render_id]->render_started_ = false;
938 WEBRTC_STUB(SetExpectedRenderDelay, (int render_id, int render_delay));
939 WEBRTC_STUB(ConfigureRender, (int, const unsigned int, const float,
940 const float, const float, const float));
941 WEBRTC_STUB(MirrorRenderStream, (const int, const bool, const bool,
943 WEBRTC_FUNC(AddRenderer, (const int render_id,
944 webrtc::RawVideoType video_type,
945 webrtc::ExternalRenderer* renderer)) {
946 if (IsCapturerId(render_id)) {
947 WEBRTC_CHECK_CAPTURER(render_id);
949 } else if (IsChannelId(render_id)) {
950 WEBRTC_CHECK_CHANNEL(render_id);
951 channels_[render_id]->has_renderer_ = true;
957 // webrtc::ViERTP_RTCP
958 WEBRTC_FUNC(SetLocalSSRC, (const int channel,
959 const unsigned int ssrc,
960 const webrtc::StreamType usage,
961 const unsigned char idx)) {
962 WEBRTC_CHECK_CHANNEL(channel);
964 case webrtc::kViEStreamTypeNormal:
965 channels_[channel]->ssrcs_[idx] = ssrc;
967 case webrtc::kViEStreamTypeRtx:
968 channels_[channel]->rtx_ssrcs_[idx] = ssrc;
976 WEBRTC_FUNC_CONST(SetRemoteSSRCType, (const int channel,
977 const webrtc::StreamType usage, const unsigned int ssrc)) {
978 WEBRTC_CHECK_CHANNEL(channel);
979 if (usage == webrtc::kViEStreamTypeRtx) {
980 channels_.find(channel)->second->remote_rtx_ssrc_ = ssrc;
986 WEBRTC_FUNC_CONST(GetLocalSSRC, (const int channel,
987 unsigned int& ssrc)) {
988 // ssrcs_[0] is the default local ssrc.
989 WEBRTC_CHECK_CHANNEL(channel);
990 ssrc = channels_.find(channel)->second->ssrcs_[0];
993 WEBRTC_STUB_CONST(GetRemoteSSRC, (const int, unsigned int&));
994 WEBRTC_STUB_CONST(GetRemoteCSRCs, (const int, unsigned int*));
996 WEBRTC_FUNC(SetRtxSendPayloadType, (const int channel,
997 const uint8 payload_type)) {
998 WEBRTC_CHECK_CHANNEL(channel);
999 channels_[channel]->rtx_send_payload_type = payload_type;
1003 #ifdef USE_WEBRTC_DEV_BRANCH
1004 WEBRTC_STUB(SetPadWithRedundantPayloads, (int, bool));
1007 WEBRTC_FUNC(SetRtxReceivePayloadType, (const int channel,
1008 const uint8 payload_type)) {
1009 WEBRTC_CHECK_CHANNEL(channel);
1010 channels_[channel]->rtx_recv_payload_type = payload_type;
1014 WEBRTC_STUB(SetStartSequenceNumber, (const int, unsigned short));
1015 WEBRTC_FUNC(SetRTCPStatus,
1016 (const int channel, const webrtc::ViERTCPMode mode)) {
1017 WEBRTC_CHECK_CHANNEL(channel);
1018 channels_[channel]->rtcp_status_ = mode;
1021 WEBRTC_STUB_CONST(GetRTCPStatus, (const int, webrtc::ViERTCPMode&));
1022 WEBRTC_FUNC(SetRTCPCName, (const int channel,
1023 const char rtcp_cname[KMaxRTCPCNameLength])) {
1024 WEBRTC_CHECK_CHANNEL(channel);
1025 channels_[channel]->cname_.assign(rtcp_cname);
1028 WEBRTC_FUNC_CONST(GetRTCPCName, (const int channel,
1029 char rtcp_cname[KMaxRTCPCNameLength])) {
1030 WEBRTC_CHECK_CHANNEL(channel);
1031 talk_base::strcpyn(rtcp_cname, KMaxRTCPCNameLength,
1032 channels_.find(channel)->second->cname_.c_str());
1035 WEBRTC_STUB_CONST(GetRemoteRTCPCName, (const int, char*));
1036 WEBRTC_STUB(SendApplicationDefinedRTCPPacket, (const int, const unsigned char,
1037 unsigned int, const char*, unsigned short));
1038 WEBRTC_FUNC(SetNACKStatus, (const int channel, const bool enable)) {
1039 WEBRTC_CHECK_CHANNEL(channel);
1040 channels_[channel]->nack_ = enable;
1041 channels_[channel]->hybrid_nack_fec_ = false;
1044 WEBRTC_STUB(SetFECStatus, (const int, const bool, const unsigned char,
1045 const unsigned char));
1046 WEBRTC_FUNC(SetHybridNACKFECStatus, (const int channel, const bool enable,
1047 const unsigned char red_type, const unsigned char fec_type)) {
1048 WEBRTC_CHECK_CHANNEL(channel);
1049 if (red_type == fec_type ||
1050 red_type == channels_[channel]->send_codec.plType ||
1051 fec_type == channels_[channel]->send_codec.plType) {
1054 channels_[channel]->nack_ = false;
1055 channels_[channel]->hybrid_nack_fec_ = enable;
1058 WEBRTC_FUNC(SetKeyFrameRequestMethod,
1060 const webrtc::ViEKeyFrameRequestMethod method)) {
1061 WEBRTC_CHECK_CHANNEL(channel);
1062 channels_[channel]->key_frame_request_method_ = method;
1065 WEBRTC_FUNC(SetSenderBufferingMode, (int channel, int target_delay)) {
1066 WEBRTC_CHECK_CHANNEL(channel);
1067 channels_[channel]->sender_target_delay_ = target_delay;
1070 WEBRTC_FUNC(SetReceiverBufferingMode, (int channel, int target_delay)) {
1071 WEBRTC_CHECK_CHANNEL(channel);
1072 channels_[channel]->receiver_target_delay_ = target_delay;
1075 // |Send| and |receive| are stored locally in variables that more clearly
1076 // explain what they mean.
1077 WEBRTC_FUNC(SetRembStatus, (int channel, bool send, bool receive)) {
1078 WEBRTC_CHECK_CHANNEL(channel);
1079 channels_[channel]->remb_contribute_ = receive;
1080 channels_[channel]->remb_bw_partition_ = send;
1083 WEBRTC_FUNC(SetTMMBRStatus, (const int channel, const bool enable)) {
1084 WEBRTC_CHECK_CHANNEL(channel);
1085 channels_[channel]->tmmbr_ = enable;
1088 WEBRTC_FUNC(SetSendTimestampOffsetStatus, (int channel, bool enable,
1090 WEBRTC_CHECK_CHANNEL(channel);
1091 channels_[channel]->rtp_offset_send_id_ = (enable) ? id : -1;
1094 WEBRTC_FUNC(SetReceiveTimestampOffsetStatus, (int channel, bool enable,
1096 WEBRTC_CHECK_CHANNEL(channel);
1097 channels_[channel]->rtp_offset_receive_id_ = (enable) ? id : -1;
1100 WEBRTC_FUNC(SetSendAbsoluteSendTimeStatus, (int channel, bool enable,
1102 WEBRTC_CHECK_CHANNEL(channel);
1103 channels_[channel]->rtp_absolute_send_time_send_id_ = (enable) ? id : -1;
1106 WEBRTC_FUNC(SetReceiveAbsoluteSendTimeStatus, (int channel, bool enable,
1108 WEBRTC_CHECK_CHANNEL(channel);
1109 channels_[channel]->rtp_absolute_send_time_receive_id_ = (enable) ? id : -1;
1112 WEBRTC_STUB(SetRtcpXrRrtrStatus, (int, bool));
1113 WEBRTC_FUNC(SetTransmissionSmoothingStatus, (int channel, bool enable)) {
1114 WEBRTC_CHECK_CHANNEL(channel);
1115 channels_[channel]->transmission_smoothing_ = enable;
1118 WEBRTC_FUNC(SetReservedTransmitBitrate, (int channel,
1119 unsigned int reserved_transmit_bitrate_bps)) {
1120 WEBRTC_CHECK_CHANNEL(channel);
1121 channels_[channel]->reserved_transmit_bitrate_bps_ =
1122 reserved_transmit_bitrate_bps;
1125 WEBRTC_STUB_CONST(GetRtcpPacketTypeCounters, (int,
1126 webrtc::RtcpPacketTypeCounter*, webrtc::RtcpPacketTypeCounter*));
1127 WEBRTC_STUB_CONST(GetReceivedRTCPStatistics, (const int, unsigned short&,
1128 unsigned int&, unsigned int&, unsigned int&, int&));
1129 WEBRTC_STUB_CONST(GetSentRTCPStatistics, (const int, unsigned short&,
1130 unsigned int&, unsigned int&, unsigned int&, int&));
1131 WEBRTC_STUB_CONST(GetRTPStatistics, (const int, unsigned int&, unsigned int&,
1132 unsigned int&, unsigned int&));
1133 WEBRTC_STUB_CONST(GetReceiveChannelRtcpStatistics, (const int,
1134 webrtc::RtcpStatistics&, int&));
1135 WEBRTC_STUB_CONST(GetSendChannelRtcpStatistics, (const int,
1136 webrtc::RtcpStatistics&, int&));
1137 WEBRTC_STUB_CONST(GetRtpStatistics, (const int, webrtc::StreamDataCounters&,
1138 webrtc::StreamDataCounters&));
1139 WEBRTC_FUNC_CONST(GetBandwidthUsage, (const int channel,
1140 unsigned int& total_bitrate, unsigned int& video_bitrate,
1141 unsigned int& fec_bitrate, unsigned int& nack_bitrate)) {
1142 WEBRTC_CHECK_CHANNEL(channel);
1143 std::map<int, Channel*>::const_iterator it = channels_.find(channel);
1144 if (it->second->send) {
1145 video_bitrate = it->second->send_video_bitrate_;
1146 fec_bitrate = it->second->send_fec_bitrate_;
1147 nack_bitrate = it->second->send_nack_bitrate_;
1148 total_bitrate = video_bitrate + fec_bitrate + nack_bitrate;
1157 WEBRTC_FUNC_CONST(GetEstimatedSendBandwidth, (const int channel,
1158 unsigned int* send_bandwidth_estimate)) {
1159 WEBRTC_CHECK_CHANNEL(channel);
1160 std::map<int, Channel*>::const_iterator it = channels_.find(channel);
1161 // Assume the current video, fec and nack bitrate sums up to our estimate.
1162 if (it->second->send) {
1163 it = channels_.find(GetOriginalChannelId(channel));
1164 *send_bandwidth_estimate = it->second->send_bandwidth_;
1166 *send_bandwidth_estimate = 0;
1170 WEBRTC_FUNC_CONST(GetEstimatedReceiveBandwidth, (const int channel,
1171 unsigned int* receive_bandwidth_estimate)) {
1172 WEBRTC_CHECK_CHANNEL(channel);
1173 std::map<int, Channel*>::const_iterator it = channels_.find(channel);
1174 if (it->second->receive_) {
1175 it = channels_.find(GetOriginalChannelId(channel));
1176 *receive_bandwidth_estimate = it->second->receive_bandwidth_;
1178 *receive_bandwidth_estimate = 0;
1182 WEBRTC_STUB(RegisterSendChannelRtcpStatisticsCallback,
1183 (int, webrtc::RtcpStatisticsCallback*));
1184 WEBRTC_STUB(DeregisterSendChannelRtcpStatisticsCallback,
1185 (int, webrtc::RtcpStatisticsCallback*));
1186 WEBRTC_STUB(RegisterReceiveChannelRtcpStatisticsCallback,
1187 (int, webrtc::RtcpStatisticsCallback*));
1188 WEBRTC_STUB(DeregisterReceiveChannelRtcpStatisticsCallback,
1189 (int, webrtc::RtcpStatisticsCallback*));
1190 WEBRTC_STUB(RegisterSendChannelRtpStatisticsCallback,
1191 (int, webrtc::StreamDataCountersCallback*));
1192 WEBRTC_STUB(DeregisterSendChannelRtpStatisticsCallback,
1193 (int, webrtc::StreamDataCountersCallback*));
1194 WEBRTC_STUB(RegisterReceiveChannelRtpStatisticsCallback,
1195 (int, webrtc::StreamDataCountersCallback*));
1196 WEBRTC_STUB(DeregisterReceiveChannelRtpStatisticsCallback,
1197 (int, webrtc::StreamDataCountersCallback*));
1198 WEBRTC_STUB(RegisterSendBitrateObserver,
1199 (int, webrtc::BitrateStatisticsObserver*));
1200 WEBRTC_STUB(DeregisterSendBitrateObserver,
1201 (int, webrtc::BitrateStatisticsObserver*));
1202 WEBRTC_STUB(RegisterSendFrameCountObserver,
1203 (int, webrtc::FrameCountObserver*));
1204 WEBRTC_STUB(DeregisterSendFrameCountObserver,
1205 (int, webrtc::FrameCountObserver*));
1207 WEBRTC_STUB(StartRTPDump, (const int, const char*, webrtc::RTPDirections));
1208 WEBRTC_STUB(StopRTPDump, (const int, webrtc::RTPDirections));
1209 WEBRTC_STUB(RegisterRTPObserver, (const int, webrtc::ViERTPObserver&));
1210 WEBRTC_STUB(DeregisterRTPObserver, (const int));
1211 WEBRTC_STUB(RegisterRTCPObserver, (const int, webrtc::ViERTCPObserver&));
1212 WEBRTC_STUB(DeregisterRTCPObserver, (const int));
1214 // webrtc::ViEImageProcess
1215 WEBRTC_STUB(RegisterCaptureEffectFilter, (const int,
1216 webrtc::ViEEffectFilter&));
1217 WEBRTC_STUB(DeregisterCaptureEffectFilter, (const int));
1218 WEBRTC_STUB(RegisterSendEffectFilter, (const int,
1219 webrtc::ViEEffectFilter&));
1220 WEBRTC_STUB(DeregisterSendEffectFilter, (const int));
1221 WEBRTC_STUB(RegisterRenderEffectFilter, (const int,
1222 webrtc::ViEEffectFilter&));
1223 WEBRTC_STUB(DeregisterRenderEffectFilter, (const int));
1224 WEBRTC_STUB(EnableDeflickering, (const int, const bool));
1225 WEBRTC_FUNC(EnableDenoising, (const int capture_id, const bool denoising)) {
1226 WEBRTC_CHECK_CAPTURER(capture_id);
1227 capturers_[capture_id]->set_denoising(denoising);
1230 WEBRTC_STUB(EnableColorEnhancement, (const int, const bool));
1231 WEBRTC_VOID_STUB(RegisterPreEncodeCallback,
1232 (int, webrtc::I420FrameCallback*));
1233 WEBRTC_VOID_STUB(DeRegisterPreEncodeCallback, (int));
1234 WEBRTC_VOID_STUB(RegisterPreRenderCallback,
1235 (int, webrtc::I420FrameCallback*));
1236 WEBRTC_VOID_STUB(DeRegisterPreRenderCallback, (int));
1237 // webrtc::ViEExternalCodec
1238 WEBRTC_FUNC(RegisterExternalSendCodec,
1239 (const int channel, const unsigned char pl_type, webrtc::VideoEncoder*,
1241 WEBRTC_CHECK_CHANNEL(channel);
1242 channels_[channel]->ext_encoder_pl_types_.insert(pl_type);
1245 WEBRTC_FUNC(DeRegisterExternalSendCodec,
1246 (const int channel, const unsigned char pl_type)) {
1247 WEBRTC_CHECK_CHANNEL(channel);
1248 channels_[channel]->ext_encoder_pl_types_.erase(pl_type);
1251 WEBRTC_FUNC(RegisterExternalReceiveCodec,
1252 (const int channel, const unsigned int pl_type, webrtc::VideoDecoder*,
1254 WEBRTC_CHECK_CHANNEL(channel);
1255 channels_[channel]->ext_decoder_pl_types_.insert(pl_type);
1258 WEBRTC_FUNC(DeRegisterExternalReceiveCodec,
1259 (const int channel, const unsigned char pl_type)) {
1260 WEBRTC_CHECK_CHANNEL(channel);
1261 channels_[channel]->ext_decoder_pl_types_.erase(pl_type);
1266 bool IsChannelId(int id) const {
1267 return (id >= kViEChannelIdBase && id <= kViEChannelIdMax);
1269 bool IsCapturerId(int id) const {
1270 return (id >= kViECaptureIdBase && id <= kViECaptureIdMax);
1275 std::map<int, Channel*> channels_;
1276 bool fail_create_channel_;
1278 std::map<int, Capturer*> capturers_;
1279 bool fail_alloc_capturer_;
1280 const cricket::VideoCodec* const* codecs_;
1282 int num_set_send_codecs_; // how many times we call SetSendCodec().
1285 } // namespace cricket
1287 #endif // TALK_MEDIA_WEBRTC_FAKEWEBRTCVIDEOENGINE_H_