📄 mediainfogetnew.c
字号:
/****************************************************************************************************
*****************************************************************************************************
COPYRIGHT (c) 2007 BY ROCK-CHIP FUZHOU
-- ALL RIGHTS RESERVED --
File Name: MediaInfoGet.c
Author: Peng Huacheng
Created: 07-09-20
Modified:
Revision:
****************************************************************************************************
****************************************************************************************************/
#if ((defined(BOARD)) || defined(ROCK_FS))
#include <stdio.h>
#include <stdlib.h>
#include "include.h"
#include "System.h"
#ifdef _MEIDA_SORT_NEW
#include "..\System\MediaSortNew\MediaSortGloableNew.h"
#include "MediaInfoGetStructNew.h"
#include "..\PlaylistControl\MediaPlaylistGloableNew.h"
extern void GetLongFileName(UINT16 *lfn);
extern void GetTimeUnicodeStr(FS_FILE *hFile, UINT16* str);
extern SYSCONFIG gInitSysConfig;
UINT16 SearchIndexBuffer[1024]; // 所有文件搜索索引buffer, 共可以满足1K搜索量
UINT16 SearchPlayBuffer[1024]; // 搜索音乐播放buffer
/*----------------------------------------------------------------------
Name : GetALLMusicInfo
Desc : 根据索引信息获取音乐文件详细信息
Params: pFileInfo:媒体库文件存储信息 uiIndexID:文件检索号
Return:
Author: phc
Date : 07-11-27
----------------------------------------------------------------------*/
void GetSaveFileInfo(FILE_SAVE_STRUCT *pFileInfo, UINT16 uiIndexID)
{
FS_FILE* fFile = NULL;
fFile = FS_fopen(FileInfoSavePath, "r");
if (fFile == NULL)
return ;
FS_fseek(fFile, uiIndexID*sizeof(FILE_SAVE_STRUCT), FS_SEEK_SET); //
FS_fread(pFileInfo, sizeof(FILE_SAVE_STRUCT), 1, fFile);
FS_fclose(fFile);
fFile = NULL;
}
/*----------------------------------------------------------------------
Name : GetSortInfo
Desc : 获取排序索引信息
Params: pSortIndex:排序索引信息 uiID:排序号 SortAddrOffset:排序信息在保存文件中的偏移量
Return:
Author: phc
Date : 07-12-03
----------------------------------------------------------------------*/
void GetSortInfo(MEDIA_SORT_INFO_STRUCT *pSortIndex, UINT16 uiID, UINT32 SortAddrOffset)
{
FS_FILE* fFile = NULL;
fFile = FS_fopen(SortInfoPath, "r");//FileInfoSavePath
if (fFile == NULL)
return ;
FS_fseek(fFile, SortAddrOffset + (UINT32)uiID*sizeof(MEDIA_SORT_INFO_STRUCT), FS_SEEK_SET); //
FS_fread(pSortIndex, sizeof(MEDIA_SORT_INFO_STRUCT), 1, fFile);
FS_fclose(fFile);
fFile = NULL;
}
/*----------------------------------------------------------------------
Name : GetMediaALLMusicInfo
Desc : 获取所有音乐排序文件信息
Params: pMediaInfo:文件列出信息 uiID:文件排序号 uiBaseID:排序基号,在这里无用
Return:
Author: phc
Date : 07-11-27
----------------------------------------------------------------------*/
void GetMediaALLMusicInfo(FILE_MEDIAINFO_STRUCT *pMediaInfo, UINT16 uiID, UINT16 uiBaseID)
{
MEDIA_SORT_INFO_STRUCT SortIndex;
FILE_SAVE_STRUCT FileInfo;
UINT16 TimeStr[9] = {'0', '0', ':', '0', '0', ':', '0', '0', '\0'};
// FS_FILE *fFile = NULL;
RKmemset(&SortIndex, 0, sizeof(MEDIA_SORT_INFO_STRUCT));
RKmemset(&FileInfo, 0, sizeof(FILE_SAVE_STRUCT));
GetSortInfo(&SortIndex, uiID, All_SORT_ADDR);
GetSaveFileInfo(&FileInfo, SortIndex.FileSearchID);
RKmemcpy(pMediaInfo->ListName1, FileInfo.LongFileName, CHAR_NUM_PER_FILE_NAME*sizeof(UINT16)); // 保存的长文件名
RKmemcpy(pMediaInfo->ListName2, FileInfo.ID3Artist, ID3_SAVE_CHAR_NUM*sizeof(UINT16)); // 提取歌手信息
RKmemcpy(pMediaInfo->Name, FileInfo.Name, 11);
RKmemcpy(pMediaInfo->Path, FileInfo.Path, FS_MAX_PATH_LEN);
#if 1
RKmemcpy(pMediaInfo->ListName3, FileInfo.Time, 8*sizeof(UINT16)); // 提取歌曲播放时间
#else
RKstrcat(FileInfo.Path, FileInfo.Name);
fFile = RKFSFileOpen(FileInfo.Path, "r");
if (fFile != NULL)
{
GetTimeUnicodeStr(fFile, TimeStr);
RKmemcpy(pMediaInfo->ListName3, TimeStr, sizeof(TimeStr)); // 获取音乐播放时间
RKFSFileClose(fFile);
fFile = NULL;
}
#endif
}
/*----------------------------------------------------------------------
Name : GetMediaTitleInfo
Desc : 获取所有标题排序文件信息
Params: pMediaInfo:文件列出信息 uiID:文件排序号 uiBaseID:排序基号,在这里无用
Return:
Author: phc
Date : 07-11-27
----------------------------------------------------------------------*/
void GetMediaTitleInfo(FILE_MEDIAINFO_STRUCT *pMediaInfo, UINT16 uiID, UINT16 uiBaseID)
{
FILE_SAVE_STRUCT FileInfo;
MEDIA_SORT_INFO_STRUCT SortIndex;
RKmemset(&SortIndex, 0, sizeof(MEDIA_SORT_INFO_STRUCT));
RKmemset(&FileInfo, 0, sizeof(FILE_SAVE_STRUCT));
GetSortInfo(&SortIndex, uiID, TITLE_SORT_ADDR);
GetSaveFileInfo(&FileInfo, SortIndex.FileSearchID);
RKmemcpy(pMediaInfo->ListName1, FileInfo.ID3Title, ID3_SAVE_CHAR_NUM*sizeof(UINT16));
RKmemcpy(pMediaInfo->ListName2, FileInfo.ID3Artist, ID3_SAVE_CHAR_NUM*sizeof(UINT16)); // 提取歌手信息
//RKmemcpy(pMediaInfo->ListName3, FileInfo.ID3Artist, ID3_SAVE_CHAR_NUM*sizeof(UINT16)); // 提取歌曲播放时间
RKmemcpy(pMediaInfo->Name, FileInfo.Name, 11);
RKmemcpy(pMediaInfo->Path, FileInfo.Path, FS_MAX_PATH_LEN);
}
/*----------------------------------------------------------------------
Name : GetMediaArtistSumInfo
Desc : 获取所有艺术家的排序信息
Params: pMediaInfo:文件列出信息 uiID:文件排序号 uiBaseID:排序基号,在这里无用
Return:
Author: phc
Date : 07-11-27
----------------------------------------------------------------------*/
void GetMediaArtistSumInfo(FILE_MEDIAINFO_STRUCT *pMediaInfo, UINT16 uiID, UINT16 uiBaseID)
{
FILE_SAVE_STRUCT FileInfo;
MEDIA_SORT_INFO_STRUCT SortIndex;
uiID += uiBaseID;
RKmemset(&SortIndex, 0, sizeof(MEDIA_SORT_INFO_STRUCT));
RKmemset(&FileInfo, 0, sizeof(FILE_SAVE_STRUCT));
GetSortInfo(&SortIndex, uiID, ARTIST_SUM_SORT_ADDR);
GetSaveFileInfo(&FileInfo, SortIndex.FileSearchID);
RKmemcpy(pMediaInfo->ListName1, FileInfo.ID3Artist, ID3_SAVE_CHAR_NUM*sizeof(UINT16));
RKmemcpy(pMediaInfo->Name, FileInfo.Name, 11);
RKmemcpy(pMediaInfo->Path, FileInfo.Path, FS_MAX_PATH_LEN);
pMediaInfo->ChildItemNum = SortIndex.ItemNum;
pMediaInfo->SorIndex = SortIndex.IndexID;
}
/*----------------------------------------------------------------------
Name : GetMediaArtistMusicInfo
Desc : 获取某个艺术家内的音乐文件
Params: pMediaInfo:文件列出信息 uiID:文件排序号 uiBaseID:排序基号
Return:
Author: phc
Date : 07-11-27
----------------------------------------------------------------------*/
void GetMediaArtistMusicInfo(FILE_MEDIAINFO_STRUCT *pMediaInfo, UINT16 uiID, UINT16 uiBaseID)
{
FILE_SAVE_STRUCT FileInfo;
MEDIA_SORT_INFO_STRUCT SortIndex;
UINT16 TimeStr[9] = {'0', '0', ':', '0', '0', ':', '0', '0', '\0'};
uiID += uiBaseID;
RKmemset(&SortIndex, 0, sizeof(MEDIA_SORT_INFO_STRUCT));
RKmemset(&FileInfo, 0, sizeof(FILE_SAVE_STRUCT));
GetSortInfo(&SortIndex, uiID, ARTIST_IN_SORT_ADDR);
GetSaveFileInfo(&FileInfo, SortIndex.FileSearchID);
RKmemcpy(pMediaInfo->ListName1, FileInfo.LongFileName, CHAR_NUM_PER_FILE_NAME*sizeof(UINT16));
RKmemcpy(pMediaInfo->ListName2, FileInfo.ID3Artist, ID3_SAVE_CHAR_NUM*sizeof(UINT16)); // 提取歌手信息
//RKmemcpy(pMediaInfo->ListName3, FileInfo.ID3Artist, ID3_SAVE_CHAR_NUM*sizeof(UINT16)); // 提取歌曲播放时间
RKmemcpy(pMediaInfo->Name, FileInfo.Name, 11);
RKmemcpy(pMediaInfo->Path, FileInfo.Path, FS_MAX_PATH_LEN);
//pMediaInfo->ChildItemNum = SortIndex.ItemNum;
pMediaInfo->SorIndex = SortIndex.IndexID;
#if 1
RKmemcpy(pMediaInfo->ListName3, FileInfo.Time, 8*sizeof(UINT16)); // 提取歌曲播放时间
#else
RKstrcat(FileInfo.Path, FileInfo.Name);
fFile = RKFSFileOpen(FileInfo.Path, "r");
if (fFile != NULL)
{
GetTimeUnicodeStr(fFile, TimeStr);
RKmemcpy(pMediaInfo->ListName3, TimeStr, sizeof(TimeStr)); // 获取音乐播放时间
RKFSFileClose(fFile);
fFile = NULL;
}
#endif
}
/*----------------------------------------------------------------------
Name : GetMediaAlbumSumInfo
Desc : 获取所有专辑信息
Params: pMediaInfo:文件列出信息 uiID:文件排序号 uiBaseID:排序基号,在这里无用
Return:
Author: phc
Date : 07-11-27
----------------------------------------------------------------------*/
void GetMediaAlbumSumInfo(FILE_MEDIAINFO_STRUCT *pMediaInfo, UINT16 uiID, UINT16 uiBaseID)
{
FILE_SAVE_STRUCT FileInfo;
MEDIA_SORT_INFO_STRUCT SortIndex;
uiID += uiBaseID;
RKmemset(&SortIndex, 0, sizeof(MEDIA_SORT_INFO_STRUCT));
RKmemset(&FileInfo, 0, sizeof(FILE_SAVE_STRUCT));
GetSortInfo(&SortIndex, uiID, ALBUM_SUM_SORT_ADDR);
GetSaveFileInfo(&FileInfo, SortIndex.FileSearchID);
RKmemcpy(pMediaInfo->ListName1, FileInfo.ID3Album, ID3_SAVE_CHAR_NUM*sizeof(UINT16));
RKmemcpy(pMediaInfo->ListName2, FileInfo.ID3Artist, ID3_SAVE_CHAR_NUM*sizeof(UINT16)); // 提取歌手信息
RKmemcpy(pMediaInfo->Name, FileInfo.Name, 11);
RKmemcpy(pMediaInfo->Path, FileInfo.Path, FS_MAX_PATH_LEN);
pMediaInfo->ChildItemNum = SortIndex.ItemNum;
pMediaInfo->SorIndex = SortIndex.IndexID;
}
/*----------------------------------------------------------------------
Name : GetMediaAlbumtMusicInfo
Desc : 获取某个专辑内的音乐文件
Params: pMediaInfo:文件列出信息 uiID:文件排序号 uiBaseID:排序基号
Return:
Author: phc
Date : 07-11-27
----------------------------------------------------------------------*/
void GetMediaAlbumMusicInfo(FILE_MEDIAINFO_STRUCT *pMediaInfo, UINT16 uiID, UINT16 uiBaseID)
{
FILE_SAVE_STRUCT FileInfo;
MEDIA_SORT_INFO_STRUCT SortIndex;
UINT16 TimeStr[9] = {'0', '0', ':', '0', '0', ':', '0', '0', '\0'};
uiID += uiBaseID;
RKmemset(&SortIndex, 0, sizeof(MEDIA_SORT_INFO_STRUCT));
RKmemset(&FileInfo, 0, sizeof(FILE_SAVE_STRUCT));
GetSortInfo(&SortIndex, uiID, ALBUM_IN_SORT_ADDR);
GetSaveFileInfo(&FileInfo, SortIndex.FileSearchID);
RKmemcpy(pMediaInfo->ListName1, FileInfo.LongFileName, CHAR_NUM_PER_FILE_NAME*sizeof(UINT16));
RKmemcpy(pMediaInfo->ListName2, FileInfo.ID3Artist, ID3_SAVE_CHAR_NUM*sizeof(UINT16)); // 提取歌手信息
//RKmemcpy(pMediaInfo->ListName3, FileInfo.ID3Artist, ID3_SAVE_CHAR_NUM*sizeof(UINT16)); // 提取歌曲播放时间
RKmemcpy(pMediaInfo->Name, FileInfo.Name, 11);
RKmemcpy(pMediaInfo->Path, FileInfo.Path, FS_MAX_PATH_LEN);
//pMediaInfo->ChildItemNum = SortIndex.ItemNum;
pMediaInfo->SorIndex = SortIndex.IndexID;
#if 1
RKmemcpy(pMediaInfo->ListName3, FileInfo.Time, 8*sizeof(UINT16)); // 提取歌曲播放时间
#else
RKstrcat(FileInfo.Path, FileInfo.Name);
fFile = RKFSFileOpen(FileInfo.Path, "r");
if (fFile != NULL)
{
GetTimeUnicodeStr(fFile, TimeStr);
RKmemcpy(pMediaInfo->ListName3, TimeStr, sizeof(TimeStr)); // 获取音乐播放时间
RKFSFileClose(fFile);
fFile = NULL;
}
#endif
}
/*----------------------------------------------------------------------
Name : GetMediaGenreSumInfo
Desc : 获取所有专辑信息
Params: pMediaInfo:文件列出信息 uiID:文件排序号 uiBaseID:排序基号,在这里无用
Return:
Author: phc
Date : 07-11-27
----------------------------------------------------------------------*/
void GetMediaGenreSumInfo(FILE_MEDIAINFO_STRUCT *pMediaInfo, UINT16 uiID, UINT16 uiBaseID)
{
FILE_SAVE_STRUCT FileInfo;
MEDIA_SORT_INFO_STRUCT SortIndex;
uiID += uiBaseID;
RKmemset(&SortIndex, 0, sizeof(MEDIA_SORT_INFO_STRUCT));
RKmemset(&FileInfo, 0, sizeof(FILE_SAVE_STRUCT));
GetSortInfo(&SortIndex, uiID, GENRE_SUM_SORT_ADDR);
GetSaveFileInfo(&FileInfo, SortIndex.FileSearchID);
RKmemcpy(pMediaInfo->ListName1, FileInfo.Genre, ID3_SAVE_CHAR_NUM*sizeof(UINT16));
RKmemcpy(pMediaInfo->ListName2, FileInfo.ID3Artist, ID3_SAVE_CHAR_NUM*sizeof(UINT16)); // 提取歌手信息
RKmemcpy(pMediaInfo->Name, FileInfo.Name, 11);
RKmemcpy(pMediaInfo->Path, FileInfo.Path, FS_MAX_PATH_LEN);
pMediaInfo->ChildItemNum = SortIndex.ItemNum;
pMediaInfo->SorIndex = SortIndex.IndexID;
}
/*----------------------------------------------------------------------
Name : GetMediaGenreMusicInfo
Desc : 获取某个专辑内的音乐文件
Params: pMediaInfo:文件列出信息 uiID:文件排序号 uiBaseID:排序基号
Return:
Author: phc
Date : 07-11-27
----------------------------------------------------------------------*/
void GetMediaGenreMusicInfo(FILE_MEDIAINFO_STRUCT *pMediaInfo, UINT16 uiID, UINT16 uiBaseID)
{
FILE_SAVE_STRUCT FileInfo;
MEDIA_SORT_INFO_STRUCT SortIndex;
UINT16 TimeStr[9] = {'0', '0', ':', '0', '0', ':', '0', '0', '\0'};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -