| OLD | NEW |
| 1 /* | 1 /* |
| 2 * libjingle | 2 * libjingle |
| 3 * Copyright 2004 Google Inc. | 3 * Copyright 2004 Google Inc. |
| 4 * | 4 * |
| 5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions are met: | 6 * modification, are permitted provided that the following conditions are met: |
| 7 * | 7 * |
| 8 * 1. Redistributions of source code must retain the above copyright notice, | 8 * 1. Redistributions of source code must retain the above copyright notice, |
| 9 * this list of conditions and the following disclaimer. | 9 * this list of conditions and the following disclaimer. |
| 10 * 2. Redistributions in binary form must reproduce the above copyright notice, | 10 * 2. Redistributions in binary form must reproduce the above copyright notice, |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 45 | 45 |
| 46 namespace cricket { | 46 namespace cricket { |
| 47 | 47 |
| 48 class FakeMediaEngine; | 48 class FakeMediaEngine; |
| 49 class FakeVideoEngine; | 49 class FakeVideoEngine; |
| 50 class FakeVoiceEngine; | 50 class FakeVoiceEngine; |
| 51 | 51 |
| 52 // A common helper class that handles sending and receiving RTP/RTCP packets. | 52 // A common helper class that handles sending and receiving RTP/RTCP packets. |
| 53 template <class Base> class RtpHelper : public Base { | 53 template <class Base> class RtpHelper : public Base { |
| 54 public: | 54 public: |
| 55 RtpHelper() | 55 RtpHelper(const MediaChannelOptions& options) |
| 56 : sending_(false), | 56 : Base(options), |
| 57 sending_(false), |
| 57 playout_(false), | 58 playout_(false), |
| 58 fail_set_send_codecs_(false), | 59 fail_set_send_codecs_(false), |
| 59 fail_set_recv_codecs_(false), | 60 fail_set_recv_codecs_(false), |
| 60 send_ssrc_(0), | 61 send_ssrc_(0), |
| 61 ready_to_send_(false) {} | 62 ready_to_send_(false) {} |
| 62 const std::vector<RtpHeaderExtension>& recv_extensions() { | 63 const std::vector<RtpHeaderExtension>& recv_extensions() { |
| 63 return recv_extensions_; | 64 return recv_extensions_; |
| 64 } | 65 } |
| 65 const std::vector<RtpHeaderExtension>& send_extensions() { | 66 const std::vector<RtpHeaderExtension>& send_extensions() { |
| 66 return send_extensions_; | 67 return send_extensions_; |
| (...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 232 struct DtmfInfo { | 233 struct DtmfInfo { |
| 233 DtmfInfo(uint32_t ssrc, int event_code, int duration) | 234 DtmfInfo(uint32_t ssrc, int event_code, int duration) |
| 234 : ssrc(ssrc), | 235 : ssrc(ssrc), |
| 235 event_code(event_code), | 236 event_code(event_code), |
| 236 duration(duration) {} | 237 duration(duration) {} |
| 237 uint32_t ssrc; | 238 uint32_t ssrc; |
| 238 int event_code; | 239 int event_code; |
| 239 int duration; | 240 int duration; |
| 240 }; | 241 }; |
| 241 explicit FakeVoiceMediaChannel(FakeVoiceEngine* engine, | 242 explicit FakeVoiceMediaChannel(FakeVoiceEngine* engine, |
| 242 const AudioOptions& options) | 243 const MediaChannelOptions& options, |
| 243 : engine_(engine), | 244 const AudioOptions& audio_options) |
| 245 : RtpHelper<VoiceMediaChannel>(options), |
| 246 engine_(engine), |
| 244 time_since_last_typing_(-1) { | 247 time_since_last_typing_(-1) { |
| 245 output_scalings_[0] = 1.0; // For default channel. | 248 output_scalings_[0] = 1.0; // For default channel. |
| 246 SetOptions(options); | 249 SetOptions(audio_options); |
| 247 } | 250 } |
| 248 ~FakeVoiceMediaChannel(); | 251 ~FakeVoiceMediaChannel(); |
| 252 // TODO(nisse): Move to the VoiceMediaChannel base class? Currently |
| 253 // duplicated in WebRtcVoiceMediaChannel. |
| 254 rtc::DiffServCodePoint MediaTypeDscpValue() const override { |
| 255 return rtc::DSCP_EF; |
| 256 } |
| 257 |
| 249 const std::vector<AudioCodec>& recv_codecs() const { return recv_codecs_; } | 258 const std::vector<AudioCodec>& recv_codecs() const { return recv_codecs_; } |
| 250 const std::vector<AudioCodec>& send_codecs() const { return send_codecs_; } | 259 const std::vector<AudioCodec>& send_codecs() const { return send_codecs_; } |
| 251 const std::vector<AudioCodec>& codecs() const { return send_codecs(); } | 260 const std::vector<AudioCodec>& codecs() const { return send_codecs(); } |
| 252 const std::vector<DtmfInfo>& dtmf_info_queue() const { | 261 const std::vector<DtmfInfo>& dtmf_info_queue() const { |
| 253 return dtmf_info_queue_; | 262 return dtmf_info_queue_; |
| 254 } | 263 } |
| 255 const AudioOptions& options() const { return options_; } | 264 const AudioOptions& options() const { return options_; } |
| 256 | 265 |
| 257 virtual bool SetSendParameters(const AudioSendParameters& params) { | 266 virtual bool SetSendParameters(const AudioSendParameters& params) { |
| 258 return (SetSendCodecs(params.codecs) && | 267 return (SetSendCodecs(params.codecs) && |
| (...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 433 uint32_t ssrc, | 442 uint32_t ssrc, |
| 434 int event_code, | 443 int event_code, |
| 435 int duration) { | 444 int duration) { |
| 436 return (info.duration == duration && info.event_code == event_code && | 445 return (info.duration == duration && info.event_code == event_code && |
| 437 info.ssrc == ssrc); | 446 info.ssrc == ssrc); |
| 438 } | 447 } |
| 439 | 448 |
| 440 class FakeVideoMediaChannel : public RtpHelper<VideoMediaChannel> { | 449 class FakeVideoMediaChannel : public RtpHelper<VideoMediaChannel> { |
| 441 public: | 450 public: |
| 442 explicit FakeVideoMediaChannel(FakeVideoEngine* engine, | 451 explicit FakeVideoMediaChannel(FakeVideoEngine* engine, |
| 443 const VideoOptions& options) | 452 const MediaChannelOptions& options, |
| 444 : engine_(engine), max_bps_(-1) { | 453 const VideoOptions& video_options) |
| 445 SetOptions(options); | 454 : RtpHelper<VideoMediaChannel>(options), |
| 455 engine_(engine), |
| 456 max_bps_(-1) { |
| 457 SetOptions(video_options); |
| 446 } | 458 } |
| 447 | 459 |
| 448 ~FakeVideoMediaChannel(); | 460 ~FakeVideoMediaChannel(); |
| 449 | 461 // TODO(nisse): Move to the VideoMediaChannel base class? Currently |
| 462 // duplicated in WebRtcVideoChannel2. |
| 463 rtc::DiffServCodePoint MediaTypeDscpValue() const override { |
| 464 return rtc::DSCP_AF41; |
| 465 } |
| 450 const std::vector<VideoCodec>& recv_codecs() const { return recv_codecs_; } | 466 const std::vector<VideoCodec>& recv_codecs() const { return recv_codecs_; } |
| 451 const std::vector<VideoCodec>& send_codecs() const { return send_codecs_; } | 467 const std::vector<VideoCodec>& send_codecs() const { return send_codecs_; } |
| 452 const std::vector<VideoCodec>& codecs() const { return send_codecs(); } | 468 const std::vector<VideoCodec>& codecs() const { return send_codecs(); } |
| 453 bool rendering() const { return playout(); } | 469 bool rendering() const { return playout(); } |
| 454 const VideoOptions& options() const { return options_; } | 470 const VideoOptions& options() const { return options_; } |
| 455 const std::map<uint32_t, rtc::VideoSinkInterface<VideoFrame>*>& sinks() | 471 const std::map<uint32_t, rtc::VideoSinkInterface<VideoFrame>*>& sinks() |
| 456 const { | 472 const { |
| 457 return sinks_; | 473 return sinks_; |
| 458 } | 474 } |
| 459 int max_bps() const { return max_bps_; } | 475 int max_bps() const { return max_bps_; } |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 557 std::vector<VideoCodec> recv_codecs_; | 573 std::vector<VideoCodec> recv_codecs_; |
| 558 std::vector<VideoCodec> send_codecs_; | 574 std::vector<VideoCodec> send_codecs_; |
| 559 std::map<uint32_t, rtc::VideoSinkInterface<VideoFrame>*> sinks_; | 575 std::map<uint32_t, rtc::VideoSinkInterface<VideoFrame>*> sinks_; |
| 560 std::map<uint32_t, VideoCapturer*> capturers_; | 576 std::map<uint32_t, VideoCapturer*> capturers_; |
| 561 VideoOptions options_; | 577 VideoOptions options_; |
| 562 int max_bps_; | 578 int max_bps_; |
| 563 }; | 579 }; |
| 564 | 580 |
| 565 class FakeDataMediaChannel : public RtpHelper<DataMediaChannel> { | 581 class FakeDataMediaChannel : public RtpHelper<DataMediaChannel> { |
| 566 public: | 582 public: |
| 567 explicit FakeDataMediaChannel(void* unused, const DataOptions& options) | 583 explicit FakeDataMediaChannel(void* unused, |
| 568 : send_blocked_(false), max_bps_(-1) {} | 584 const MediaChannelOptions& options, |
| 585 const DataOptions& data_options) |
| 586 : RtpHelper<DataMediaChannel>(options), |
| 587 send_blocked_(false), max_bps_(-1) {} |
| 569 ~FakeDataMediaChannel() {} | 588 ~FakeDataMediaChannel() {} |
| 570 const std::vector<DataCodec>& recv_codecs() const { return recv_codecs_; } | 589 const std::vector<DataCodec>& recv_codecs() const { return recv_codecs_; } |
| 571 const std::vector<DataCodec>& send_codecs() const { return send_codecs_; } | 590 const std::vector<DataCodec>& send_codecs() const { return send_codecs_; } |
| 572 const std::vector<DataCodec>& codecs() const { return send_codecs(); } | 591 const std::vector<DataCodec>& codecs() const { return send_codecs(); } |
| 573 int max_bps() const { return max_bps_; } | 592 int max_bps() const { return max_bps_; } |
| 574 | 593 |
| 575 virtual bool SetSendParameters(const DataSendParameters& params) { | 594 virtual bool SetSendParameters(const DataSendParameters& params) { |
| 576 return (SetSendCodecs(params.codecs) && | 595 return (SetSendCodecs(params.codecs) && |
| 577 SetMaxSendBandwidth(params.max_bandwidth_bps)); | 596 SetMaxSendBandwidth(params.max_bandwidth_bps)); |
| 578 } | 597 } |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 675 // sanity checks against that. | 694 // sanity checks against that. |
| 676 codecs_.push_back(AudioCodec(101, "fake_audio_codec", 0, 0, 1, 0)); | 695 codecs_.push_back(AudioCodec(101, "fake_audio_codec", 0, 0, 1, 0)); |
| 677 } | 696 } |
| 678 bool Init(rtc::Thread* worker_thread) { return true; } | 697 bool Init(rtc::Thread* worker_thread) { return true; } |
| 679 void Terminate() {} | 698 void Terminate() {} |
| 680 rtc::scoped_refptr<webrtc::AudioState> GetAudioState() const { | 699 rtc::scoped_refptr<webrtc::AudioState> GetAudioState() const { |
| 681 return rtc::scoped_refptr<webrtc::AudioState>(); | 700 return rtc::scoped_refptr<webrtc::AudioState>(); |
| 682 } | 701 } |
| 683 | 702 |
| 684 VoiceMediaChannel* CreateChannel(webrtc::Call* call, | 703 VoiceMediaChannel* CreateChannel(webrtc::Call* call, |
| 685 const AudioOptions& options) { | 704 const MediaChannelOptions& options, |
| 705 const AudioOptions& audio_options) { |
| 686 if (fail_create_channel_) { | 706 if (fail_create_channel_) { |
| 687 return nullptr; | 707 return nullptr; |
| 688 } | 708 } |
| 689 | 709 |
| 690 FakeVoiceMediaChannel* ch = new FakeVoiceMediaChannel(this, options); | 710 FakeVoiceMediaChannel* ch = |
| 711 new FakeVoiceMediaChannel(this, options, audio_options); |
| 691 channels_.push_back(ch); | 712 channels_.push_back(ch); |
| 692 return ch; | 713 return ch; |
| 693 } | 714 } |
| 694 FakeVoiceMediaChannel* GetChannel(size_t index) { | 715 FakeVoiceMediaChannel* GetChannel(size_t index) { |
| 695 return (channels_.size() > index) ? channels_[index] : NULL; | 716 return (channels_.size() > index) ? channels_[index] : NULL; |
| 696 } | 717 } |
| 697 void UnregisterChannel(VoiceMediaChannel* channel) { | 718 void UnregisterChannel(VoiceMediaChannel* channel) { |
| 698 channels_.erase(std::find(channels_.begin(), channels_.end(), channel)); | 719 channels_.erase(std::find(channels_.begin(), channels_.end(), channel)); |
| 699 } | 720 } |
| 700 | 721 |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 738 codecs_.push_back(VideoCodec(0, "fake_video_codec", 0, 0, 0, 0)); | 759 codecs_.push_back(VideoCodec(0, "fake_video_codec", 0, 0, 0, 0)); |
| 739 } | 760 } |
| 740 void Init() {} | 761 void Init() {} |
| 741 bool SetOptions(const VideoOptions& options) { | 762 bool SetOptions(const VideoOptions& options) { |
| 742 options_ = options; | 763 options_ = options; |
| 743 options_changed_ = true; | 764 options_changed_ = true; |
| 744 return true; | 765 return true; |
| 745 } | 766 } |
| 746 | 767 |
| 747 VideoMediaChannel* CreateChannel(webrtc::Call* call, | 768 VideoMediaChannel* CreateChannel(webrtc::Call* call, |
| 748 const VideoOptions& options) { | 769 const MediaChannelOptions& options, |
| 770 const VideoOptions& video_options) { |
| 749 if (fail_create_channel_) { | 771 if (fail_create_channel_) { |
| 750 return NULL; | 772 return NULL; |
| 751 } | 773 } |
| 752 | 774 |
| 753 FakeVideoMediaChannel* ch = new FakeVideoMediaChannel(this, options); | 775 FakeVideoMediaChannel* ch = |
| 776 new FakeVideoMediaChannel(this, options, video_options); |
| 754 channels_.push_back(ch); | 777 channels_.push_back(ch); |
| 755 return ch; | 778 return ch; |
| 756 } | 779 } |
| 757 FakeVideoMediaChannel* GetChannel(size_t index) { | 780 FakeVideoMediaChannel* GetChannel(size_t index) { |
| 758 return (channels_.size() > index) ? channels_[index] : NULL; | 781 return (channels_.size() > index) ? channels_[index] : NULL; |
| 759 } | 782 } |
| 760 void UnregisterChannel(VideoMediaChannel* channel) { | 783 void UnregisterChannel(VideoMediaChannel* channel) { |
| 761 channels_.erase(std::find(channels_.begin(), channels_.end(), channel)); | 784 channels_.erase(std::find(channels_.begin(), channels_.end(), channel)); |
| 762 } | 785 } |
| 763 | 786 |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 853 engine_->UnregisterChannel(this); | 876 engine_->UnregisterChannel(this); |
| 854 } | 877 } |
| 855 } | 878 } |
| 856 | 879 |
| 857 class FakeDataEngine : public DataEngineInterface { | 880 class FakeDataEngine : public DataEngineInterface { |
| 858 public: | 881 public: |
| 859 FakeDataEngine() : last_channel_type_(DCT_NONE) {} | 882 FakeDataEngine() : last_channel_type_(DCT_NONE) {} |
| 860 | 883 |
| 861 virtual DataMediaChannel* CreateChannel(DataChannelType data_channel_type) { | 884 virtual DataMediaChannel* CreateChannel(DataChannelType data_channel_type) { |
| 862 last_channel_type_ = data_channel_type; | 885 last_channel_type_ = data_channel_type; |
| 863 FakeDataMediaChannel* ch = new FakeDataMediaChannel(this, DataOptions()); | 886 FakeDataMediaChannel* ch = |
| 887 new FakeDataMediaChannel(this, MediaChannelOptions(), DataOptions()); |
| 864 channels_.push_back(ch); | 888 channels_.push_back(ch); |
| 865 return ch; | 889 return ch; |
| 866 } | 890 } |
| 867 | 891 |
| 868 FakeDataMediaChannel* GetChannel(size_t index) { | 892 FakeDataMediaChannel* GetChannel(size_t index) { |
| 869 return (channels_.size() > index) ? channels_[index] : NULL; | 893 return (channels_.size() > index) ? channels_[index] : NULL; |
| 870 } | 894 } |
| 871 | 895 |
| 872 void UnregisterChannel(DataMediaChannel* channel) { | 896 void UnregisterChannel(DataMediaChannel* channel) { |
| 873 channels_.erase(std::find(channels_.begin(), channels_.end(), channel)); | 897 channels_.erase(std::find(channels_.begin(), channels_.end(), channel)); |
| 874 } | 898 } |
| 875 | 899 |
| 876 virtual void SetDataCodecs(const std::vector<DataCodec>& data_codecs) { | 900 virtual void SetDataCodecs(const std::vector<DataCodec>& data_codecs) { |
| 877 data_codecs_ = data_codecs; | 901 data_codecs_ = data_codecs; |
| 878 } | 902 } |
| 879 | 903 |
| 880 virtual const std::vector<DataCodec>& data_codecs() { return data_codecs_; } | 904 virtual const std::vector<DataCodec>& data_codecs() { return data_codecs_; } |
| 881 | 905 |
| 882 DataChannelType last_channel_type() const { return last_channel_type_; } | 906 DataChannelType last_channel_type() const { return last_channel_type_; } |
| 883 | 907 |
| 884 private: | 908 private: |
| 885 std::vector<FakeDataMediaChannel*> channels_; | 909 std::vector<FakeDataMediaChannel*> channels_; |
| 886 std::vector<DataCodec> data_codecs_; | 910 std::vector<DataCodec> data_codecs_; |
| 887 DataChannelType last_channel_type_; | 911 DataChannelType last_channel_type_; |
| 888 }; | 912 }; |
| 889 | 913 |
| 890 } // namespace cricket | 914 } // namespace cricket |
| 891 | 915 |
| 892 #endif // WEBRTC_MEDIA_BASE_FAKEMEDIAENGINE_H_ | 916 #endif // WEBRTC_MEDIA_BASE_FAKEMEDIAENGINE_H_ |
| OLD | NEW |