| 
 | 
 
如题: 
客户端显示的所有文件类型为视频文件,出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; 
} 
 
 
 
 
 |   
 
 
 
 |