📄 jma_audio_player.c
字号:
ASSERT(handle != NULL);
native_player = jma_audio_handle_to_nplayer(handle);
if (native_player != INVALID_NPLAYER_ID)
{
audio_player = &mma_audio_player[native_player];
kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_NPLAYER_STATE, native_player, audio_player->state);
mma_type = audio_player->player.media_type;
/* Ignore the out-of-date message */
if (audio_player->aud_id != aud_id ||
audio_player->sequence_id != seq_id)
{
kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_DD,
audio_player->aud_id, audio_player->sequence_id);
JMA_CS_LEAVE(JMA_VOID);
}
if(event == MED_RES_END_OF_FILE) /* 5 */
{
if (audio_player->device_type == JAVA_MEDIA_TONE_DEVICE)
{
media_mma_aud_close(MOD_J2ME, audio_player->handle, mma_type);
jma_deregister_device(JAVA_MEDIA_TONE_DEVICE, audio_player->id);
audio_player->state = JAVA_MEDIA_STATE_NULL;
audio_player->id = INVALID_JPLAYER_ID;
audio_player->handle = NULL;
audio_player->device_type = JAVA_MEDIA_INVALID_DEVICE;
audio_player->stoptime = -1;
/* Clear Callback function */
jma_audio_player_clear_callback();
JMA_CS_LEAVE(JMA_VOID);
}
jma_audio_eom_handler(mma_type, audio_player);
JMA_CS_LEAVE(JMA_VOID);
}
else if (event == MED_RES_BUFFER_INSUFFICIENT) /* 17 */
{
ASSERT(audio_player->player.progressive_dl == KAL_TRUE);
/* Reset current cache size */
audio_player->current_cache_size = 0;
JMA_CS_LEAVE(JMA_VOID);
}
else /* error case: MED_RES_ERROR: 9 or other */
{
/* Data player or File name player */
if (audio_player->player.data != NULL)
{
jma_audio_player_close(mma_type, audio_player->id);
}
else
{
/* Close cache file and clear cache_handle value */
if (audio_player->cache_handle != NULL)
{
result = FS_Close(audio_player->cache_handle);
audio_player->cache_handle = NULL;
}
jma_audio_player_close(mma_type, audio_player->id);
}
JMA_CS_LEAVE(JMA_VOID);
}
}
else
{
midi_player = jma_midi_locate_handle(handle);
if (midi_player == NULL)
{
kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_MARKER_FAIL);
JMA_CS_LEAVE(JMA_VOID);
}
/* Ignore the out-of-date message */
if (midi_player->aud_id != aud_id || midi_player->sequence_id != seq_id)
{
kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_DD, midi_player->aud_id, midi_player->sequence_id);
JMA_CS_LEAVE(JMA_VOID);
}
if(event == MED_RES_END_OF_FILE) /* 5 */
{
jma_audio_eom_handler(MMA_TYPE_MIDI, midi_player);
}
else /* error case: MED_RES_ERROR: 9 or other */
{
if (((mma_player_node*) midi_player)->med_device_status == JAVA_MED_DEVICE_NONACTIVE)
{
/* Already be replaced. */
sprintf(_kvmLogStr, "received replaced eom handle %d", (int)handle);
Kputs(_kvmLogStr);
JMA_CS_LEAVE(JMA_VOID);
}
jma_audio_player_close(MMA_TYPE_MIDI, midi_player->id);
JMA_CS_LEAVE(JMA_VOID);
}
}
JMA_CS_LEAVE(JMA_VOID);
}
/*****************************************************************************
* FUNCTION
* midi_handle_key
* DESCRIPTION
* This function is for midi.
* PARAMETERS
* player [?]
* handle [IN]
* RETURNS
* kal_int32 return_value
*****************************************************************************/
static kal_int32 midi_handle_key(mma_player_node *player, kal_int32 handle)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
if (handle && ((audio_player_struct*) player)->handle == handle)
{
return (0);
}
else
{
return (-1);
}
}
/*****************************************************************************
* FUNCTION
* midi_jplayer_key
* DESCRIPTION
* This function is for midi.
* PARAMETERS
* player [?]
* jplayer [IN]
* RETURNS
* kal_int32 return_value
*****************************************************************************/
static kal_int32 midi_jplayer_key(mma_player_node *player, kal_int32 jplayer)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
if (((audio_player_struct*) player)->id == jplayer)
{
return (0);
}
else
{
return (-1);
}
}
/*****************************************************************************
* FUNCTION
* midi_player_insert_func
* DESCRIPTION
* This function is for midi.
* PARAMETERS
* player_list [?]
* node [?]
* RETURNS
* void
*****************************************************************************/
static void midi_player_insert_func(mma_player_list *player_list, mma_player_node *node)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
mma_player_node *cur_node = player_list->head;
mma_player_node *prev_node = cur_node;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
/* Already on list */
if (node->flag_on_list)
{
return;
}
node->next = node->prev = NULL;
node->flag_on_list = KAL_TRUE;
if (cur_node == NULL)
{
/* empty list case */
player_list->head = node;
player_list->player_count++;
return;
}
while (cur_node)
{
/* Skip non ready player */
if (((audio_player_struct*) cur_node)->state == JAVA_MEDIA_STATE_READY)
{
break;
}
prev_node = cur_node;
cur_node = cur_node->next;
}
if (cur_node == prev_node)
{
/* insert head's next, or it will select fixed one */
node->next = cur_node;
cur_node->prev = node;
player_list->head = node;
}
else
{
/* insert after prev */
prev_node->next = node;
node->prev = prev_node;
node->next = cur_node;
if (cur_node)
{
cur_node->prev = node;
}
}
player_list->player_count++;
}
/*****************************************************************************
* FUNCTION
* midi_player_inserthead_func
* DESCRIPTION
* This function is for midi.
* PARAMETERS
* player_list [?]
* node [?]
* RETURNS
* void
*****************************************************************************/
static void midi_player_inserthead_func(mma_player_list *player_list, mma_player_node *node)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
mma_player_node *cur_node = player_list->head;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
/* Already on list */
if (node->flag_on_list)
{
return;
}
node->next = node->prev = NULL;
node->flag_on_list = KAL_TRUE;
if (cur_node == NULL)
{
/* empty list case */
player_list->head = node;
player_list->player_count++;
return;
}
node->next = cur_node;
cur_node->prev = node;
player_list->head = node;
player_list->player_count++;
}
/*****************************************************************************
* FUNCTION
* dynamic_player_insert
* DESCRIPTION
* This function is for midi.
* PARAMETERS
* player_list [?]
* node [?]
* insert_func [IN]
* RETURNS
* void
*****************************************************************************/
/* In future, it should be moved to mmalib.c to support other media type */
static void dynamic_player_insert(mma_player_list *player_list, mma_player_node *node, mma_player_insert insert_func)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
DYNPLAYER_CS_ENTER();
(*insert_func) (player_list, node);
DYNPLAYER_CS_LEAVE();
}
/*****************************************************************************
* FUNCTION
* dynamic_player_delete
* DESCRIPTION
* This function is for midi.
* PARAMETERS
* player_list [?]
* node [?]
* RETURNS
* void
*****************************************************************************/
void dynamic_player_delete(mma_player_list *player_list, mma_player_node *node)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
DYNPLAYER_CS_ENTER();
/* Node not on list */
if (node->flag_on_list == KAL_FALSE)
{
DYNPLAYER_CS_LEAVE();
return;
}
if (player_list->head == node)
{
player_list->head = node->next;
}
if (node->prev)
{
node->prev->next = node->next;
}
if (node->next)
{
node->next->prev = node->prev;
}
node->next = node->prev = NULL;
player_list->player_count--;
if (node->med_device_status == JAVA_MED_DEVICE_ACTIVE)
{
player_list->active_player_count--;
}
node->flag_on_list = KAL_FALSE;
DYNPLAYER_CS_LEAVE();
}
/*****************************************************************************
* FUNCTION
* dynamic_player_search
* DESCRIPTION
* This function is for midi.
* PARAMETERS
* player_list [?]
* key_func [IN]
* key [IN]
* mma_player_key ley_func(?)
* RETURNS
* mma_player_node* player_node
*****************************************************************************/
static mma_player_node *dynamic_player_search(mma_player_list *player_list, mma_player_key key_func, kal_int32 key)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
mma_player_node *cur_node = player_list->head;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
DYNPLAYER_CS_ENTER();
while (cur_node)
{
/* 0 means eqaul */
if ((*key_func) (cur_node, key) == 0)
{
break;
}
cur_node = cur_node->next;
}
DYNPLAYER_CS_LEAVE();
return cur_node;
}
/*****************************************************************************
* FUNCTION
* j2me_mma_exit_resource
* DESCRIPTION
* This function is for midi.
* PARAMETERS
* void
* RETURNS
* void
*****************************************************************************/
void jma_midi_player_deinit(void)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
mma_player_node *player = midi_players.head;
mma_player_node *next_player;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -