diff options
author | Benny Prijono <bennylp@teluu.com> | 2014-03-14 04:09:50 +0000 |
---|---|---|
committer | Benny Prijono <bennylp@teluu.com> | 2014-03-14 04:09:50 +0000 |
commit | 1e47fd78f11dab4b2f6cffa766417f111434f734 (patch) | |
tree | 016d93a205659ea85c7d315412307e580911668e /pjsip/src/pjsua2 | |
parent | 9ff22c2ff305ee03b10d1d611eab060e5097cbe5 (diff) |
Closed #1748: enhancements to WAV player API
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@4793 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjsip/src/pjsua2')
-rw-r--r-- | pjsip/src/pjsua2/media.cpp | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/pjsip/src/pjsua2/media.cpp b/pjsip/src/pjsua2/media.cpp index a5676399..a6255ec2 100644 --- a/pjsip/src/pjsua2/media.cpp +++ b/pjsip/src/pjsua2/media.cpp @@ -262,6 +262,21 @@ void AudioMediaPlayer::createPlayer(const string &file_name, options, &playerId) ); + /* Register EOF callback */ + pjmedia_port *port; + pj_status_t status; + + status = pjsua_player_get_port(playerId, &port); + if (status != PJ_SUCCESS) { + pjsua_player_destroy(playerId); + PJSUA2_RAISE_ERROR2(status, "AudioMediaPlayer::createPlayer()"); + } + status = pjmedia_wav_player_set_eof_cb(port, this, &eof_cb); + if (status != PJ_SUCCESS) { + pjsua_player_destroy(playerId); + PJSUA2_RAISE_ERROR2(status, "AudioMediaPlayer::createPlayer()"); + } + /* Get media port id. */ id = pjsua_player_get_conf_port(playerId); @@ -280,6 +295,7 @@ void AudioMediaPlayer::createPlaylist(const StringVector &file_names, pj_str_t pj_files[MAX_FILE_NAMES]; unsigned i, count = 0; pj_str_t pj_lbl = str2Pj(label); + pj_status_t status; count = PJ_ARRAY_SIZE(pj_files); @@ -296,12 +312,50 @@ void AudioMediaPlayer::createPlaylist(const StringVector &file_names, options, &playerId) ); + /* Register EOF callback */ + pjmedia_port *port; + status = pjsua_player_get_port(playerId, &port); + if (status != PJ_SUCCESS) { + pjsua_player_destroy(playerId); + PJSUA2_RAISE_ERROR2(status, "AudioMediaPlayer::createPlaylist()"); + } + status = pjmedia_wav_playlist_set_eof_cb(port, this, &eof_cb); + if (status != PJ_SUCCESS) { + pjsua_player_destroy(playerId); + PJSUA2_RAISE_ERROR2(status, "AudioMediaPlayer::createPlaylist()"); + } + /* Get media port id. */ id = pjsua_player_get_conf_port(playerId); registerMediaPort(NULL); } +AudioMediaPlayerInfo AudioMediaPlayer::getInfo() const throw(Error) +{ + AudioMediaPlayerInfo info; + pjmedia_wav_player_info pj_info; + + PJSUA2_CHECK_EXPR( pjsua_player_get_info(playerId, &pj_info) ); + + pj_bzero(&info, sizeof(info)); + info.formatId = pj_info.fmt_id; + info.payloadBitsPerSample = pj_info.payload_bits_per_sample; + info.sizeBytes = pj_info.size_bytes; + info.sizeSamples = pj_info.size_samples; + + return info; +} + +pj_uint32_t AudioMediaPlayer::getPos() const throw(Error) +{ + pj_ssize_t pos = pjsua_player_get_pos(playerId); + if (pos < 0) { + PJSUA2_RAISE_ERROR2(-pos, "AudioMediaPlayer::getPos()"); + } + return (pj_uint32_t)pos; +} + void AudioMediaPlayer::setPos(pj_uint32_t samples) throw(Error) { PJSUA2_CHECK_EXPR( pjsua_player_set_pos(playerId, samples) ); @@ -313,6 +367,13 @@ AudioMediaPlayer* AudioMediaPlayer::typecastFromAudioMedia( return static_cast<AudioMediaPlayer*>(media); } +pj_status_t AudioMediaPlayer::eof_cb(pjmedia_port *port, + void *usr_data) +{ + AudioMediaPlayer *player = (AudioMediaPlayer*)usr_data; + return player->onEof() ? PJ_SUCCESS : PJ_EEOF; +} + /////////////////////////////////////////////////////////////////////////////// AudioMediaRecorder::AudioMediaRecorder() : recorderId(PJSUA_INVALID_ID) |