⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jma_audio_player.c

📁 java 1.1 gemini 08_16
💻 C
📖 第 1 页 / 共 5 页
字号:

    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 + -