Modified stream stop API to inculde deallocation of allocated resources.
Isolated the isolator callback thread with stream (stream destory function is called only at source callback function).
[Version] 0.0.14
[Issue Type] Bug fix and Enhancement
Change-Id: If3b116694748fc76333479dbeb9795032a0be2ae
Signed-off-by: aravind.gara <aravind.gara@samsung.com>
};
typedef struct stream_cb_manager_event_data_s {
- sound_stream_t *stream;
+ unsigned stream_id;
+ sound_pool_stream_state_changed_cb callback;
+ void *user_data;
sound_pool_stream_state_e state;
sound_pool_stream_state_e state_previous;
} stream_cb_manager_event_data_t;
Name: capi-media-sound-pool
-Version: 0.0.13
+Version: 0.0.14
Summary: Tizen Sound Pool module
Release: 0
Group: Multimedia/Framework
SP_DEBUG_FENTER();
SP_INST_CHECK(mgr, SOUND_POOL_ERROR_INVALID_PARAMETER);
SP_INST_CHECK(stream, SOUND_POOL_ERROR_INVALID_PARAMETER);
-
GList* to_delete;
+
to_delete = g_list_find(mgr->priority_queue, (gpointer)stream);
SP_RETVM_IF(NULL == to_delete, SOUND_POOL_ERROR_INVALID_PARAMETER,
"Can't find to deleting link to stream [id:%d] from priority queue.",
stream->id);
-
mgr->priority_queue = g_list_delete_link(mgr->priority_queue, to_delete);
_sound_stream_priority_update_playback(mgr);
while (g_hash_table_iter_next(&iter, &key, &value)) {
guint size_before = g_hash_table_size(pool->streams);
sound_stream_t *stream = (sound_stream_t*)value;
- if (src == stream->parent_source) {
- if (stream->state == SOUND_POOL_STREAM_STATE_STOPPED || stream->state == SOUND_POOL_STREAM_STATE_FINISHED) {
- SP_DEBUG("Callback isolator thread destroying the stream");
- } else {
- if (stream->state == SOUND_POOL_STREAM_STATE_SUSPENDED
- || stream->state == SOUND_POOL_STREAM_STATE_PLAYING
- || stream->state == SOUND_POOL_STREAM_STATE_PAUSED)
- SP_DEBUG("Callback isolator thread destroys the stream");
- _sound_stream_stop(stream);
- }
- }
+ if (src == stream->parent_source)
+ _sound_stream_stop(stream);
guint size_after = g_hash_table_size(pool->streams);
if (size_before != size_after)
g_hash_table_iter_init(&iter, pool->streams);
SP_RETM_IF(_stream_cb_manager_register_event(pool->cbmgr, stream) !=
SOUND_POOL_ERROR_NONE, "State changing event wasn't registered."
"Callbacks will be not called");
+ if (stream->state == SOUND_POOL_STREAM_STATE_FINISHED
+ || stream->state == SOUND_POOL_STREAM_STATE_STOPPED)
+ _sound_stream_destroy(stream);
SP_DEBUG_FLEAVE();
}
g_async_queue_try_pop(cbmgr->isolator_callback_queue))) {
sound_pool_t* _pool = cbmgr->pool;
- if (NULL != event_data->stream->state_cb_info.callback) {
- event_data->stream->state_cb_info.callback(_pool,
- event_data->stream->id, event_data->state_previous,
+ if (NULL != event_data->callback) {
+ event_data->callback(_pool,
+ event_data->stream_id, event_data->state_previous,
event_data->state,
- event_data->stream->state_cb_info.user_data);
+ event_data->user_data);
}
- /* If SoundPool final state is FINISHED or STOPPED, then release item */
- if (event_data->state == SOUND_POOL_STREAM_STATE_FINISHED ||
- event_data->state == SOUND_POOL_STREAM_STATE_STOPPED)
- _sound_stream_destroy(event_data->stream);
SP_SAFE_GFREE(event_data);
}
/* Signal indicating isolator callback thread completed the events */
SP_RETVM_IF(!(event_data = g_try_malloc0(sizeof(stream_cb_manager_event_data_t))),
SOUND_POOL_ERROR_OUT_OF_MEMORY,
"Memory alloc failure. Can't create stream callback event data structure.");
- event_data->stream = stream;
+ event_data->stream_id = stream->id;
+ event_data->callback = stream->state_cb_info.callback;
+ event_data->user_data = stream->state_cb_info.user_data;
event_data->state = stream->state;
event_data->state_previous = stream->state_previous;