/* Copyright (C) 2005-2009 Michel de Boer This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ // Classes to generate RTP payloads for DTMF tones. #ifndef _DTMF_PLAYER_H #define _DTMF_PLAYER_H #include "twinkle_config.h" #include "audio_encoder.h" #include "freq_gen.h" #include "user.h" // Forward declarations class t_audio_rx; // Abstract class defintion for DTMF player class t_dtmf_player { protected: // Audio receiver owning the DTMF player. t_audio_rx *_audio_rx; t_user *_user_config; t_audio_encoder *_audio_encoder; // Settings for current DTMF tone bool _dtmf_pause; // indicates if playing is in the pause phase bool _dtmf_stop; // indicates if DTMF should be stopped t_dtmf_ev _dtmf_current; // Currently played DTMF tone uint32 _dtmf_timestamp; // RTP timestamp (start of tone) uint16 _dtmf_duration; // Duration of the tone currently played uint16 _nsamples; // number of samples taken per packet public: t_dtmf_player(t_audio_rx *audio_rx, t_audio_encoder *audio_encoder, t_user *user_config, t_dtmf_ev dtmf_tone, uint32 dtmf_timestamp, uint16 nsamples); virtual ~t_dtmf_player() {}; // Get payload for the DTMF tone // rtp_timestamp will be set with the timestamp value to be put in the // RTP header // Returns the payload size virtual uint16 get_payload(uint8 *payload, uint16 payload_size, uint32 timestamp, uint32 &rtp_timestamp) = 0; uint32 get_timestamp(void); // Returns true when last payload has been delivered. bool finished(void); }; // DTMF player for RFC 2833 RTP telephone events class t_rtp_event_dtmf_player : public t_dtmf_player { public: t_rtp_event_dtmf_player(t_audio_rx *audio_rx, t_audio_encoder *audio_encoder, t_user *user_config, t_dtmf_ev dtmf_tone, uint32 dtmf_timestamp, uint16 nsamples); virtual uint16 get_payload(uint8 *payload, uint16 payload_size, uint32 timestamp, uint32 &rtp_timestamp); }; // DTMF player for inband tones class t_inband_dtmf_player : public t_dtmf_player { private: // Frequency generator to generate the inband tones. t_freq_gen _freq_gen; public: t_inband_dtmf_player(t_audio_rx *audio_rx, t_audio_encoder *audio_encoder, t_user *user_config, t_dtmf_ev dtmf_tone, uint32 dtmf_timestamp, uint16 nsamples); virtual uint16 get_payload(uint8 *payload, uint16 payload_size, uint32 timestamp, uint32 &rtp_timestamp); }; #endif