RTCDTMFSender.h (2263B)
1 /* This Source Code Form is subject to the terms of the Mozilla Public 2 * License, v. 2.0. If a copy of the MPL was not distributed with this file, 3 * You can obtain one at http://mozilla.org/MPL/2.0/. */ 4 5 #ifndef _RTCDTMFSender_h_ 6 #define _RTCDTMFSender_h_ 7 8 #include "MediaEventSource.h" 9 #include "js/RootingAPI.h" 10 #include "mozilla/DOMEventTargetHelper.h" 11 #include "mozilla/RefPtr.h" 12 #include "nsITimer.h" 13 14 class nsPIDOMWindowInner; 15 class nsITimer; 16 17 namespace mozilla { 18 class AudioSessionConduit; 19 20 struct DtmfEvent { 21 DtmfEvent(int aPayloadType, int aPayloadFrequency, int aEventCode, 22 int aLengthMs) 23 : mPayloadType(aPayloadType), 24 mPayloadFrequency(aPayloadFrequency), 25 mEventCode(aEventCode), 26 mLengthMs(aLengthMs) {} 27 const int mPayloadType; 28 const int mPayloadFrequency; 29 const int mEventCode; 30 const int mLengthMs; 31 }; 32 33 namespace dom { 34 class RTCRtpTransceiver; 35 36 class RTCDTMFSender : public DOMEventTargetHelper, 37 public nsITimerCallback, 38 public nsINamed { 39 public: 40 RTCDTMFSender(nsPIDOMWindowInner* aWindow, RTCRtpTransceiver* aTransceiver); 41 42 // nsISupports 43 NS_DECL_NSITIMERCALLBACK 44 NS_DECL_NSINAMED 45 NS_DECL_ISUPPORTS_INHERITED 46 NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(RTCDTMFSender, DOMEventTargetHelper) 47 48 // webidl 49 JSObject* WrapObject(JSContext* aCx, 50 JS::Handle<JSObject*> aGivenProto) override; 51 void SetPayloadType(int32_t aPayloadType, int32_t aPayloadFrequency); 52 bool CanInsertDTMF() const; 53 void InsertDTMF(const nsAString& aTones, uint32_t aDuration, 54 uint32_t aInterToneGap, ErrorResult& aRv); 55 void GetToneBuffer(nsAString& aOutToneBuffer); 56 IMPL_EVENT_HANDLER(tonechange) 57 58 void StopPlayout(); 59 60 MediaEventSource<DtmfEvent>& OnDtmfEvent() { return mDtmfEvent; } 61 62 private: 63 virtual ~RTCDTMFSender() = default; 64 65 void StartPlayout(uint32_t aDelay); 66 67 RefPtr<RTCRtpTransceiver> mTransceiver; 68 MediaEventProducer<DtmfEvent> mDtmfEvent; 69 Maybe<int32_t> mPayloadType; 70 Maybe<int32_t> mPayloadFrequency; 71 nsString mToneBuffer; 72 uint32_t mDuration = 0; 73 uint32_t mInterToneGap = 0; 74 nsCOMPtr<nsITimer> mSendTimer; 75 }; 76 77 } // namespace dom 78 } // namespace mozilla 79 #endif // _RTCDTMFSender_h_