return MM_ERROR_NONE;
}
+static void _update_taken_info(focus_command_e command, const _mm_sound_mgr_focus_param_t *assaulter_param, focus_node_t *victim_node, bool reacquisition_changed)
+{
+ int taken_pid = 0;
+ int taken_hid = 0;
+ int flag_for_taken_index = 0;
+ int i = 0;
+
+ /* update victim node */
+ if (command == FOCUS_COMMAND_RELEASE) {
+ taken_pid = assaulter_param->pid;
+ taken_hid = assaulter_param->handle_id;
+ flag_for_taken_index = assaulter_param->request_type & victim_node->status;
+ } else {
+ taken_pid = 0;
+ taken_hid = 0;
+ flag_for_taken_index = assaulter_param->request_type;
+ }
+
+ for (i = 0; i < NUM_OF_STREAM_IO_TYPE; i++) {
+ if (reacquisition_changed) {
+ /* Update taken-info including other nodes here.
+ * If the victim node's re-acquisition value is set to false,
+ * propagates its taken-info to its victim node. */
+ debug_msg("[---------- handling reacquisition change in callback ----------] ");
+ if (!victim_node->reacquisition) {
+ GList *list = NULL;
+ focus_node_t *node = NULL;
+ for (list = g_focus_node_list; list != NULL; list = list->next) {
+ SET_NODE_FROM_LIST_DATA(node, list);
+ if (node->taken_by_id[i].pid == victim_node->pid &&
+ node->taken_by_id[i].handle_id == victim_node->handle_id) {
+ UPDATE_FOCUS_TAKEN_INFO(backup, node, node->taken_by_id[i].pid, node->taken_by_id[i].handle_id);
+ UPDATE_FOCUS_TAKEN_INFO(by_id, node, taken_pid, taken_hid);
+ } else if (!list->next) {
+ if (flag_for_taken_index & (i + 1))
+ UPDATE_FOCUS_TAKEN_INFO(backup, victim_node, taken_pid, taken_hid);
+ else
+ UPDATE_FOCUS_TAKEN_INFO(backup, victim_node, victim_node->taken_by_id[i].pid, victim_node->taken_by_id[i].handle_id);
+
+ UPDATE_FOCUS_TAKEN_INFO(by_id, victim_node, 0, 0);
+ }
+ }
+ continue;
+ }
+ if (flag_for_taken_index & (i + 1)) {
+ UPDATE_FOCUS_TAKEN_INFO(by_id, victim_node, taken_pid, taken_hid);
+ UPDATE_FOCUS_TAKEN_INFO(backup, victim_node, 0, 0);
+ }
+ continue;
+ }
+
+ if (flag_for_taken_index & (i + 1)) {
+ if (command == FOCUS_COMMAND_ACQUIRE &&
+ ((victim_node->taken_by_id[i].pid != assaulter_param->pid) ||
+ (victim_node->taken_by_id[i].handle_id != assaulter_param->handle_id)))
+ continue;
+
+ if (victim_node->reacquisition)
+ UPDATE_FOCUS_TAKEN_INFO(by_id, victim_node, taken_pid, taken_hid);
+ else
+ UPDATE_FOCUS_TAKEN_INFO(backup, victim_node, taken_pid, taken_hid);
+ }
+ }
+}
+
int _mm_sound_mgr_focus_do_callback(focus_command_e command, focus_node_t *victim_node, const _mm_sound_mgr_focus_param_t *assaulter_param)
{
int res = MM_ERROR_NONE;
int pret = 0;
int i = 0;
int flag_for_focus_type = 0;
- int flag_for_taken_index = 0;
- int taken_pid = 0;
- int taken_hid = 0;
int ret_handle = -1;
bool reacquisition_changed = false;
endtime = time.tv_sec * 1000000 + time.tv_usec;
debug_msg("[RETCB] CALLBACK returned (cbtimelab=%d(ms), client pid=%d, returned handle=%d)", ((endtime-starttime)/1000), cb_data.pid, ret_handle);
- /* update victim node */
- if (command == FOCUS_COMMAND_RELEASE) {
- taken_pid = assaulter_param->pid;
- taken_hid = assaulter_param->handle_id;
- flag_for_taken_index = assaulter_param->request_type & victim_node->status;
- } else {
- taken_pid = 0;
- taken_hid = 0;
- flag_for_taken_index = assaulter_param->request_type;
- }
-
- for (i = 0; i < NUM_OF_STREAM_IO_TYPE; i++) {
- if (reacquisition_changed) {
- /* Update taken-info including other nodes here.
- * If the victim node's re-acquisition value is set to false,
- * propagates its taken-info to its victim node. */
- debug_msg("[---------- handling reacquisition change in callback ----------->] ");
- if (!victim_node->reacquisition) {
- GList *list = NULL;
- focus_node_t *node = NULL;
- for (list = g_focus_node_list; list != NULL; list = list->next) {
- SET_NODE_FROM_LIST_DATA(node, list);
- if (node->taken_by_id[i].pid == victim_node->pid &&
- node->taken_by_id[i].handle_id == victim_node->handle_id) {
- UPDATE_FOCUS_TAKEN_INFO(backup, node, node->taken_by_id[i].pid, node->taken_by_id[i].handle_id);
- UPDATE_FOCUS_TAKEN_INFO(by_id, node, taken_pid, taken_hid);
- } else if (!list->next) {
- if (flag_for_taken_index & (i+1))
- UPDATE_FOCUS_TAKEN_INFO(backup, victim_node, taken_pid, taken_hid);
- else
- UPDATE_FOCUS_TAKEN_INFO(backup, victim_node, victim_node->taken_by_id[i].pid, victim_node->taken_by_id[i].handle_id);
-
- UPDATE_FOCUS_TAKEN_INFO(by_id, victim_node, 0, 0);
- }
- }
- } else {
- if (flag_for_taken_index & (i+1)) {
- UPDATE_FOCUS_TAKEN_INFO(by_id, victim_node, taken_pid, taken_hid);
- UPDATE_FOCUS_TAKEN_INFO(backup, victim_node, 0, 0);
- }
- }
- debug_msg("[<----------------------------------------------------------------] ");
- } else if (flag_for_taken_index & (i+1)) {
- if (command == FOCUS_COMMAND_ACQUIRE &&
- ((victim_node->taken_by_id[i].pid != assaulter_param->pid) ||
- (victim_node->taken_by_id[i].handle_id != assaulter_param->handle_id)))
- continue;
-
- if (victim_node->reacquisition)
- UPDATE_FOCUS_TAKEN_INFO(by_id, victim_node, taken_pid, taken_hid);
- else
- UPDATE_FOCUS_TAKEN_INFO(backup, victim_node, taken_pid, taken_hid);
- }
- }
+ _update_taken_info(command, assaulter_param, victim_node, reacquisition_changed);
if (command == FOCUS_COMMAND_RELEASE)
victim_node->status = victim_node->status & ~(cb_data.type);