From 3e843f59eb7575a5762dadd8d452d88b975dea06 Mon Sep 17 00:00:00 2001 From: Michael Jerris Date: Mon, 23 Nov 2009 16:02:06 +0000 Subject: [PATCH] Update to unimrcp 1297, remove API change commit b3466f12a82fcfe9261d6af57fb8ad74d5140bc0 Author: achaloyan Date: Sun Nov 22 19:30:30 2009 +0000 Provided the same functionality to change scheduler rate (if needed) without modifying existing API (ensured backward compatibility) git-svn-id: https://unimrcp.googlecode.com/svn/trunk@1297 f001bc3a-424a-0410-80a0-a715b8f413a8 git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@15615 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- libs/unimrcp/.update | 2 +- libs/unimrcp/libs/mpf/include/mpf_engine.h | 10 ++++-- libs/unimrcp/libs/mpf/include/mpf_scheduler.h | 7 ++++- libs/unimrcp/libs/mpf/src/mpf_engine.c | 9 ++++-- libs/unimrcp/libs/mpf/src/mpf_scheduler.c | 31 ++++++++++++------- .../libunimrcp-client/src/unimrcp_client.c | 3 +- .../libunimrcp-server/src/unimrcp_server.c | 3 +- libs/unimrcp/tests/mpftest/src/mpf_suite.c | 2 +- 8 files changed, 47 insertions(+), 20 deletions(-) diff --git a/libs/unimrcp/.update b/libs/unimrcp/.update index 1f21897168..a1c014671d 100644 --- a/libs/unimrcp/.update +++ b/libs/unimrcp/.update @@ -1 +1 @@ -Fri Nov 20 16:02:03 CST 2009 +Mon Nov 23 10:00:46 CST 2009 diff --git a/libs/unimrcp/libs/mpf/include/mpf_engine.h b/libs/unimrcp/libs/mpf/include/mpf_engine.h index e784d07d6c..149de69ce4 100644 --- a/libs/unimrcp/libs/mpf/include/mpf_engine.h +++ b/libs/unimrcp/libs/mpf/include/mpf_engine.h @@ -32,10 +32,9 @@ typedef apt_task_msg_t mpf_task_msg_t; /** * Create MPF engine. - * @param rate the rate (n times faster than real-time) * @param pool the pool to allocate memory from */ -MPF_DECLARE(mpf_engine_t*) mpf_engine_create(unsigned long rate, apr_pool_t *pool); +MPF_DECLARE(mpf_engine_t*) mpf_engine_create(apr_pool_t *pool); /** * Create MPF codec manager. @@ -142,6 +141,13 @@ MPF_DECLARE(apt_bool_t) mpf_engine_topology_message_add( */ MPF_DECLARE(apt_bool_t) mpf_engine_message_send(mpf_engine_t *engine, mpf_task_msg_t **task_msg); +/** + * Set scheduler rate. + * @param engine the engine to set rate for + * @param rate the rate (n times faster than real-time) + */ +MPF_DECLARE(apt_bool_t) mpf_engine_scheduler_rate_set(mpf_engine_t *engine, unsigned long rate); + APT_END_EXTERN_C diff --git a/libs/unimrcp/libs/mpf/include/mpf_scheduler.h b/libs/unimrcp/libs/mpf/include/mpf_scheduler.h index 87122661f9..6617511fe7 100644 --- a/libs/unimrcp/libs/mpf/include/mpf_scheduler.h +++ b/libs/unimrcp/libs/mpf/include/mpf_scheduler.h @@ -30,7 +30,7 @@ APT_BEGIN_EXTERN_C typedef void (*mpf_scheduler_proc_f)(mpf_scheduler_t *scheduler, void *obj); /** Create scheduler */ -MPF_DECLARE(mpf_scheduler_t*) mpf_scheduler_create(unsigned long rate, apr_pool_t *pool); +MPF_DECLARE(mpf_scheduler_t*) mpf_scheduler_create(apr_pool_t *pool); /** Destroy scheduler */ MPF_DECLARE(void) mpf_scheduler_destroy(mpf_scheduler_t *scheduler); @@ -49,6 +49,11 @@ MPF_DECLARE(apt_bool_t) mpf_scheduler_timer_clock_set( mpf_scheduler_proc_f proc, void *obj); +/** Set scheduler rate (n times faster than real-time) */ +MPF_DECLARE(apt_bool_t) mpf_scheduler_rate_set( + mpf_scheduler_t *scheduler, + unsigned long rate); + /** Start scheduler */ MPF_DECLARE(apt_bool_t) mpf_scheduler_start(mpf_scheduler_t *scheduler); diff --git a/libs/unimrcp/libs/mpf/src/mpf_engine.c b/libs/unimrcp/libs/mpf/src/mpf_engine.c index ad78904d5b..087b248884 100644 --- a/libs/unimrcp/libs/mpf/src/mpf_engine.c +++ b/libs/unimrcp/libs/mpf/src/mpf_engine.c @@ -52,7 +52,7 @@ mpf_codec_t* mpf_codec_l16_create(apr_pool_t *pool); mpf_codec_t* mpf_codec_g711u_create(apr_pool_t *pool); mpf_codec_t* mpf_codec_g711a_create(apr_pool_t *pool); -MPF_DECLARE(mpf_engine_t*) mpf_engine_create(unsigned long rate, apr_pool_t *pool) +MPF_DECLARE(mpf_engine_t*) mpf_engine_create(apr_pool_t *pool) { apt_task_vtable_t *vtable; apt_task_msg_pool_t *msg_pool; @@ -87,7 +87,7 @@ MPF_DECLARE(mpf_engine_t*) mpf_engine_create(unsigned long rate, apr_pool_t *poo engine->request_queue = apt_cyclic_queue_create(CYCLIC_QUEUE_DEFAULT_SIZE); apr_thread_mutex_create(&engine->request_queue_guard,APR_THREAD_MUTEX_UNNESTED,engine->pool); - engine->scheduler = mpf_scheduler_create(rate,engine->pool); + engine->scheduler = mpf_scheduler_create(engine->pool); mpf_scheduler_media_clock_set(engine->scheduler,CODEC_FRAME_TIME_BASE,mpf_engine_main,engine); engine->timer_manager = mpf_timer_manager_create(engine->scheduler,engine->pool); @@ -426,3 +426,8 @@ MPF_DECLARE(apt_bool_t) mpf_engine_codec_manager_register(mpf_engine_t *engine, engine->codec_manager = codec_manager; return TRUE; } + +MPF_DECLARE(apt_bool_t) mpf_engine_scheduler_rate_set(mpf_engine_t *engine, unsigned long rate) +{ + return mpf_scheduler_rate_set(engine->scheduler,rate); +} diff --git a/libs/unimrcp/libs/mpf/src/mpf_scheduler.c b/libs/unimrcp/libs/mpf/src/mpf_scheduler.c index aefc5132ae..bccc8837e6 100644 --- a/libs/unimrcp/libs/mpf/src/mpf_scheduler.c +++ b/libs/unimrcp/libs/mpf/src/mpf_scheduler.c @@ -38,7 +38,6 @@ struct mpf_scheduler_t { apr_pool_t *pool; unsigned long resolution; /* scheduler resolution */ - unsigned long rate; /* faster than real-time simulation */ unsigned long media_resolution; mpf_scheduler_proc_f media_proc; @@ -60,19 +59,12 @@ struct mpf_scheduler_t { static APR_INLINE void mpf_scheduler_init(mpf_scheduler_t *scheduler); /** Create scheduler */ -MPF_DECLARE(mpf_scheduler_t*) mpf_scheduler_create(unsigned long rate, apr_pool_t *pool) +MPF_DECLARE(mpf_scheduler_t*) mpf_scheduler_create(apr_pool_t *pool) { mpf_scheduler_t *scheduler = apr_palloc(pool,sizeof(mpf_scheduler_t)); mpf_scheduler_init(scheduler); scheduler->pool = pool; scheduler->resolution = 0; - if(rate == 0 || rate > 10) { - /* rate shows how many times scheduler should be faster than real-time, - 1 is the defualt and probably the only reasonable value, - however, the rates up to 10 times faster should be acceptable */ - rate = 1; - } - scheduler->rate = rate; scheduler->media_resolution = 0; scheduler->media_obj = NULL; @@ -98,7 +90,7 @@ MPF_DECLARE(apt_bool_t) mpf_scheduler_media_clock_set( mpf_scheduler_proc_f proc, void *obj) { - scheduler->media_resolution = resolution / scheduler->rate; + scheduler->media_resolution = resolution; scheduler->media_proc = proc; scheduler->media_obj = obj; return TRUE; @@ -111,13 +103,30 @@ MPF_DECLARE(apt_bool_t) mpf_scheduler_timer_clock_set( mpf_scheduler_proc_f proc, void *obj) { - scheduler->timer_resolution = resolution / scheduler->rate; + scheduler->timer_resolution = resolution; scheduler->timer_elapsed_time = 0; scheduler->timer_proc = proc; scheduler->timer_obj = obj; return TRUE; } +/** Set scheduler rate (n times faster than real-time) */ +MPF_DECLARE(apt_bool_t) mpf_scheduler_rate_set( + mpf_scheduler_t *scheduler, + unsigned long rate) +{ + if(rate == 0 || rate > 10) { + /* rate shows how many times scheduler should be faster than real-time, + 1 is the defualt and probably the only reasonable value, + however, the rates up to 10 times faster should be acceptable */ + rate = 1; + } + + scheduler->media_resolution /= rate; + scheduler->timer_resolution /= rate; + return TRUE; +} + static APR_INLINE void mpf_scheduler_resolution_set(mpf_scheduler_t *scheduler) { if(scheduler->media_resolution) { diff --git a/libs/unimrcp/platforms/libunimrcp-client/src/unimrcp_client.c b/libs/unimrcp/platforms/libunimrcp-client/src/unimrcp_client.c index d159582886..f871e08320 100644 --- a/libs/unimrcp/platforms/libunimrcp-client/src/unimrcp_client.c +++ b/libs/unimrcp/platforms/libunimrcp-client/src/unimrcp_client.c @@ -462,8 +462,9 @@ static apt_bool_t unimrcp_client_media_engines_load(mrcp_client_t *client, const } } apt_log(APT_LOG_MARK,APT_PRIO_DEBUG,"Loading Media Engine"); - media_engine = mpf_engine_create(rate,pool); + media_engine = mpf_engine_create(pool); if(media_engine) { + mpf_engine_scheduler_rate_set(media_engine,rate); mrcp_client_media_engine_register(client,media_engine,name); } } diff --git a/libs/unimrcp/platforms/libunimrcp-server/src/unimrcp_server.c b/libs/unimrcp/platforms/libunimrcp-server/src/unimrcp_server.c index bf51ef16b0..7ddcad1bde 100644 --- a/libs/unimrcp/platforms/libunimrcp-server/src/unimrcp_server.c +++ b/libs/unimrcp/platforms/libunimrcp-server/src/unimrcp_server.c @@ -495,8 +495,9 @@ static apt_bool_t unimrcp_server_media_engines_load(mrcp_server_t *server, const } } apt_log(APT_LOG_MARK,APT_PRIO_DEBUG,"Loading Media Engine"); - media_engine = mpf_engine_create(rate,pool); + media_engine = mpf_engine_create(pool); if(media_engine) { + mpf_engine_scheduler_rate_set(media_engine,rate); mrcp_server_media_engine_register(server,media_engine,name); } } diff --git a/libs/unimrcp/tests/mpftest/src/mpf_suite.c b/libs/unimrcp/tests/mpftest/src/mpf_suite.c index 446c1ab577..36b468e40d 100644 --- a/libs/unimrcp/tests/mpftest/src/mpf_suite.c +++ b/libs/unimrcp/tests/mpftest/src/mpf_suite.c @@ -95,7 +95,7 @@ static apt_bool_t mpf_test_run(apt_test_suite_t *suite, int argc, const char * c suite_engine = apr_palloc(suite->pool,sizeof(mpf_suite_engine_t)); - engine = mpf_engine_create(1,suite->pool); + engine = mpf_engine_create(suite->pool); if(!engine) { apt_log(APT_LOG_MARK,APT_PRIO_WARNING,"Failed to Create MPF Engine"); return FALSE;