Delete telephone-event handling from RTPReceiverAudio.

Bug: webrtc:7135
Change-Id: Ic8b96f44ba25ff9265570dd43d3c76ed0177abfb
Reviewed-on: https://webrtc-review.googlesource.com/91125
Reviewed-by: Oskar Sundbom <ossu@webrtc.org>
Reviewed-by: Åsa Persson <asapersson@webrtc.org>
Commit-Queue: Niels Moller <nisse@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#24172}
This commit is contained in:
Niels Möller
2018-07-30 16:10:41 +02:00
committed by Commit Bot
parent 31f1596c7c
commit ab4a530b87
7 changed files with 2 additions and 89 deletions

View File

@ -529,7 +529,6 @@ Channel::Channel(ProcessThread* module_process_thread,
RtpReceiver::CreateAudioReceiver(Clock::GetRealTimeClock(),
this,
rtp_payload_registry_.get())),
telephone_event_handler_(rtp_receiver_->GetTelephoneEventHandler()),
_outputAudioLevel(),
_timeStamp(0), // This is just an offset, RTP module will add it's own
// random offset
@ -616,7 +615,6 @@ void Channel::Init() {
// disabled by the user.
// After StopListen (when no sockets exists), RTCP packets will no longer
// be transmitted since the Transport object will then be invalid.
telephone_event_handler_->SetTelephoneEventForwardToDecoder(true);
// RTCP is enabled by default.
_rtpRtcpModule->SetRTCPStatus(RtcpMode::kCompound);

View File

@ -56,7 +56,6 @@ class RTPReceiverAudio;
class RtpPacketReceived;
class RtpRtcp;
class RtpTransportControllerSendInterface;
class TelephoneEventHandler;
struct SenderInfo;
@ -342,7 +341,6 @@ class Channel
std::unique_ptr<RTPPayloadRegistry> rtp_payload_registry_;
std::unique_ptr<ReceiveStatistics> rtp_receive_statistics_;
std::unique_ptr<RtpReceiver> rtp_receiver_;
TelephoneEventHandler* telephone_event_handler_;
std::unique_ptr<RtpRtcp> _rtpRtcpModule;
std::unique_ptr<AudioCodingModule> audio_coding_;
AudioSinkInterface* audio_sink_ = nullptr;

View File

@ -25,10 +25,6 @@ class TelephoneEventHandler {
public:
virtual ~TelephoneEventHandler() {}
// The following three methods implement the TelephoneEventHandler interface.
// Forward DTMFs to decoder for playout.
virtual void SetTelephoneEventForwardToDecoder(bool forward_to_decoder) = 0;
// Is TelephoneEvent configured with payload type payload_type
virtual bool TelephoneEventPayloadType(const int8_t payload_type) const = 0;
};

View File

@ -24,7 +24,6 @@
#define RTCP_CNAME_SIZE 256 // RFC 3550 page 44, including null termination
#define IP_PACKET_SIZE 1500 // we assume ethernet
#define MAX_NUMBER_OF_PARALLEL_TELEPHONE_EVENTS 10
namespace webrtc {
namespace rtcp {

View File

@ -27,7 +27,6 @@ RTPReceiverStrategy* RTPReceiverStrategy::CreateAudioStrategy(
RTPReceiverAudio::RTPReceiverAudio(RtpData* data_callback)
: RTPReceiverStrategy(data_callback),
TelephoneEventHandler(),
telephone_event_forward_to_decoder_(true),
telephone_event_payload_type_(-1),
cng_nb_payload_type_(-1),
cng_wb_payload_type_(-1),
@ -36,13 +35,6 @@ RTPReceiverAudio::RTPReceiverAudio(RtpData* data_callback)
RTPReceiverAudio::~RTPReceiverAudio() = default;
// Outband TelephoneEvent(DTMF) detection
void RTPReceiverAudio::SetTelephoneEventForwardToDecoder(
bool forward_to_decoder) {
rtc::CritScope lock(&crit_sect_);
telephone_event_forward_to_decoder_ = forward_to_decoder;
}
bool RTPReceiverAudio::TelephoneEventPayloadType(int8_t payload_type) const {
rtc::CritScope lock(&crit_sect_);
return telephone_event_payload_type_ == payload_type;
@ -164,71 +156,6 @@ int32_t RTPReceiverAudio::ParseAudioCodecSpecific(
return data_callback_->OnReceivedPayloadData(nullptr, 0, rtp_header);
}
bool telephone_event_packet =
TelephoneEventPayloadType(rtp_header->header.payloadType);
if (telephone_event_packet) {
rtc::CritScope lock(&crit_sect_);
// RFC 4733 2.3
// 0 1 2 3
// 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
// | event |E|R| volume | duration |
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
//
if (payload_data_length % 4 != 0) {
return -1;
}
size_t number_of_events = payload_data_length / 4;
// sanity
if (number_of_events >= MAX_NUMBER_OF_PARALLEL_TELEPHONE_EVENTS) {
number_of_events = MAX_NUMBER_OF_PARALLEL_TELEPHONE_EVENTS;
}
for (size_t n = 0; n < number_of_events; ++n) {
RTC_DCHECK_GE(payload_data_length, (4 * n) + 2);
bool end = (payload_data[(4 * n) + 1] & 0x80) ? true : false;
std::set<uint8_t>::iterator event =
telephone_event_reported_.find(payload_data[4 * n]);
if (event != telephone_event_reported_.end()) {
// we have already seen this event
if (end) {
telephone_event_reported_.erase(payload_data[4 * n]);
}
} else {
if (end) {
// don't add if it's a end of a tone
} else {
telephone_event_reported_.insert(payload_data[4 * n]);
}
}
}
// RFC 4733 2.5.1.3 & 2.5.2.3 Long-Duration Events
// should not be a problem since we don't care about the duration
// RFC 4733 See 2.5.1.5. & 2.5.2.4. Multiple Events in a Packet
}
{
rtc::CritScope lock(&crit_sect_);
// check if it's a DTMF event, hence something we can playout
if (telephone_event_packet) {
if (!telephone_event_forward_to_decoder_) {
// don't forward event to decoder
return 0;
}
std::set<uint8_t>::iterator first = telephone_event_reported_.begin();
if (first != telephone_event_reported_.end() && *first > 15) {
// don't forward non DTMF events
return 0;
}
}
}
return data_callback_->OnReceivedPayloadData(payload_data,
payload_data_length, rtp_header);
}

View File

@ -28,10 +28,6 @@ class RTPReceiverAudio : public RTPReceiverStrategy,
explicit RTPReceiverAudio(RtpData* data_callback);
~RTPReceiverAudio() override;
// The following three methods implement the TelephoneEventHandler interface.
// Forward DTMFs to decoder for playout.
void SetTelephoneEventForwardToDecoder(bool forward_to_decoder) override;
// Is TelephoneEvent configured with |payload_type|.
bool TelephoneEventPayloadType(const int8_t payload_type) const override;
@ -63,9 +59,7 @@ class RTPReceiverAudio : public RTPReceiverStrategy,
size_t payload_length,
const AudioPayload& audio_specific);
bool telephone_event_forward_to_decoder_;
int8_t telephone_event_payload_type_;
std::set<uint8_t> telephone_event_reported_;
int8_t cng_nb_payload_type_;
int8_t cng_wb_payload_type_;

View File

@ -57,7 +57,8 @@ void VerifyDtmf(const uint8_t* payloadData,
EXPECT_TRUE(event < 16u || event == 32u);
EXPECT_FALSE(reserved);
EXPECT_EQ(volume, 10u);
EXPECT_LE(duration, 6560u);
// Long duration for answer tone events only
EXPECT_TRUE(duration <= 1280 || event == 32u);
}
class VerifyingAudioReceiver : public RtpData {