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

📄 mediaplaylistoperatenew.c

📁 瑞星微公司RK27XX系列芯片的SDK开发包
💻 C
📖 第 1 页 / 共 2 页
字号:
    }

    RKmemset(PlayListInfo[PlayListNo].pPlaylistMem, 0, PLAYLIST_SIZE_PER_FILE);
    PlayListInfo[PlayListNo].FileNum = 0;

#endif

    //PlayListInfo[PlayListNo].BusyFlag = 0;
    RkSemRelease(&PlayListUseSem);

    return TRUE;
    //return (UINT32)FS_fdelete(pPath);
}


/*----------------------------------------------------------------------
Name  :  EnterPlaylistEdit
Desc  :  进入播放列表编辑
Params:  PlayListNo:播放列表号
Return:
Author:  phc
Date  :  07-12-22
----------------------------------------------------------------------*/
UINT32 EnterPlaylistEdit(UINT16 PlayListNo)
{
    FS_FILE* fFile = NULL;

    RKSemObtain(&PlayListUseSem);

    /* 申请备份内存 */
    if (PlayListInfo[PlayListNo].pBakMem == NULL)
    {
        PlayListInfo[PlayListNo].pBakMem = (char*)malloc(PLAYLIST_SIZE_PER_FILE); // 播放列表信息备份
    }

    if (PlayListInfo[PlayListNo].pBakMem == NULL)
    {
        return FALSE;
    }
    RKmemset(PlayListInfo[PlayListNo].pBakMem, 0, PLAYLIST_SIZE_PER_FILE);


    /* 备份播放列表信息 */
    PlayListInfo[PlayListNo].BakFileNum = PlayListInfo[PlayListNo].FileNum; // 备份播放列表个数信息

    if (PlayListInfo[PlayListNo].pPlaylistMem == NULL) // 播放列表信息尚未调入内存,则直接从文件中拷贝数据备份
    {
        if (PlayListInfo[PlayListNo].FileNum) // 当收藏夹文件有内容时,先读出原有收藏夹信息
        {
            fFile = FS_fopen(PlayListInfo[PlayListNo].pPath, "r");
            if (fFile == NULL)
            {
                free(PlayListInfo[PlayListNo].pBakMem);
                PlayListInfo[PlayListNo].pBakMem = NULL;
                //PlayListInfo[PlayListNo].BusyFlag = 0;
                return FALSE; // 内存申请失败
            }
            FS_fread(PlayListInfo[PlayListNo].pBakMem, sizeof(PLAYLIST_INFO_STRUCT), PlayListInfo[PlayListNo].FileNum + 1, fFile);
            FS_fclose(fFile);
            fFile = NULL;
        }
    }
    else // 播放列表信息已经处于内存中则字节拷贝内存
    {
        RKmemcpy(PlayListInfo[PlayListNo].pBakMem, PlayListInfo[PlayListNo].pPlaylistMem, PLAYLIST_SIZE_PER_FILE);
    }

    RkSemRelease(&PlayListUseSem);
}


/*----------------------------------------------------------------------
Name  :  ExitPlaylistEdit
Desc  :  退出播放列表编辑
Params:  PlayListNo:播放列表号  OperateType:退出类型,0表示确定,1表示取消
Return:
Author:  phc
Date  :  07-12-23
----------------------------------------------------------------------*/
void ExitPlaylistEdit(UINT16 PlayListNo, UINT16 OperateType)
{
    if (OperateType == 0)
    {
        PlaylistEditConfirm(PlayListNo);
    }
    else
    {
        PlaylistEditCancle(PlayListNo);
    }
}


/*----------------------------------------------------------------------
Name  :  PlaylistEditConfirm
Desc  :  播放列表编辑确定
Params:  PlayListNo:播放列表号
Return:
Author:  phc
Date  :  07-12-23
----------------------------------------------------------------------*/
void PlaylistEditConfirm(UINT16 PlayListNo)
{
    free(PlayListInfo[PlayListNo].pBakMem);
    PlayListInfo[PlayListNo].pBakMem = NULL;

    //TrySavePlaylitInfo(); // 如果没有正在播放的音乐时,则直接将播放列表信息写入文件中
}

/*----------------------------------------------------------------------
Name  :  PlaylistEditCancle
Desc  :  播放列表编辑取消
Params:  PlayListNo:播放列表号
Return:
Author:  phc
Date  :  07-12-23
----------------------------------------------------------------------*/
void PlaylistEditCancle(UINT16 PlayListNo)
{
    if (NULL != PlayListInfo[PlayListNo].pPlaylistMem)
    {
        PlayListInfo[PlayListNo].FileNum = PlayListInfo[PlayListNo].BakFileNum;
        RKmemcpy(PlayListInfo[PlayListNo].pPlaylistMem, PlayListInfo[PlayListNo].pBakMem, PLAYLIST_SIZE_PER_FILE);
    }

    free(PlayListInfo[PlayListNo].pBakMem);
    PlayListInfo[PlayListNo].pBakMem = NULL;

    //TrySavePlaylitInfo(); // 如果没有正在播放的音乐时,则直接将播放列表信息写入文件中
}



/*----------------------------------------------------------------------
Name  :  InitPlaylitInfo
Desc  :  初始化播放列表信息
Params:
Return:
Author:  phc
Date  :  07-12-03
----------------------------------------------------------------------*/
void InitPlaylitInfo(void)
{
    FS_FILE* fFile = NULL;
    UINT16 i;

#if 0
    fFile = FS_fopen(PlaylistStatPath, "r");
    if (fFile == NULL)
    {
        //RKmemset(&PlaylistStaInfo, 0, sizeof(PLAYLIST_STAT_STRUCT));
        RKmemset(&PlayListInfo[0], 0, PLAYLIST_NUM*sizeof(PLAYLIST_STRUCT));
        for (i = 0;i < PLAYLIST_NUM;i++)
        {
            PlayListInfo[i].BusyFlag = 0;
            PlayListInfo[i].FileNum = 0;
            PlayListInfo[i].NO = i;
            PlayListInfo[i].pPath = PlaylistPath[i];
            PlayListInfo[i].pPlaylistMem = NULL;
        }
    }
    else
    {
        FSFileRead(&PlaylistStaInfo, sizeof(PLAYLIST_STAT_STRUCT), fFile);
        FSFileClose(fFile);

        for (i = 0;i < PLAYLIST_NUM;i++)
        {
            PlayListInfo[i].BusyFlag = 0;
            PlayListInfo[i].FileNum = PlaylistStaInfo.PlayListNum[i];
            PlayListInfo[i].NO = i;
            PlayListInfo[i].pPath = PlaylistPath[i];
            PlayListInfo[i].pPlaylistMem = NULL;
        }
    }
#else
    for (i = 0;i < PLAYLIST_NUM;i++)
    {
        PlayListInfo[i].pPath = PlaylistPath[i];
        PlayListInfo[i].BusyFlag = 0;
        PlayListInfo[i].NO = i;
        PlayListInfo[i].pPlaylistMem = NULL;

        fFile = FS_fopen(PlayListInfo[i].pPath, "r");
        if (fFile == NULL)
        {
            PlayListInfo[i].FileNum = 0;
        }
        else
        {
            FS_fread(&PlayListInfo[i].FileNum, sizeof(UINT16), 1, fFile);
            FS_fclose(fFile);
            fFile = NULL; // very important
        }
    }
#endif
}

/*----------------------------------------------------------------------
Name  :  SavePlaylitInfo
Desc  :  保存播放列表信息
Params:
Return:
Author:  phc
Date  :  07-12-03
----------------------------------------------------------------------*/
void SavePlaylitInfo(void)
{
//    FS_FILE* fStatFile = NULL;
    FS_FILE* fPListFile = NULL;
    UINT16 i;
//   UINT16 Flag = 0;

//    RKSemObtain(&PlayListUseSem);

    for (i = 0;i < PLAYLIST_NUM;i++)
    {
        //if((PlayListInfo[i].BusyFlag==0)&&(PlayListInfo[i].pPlaylistMem!=NULL))
        if (PlayListInfo[i].pPlaylistMem != NULL)
        {

            fPListFile = FSFileOpen(PlayListInfo[i].pPath, "rb+");
            if (fPListFile == NULL)
            {
                fPListFile = FSFileOpen(PlayListInfo[i].pPath, "wb");
            }
            else
            {

                FSFileSeek(fPListFile, 0, SEEK_SET); // 定位到最前面
            }
            if (fPListFile != NULL)
            {
                FSFileWrite(PlayListInfo[i].pPlaylistMem, PLAYLIST_SIZE_PER_FILE, fPListFile); //sizeof(PLAYLIST_INFO_STRUCT)*PlayListInfo[i].FileNum
                FSFileClose(fPListFile);
                fPListFile = NULL;
                //Flag = 1;
                free(PlayListInfo[i].pPlaylistMem);
                PlayListInfo[i].pPlaylistMem = NULL;
            }

        }
    }
    /*
        if(Flag == 1)
        {
            fStatFile = FSFileOpen(PlaylistStatPath, "rb+");
            if(fStatFile==NULL)
            {
                fStatFile = FSFileOpen(PlaylistStatPath, "wb");
            }
            else
            {
                FSFileSeek(fStatFile, 0, SEEK_SET); // 定位到最前面
            }
            if(fStatFile!=NULL)
            {
                for(i=0;i<PLAYLIST_NUM;i++)
                {
                    PlaylistStaInfo.PlayListNum[i] = PlayListInfo[i].FileNum;
                }
                FSFileWrite(&PlaylistStaInfo, sizeof(PLAYLIST_STAT_STRUCT), fStatFile);
                FSFileClose(fStatFile);
                fStatFile = NULL;
            }
        }
    */

//    RkSemRelease(&PlayListUseSem);

}

/*----------------------------------------------------------------------
Name  :  TrySavePlaylitInfo
Desc  :  尝试保存播放列表信息, 有音乐正在播放时不保存
Params:
Return:
Author:  phc
Date  :  07-12-23
----------------------------------------------------------------------*/
void TrySavePlaylitInfo(void)
{
#ifdef BOARD
    if (AudioPlayState == Audio_State_Stop)
    {
        RKSemObtain(&PlayListUseSem);
        SavePlaylitInfo();
        RkSemRelease(&PlayListUseSem);
    }
#endif
}


#endif
#endif
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -