Any file that uses the RTC_DISALLOW_* macros should #include "webrtc/base/constructormagic.h", but a shocking number of them don't. This causes trouble when we try to wean files off of #including scoped_ptr.h, since a bunch of files get their constructormagic macros only from there. Rather than fixing these errors one by one as they turn up, this CL simply ensures that every file in the WebRTC tree that uses the RTC_DISALLOW_* macros #includes "webrtc/base/constructormagic.h". BUG=webrtc:5520 Review URL: https://codereview.webrtc.org/1917043005 Cr-Commit-Position: refs/heads/master@{#12509}
124 lines
3.8 KiB
C++
124 lines
3.8 KiB
C++
/*
|
|
* Copyright 2012 The WebRTC project authors. All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license
|
|
* that can be found in the LICENSE file in the root of the source
|
|
* tree. An additional intellectual property rights grant can be found
|
|
* in the file PATENTS. All contributing project authors may
|
|
* be found in the AUTHORS file in the root of the source tree.
|
|
*/
|
|
|
|
#ifndef WEBRTC_API_DTMFSENDER_H_
|
|
#define WEBRTC_API_DTMFSENDER_H_
|
|
|
|
#include <string>
|
|
|
|
#include "webrtc/api/dtmfsenderinterface.h"
|
|
#include "webrtc/api/mediastreaminterface.h"
|
|
#include "webrtc/api/proxy.h"
|
|
#include "webrtc/base/common.h"
|
|
#include "webrtc/base/constructormagic.h"
|
|
#include "webrtc/base/messagehandler.h"
|
|
#include "webrtc/base/refcount.h"
|
|
|
|
// DtmfSender is the native implementation of the RTCDTMFSender defined by
|
|
// the WebRTC W3C Editor's Draft.
|
|
// http://dev.w3.org/2011/webrtc/editor/webrtc.html
|
|
|
|
namespace rtc {
|
|
class Thread;
|
|
}
|
|
|
|
namespace webrtc {
|
|
|
|
// This interface is called by DtmfSender to talk to the actual audio channel
|
|
// to send DTMF.
|
|
class DtmfProviderInterface {
|
|
public:
|
|
// Returns true if the audio track with given id (|track_id|) is capable
|
|
// of sending DTMF. Otherwise returns false.
|
|
virtual bool CanInsertDtmf(const std::string& track_id) = 0;
|
|
// Sends DTMF |code| via the audio track with given id (|track_id|).
|
|
// The |duration| indicates the length of the DTMF tone in ms.
|
|
// Returns true on success and false on failure.
|
|
virtual bool InsertDtmf(const std::string& track_id,
|
|
int code, int duration) = 0;
|
|
// Returns a |sigslot::signal0<>| signal. The signal should fire before
|
|
// the provider is destroyed.
|
|
virtual sigslot::signal0<>* GetOnDestroyedSignal() = 0;
|
|
|
|
protected:
|
|
virtual ~DtmfProviderInterface() {}
|
|
};
|
|
|
|
class DtmfSender
|
|
: public DtmfSenderInterface,
|
|
public sigslot::has_slots<>,
|
|
public rtc::MessageHandler {
|
|
public:
|
|
static rtc::scoped_refptr<DtmfSender> Create(
|
|
AudioTrackInterface* track,
|
|
rtc::Thread* signaling_thread,
|
|
DtmfProviderInterface* provider);
|
|
|
|
// Implements DtmfSenderInterface.
|
|
void RegisterObserver(DtmfSenderObserverInterface* observer) override;
|
|
void UnregisterObserver() override;
|
|
bool CanInsertDtmf() override;
|
|
bool InsertDtmf(const std::string& tones,
|
|
int duration,
|
|
int inter_tone_gap) override;
|
|
const AudioTrackInterface* track() const override;
|
|
std::string tones() const override;
|
|
int duration() const override;
|
|
int inter_tone_gap() const override;
|
|
|
|
protected:
|
|
DtmfSender(AudioTrackInterface* track,
|
|
rtc::Thread* signaling_thread,
|
|
DtmfProviderInterface* provider);
|
|
virtual ~DtmfSender();
|
|
|
|
private:
|
|
DtmfSender();
|
|
|
|
// Implements MessageHandler.
|
|
virtual void OnMessage(rtc::Message* msg);
|
|
|
|
// The DTMF sending task.
|
|
void DoInsertDtmf();
|
|
|
|
void OnProviderDestroyed();
|
|
|
|
void StopSending();
|
|
|
|
rtc::scoped_refptr<AudioTrackInterface> track_;
|
|
DtmfSenderObserverInterface* observer_;
|
|
rtc::Thread* signaling_thread_;
|
|
DtmfProviderInterface* provider_;
|
|
std::string tones_;
|
|
int duration_;
|
|
int inter_tone_gap_;
|
|
|
|
RTC_DISALLOW_COPY_AND_ASSIGN(DtmfSender);
|
|
};
|
|
|
|
// Define proxy for DtmfSenderInterface.
|
|
BEGIN_SIGNALING_PROXY_MAP(DtmfSender)
|
|
PROXY_METHOD1(void, RegisterObserver, DtmfSenderObserverInterface*)
|
|
PROXY_METHOD0(void, UnregisterObserver)
|
|
PROXY_METHOD0(bool, CanInsertDtmf)
|
|
PROXY_METHOD3(bool, InsertDtmf, const std::string&, int, int)
|
|
PROXY_CONSTMETHOD0(const AudioTrackInterface*, track)
|
|
PROXY_CONSTMETHOD0(std::string, tones)
|
|
PROXY_CONSTMETHOD0(int, duration)
|
|
PROXY_CONSTMETHOD0(int, inter_tone_gap)
|
|
END_SIGNALING_PROXY()
|
|
|
|
// Get DTMF code from the DTMF event character.
|
|
bool GetDtmfCode(char tone, int* code);
|
|
|
|
} // namespace webrtc
|
|
|
|
#endif // WEBRTC_API_DTMFSENDER_H_
|