|
如题:
客户端显示的所有文件类型为视频文件,出GPS文件除外
PU端文件检索接口的部分实现,红色部分已经根据文件类型,修改了iFileType:
BVCU_Result pu_search_list(BVCSP_HSession hSession, BVCSP_Command* pCommand, BVCSP_Event_SessionCmd* pParam)
{
PU_CHECK_POINTER(pCommand);
PU_CHECK_POINTER(pParam);
BVCU_Search_Request *pRequest = (BVCU_Search_Request *)pCommand->stMsgContent.pData;
PU_CHECK_POINTER(pRequest);
HI_S32 s32Ret = HI_FAILURE;
BVCU_Search_FileInfo *pstFileInfo = NULL;
HI_U32 u32Size = 0;
BVCU_Search_Response stResponse;
memset(&stResponse, 0x0, sizeof(stResponse));
HI_U32 u32FileCount = 0;
HI_U32 u32Count = 0;
HI_U32 u32Idx = 0;
HI_U32 u32GPSIdx = 0;
HI_U32 u32SearchIdx = 0;
HI_U32 u32Year, u32Month, u32Day, u32Hour, u32Minute, u32Second;
HI_CHAR azFileName[256] = {0};
HI_CHAR azTmpFileName[256] = {0};
HI_CHAR azIMPFileName[256] = {0};
HI_CHAR azMP4FileName[256] = {0};
HI_CHAR azMP4PathName[256] = {0};
HI_CHAR azMP4PathFileName[256] = {0};
HI_CHAR azFilePerfixName[256] = {0};
BVCSP_SessionInfo stSessionInfo;
memset(&stSessionInfo, 0, sizeof(stSessionInfo));
HI_U64 u64LastModifyTime = 0;
struct tm stTm;
BVCSP_Event_SessionCmd stParam;
memset(&stParam, 0x0, sizeof(stParam));
#ifdef BVCSP_AUTH_ON
HI_CHAR azID[32] = {0};
#endif
MLOGD("SearchInfo : iType[%d], iPostition[%d], iCount[%d], iTotalCount[%d]\n", pRequest->stSearchInfo.iType, pRequest->stSearchInfo.iPostition,
pRequest->stSearchInfo.iCount, pRequest->stSearchInfo.iTotalCount);
/*
* TODO: Get file list by type
*/
if (BVCU_SEARCH_TYPE_FILE == pRequest->stSearchInfo.iType)
{
s32Ret = HI_PDT_FileMng_GetFileCount(&u32FileCount);
if (s32Ret != HI_SUCCESS)
{
MLOGE("HI_PDT_FileMng_GetGroupCount failed!\n");
return BVCU_RESULT_E_FAILED;
}
u32GPSIdx = search_gps_filenum();
MLOGD("GPS File Count [%d]\n", u32GPSIdx);
u32Size = (u32FileCount + u32GPSIdx) * sizeof(BVCU_Search_FileInfo);
if (0 != u32Size)
{
pstFileInfo = (BVCU_Search_FileInfo *)malloc(u32Size);
if (NULL == pstFileInfo)
{
MLOGE("malloc size %dKB failed!\n", u32Size / 1024);
return BVCU_RESULT_E_FAILED;
}
memset(pstFileInfo, 0x0, u32Size);
}
s32Ret = search_gps_fileinfo(pstFileInfo);
if (s32Ret != HI_SUCCESS)
{
MLOGW("search_gps_fileinfo failed! \n");
}
for (u32Idx = 0; u32Idx < u32FileCount; u32Idx ++)
{
memset(azFileName, 0x0, sizeof(azFileName));
s32Ret = HI_PDT_FileMng_GetFileByIndex(u32Idx, azFileName, 256);
if (s32Ret != HI_SUCCESS)
{
MLOGW("HI_PDT_FileMng_GetFileByIndex failed! %#x\n", s32Ret);
continue;
}
u32SearchIdx = u32Idx + u32GPSIdx;
pstFileInfo[u32SearchIdx].iRecordType = BVCU_STORAGE_RECORDTYPE_MANUAL;
pstFileInfo[u32SearchIdx].iRecordID = (u32SearchIdx);
memset(pstFileInfo[u32SearchIdx].szDesc1, 0x0, 64);
memset(pstFileInfo[u32SearchIdx].szDesc2, 0x0, 64);
memset(azFilePerfixName, 0x0, sizeof(azFilePerfixName));
memset(azTmpFileName, 0x0, sizeof(azTmpFileName));
sscanf(azFileName, "/%*[^/]/%*[^/]/%*[^/]/%*[^/]/%s", azTmpFileName);
memcpy(azFilePerfixName, azFileName, strlen(azFileName) - strlen(azTmpFileName));
/*
* note : PU_1 is based on libBVCSP.so
*/
if (NULL != strstr(azTmpFileName, ".MP4"))
{
memset(azMP4FileName, 0x0, sizeof(azMP4FileName));
memcpy(azMP4FileName, azTmpFileName, strlen(azTmpFileName) - 6 /*_s.MP4 */);
memset(azMP4PathName, 0x0, sizeof(azMP4PathName));
memcpy(azMP4PathName, azFilePerfixName, strlen(azFilePerfixName) - 3 /*_s/ */);
memset(azMP4PathFileName, 0x0, sizeof(azMP4PathFileName));
sprintf(azMP4PathFileName, "%s/%s.MP4", azMP4PathName, azMP4FileName);
/*
* libBVSCP no support IMP_ file
*/
if (NULL != strstr(azTmpFileName, "IMP_"))
{
memset(azIMPFileName, 0x0, sizeof(azIMPFileName));
sscanf(azMP4FileName, "IMP_%s", azIMPFileName);
#ifdef BVCSP_AUTH_ON
memset(azID, 0x0, sizeof(azID));
snprintf(azID, 32, "PU_%s", g_pstPDTCfg->stDevMngParam.zfyinfo.device_id + BVCSP_DEVID_OFFSET);
sprintf(pstFileInfo[u32SearchIdx].szFilePath, "%s/%s_00_%s.MP4", azMP4PathName, azID, azIMPFileName);
#else
sprintf(pstFileInfo[u32SearchIdx].szFilePath, "%s/PU_1_00_%s.MP4", azMP4PathName, azIMPFileName);
#endif
}
else
{
#ifdef BVCSP_AUTH_ON
memset(azID, 0x0, sizeof(azID));
snprintf(azID, 32, "PU_%s", g_pstPDTCfg->stDevMngParam.zfyinfo.device_id + BVCSP_DEVID_OFFSET);
sprintf(pstFileInfo[u32SearchIdx].szFilePath, "%s/%s_00_%s.MP4", azMP4PathName, azID, azMP4FileName);
#else
sprintf(pstFileInfo[u32SearchIdx].szFilePath, "%s/PU_1_00_%s.MP4", azMP4PathName, azMP4FileName);
#endif
}
pstFileInfo[u32SearchIdx].iFileSize = search_get_fileinfo(azMP4PathFileName, &u64LastModifyTime);
}
else
{
if (NULL != strstr(azTmpFileName, "IMP_"))
{
memset(azIMPFileName, 0x0, sizeof(azIMPFileName));
sscanf(azTmpFileName, "IMP_%s", azIMPFileName);
#ifdef BVCSP_AUTH_ON
memset(azID, 0x0, sizeof(azID));
snprintf(azID, 32, "PU_%s", g_pstPDTCfg->stDevMngParam.zfyinfo.device_id + BVCSP_DEVID_OFFSET);
sprintf(pstFileInfo[u32SearchIdx].szFilePath, "%s%s_00_%s", azFilePerfixName, azID, azIMPFileName);
#else
sprintf(pstFileInfo[u32SearchIdx].szFilePath, "%sPU_1_00_%s", azFilePerfixName, azIMPFileName);
#endif
}
else
{
#ifdef BVCSP_AUTH_ON
memset(azID, 0x0, sizeof(azID));
snprintf(azID, 32, "PU_%s", g_pstPDTCfg->stDevMngParam.zfyinfo.device_id + BVCSP_DEVID_OFFSET);
sprintf(pstFileInfo[u32SearchIdx].szFilePath, "%s%s_00_%s", azFilePerfixName, azID, azTmpFileName);
#else
sprintf(pstFileInfo[u32SearchIdx].szFilePath, "%sPU_1_00_%s", azFilePerfixName, azTmpFileName);
#endif
}
pstFileInfo[u32SearchIdx].iFileSize = search_get_fileinfo(azFileName, &u64LastModifyTime);
}
#ifdef BVCSP_AUTH_ON
memset(azID, 0x0, sizeof(azID));
snprintf(azID, 32, "PU_%s", g_pstPDTCfg->stDevMngParam.zfyinfo.device_id + BVCSP_DEVID_OFFSET);
sprintf(pstFileInfo[u32SearchIdx].szSourceID, "%s", azID);
#else
sprintf(pstFileInfo[u32SearchIdx].szSourceID, "%s", "PU_1");
#endif
if (0 == strncmp(azTmpFileName, "IMP_", 4))
{
snprintf(pstFileInfo[u32SearchIdx].szDesc1, 64, "%s", PU_CFG_IMPORTANT_FILE);
sscanf(azTmpFileName, "IMP_%4d%2d%2d_%2d%2d%2d%*s", &u32Year, &u32Month, &u32Day,
&u32Hour, &u32Minute, &u32Second);
}
else
{
sscanf(azTmpFileName, "%4d%2d%2d_%2d%2d%2d%*s", &u32Year, &u32Month, &u32Day,
&u32Hour, &u32Minute, &u32Second);
}
/*
* Time calc
*/
stTm.tm_year = (u32Year - 1900);
stTm.tm_mon = (u32Month - 1);
stTm.tm_mday = u32Day;
stTm.tm_hour = u32Hour;
stTm.tm_min = u32Minute;
stTm.tm_sec = u32Second;
pstFileInfo[u32SearchIdx].iTimeBegin = (mktime(&stTm) - (8 * 3600));
pstFileInfo[u32SearchIdx].iTimeEnd = (u64LastModifyTime - (8 * 3600));
pstFileInfo[u32SearchIdx].iTimeRecord = pstFileInfo[u32SearchIdx].iTimeBegin;
/*
* Only support MP4 JPG and WAV
*/
if (NULL != strstr(azTmpFileName, ".MP4"))
{
pstFileInfo[u32SearchIdx].iFileType = BVCU_STORAGE_FILE_TYPE_RECORD;
}
else if (NULL != strstr(azTmpFileName, ".JPG"))
{
pstFileInfo[u32SearchIdx].iFileType = BVCU_STORAGE_FILE_TYPE_CAPTURE;
pstFileInfo[u32SearchIdx].iTimeEnd = pstFileInfo[u32SearchIdx].iTimeBegin;
}
else if (NULL != strstr(azTmpFileName, ".WAV"))
{
pstFileInfo[u32SearchIdx].iFileType = BVCU_STORAGE_FILE_TYPE_AUDIO;
}
u32Count ++;
}
u32Count += u32GPSIdx;
MLOGD("u32FileCount [%d], u32Count [%d], u32Size [%dKB]\n", u32FileCount, u32Count, u32Size / 1024);
stResponse.iCount = u32Count;
stResponse.pData.pFileInfo = pstFileInfo;
stResponse.stSearchInfo.iCount = u32Count;
stResponse.stSearchInfo.iTotalCount = u32Count;
stResponse.stSearchInfo.iType = BVCU_SEARCH_TYPE_FILE;
stResponse.stSearchInfo.iPostition = 0;
stParam.iPercent = 100;
stParam.iResult = BVCU_RESULT_S_OK;
stParam.stContent.pData = &stResponse;
stParam.stContent.iDataCount = 1;
pCommand->OnEvent(hSession, pCommand, &stParam);
if (pstFileInfo)
{
free(pstFileInfo);
pstFileInfo = NULL;
}
}
return BVCU_RESULT_S_OK;
}
|
|