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:
@ -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);
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
};
|
||||
|
@ -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 {
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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_;
|
||||
|
@ -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 {
|
||||
|
Reference in New Issue
Block a user