| Index: webrtc/voice_engine/test/auto_test/fixtures/after_initialization_fixture.h
|
| diff --git a/webrtc/voice_engine/test/auto_test/fixtures/after_initialization_fixture.h b/webrtc/voice_engine/test/auto_test/fixtures/after_initialization_fixture.h
|
| index cee5a58f8ec81d839b8db13f54dc0cdd3c1d63d3..11397c1c597ab9bde4a5633a25dd9994534d244a 100644
|
| --- a/webrtc/voice_engine/test/auto_test/fixtures/after_initialization_fixture.h
|
| +++ b/webrtc/voice_engine/test/auto_test/fixtures/after_initialization_fixture.h
|
| @@ -15,6 +15,7 @@
|
|
|
| #include "webrtc/base/scoped_ptr.h"
|
| #include "webrtc/common_types.h"
|
| +#include "webrtc/modules/rtp_rtcp/source/byte_io.h"
|
| #include "webrtc/system_wrappers/interface/atomic32.h"
|
| #include "webrtc/system_wrappers/interface/critical_section_wrapper.h"
|
| #include "webrtc/system_wrappers/interface/event_wrapper.h"
|
| @@ -26,24 +27,27 @@ class TestErrorObserver;
|
|
|
| class LoopBackTransport : public webrtc::Transport {
|
| public:
|
| - LoopBackTransport(webrtc::VoENetwork* voe_network)
|
| + LoopBackTransport(webrtc::VoENetwork* voe_network, int channel)
|
| : crit_(webrtc::CriticalSectionWrapper::CreateCriticalSection()),
|
| packet_event_(webrtc::EventWrapper::Create()),
|
| - thread_(webrtc::ThreadWrapper::CreateThread(
|
| - NetworkProcess, this, "LoopBackTransport")),
|
| - voe_network_(voe_network), transmitted_packets_(0) {
|
| + thread_(webrtc::ThreadWrapper::CreateThread(NetworkProcess,
|
| + this,
|
| + "LoopBackTransport")),
|
| + channel_(channel),
|
| + voe_network_(voe_network),
|
| + transmitted_packets_(0) {
|
| thread_->Start();
|
| }
|
|
|
| ~LoopBackTransport() { thread_->Stop(); }
|
|
|
| - int SendPacket(int channel, const void* data, size_t len) override {
|
| - StorePacket(Packet::Rtp, channel, data, len);
|
| + int SendPacket(const void* data, size_t len) override {
|
| + StorePacket(Packet::Rtp, data, len);
|
| return static_cast<int>(len);
|
| }
|
|
|
| - int SendRTCPPacket(int channel, const void* data, size_t len) override {
|
| - StorePacket(Packet::Rtcp, channel, data, len);
|
| + int SendRTCPPacket(const void* data, size_t len) override {
|
| + StorePacket(Packet::Rtcp, data, len);
|
| return static_cast<int>(len);
|
| }
|
|
|
| @@ -57,28 +61,32 @@ class LoopBackTransport : public webrtc::Transport {
|
| }
|
| }
|
|
|
| + void AddChannel(uint32_t ssrc, int channel) {
|
| + webrtc::CriticalSectionScoped lock(crit_.get());
|
| + channels_[ssrc] = channel;
|
| + }
|
| +
|
| private:
|
| struct Packet {
|
| enum Type { Rtp, Rtcp, } type;
|
|
|
| Packet() : len(0) {}
|
| - Packet(Type type, int channel, const void* data, size_t len)
|
| - : type(type), channel(channel), len(len) {
|
| + Packet(Type type, const void* data, size_t len)
|
| + : type(type), len(len) {
|
| assert(len <= 1500);
|
| memcpy(this->data, data, len);
|
| }
|
|
|
| - int channel;
|
| uint8_t data[1500];
|
| size_t len;
|
| };
|
|
|
| - void StorePacket(Packet::Type type, int channel,
|
| + void StorePacket(Packet::Type type,
|
| const void* data,
|
| size_t len) {
|
| {
|
| webrtc::CriticalSectionScoped lock(crit_.get());
|
| - packet_queue_.push_back(Packet(type, channel, data, len));
|
| + packet_queue_.push_back(Packet(type, data, len));
|
| }
|
| packet_event_->Set();
|
| }
|
| @@ -100,21 +108,34 @@ class LoopBackTransport : public webrtc::Transport {
|
|
|
| while (true) {
|
| Packet p;
|
| + int channel = channel_;
|
| {
|
| webrtc::CriticalSectionScoped lock(crit_.get());
|
| if (packet_queue_.empty())
|
| break;
|
| p = packet_queue_.front();
|
| packet_queue_.pop_front();
|
| +
|
| + if (p.type == Packet::Rtp) {
|
| + uint32_t ssrc =
|
| + webrtc::ByteReader<uint32_t>::ReadBigEndian(&p.data[8]);
|
| + if (channels_[ssrc] != 0)
|
| + channel = channels_[ssrc];
|
| + }
|
| + // TODO(pbos): Add RTCP SSRC muxing/demuxing if anything requires it.
|
| }
|
|
|
| + // Minimum RTP header size.
|
| + if (p.len < 12)
|
| + continue;
|
| +
|
| switch (p.type) {
|
| case Packet::Rtp:
|
| - voe_network_->ReceivedRTPPacket(p.channel, p.data, p.len,
|
| + voe_network_->ReceivedRTPPacket(channel, p.data, p.len,
|
| webrtc::PacketTime());
|
| break;
|
| case Packet::Rtcp:
|
| - voe_network_->ReceivedRTCPPacket(p.channel, p.data, p.len);
|
| + voe_network_->ReceivedRTCPPacket(channel, p.data, p.len);
|
| break;
|
| }
|
| ++transmitted_packets_;
|
| @@ -126,6 +147,8 @@ class LoopBackTransport : public webrtc::Transport {
|
| const rtc::scoped_ptr<webrtc::EventWrapper> packet_event_;
|
| const rtc::scoped_ptr<webrtc::ThreadWrapper> thread_;
|
| std::deque<Packet> packet_queue_ GUARDED_BY(crit_.get());
|
| + const int channel_;
|
| + std::map<uint32_t, int> channels_ GUARDED_BY(crit_.get());
|
| webrtc::VoENetwork* const voe_network_;
|
| webrtc::Atomic32 transmitted_packets_;
|
| };
|
|
|