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/pjsua-lib | |
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/pjsua-lib')
-rw-r--r-- | pjsip/src/pjsua-lib/pjsua_aud.c | 59 |
1 files changed, 54 insertions, 5 deletions
diff --git a/pjsip/src/pjsua-lib/pjsua_aud.c b/pjsip/src/pjsua-lib/pjsua_aud.c index 0f5172e9..f4f93a09 100644 --- a/pjsip/src/pjsua-lib/pjsua_aud.c +++ b/pjsip/src/pjsua-lib/pjsua_aud.c @@ -1192,7 +1192,7 @@ on_error: */ PJ_DEF(pjsua_conf_port_id) pjsua_player_get_conf_port(pjsua_player_id id) { - PJ_ASSERT_RETURN(id>=0&&id<(int)PJ_ARRAY_SIZE(pjsua_var.player), PJ_EINVAL); + PJ_ASSERT_RETURN(id>=0&&id<(int)PJ_ARRAY_SIZE(pjsua_var.player),PJ_EINVAL); PJ_ASSERT_RETURN(pjsua_var.player[id].port != NULL, PJ_EINVAL); return pjsua_var.player[id].slot; @@ -1204,7 +1204,7 @@ PJ_DEF(pjsua_conf_port_id) pjsua_player_get_conf_port(pjsua_player_id id) PJ_DEF(pj_status_t) pjsua_player_get_port( pjsua_player_id id, pjmedia_port **p_port) { - PJ_ASSERT_RETURN(id>=0&&id<(int)PJ_ARRAY_SIZE(pjsua_var.player), PJ_EINVAL); + PJ_ASSERT_RETURN(id>=0&&id<(int)PJ_ARRAY_SIZE(pjsua_var.player),PJ_EINVAL); PJ_ASSERT_RETURN(pjsua_var.player[id].port != NULL, PJ_EINVAL); PJ_ASSERT_RETURN(p_port != NULL, PJ_EINVAL); @@ -1214,16 +1214,65 @@ PJ_DEF(pj_status_t) pjsua_player_get_port( pjsua_player_id id, } /* + * Get player info. + */ +PJ_DEF(pj_status_t) pjsua_player_get_info(pjsua_player_id id, + pjmedia_wav_player_info *info) +{ + PJ_ASSERT_RETURN(id>=0&&id<(int)PJ_ARRAY_SIZE(pjsua_var.player), + -PJ_EINVAL); + PJ_ASSERT_RETURN(pjsua_var.player[id].port != NULL, PJ_EINVAL); + PJ_ASSERT_RETURN(pjsua_var.player[id].type == 0, PJ_EINVAL); + + return pjmedia_wav_player_get_info(pjsua_var.player[id].port, info); +} + +/* + * Get playback position. + */ +PJ_DEF(pj_ssize_t) pjsua_player_get_pos( pjsua_player_id id ) +{ + pj_ssize_t pos_bytes; + pjmedia_wav_player_info info; + pj_status_t status; + + PJ_ASSERT_RETURN(id>=0&&id<(int)PJ_ARRAY_SIZE(pjsua_var.player), + -PJ_EINVAL); + PJ_ASSERT_RETURN(pjsua_var.player[id].port != NULL, -PJ_EINVAL); + PJ_ASSERT_RETURN(pjsua_var.player[id].type == 0, -PJ_EINVAL); + + pos_bytes = pjmedia_wav_player_port_get_pos(pjsua_var.player[id].port); + if (pos_bytes < 0) + return pos_bytes; + + status = pjmedia_wav_player_get_info(pjsua_var.player[id].port, &info); + if (status != PJ_SUCCESS) + return -status; + + return pos_bytes / (info.payload_bits_per_sample / 8); +} + +/* * Set playback position. */ PJ_DEF(pj_status_t) pjsua_player_set_pos( pjsua_player_id id, pj_uint32_t samples) { - PJ_ASSERT_RETURN(id>=0&&id<(int)PJ_ARRAY_SIZE(pjsua_var.player), PJ_EINVAL); + pjmedia_wav_player_info info; + pj_uint32_t pos_bytes; + pj_status_t status; + + PJ_ASSERT_RETURN(id>=0&&id<(int)PJ_ARRAY_SIZE(pjsua_var.player),PJ_EINVAL); PJ_ASSERT_RETURN(pjsua_var.player[id].port != NULL, PJ_EINVAL); PJ_ASSERT_RETURN(pjsua_var.player[id].type == 0, PJ_EINVAL); - return pjmedia_wav_player_port_set_pos(pjsua_var.player[id].port, samples); + status = pjmedia_wav_player_get_info(pjsua_var.player[id].port, &info); + if (status != PJ_SUCCESS) + return status; + + pos_bytes = samples * (info.payload_bits_per_sample / 8); + return pjmedia_wav_player_port_set_pos(pjsua_var.player[id].port, + pos_bytes); } @@ -1233,7 +1282,7 @@ PJ_DEF(pj_status_t) pjsua_player_set_pos( pjsua_player_id id, */ PJ_DEF(pj_status_t) pjsua_player_destroy(pjsua_player_id id) { - PJ_ASSERT_RETURN(id>=0&&id<(int)PJ_ARRAY_SIZE(pjsua_var.player), PJ_EINVAL); + PJ_ASSERT_RETURN(id>=0&&id<(int)PJ_ARRAY_SIZE(pjsua_var.player),PJ_EINVAL); PJ_ASSERT_RETURN(pjsua_var.player[id].port != NULL, PJ_EINVAL); PJ_LOG(4,(THIS_FILE, "Destroying player %d..", id)); |