1.更新IQ;2.更新缩略图修改;3.同步wifi文件

This commit is contained in:
payton 2023-05-17 15:14:15 +08:00
parent e3ccaa56e6
commit 5ea5ebe590
67 changed files with 6552 additions and 1577 deletions

View File

@ -3,6 +3,10 @@
"prjcfg_hunting_s530.h": "c", "prjcfg_hunting_s530.h": "c",
"sf_keymng.h": "c", "sf_keymng.h": "c",
"sf_inc.h": "c", "sf_inc.h": "c",
"sf_commmng.h": "c" "sf_commmng.h": "c",
"sf_common.h": "c",
"sf_filemng.h": "c",
"sf_systemmng.h": "c",
"sf_commu_mcu_reg.h": "c"
} }
} }

View File

@ -920,7 +920,8 @@
#define HUNTING_IR_LED_940 DISABLE #define HUNTING_IR_LED_940 DISABLE
#define SF_BASE_VERSION "7MD4RCwD3T3" #define SF_BASE_VERSION "7MD4RCwD3T3"
#define HW_S530 1 #define HW_S530 1
#define PHOTO_ISP_STAMP DISABLE
#define SF_BASE_VERSION_FEA "R2.3"
/******************************************************************************************* /*******************************************************************************************
* LVGL UI Style config * LVGL UI Style config

View File

@ -146,7 +146,7 @@ void Movie_CommPoolInit(void)
vcap_buf_size + vcap_buf_size +
VDO_CA_BUF_SIZE(CA_WIN_NUM_W, CA_WIN_NUM_H) + VDO_CA_BUF_SIZE(CA_WIN_NUM_W, CA_WIN_NUM_H) +
VDO_LA_BUF_SIZE(LA_WIN_NUM_W, LA_WIN_NUM_H); VDO_LA_BUF_SIZE(LA_WIN_NUM_W, LA_WIN_NUM_H);
mem_cfg.pool_info[id].blk_cnt = 2; mem_cfg.pool_info[id].blk_cnt = 7;
mem_cfg.pool_info[id].ddr_id = DDR_ID0; mem_cfg.pool_info[id].ddr_id = DDR_ID0;
} }

View File

@ -6,7 +6,7 @@
#include "GxVideoFile.h" #include "GxVideoFile.h"
#include "hdal.h" #include "hdal.h"
#define MOVIE_ISP_LOG ENABLE #define MOVIE_ISP_LOG DISABLE
#if (MOVIE_ISP_LOG == ENABLE) #if (MOVIE_ISP_LOG == ENABLE)
#undef WATERLOGO_FUNCTION #undef WATERLOGO_FUNCTION

View File

@ -35,7 +35,7 @@
#include "sys_mempool.h" #include "sys_mempool.h"
#define UDP_SOCKET 0 #define UDP_SOCKET 0
#define THIS_DBGLVL 2 // 0=FATAL, 1=ERR, 2=WRN, 3=UNIT, 4=FUNC, 5=IND, 6=MSG, 7=VALUE, 8=USER #define THIS_DBGLVL 5 // 0=FATAL, 1=ERR, 2=WRN, 3=UNIT, 4=FUNC, 5=IND, 6=MSG, 7=VALUE, 8=USER
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
#define __MODULE__ WifiAppCmd #define __MODULE__ WifiAppCmd
#define __DBGLVL__ ((THIS_DBGLVL>=PRJ_DBG_LVL)?THIS_DBGLVL:PRJ_DBG_LVL) #define __DBGLVL__ ((THIS_DBGLVL>=PRJ_DBG_LVL)?THIS_DBGLVL:PRJ_DBG_LVL)

View File

@ -66,6 +66,7 @@
#endif #endif
#if (SENSOR_CAPS_COUNT >= 2) #if (SENSOR_CAPS_COUNT >= 2)
#define PHOTO_MAX_CAP_SIZE UIAPP_PHOTO_SIZE_10M #define PHOTO_MAX_CAP_SIZE UIAPP_PHOTO_SIZE_10M
#else #else
@ -77,18 +78,6 @@
#endif #endif
#endif #endif
#if PHOTO_PREVIEW_SLICE_ENC_FUNC == ENABLE
#define CFG_JPG_PREVIEW_SLICE_ENC_PRIMARY_BUF_WIDTH 1920
#define CFG_JPG_PREVIEW_SLICE_ENC_PRIMARY_BUF_HEIGHT 1080
#define CFG_JPG_PREVIEW_SLICE_ENC_PRIMARY_BUF_SIZE VDO_YUV_BUFSIZE(CFG_JPG_PREVIEW_SLICE_ENC_PRIMARY_BUF_WIDTH, CFG_JPG_PREVIEW_SLICE_ENC_PRIMARY_BUF_HEIGHT, HD_VIDEO_PXLFMT_YUV420)
#define CFG_JPG_PREVIEW_SLICE_ENC_BS_BUF_RATIO 8 /* (yuv size / ratio) + header = bs buf size */
#define CFG_JPG_PREVIEW_SLICE_ENC_INIT_QUALITY_PRIMARY 90
#define CFG_JPG_PREVIEW_SLICE_ENC_INIT_QUALITY_THUMBNAIL 70
#define CFG_JPG_PREVIEW_SLICE_ENC_INIT_QUALITY_SCREENNAIL 70
#define CFG_JPG_PREVIEW_SLICE_ENC_QUALITY_DOWN_STEP 3
#endif
#define JPG_COMERESSED_RATIO_5 (5) #define JPG_COMERESSED_RATIO_5 (5)
#define JPG_COMERESSED_RATIO_6 (6) #define JPG_COMERESSED_RATIO_6 (6)
#define JPG_COMERESSED_RATIO_7 (7) #define JPG_COMERESSED_RATIO_7 (7)
@ -109,11 +98,29 @@
#define JPG_BRC_INIT_Q 85 #define JPG_BRC_INIT_Q 85
#define JPG_BRC_RETRY_CNT 4 #define JPG_BRC_RETRY_CNT 4
#define THUMBNAIL_TARGETBYTERATE (160*120*2/JPG_COMERESSED_RATIO_5) #define THUMBNAIL_TARGETBYTERATE (160*120*2/JPG_COMERESSED_RATIO_5)
#define SCREENNAIL_TARGETBYTERATE (CFG_SCREENNAIL_W*CFG_SCREENNAIL_H/(2*JPG_COMERESSED_RATIO_8)) #define SCREENNAIL_TARGETBYTERATE (CFG_SCREENNAIL_W*CFG_SCREENNAIL_H*3/(2*JPG_COMERESSED_RATIO_8))
#define PRIMARY_TARGETBYTERATE_UBOUND(TBR) (TBR + (TBR * 15 / 100)) #define PRIMARY_TARGETBYTERATE_UBOUND(TBR) (TBR + (TBR * 15 / 100))
#define PRIMARY_TARGETBYTERATE_LBOUND(TBR) (TBR - (TBR * 15 / 100)) #define PRIMARY_TARGETBYTERATE_LBOUND(TBR) (TBR - (TBR * 15 / 100))
#define JPG_FILE_BUFFER_SIZE(primary, screenail, thumbnail, exif) (primary + screenail + thumbnail + exif*6) #define JPG_FILE_BUFFER_SIZE(primary, screenail, thumbnail, exif) (primary + screenail + thumbnail + exif*6)
#if PHOTO_PREVIEW_SLICE_ENC_FUNC == ENABLE
#define CFG_JPG_PREVIEW_SLICE_ENC_PRIMARY_BUF_WIDTH 1920
#define CFG_JPG_PREVIEW_SLICE_ENC_PRIMARY_BUF_HEIGHT 1080
#define CFG_JPG_PREVIEW_SLICE_ENC_PRIMARY_BUF_SIZE VDO_YUV_BUFSIZE(CFG_JPG_PREVIEW_SLICE_ENC_PRIMARY_BUF_WIDTH, CFG_JPG_PREVIEW_SLICE_ENC_PRIMARY_BUF_HEIGHT, HD_VIDEO_PXLFMT_YUV420)
#define CFG_JPG_PREVIEW_SLICE_ENC_BS_BUF_RATIO 8 /* (yuv size / ratio) + header = bs buf size */
#define CFG_JPG_PREVIEW_SLICE_ENC_INIT_QUALITY_PRIMARY 90
#define CFG_JPG_PREVIEW_SLICE_ENC_INIT_QUALITY_THUMBNAIL 70
#define CFG_JPG_PREVIEW_SLICE_ENC_INIT_QUALITY_SCREENNAIL 70
#define CFG_JPG_PREVIEW_SLICE_ENC_QUALITY_STEP 3
#define CFG_JPG_PREVIEW_SLICE_ENC_RC_SCREENNAIL 1 /* rate control */
#define CFG_JPG_PREVIEW_SLICE_ENC_RC_SCREENNAIL_UBOUND (SCREENNAIL_TARGETBYTERATE + (SCREENNAIL_TARGETBYTERATE * 20 / 100))
#define CFG_JPG_PREVIEW_SLICE_ENC_RC_SCREENNAIL_LBOUND (SCREENNAIL_TARGETBYTERATE - (SCREENNAIL_TARGETBYTERATE * 20 / 100))
#define CFG_JPG_PREVIEW_SLICE_ENC_RC_SCREENNAIL_QUALITY_STEP 2
#endif
extern UINT32 gPhotoFrameBuf; extern UINT32 gPhotoFrameBuf;
extern void PhotoExe_RSC_SetSwitch(UINT32 index, UINT32 value); extern void PhotoExe_RSC_SetSwitch(UINT32 index, UINT32 value);
@ -411,4 +418,5 @@ extern BOOL PhotoExe_GetCapYUV420En(void);
extern HD_RESULT PhotoExe_DetSensor(BOOL *plug); extern HD_RESULT PhotoExe_DetSensor(BOOL *plug);
BOOL UiDateImprint_UpdateDate(char *StrBuf, UINT32 buff_len);
#endif //_UIAPP_PHOTO_H_ #endif //_UIAPP_PHOTO_H_

View File

@ -32,7 +32,7 @@
//#include "sf_mcu.h" //#include "sf_mcu.h"
#include "IOCfg.h" #include "IOCfg.h"
#include <sf_inc.h> #include <sf_inc.h>
#include "PrjInc.h"
#define THIS_DBGLVL 5 // 0=FATAL, 1=ERR, 2=WRN, 3=UNIT, 4=FUNC, 5=IND, 6=MSG, 7=VALUE, 8=USER #define THIS_DBGLVL 5 // 0=FATAL, 1=ERR, 2=WRN, 3=UNIT, 4=FUNC, 5=IND, 6=MSG, 7=VALUE, 8=USER
#if 1//_TODO #if 1//_TODO
@ -240,6 +240,18 @@ static INT32 PhotoExe_Preview_SliceEncode_DateStamp(
IMG_CAP_DATASTAMP_EVENT event); IMG_CAP_DATASTAMP_EVENT event);
extern INT32 Set_Cur_Day_Night_Status(BOOL OnOff, UINT8 isSnapVideo); extern INT32 Set_Cur_Day_Night_Status(BOOL OnOff, UINT8 isSnapVideo);
static INT32 PhotoExe_Preview_SliceEncode_Encode_Set_In(
const HD_PATH_ID enc_path_id,
const HD_VIDEO_PXLFMT vproc_out_pxlfmt,
const HD_DIM dim);
static INT32 PhotoExe_Preview_SliceEncode_Encode_Set_Out(
const HD_PATH_ID enc_path_id,
const UINT32 quality);
static INT32 PhotoExe_Preview_SliceEncode_Encode_Screennail(HD_VIDEO_FRAME* video_frame_in);
/* static variables */ /* static variables */
PHOTO_CAP_CBMSG_FP PhotoCapMsgCb = (PHOTO_CAP_CBMSG_FP)Photo_CaptureCB; PHOTO_CAP_CBMSG_FP PhotoCapMsgCb = (PHOTO_CAP_CBMSG_FP)Photo_CaptureCB;
@ -423,6 +435,7 @@ static UINT32 PhotoExe_GetScreenNailSize(void)
ScreenNailSize = CFG_SCREENNAIL_SIZE; ScreenNailSize = CFG_SCREENNAIL_SIZE;
uiImageSize = UI_GetData(FL_PHOTO_SIZE); uiImageSize = UI_GetData(FL_PHOTO_SIZE);
if (uiImageSize < ScreenNailSize) { if (uiImageSize < ScreenNailSize) {
//BitStreamSize = CFG_SCREENNAIL_W * CFG_SCREENNAIL_H / 2;
BitStreamSize = (sf_get_screen_nail_width(puiPara->SendPicSize)) * (sf_get_screen_nail_height(puiPara->SendPicSize)) / 2; BitStreamSize = (sf_get_screen_nail_width(puiPara->SendPicSize)) * (sf_get_screen_nail_height(puiPara->SendPicSize)) / 2;
} else { } else {
BitStreamSize = 0; BitStreamSize = 0;
@ -455,7 +468,10 @@ void PhotoExe_SetScreenNailSize(UINT32 sensor_id)
if (uiImageSize < ScreenNailSize) { if (uiImageSize < ScreenNailSize) {
//BufferSize.w = GetPhotoSizeWidth(ScreenNailSize); //BufferSize.w = GetPhotoSizeWidth(ScreenNailSize);
//BufferSize.h = GetPhotoSizeHeight(ScreenNailSize); //BufferSize.h = GetPhotoSizeHeight(ScreenNailSize);
BufferSize.w = CFG_SCREENNAIL_W;//SendPicSize
UIMenuStoreInfo *puiPara = sf_ui_para_get();
BufferSize.w = sf_get_screen_nail_width(puiPara->SendPicSize);
//BufferSize.w = CFG_SCREENNAIL_W;//SendPicSize
BufferSize.h = BufferSize.w * 3 / 4; BufferSize.h = BufferSize.w * 3 / 4;
ImageRatioIdx = GetPhotoSizeRatio(UI_GetData(FL_PHOTO_SIZE)); ImageRatioIdx = GetPhotoSizeRatio(UI_GetData(FL_PHOTO_SIZE));
@ -514,9 +530,12 @@ void PhotoExe_SetQuickViewSize(UINT32 sensor_id)
DevSize = GxVideo_GetDeviceSize(DOUT1); DevSize = GxVideo_GetDeviceSize(DOUT1);
#if (_QUICKVIEW_SIZE_ == _QUICKVIEW_SIZE_VGA_) #if (_QUICKVIEW_SIZE_ == _QUICKVIEW_SIZE_VGA_)
{ {
UIMenuStoreInfo *puiPara = sf_ui_para_get();
// fix bug: w/h size will be wrong if no VGA/3M resolution! // fix bug: w/h size will be wrong if no VGA/3M resolution!
BufferSize.w = CFG_SCREENNAIL_W; //BufferSize.w = CFG_SCREENNAIL_W;
BufferSize.h = CFG_SCREENNAIL_H; //BufferSize.h = CFG_SCREENNAIL_H;
BufferSize.w = sf_get_screen_nail_width(puiPara->SendPicSize);
BufferSize.h = sf_get_screen_nail_height(puiPara->SendPicSize);
if (BufferSize.w > (UINT32)DevSize.w) { if (BufferSize.w > (UINT32)DevSize.w) {
BufferSize.w = DevSize.w; BufferSize.w = DevSize.w;
@ -1349,8 +1368,8 @@ void PhotoExe_DZoomOutBK(void)
#define VDO_SEN1_SIZE_W 2960// 2560 #define VDO_SEN1_SIZE_W 2960// 2560
#define VDO_SEN1_SIZE_H 1664//1440 #define VDO_SEN1_SIZE_H 1664//1440
#else #else
#define VDO_SEN1_SIZE_W 2960// 2560 #define VDO_SEN1_SIZE_W 2592// 2560
#define VDO_SEN1_SIZE_H 1664//1440 #define VDO_SEN1_SIZE_H 1944//1440
#endif #endif
#define VDO_SEN2_SIZE_W 2560 #define VDO_SEN2_SIZE_W 2560
#define VDO_SEN2_SIZE_H 1440 #define VDO_SEN2_SIZE_H 1440
@ -1401,26 +1420,24 @@ void PhotoExe_DZoomOutBK(void)
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
static HD_COMMON_MEM_INIT_CONFIG g_photo_mem_cfg = {0}; static HD_COMMON_MEM_INIT_CONFIG g_photo_mem_cfg = {0};
void PhotoStamp_get_isp_status(UINT32 id, char* Buf, UINT32 BufLen)
void UiDateImprint_get_isp_status(UINT32 id, char* Buf, UINT32 BufLen)
{ {
AET_STATUS_INFO ae_status = {0}; AET_STATUS_INFO ae_status = {0};
AWBT_STATUS awb_status = {0}; AWBT_STATUS awb_status = {0};
//IQT_WDR_PARAM wdr = {0}; //IQT_WDR_PARAM wdr = {0};
HD_RESULT hd_ret;
UINT16 AD_Value; ae_status.id = AE_ID_1;
if ((hd_ret = vendor_isp_init()) != HD_OK) {
DBG_ERR("vendor_isp_init() failed(%d)\r\n", hd_ret);
}
AD_Value = sf_mcu_get_irshtter();
ae_status.id = 0;
vendor_isp_get_ae(AET_ITEM_STATUS, &ae_status); vendor_isp_get_ae(AET_ITEM_STATUS, &ae_status);
awb_status.id = 0; awb_status.id = AWB_ID_1;
vendor_isp_get_awb(AWBT_ITEM_STATUS, &awb_status); vendor_isp_get_awb(AWBT_ITEM_STATUS, &awb_status);
/*wdr.id = id;
/*
wdr.id = id;
vendor_isp_get_iq(IQT_ITEM_WDR_PARAM, &wdr); vendor_isp_get_iq(IQT_ITEM_WDR_PARAM, &wdr);
*/ */
snprintf(Buf, BufLen, "%d %3d %3d %3d %6d %6d %4d %4d %3d %3d %4d %d\0",
ae_status.status_info.state_adj, snprintf(Buf, BufLen, "%3d %4d %4d %6d %6d %4d %4d %4d %4d %4d\0",
ae_status.status_info.lv/100000, ae_status.status_info.lv/100000,
ae_status.status_info.lum, ae_status.status_info.lum,
ae_status.status_info.expect_lum, ae_status.status_info.expect_lum,
@ -1431,16 +1448,53 @@ AD_Value = sf_mcu_get_irshtter();
//wdr.wdr.enable, //wdr.wdr.enable,
awb_status.status.cur_r_gain, awb_status.status.cur_r_gain,
awb_status.status.cur_b_gain, awb_status.status.cur_b_gain,
awb_status.status.cur_ct, awb_status.status.cur_ct
AD_Value
); );
DBG_ERR("isp Buf=%s\r\n",Buf); //DBG_DUMP("isp Buf=%s\r\n",Buf);
if ((hd_ret = vendor_isp_uninit()) != HD_OK) {
DBG_ERR("vendor_isp_uninit() failed(%d)\r\n", hd_ret);
}
return; return;
} }
BOOL UiDateImprint_UpdateDate(char *StrBuf, UINT32 buff_len)
{
char *str = NULL;
DBG_IND("\r\n");
DateTime_Load();
#if PHOTO_ISP_STAMP == ENABLE
str = DateTime_MakeYMD();
UiDateImprint_get_isp_status(0, str, DateTime_StrBuf_Size());
#else
switch (UI_GetData(FL_DATE_STAMP))
{
case DATEIMPRINT_DATE:
str = DateTime_MakeYMD();
DBG_IND("DATEIMPRINT_DATE, str=%s\r\n", str);
break;
case DATEIMPRINT_DATE_TIME:
str = DateTime_MakeYMDHMS();
DBG_IND("DATEIMPRINT_DATE_TIME, str=%s\r\n", str);
break;
default:
StrBuf[0] = 0; //Empty String
}
#endif
if (strncmp(str,StrBuf,strlen(str))) {
strncpy(StrBuf, str, buff_len - 1);
return TRUE;
}
return FALSE;
}
//extern void GOIO_Turn_Onoff_IRCUT(BOOL onoff); //extern void GOIO_Turn_Onoff_IRCUT(BOOL onoff);
@ -1458,6 +1512,7 @@ void PhotoExe_CommPoolInit(void)
HD_PATH_ID video_out_ctrl = (HD_PATH_ID)GxVideo_GetDeviceCtrl(DOUT1, DISPLAY_DEVCTRL_CTRLPATH); HD_PATH_ID video_out_ctrl = (HD_PATH_ID)GxVideo_GetDeviceCtrl(DOUT1, DISPLAY_DEVCTRL_CTRLPATH);
HD_RESULT hd_ret = HD_OK; HD_RESULT hd_ret = HD_OK;
USIZE DispDevSize = {0}; USIZE DispDevSize = {0};
UIMenuStoreInfo *puiPara = sf_ui_para_get();
hd_ret = hd_videoout_get(video_out_ctrl, HD_VIDEOOUT_PARAM_SYSCAPS, p_video_out_syscaps); hd_ret = hd_videoout_get(video_out_ctrl, HD_VIDEOOUT_PARAM_SYSCAPS, p_video_out_syscaps);
if (hd_ret != HD_OK) { if (hd_ret != HD_OK) {
@ -1555,7 +1610,8 @@ void PhotoExe_CommPoolInit(void)
id ++; id ++;
g_photo_mem_cfg.pool_info[id].type = HD_COMMON_MEM_COMMON_POOL; g_photo_mem_cfg.pool_info[id].type = HD_COMMON_MEM_COMMON_POOL;
g_photo_mem_cfg.pool_info[id].blk_size = DBGINFO_BUFSIZE() + VDO_YUV_BUFSIZE(CFG_SCREENNAIL_W, CFG_SCREENNAIL_H, pxl_fmt); g_photo_mem_cfg.pool_info[id].blk_size = DBGINFO_BUFSIZE() + VDO_YUV_BUFSIZE(sf_get_screen_nail_width(puiPara->SendPicSize), sf_get_screen_nail_height(puiPara->SendPicSize), pxl_fmt);
// g_photo_mem_cfg.pool_info[id].blk_size = DBGINFO_BUFSIZE() + VDO_YUV_BUFSIZE(CFG_SCREENNAIL_W, CFG_SCREENNAIL_H, pxl_fmt);
g_photo_mem_cfg.pool_info[id].blk_cnt = 1; g_photo_mem_cfg.pool_info[id].blk_cnt = 1;
g_photo_mem_cfg.pool_info[id].ddr_id = DDR_ID0; g_photo_mem_cfg.pool_info[id].ddr_id = DDR_ID0;
@ -1871,11 +1927,15 @@ static void PhotoExe_InitNetworkStream(UINT32 dualCam, USIZE *pImageRatioSize)
if (dualCam == DUALCAM_FRONT) { if (dualCam == DUALCAM_FRONT) {
p_strm = UIAppPhoto_get_StreamConfig(UIAPP_PHOTO_STRM_ID_1); p_strm = UIAppPhoto_get_StreamConfig(UIAPP_PHOTO_STRM_ID_1);
ImageApp_Photo_Config(PHOTO_CFG_STRM_INFO, (UINT32)p_strm); ImageApp_Photo_Config(PHOTO_CFG_STRM_INFO, (UINT32)p_strm);
p_strm->enable = PHOTO_PORT_STATE_EN;
p_strm->width_ratio = pImageRatioSize->w; p_strm->width_ratio = pImageRatioSize->w;
p_strm->height_ratio = pImageRatioSize->h; p_strm->height_ratio = pImageRatioSize->h;
p_strm->width = ALIGN_CEIL_16(p_strm->height* pImageRatioSize->w/pImageRatioSize->h); p_strm->width = ALIGN_CEIL_16(p_strm->height* pImageRatioSize->w/pImageRatioSize->h);
//p_strm->height = PHOTO_STRM_HEIGHT; //p_strm->height = PHOTO_STRM_HEIGHT;
ImageApp_Photo_Config(PHOTO_CFG_STRM_INFO, (UINT32)p_strm); ImageApp_Photo_Config(PHOTO_CFG_STRM_INFO, (UINT32)p_strm);
if (p_strm->strm_type== PHOTO_STRM_TYPE_HTTP) { if (p_strm->strm_type== PHOTO_STRM_TYPE_HTTP) {
PhotoExe_InitNetHttp(); PhotoExe_InitNetHttp();
} }
@ -1902,8 +1962,7 @@ static void PhotoExe_InitNetworkStream(UINT32 dualCam, USIZE *pImageRatioSize)
p_strm = UIAppPhoto_get_StreamConfig(UIAPP_PHOTO_STRM_ID_1+i); p_strm = UIAppPhoto_get_StreamConfig(UIAPP_PHOTO_STRM_ID_1+i);
if (p_strm == NULL) if (p_strm == NULL)
return; return;
// p_strm->enable = PHOTO_PORT_STATE_EN_RUN; p_strm->enable = PHOTO_PORT_STATE_EN_RUN;
p_strm->enable = PHOTO_PORT_STATE_EN;
#if ((SENSOR_CAPS_COUNT == 2) && (SENSOR_INSERT_MASK != 0)) #if ((SENSOR_CAPS_COUNT == 2) && (SENSOR_INSERT_MASK != 0))
if (System_GetEnableSensor() == SENSOR_1 && i==UIAPP_PHOTO_STRM_ID_2){ if (System_GetEnableSensor() == SENSOR_1 && i==UIAPP_PHOTO_STRM_ID_2){
p_strm->enable = PHOTO_PORT_STATE_EN; p_strm->enable = PHOTO_PORT_STATE_EN;
@ -2260,7 +2319,7 @@ static void PhotoExe_InitDisplayStream(UINT32 dualCam, USIZE *pImageRatioSize)
p_disp->rotate_dir = SysVideo_GetDirbyID(DOUT2); p_disp->rotate_dir = SysVideo_GetDirbyID(DOUT2);
ImageApp_Photo_Config(PHOTO_CFG_DISP_INFO, (UINT32)p_disp); ImageApp_Photo_Config(PHOTO_CFG_DISP_INFO, (UINT32)p_disp);
DBG_DUMP("p_disp->rotate_dir = %lx\n", p_disp->rotate_dir); DBG_IND("p_disp->rotate_dir = %lx\n", p_disp->rotate_dir);
} }
// sensor 2 display // sensor 2 display
else if (dualCam == DUALCAM_BEHIND) { else if (dualCam == DUALCAM_BEHIND) {
@ -2368,15 +2427,18 @@ INT32 PhotoExe_OnOpen(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray)
USIZE ImageRatioSize = {0}; USIZE ImageRatioSize = {0};
UINT32 ImageRatioIdx; UINT32 ImageRatioIdx;
#if 0
UI_SetData(FL_PHOTO_SIZE, PHOTO_SIZE_5M);
#endif
g_bPhotoOpened = FALSE; g_bPhotoOpened = FALSE;
localInfo->isStartCapture = FALSE; localInfo->isStartCapture = FALSE;
//UIMenuStoreInfo *puiPara = sf_ui_para_get();
ImageRatioIdx = GetPhotoSizeRatio(UI_GetData(FL_PHOTO_SIZE)); ImageRatioIdx = GetPhotoSizeRatio(UI_GetData(FL_PHOTO_SIZE));
g_photo_ImageRatioSize = IMAGERATIO_SIZE[ImageRatioIdx]; g_photo_ImageRatioSize = IMAGERATIO_SIZE[ImageRatioIdx];
// g_photo_ImageRatioSize = IMAGERATIO_SIZE[4]; // g_photo_ImageRatioSize = IMAGERATIO_SIZE[4];
FileSys_MakeDir(PHOTO_THUMB_PATH);
GOIO_Turn_Onoff_IRCUT(1); GOIO_Turn_Onoff_IRCUT(1);
//sf_ir_led_set(((2 == puiPara->NightMode) ? 2 : 1),puiPara->FlashLed, puiPara->NightMode,0); //sf_ir_led_set(((2 == puiPara->NightMode) ? 2 : 1),puiPara->FlashLed, puiPara->NightMode,0);
@ -2386,7 +2448,6 @@ INT32 PhotoExe_OnOpen(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray)
system("sync"); system("sync");
usleep(100*1000); usleep(100*1000);
} }
PhotoExe_CommPoolInit(); PhotoExe_CommPoolInit();
dualCam =PhotoExe_InitSensorCount(); dualCam =PhotoExe_InitSensorCount();
PhotoExe_InitFileNaming(); PhotoExe_InitFileNaming();
@ -2400,11 +2461,9 @@ INT32 PhotoExe_OnOpen(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray)
ImageApp_Photo_DispConfig(PHOTO_CFG_DISP_REG_CB ,(UINT32)&PhotoExe_DispCB); ImageApp_Photo_DispConfig(PHOTO_CFG_DISP_REG_CB ,(UINT32)&PhotoExe_DispCB);
PhotoExe_InitDisplayStream(dualCam,&g_photo_ImageRatioSize); PhotoExe_InitDisplayStream(dualCam,&g_photo_ImageRatioSize);
PhotoExe_InitNetworkStream(dualCam,&g_photo_ImageRatioSize); PhotoExe_InitNetworkStream(dualCam,&g_photo_ImageRatioSize);
ImageApp_Photo_WiFiConfig(PHOTO_CFG_WIFI_REG_CB ,(UINT32)&PhotoExe_WifiCB); ImageApp_Photo_WiFiConfig(PHOTO_CFG_WIFI_REG_CB ,(UINT32)&PhotoExe_WifiCB);
PHOTO_SENSOR_INFO sen_cfg = {0}; PHOTO_SENSOR_INFO sen_cfg = {0};
UIAPP_PHOTO_SENSOR_INFO *pSensorInfo; UIAPP_PHOTO_SENSOR_INFO *pSensorInfo;
@ -2515,6 +2574,14 @@ INT32 PhotoExe_OnOpen(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray)
Flip.mirror_type=(UI_GetData(FL_MOVIE_SENSOR_ROTATE) == SEN_ROTATE_ON) ? HD_VIDEO_DIR_MIRRORXY : HD_VIDEO_DIR_NONE;//HD_VIDEO_DIR_MIRRORX; Flip.mirror_type=(UI_GetData(FL_MOVIE_SENSOR_ROTATE) == SEN_ROTATE_ON) ? HD_VIDEO_DIR_MIRRORXY : HD_VIDEO_DIR_NONE;//HD_VIDEO_DIR_MIRRORX;
ImageApp_Photo_Config(PHOTO_CFG_IPL_MIRROR,(UINT32)&Flip); ImageApp_Photo_Config(PHOTO_CFG_IPL_MIRROR,(UINT32)&Flip);
} }
#if (FS_FUNC == ENABLE)
// wait fs mount ready
System_WaitFS();
#endif
FileSys_MakeDir(PHOTO_THUMB_PATH);
#if (USE_FILEDB== ENABLE) #if (USE_FILEDB== ENABLE)
ImageApp_Photo_Config(PHOTO_CFG_FILEDB_MAX_NUM,5000); ImageApp_Photo_Config(PHOTO_CFG_FILEDB_MAX_NUM,5000);
@ -2554,7 +2621,6 @@ INT32 PhotoExe_OnOpen(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray)
} }
} }
#if PHOTO_PREVIEW_SLICE_ENC_FUNC #if PHOTO_PREVIEW_SLICE_ENC_FUNC
/* open encode path */ /* open encode path */
@ -3137,7 +3203,6 @@ INT32 PhotoExe_OnCaptureStop(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArra
Photo_setS2Status(FALSE); Photo_setS2Status(FALSE);
ImageApp_Photo_CapStop(); ImageApp_Photo_CapStop();
} }
return NVTEVT_CONSUME; return NVTEVT_CONSUME;
} }
@ -3455,12 +3520,10 @@ INT32 PhotoExe_OnImageRatio(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray
if (((rotate_dir & ISF_VDO_DIR_ROTATE_270) == ISF_VDO_DIR_ROTATE_270) || \ if (((rotate_dir & ISF_VDO_DIR_ROTATE_270) == ISF_VDO_DIR_ROTATE_270) || \
((rotate_dir & ISF_VDO_DIR_ROTATE_90) == ISF_VDO_DIR_ROTATE_90) ) { ((rotate_dir & ISF_VDO_DIR_ROTATE_90) == ISF_VDO_DIR_ROTATE_90) ) {
CHKPNT;
dst_w=sz_img.h; dst_w=sz_img.h;
dst_h=sz_img.w; dst_h=sz_img.w;
}else{ }else{
CHKPNT;
dst_w=sz_img.w; dst_w=sz_img.w;
dst_h=sz_img.h; dst_h=sz_img.h;
} }
@ -4039,6 +4102,7 @@ static INT32 PhotoExe_Preview_SliceEncode_Open(void)
in = HD_VIDEOENC_IN(0, first_out_port); in = HD_VIDEOENC_IN(0, first_out_port);
out = HD_VIDEOENC_OUT(0, first_out_port); out = HD_VIDEOENC_OUT(0, first_out_port);
ret = hd_videoenc_open(in, out, &venc_path_id); ret = hd_videoenc_open(in, out, &venc_path_id);
if (ret != HD_OK ){ if (ret != HD_OK ){
DBG_ERR("hd_videoenc_open(%lx, %lx) failed(%d)!\r\n", in, out, ret); DBG_ERR("hd_videoenc_open(%lx, %lx) failed(%d)!\r\n", in, out, ret);
goto EXIT; goto EXIT;
@ -4073,16 +4137,28 @@ static INT32 PhotoExe_Preview_SliceEncode_Open(void)
PhotoExe_Preview_SliceEncode_Encode_Config_Path(info->enc_path_id, dim, bitrate*2); PhotoExe_Preview_SliceEncode_Encode_Config_Path(info->enc_path_id, dim, bitrate*2);
/* To avoid mem fragment, start venc firtst. (hdal vdoenc.o[2].max / vdoenc.o[2].que / vdoenc.ctrl.bs)*/
{
PhotoExe_Preview_SliceEncode_Encode_Set_In(info->enc_path_id, vproc_out_pxlfmt, (HD_DIM) {max_info.width, max_info.height});
PhotoExe_Preview_SliceEncode_Encode_Set_Out(info->enc_path_id, CFG_JPG_PREVIEW_SLICE_ENC_INIT_QUALITY_PRIMARY);
hd_videoenc_start(info->enc_path_id);
hd_videoenc_stop(info->enc_path_id);
}
break; break;
} }
case PHOTO_ENC_JPG_SCREENNAIL: case PHOTO_ENC_JPG_SCREENNAIL:
{ {
UIMenuStoreInfo *puiPara = sf_ui_para_get();
info->enc_path_id = venc_path_id; info->enc_path_id = venc_path_id;
info->yuv_buf_mem_info.blk_size = VDO_YUV_BUFSIZE(CFG_SCREENNAIL_W, CFG_SCREENNAIL_H, vproc_out_pxlfmt); //info->yuv_buf_mem_info.blk_size = VDO_YUV_BUFSIZE(CFG_SCREENNAIL_W, CFG_SCREENNAIL_H, vproc_out_pxlfmt);
//dim = (HD_DIM){CFG_SCREENNAIL_W, CFG_SCREENNAIL_H};
info->yuv_buf_mem_info.blk_size = VDO_YUV_BUFSIZE(sf_get_screen_nail_width(puiPara->SendPicSize), sf_get_screen_nail_height(puiPara->SendPicSize), vproc_out_pxlfmt);
dim = (HD_DIM){CFG_SCREENNAIL_W, CFG_SCREENNAIL_H}; dim = (HD_DIM){sf_get_screen_nail_width(puiPara->SendPicSize), sf_get_screen_nail_height(puiPara->SendPicSize)};
bitrate = SCREENNAIL_TARGETBYTERATE * 8; //bitrate = SCREENNAIL_TARGETBYTERATE * 8;
bitrate = ((sf_get_screen_nail_width(puiPara->SendPicSize)) * (sf_get_screen_nail_height(puiPara->SendPicSize))*3/(2*JPG_COMERESSED_RATIO_8)) * 8;
break; break;
} }
@ -4167,11 +4243,6 @@ static PhotoExe_SliceEncode_Info* PhotoExe_Preview_SliceEncode_Get_Info(const PH
static INT32 PhotoExe_Preview_SliceEncode_Get_Dst_Slice_Info(PhotoExe_SliceSize_Info *info, UINT32 cap_size_w, UINT32 cap_size_h, UINT32 slice_num) static INT32 PhotoExe_Preview_SliceEncode_Get_Dst_Slice_Info(PhotoExe_SliceSize_Info *info, UINT32 cap_size_w, UINT32 cap_size_h, UINT32 slice_num)
{ {
if((cap_size_h % slice_num) != 0){
DBG_ERR("Height(%lu) should be %lu aligned!, please check photo size of PhotoMapping\r\n", cap_size_h, slice_num);
return E_SYS;
}
info->width = cap_size_w; info->width = cap_size_w;
info->height = cap_size_h; info->height = cap_size_h;
info->slice_num = slice_num; info->slice_num = slice_num;
@ -4204,18 +4275,10 @@ static INT32 PhotoExe_Preview_SliceEncode_Get_Curr_Dst_Slice_Info(PhotoExe_Slice
slice_num = 1; slice_num = 1;
} }
else{ else{
PHOTO_SLICE_ENC_DUMP("cap_size = %lu buf_size = %lu\n", cap_size, buf_size); PHOTO_SLICE_ENC_DUMP("cap_size = %lu buf_size = %lu\n", cap_size, buf_size);
UINT32 lines = (buf_size / cap_size_w); UINT32 lines = (buf_size / cap_size_w);
slice_num = cap_size_h / lines + (cap_size_h % lines ? 1 : 0); slice_num = cap_size_h / lines + (cap_size_h % lines ? 1 : 0);
if(cap_size_h % slice_num){
// cap_size_h = ALIGN_FLOOR(cap_size_h, slice_num);
cap_size_h -= (cap_size_h % slice_num);
// DBG_WRN("fix photo height to %u to meet alignment requirement slice_num=%lu\n", cap_size_h, slice_num);
}
} }
return PhotoExe_Preview_SliceEncode_Get_Dst_Slice_Info(info, cap_size_w, cap_size_h, slice_num); return PhotoExe_Preview_SliceEncode_Get_Dst_Slice_Info(info, cap_size_w, cap_size_h, slice_num);
@ -4224,8 +4287,7 @@ static INT32 PhotoExe_Preview_SliceEncode_Get_Curr_Dst_Slice_Info(PhotoExe_Slice
static UINT32 PhotoExe_Preview_SliceEncode_Get_Max_Dst_Slice_Buffer_Size(HD_VIDEO_PXLFMT pxl_fmt) static UINT32 PhotoExe_Preview_SliceEncode_Get_Max_Dst_Slice_Buffer_Size(HD_VIDEO_PXLFMT pxl_fmt)
{ {
HD_DIM dim = PhotoExe_Preview_SliceEncode_Get_Encode_Max_Size(); HD_DIM dim = PhotoExe_Preview_SliceEncode_Get_Encode_Max_Size();
UINT32 reserved_buffer_height = ((dim.h * 3) / 10); UINT32 reserved_buffer = 0;
UINT32 reserved_buffer = VDO_YUV_BUFSIZE(dim.w, reserved_buffer_height, pxl_fmt);
UINT32 max_buffer_size = VDO_YUV_BUFSIZE(dim.w, dim.h, pxl_fmt) + reserved_buffer; UINT32 max_buffer_size = VDO_YUV_BUFSIZE(dim.w, dim.h, pxl_fmt) + reserved_buffer;
return max_buffer_size; return max_buffer_size;
@ -4244,19 +4306,10 @@ static INT32 PhotoExe_Preview_SliceEncode_Get_Max_Dst_Slice_Info(PhotoExe_SliceS
slice_num = 1; slice_num = 1;
} }
else{ else{
// slice_num = CFG_JPG_PREVIEW_SLICE_ENC_NUM;
PHOTO_SLICE_ENC_DUMP("cap_size = %lu buf_size = %lu\n", cap_size, buf_size); PHOTO_SLICE_ENC_DUMP("cap_size = %lu buf_size = %lu\n", cap_size, buf_size);
UINT32 lines = (buf_size / cap_size_w); UINT32 lines = (buf_size / cap_size_w);
slice_num = cap_size_h / lines + (cap_size_h % lines ? 1 : 0); slice_num = cap_size_h / lines + (cap_size_h % lines ? 1 : 0);
if(cap_size_h % slice_num){
// cap_size_h = ALIGN_FLOOR(cap_size_h, slice_num);
cap_size_h -= (cap_size_h % slice_num);
// DBG_WRN("fix photo height to %u to meet alignment requirement slice_num=%lu\n", cap_size_h, slice_num);
}
} }
return PhotoExe_Preview_SliceEncode_Get_Dst_Slice_Info(info, cap_size_w, cap_size_h, slice_num); return PhotoExe_Preview_SliceEncode_Get_Dst_Slice_Info(info, cap_size_w, cap_size_h, slice_num);
@ -4442,6 +4495,27 @@ static INT32 PhotoExe_Preview_SliceEncode_Alloc_Buffer(PhotoExe_MEM_Info* info,
return E_OK; return E_OK;
} }
static INT32 PhotoExe_Preview_SliceEncode_Alloc_Buffer_Retry(PhotoExe_MEM_Info* info, char* name, UINT8 timeout, UINT32 delay_ms)
{
INT32 ret;
UINT8 cnt = 0;
do{
if(cnt > 0){
DBG_WRN("retrying %u...\n", cnt);
vos_util_delay_ms(delay_ms);
}
ret = PhotoExe_Preview_SliceEncode_Alloc_Buffer(info, name);
if(ret == E_OK)
break;
} while(++cnt < timeout);
return ret;
}
static INT32 PhotoExe_Preview_SliceEncode_Free_Buffer(PhotoExe_MEM_Info* info) static INT32 PhotoExe_Preview_SliceEncode_Free_Buffer(PhotoExe_MEM_Info* info)
{ {
HD_RESULT ret; HD_RESULT ret;
@ -4501,7 +4575,7 @@ static INT32 PhotoExe_Preview_SliceEncode_Init_VF_GFX_Slice(
UINT32 loff_dst[HD_VIDEO_MAX_PLANE] = {0}; UINT32 loff_dst[HD_VIDEO_MAX_PLANE] = {0};
UINT32 offset; UINT32 offset;
UINT32 scr_slice_height = (slice_idx == (src_slice_info.slice_num - 1)) ? src_slice_info.last_slice_height : src_slice_info.slice_height; UINT32 scr_slice_height = (slice_idx == (src_slice_info.slice_num - 1)) ? src_slice_info.last_slice_height : src_slice_info.slice_height;
UINT32 dst_slice_height = (slice_idx == (dst_slice_info.slice_num - 1)) ? (src_slice_info.last_slice_height * dst_slice_info.slice_height / src_slice_info.slice_height) : dst_slice_info.slice_height; UINT32 dst_slice_height = (slice_idx == (dst_slice_info.slice_num - 1)) ? dst_slice_info.last_slice_height : dst_slice_info.slice_height;
/* dst img */ /* dst img */
@ -4808,7 +4882,7 @@ static INT32 PhotoExe_Preview_SliceEncode_Encode_Thumbnail(HD_VIDEO_FRAME* video
PHOTO_SLICE_ENC_DUMP("copy bs data (%lx -> %lx) , size = %lx\r\n", enc_jpg_va, slice_enc_info->bs_buf_mem_info.va, bs_data_pull.video_pack[0].size); PHOTO_SLICE_ENC_DUMP("copy bs data (%lx -> %lx) , size = %lx\r\n", enc_jpg_va, slice_enc_info->bs_buf_mem_info.va, bs_data_pull.video_pack[0].size);
if(bs_data_pull.video_pack[0].size > slice_enc_info->bs_buf_mem_info.blk_size){ if(bs_data_pull.video_pack[0].size > slice_enc_info->bs_buf_mem_info.blk_size){
DBG_ERR("bs overflow!(data size: %lx buffer size: %lx)\r\n", bs_data_pull.video_pack[0].size, slice_enc_info->bs_buf_mem_info.blk_size); DBG_ERR("bs overflow!(data size: %lx buffer size: %lx)\r\n", bs_data_pull.video_pack[0].size, slice_enc_info->bs_buf_mem_info.blk_size);
ret = HD_ERR_SYS; ret = HD_ERR_NOMEM;
goto EXIT; goto EXIT;
} }
@ -4849,11 +4923,16 @@ static INT32 PhotoExe_Preview_SliceEncode_Scale_Screennail(
VF_GFX_SCALE vf_gfx_scale = {0}; VF_GFX_SCALE vf_gfx_scale = {0};
URECT dest_win = {0}; URECT dest_win = {0};
USIZE src_size = {0}, dest_size = {0}; USIZE src_size = {0}, dest_size = {0};
UIMenuStoreInfo *puiPara = sf_ui_para_get();
src_size.w = video_frame_in->dim.w; src_size.w = video_frame_in->dim.w;
src_size.h = video_frame_in->dim.h; src_size.h = video_frame_in->dim.h;
dest_size.w = CFG_SCREENNAIL_W; dest_size.w = sf_get_screen_nail_width(puiPara->SendPicSize);
dest_size.h = CFG_SCREENNAIL_H; dest_size.h = sf_get_screen_nail_height(puiPara->SendPicSize);
//dest_size.w = CFG_SCREENNAIL_W;
//dest_size.h = CFG_SCREENNAIL_H;
PhotoExe_Cal_Jpg_Size(&src_size, &dest_size , &dest_win); PhotoExe_Cal_Jpg_Size(&src_size, &dest_size , &dest_win);
ret = PhotoExe_Preview_SliceEncode_Scale_YUV(&vf_gfx_scale, video_frame_in, screennail_buffer_info, &dest_size, &dest_win, HD_VIDEO_PXLFMT_YUV420); ret = PhotoExe_Preview_SliceEncode_Scale_YUV(&vf_gfx_scale, video_frame_in, screennail_buffer_info, &dest_size, &dest_win, HD_VIDEO_PXLFMT_YUV420);
@ -4866,6 +4945,89 @@ static INT32 PhotoExe_Preview_SliceEncode_Scale_Screennail(
return E_OK; return E_OK;
} }
#if CFG_JPG_PREVIEW_SLICE_ENC_RC_SCREENNAIL
static INT32 PhotoExe_Preview_SliceEncode_Encode_Screennail_RC(HD_VIDEO_FRAME* video_frame_in)
{
static UINT32 quality = CFG_JPG_PREVIEW_SLICE_ENC_INIT_QUALITY_SCREENNAIL;
INT8 direction = 0;
INT32 ret = E_OK;
PhotoExe_SliceEncode_Info* slice_encode_screennail_info = PhotoExe_Preview_SliceEncode_Get_Info(PHOTO_ENC_JPG_SCREENNAIL);
//UIMenuStoreInfo *puiPara = sf_ui_para_get();
//((sf_get_screen_nail_width(puiPara->SendPicSize)) * (sf_get_screen_nail_height(puiPara->SendPicSize))*3/(2*JPG_COMERESSED_RATIO_8)) * 8;
const UINT32 ubount = CFG_JPG_PREVIEW_SLICE_ENC_RC_SCREENNAIL_UBOUND;
const UINT32 lbount = CFG_JPG_PREVIEW_SLICE_ENC_RC_SCREENNAIL_UBOUND;
//const UINT32 ubount = (((sf_get_screen_nail_width(puiPara->SendPicSize)) * (sf_get_screen_nail_height(puiPara->SendPicSize))*3/(2*JPG_COMERESSED_RATIO_8)) + (((sf_get_screen_nail_width(puiPara->SendPicSize)) * (sf_get_screen_nail_height(puiPara->SendPicSize))*3/(2*JPG_COMERESSED_RATIO_8)) * 20 / 100));
//const UINT32 lbount = (((sf_get_screen_nail_width(puiPara->SendPicSize)) * (sf_get_screen_nail_height(puiPara->SendPicSize))*3/(2*JPG_COMERESSED_RATIO_8)) - (((sf_get_screen_nail_width(puiPara->SendPicSize)) * (sf_get_screen_nail_height(puiPara->SendPicSize))*3/(2*JPG_COMERESSED_RATIO_8)) * 20 / 100));
bool stop_flag = false;
do {
PHOTO_SLICE_ENC_DUMP("screennail quality = %lu\n", quality);
ret = PhotoExe_Preview_SliceEncode_Encode_Set_Out(slice_encode_screennail_info->enc_path_id, quality);
if(ret != E_OK){
goto EXIT;
}
ret = PhotoExe_Preview_SliceEncode_Encode_Screennail(video_frame_in);
if ( (ret != E_OK) && (ret != HD_ERR_NOMEM)){
goto EXIT;
}
if((slice_encode_screennail_info->bs_buf_mem_info.used_size > ubount) || (ret == HD_ERR_NOMEM)){
if(direction == 1){
quality -= CFG_JPG_PREVIEW_SLICE_ENC_RC_SCREENNAIL_QUALITY_STEP;
stop_flag = true; /* current step > ubound and next prev step < lbound , stop rc flow (choose prev step)*/
continue;
}
else{
direction = -1;
if(quality == 0){
DBG_WRN("lowest quality reached, stop rc flow!\n");
goto EXIT;
}
else if(quality > CFG_JPG_PREVIEW_SLICE_ENC_RC_SCREENNAIL_QUALITY_STEP)
quality -= CFG_JPG_PREVIEW_SLICE_ENC_RC_SCREENNAIL_QUALITY_STEP;
else{
quality = 0;
}
}
}
else if(slice_encode_screennail_info->bs_buf_mem_info.used_size < lbount){
if(stop_flag){
break;
}
if(direction == -1){
DBG_WRN("back search due to low resolution of CFG_JPG_PREVIEW_SLICE_ENC_RC_SCREENNAIL_QUALITY_STEP(%lu), stop rc flow\n", CFG_JPG_PREVIEW_SLICE_ENC_RC_SCREENNAIL_QUALITY_STEP);
break;
}
else{
direction = 1;
if(quality >= 99){
quality = 99;
DBG_WRN("highest quality reached, stop rc flow!\n");
goto EXIT;
}
else if(quality < (99 - CFG_JPG_PREVIEW_SLICE_ENC_RC_SCREENNAIL_QUALITY_STEP))
quality += CFG_JPG_PREVIEW_SLICE_ENC_RC_SCREENNAIL_QUALITY_STEP;
else{
quality = 99;
}
}
}
} while(1);
EXIT:
return ret;
}
#endif
static INT32 PhotoExe_Preview_SliceEncode_Encode_Screennail(HD_VIDEO_FRAME* video_frame_in) static INT32 PhotoExe_Preview_SliceEncode_Encode_Screennail(HD_VIDEO_FRAME* video_frame_in)
{ {
HD_RESULT ret; HD_RESULT ret;
@ -4903,7 +5065,7 @@ static INT32 PhotoExe_Preview_SliceEncode_Encode_Screennail(HD_VIDEO_FRAME* vide
PHOTO_SLICE_ENC_DUMP("copy bs data (%lx -> %lx) , size = %lx\r\n", enc_jpg_va, slice_enc_info->bs_buf_mem_info.va, bs_data_pull.video_pack[0].size); PHOTO_SLICE_ENC_DUMP("copy bs data (%lx -> %lx) , size = %lx\r\n", enc_jpg_va, slice_enc_info->bs_buf_mem_info.va, bs_data_pull.video_pack[0].size);
if(bs_data_pull.video_pack[0].size > slice_enc_info->bs_buf_mem_info.blk_size){ if(bs_data_pull.video_pack[0].size > slice_enc_info->bs_buf_mem_info.blk_size){
DBG_ERR("bs overflow!(data size: %lx buffer size: %lx)\r\n", bs_data_pull.video_pack[0].size, slice_enc_info->bs_buf_mem_info.blk_size); DBG_ERR("bs overflow!(data size: %lx buffer size: %lx)\r\n", bs_data_pull.video_pack[0].size, slice_enc_info->bs_buf_mem_info.blk_size);
ret = HD_ERR_SYS; ret = HD_ERR_NOMEM;
goto EXIT; goto EXIT;
} }
@ -5014,7 +5176,7 @@ static INT32 PhotoExe_Preview_SliceEncode_Encode_Primary(
dst_slice_info, dst_slice_info,
slice_idx); slice_idx);
if(vf_gfx_scale(&vf_gfx_scale_param, 1) != HD_OK){ if((ret = vf_gfx_scale(&vf_gfx_scale_param, 1)) != HD_OK){
goto EXIT; goto EXIT;
} }
@ -5133,12 +5295,12 @@ static INT32 PhotoExe_Preview_SliceEncode_Encode_Primary(
if(quality_old == 1){ if(quality_old == 1){
restart = FALSE; restart = FALSE;
} }
else if(quality_old <= CFG_JPG_PREVIEW_SLICE_ENC_QUALITY_DOWN_STEP){ else if(quality_old <= CFG_JPG_PREVIEW_SLICE_ENC_QUALITY_STEP){
quality_new = 1; quality_new = 1;
restart = TRUE; restart = TRUE;
} }
else if(quality_old > CFG_JPG_PREVIEW_SLICE_ENC_QUALITY_DOWN_STEP){ else if(quality_old > CFG_JPG_PREVIEW_SLICE_ENC_QUALITY_STEP){
quality_new = quality_old - CFG_JPG_PREVIEW_SLICE_ENC_QUALITY_DOWN_STEP; quality_new = quality_old - CFG_JPG_PREVIEW_SLICE_ENC_QUALITY_STEP;
restart = TRUE; restart = TRUE;
} }
else{ else{
@ -5279,6 +5441,7 @@ INT32 PhotoExe_Preview_SliceEncode(VControl *pCtrl, UINT32 paramNum, UINT32 *par
HD_VIDEO_PXLFMT vproc_out_pxlfmt = 0; HD_VIDEO_PXLFMT vproc_out_pxlfmt = 0;
PhotoExe_MEM_Info exif_mem_info = {0}; PhotoExe_MEM_Info exif_mem_info = {0};
UINT32 enc_accum_size = 0; UINT32 enc_accum_size = 0;
UIMenuStoreInfo *puiPara = sf_ui_para_get();
SLICE_ENC_VOS_TICK_TRIG(SLICE_ENC_VOS_TICK_S); SLICE_ENC_VOS_TICK_TRIG(SLICE_ENC_VOS_TICK_S);
@ -5347,7 +5510,13 @@ INT32 PhotoExe_Preview_SliceEncode(VControl *pCtrl, UINT32 paramNum, UINT32 *par
goto EXIT; goto EXIT;
} }
#if CFG_JPG_PREVIEW_SLICE_ENC_RC_SCREENNAIL
slice_encode_screennail_info->bs_buf_mem_info.blk_size = CFG_JPG_PREVIEW_SLICE_ENC_RC_SCREENNAIL_UBOUND;//(((sf_get_screen_nail_width(puiPara->SendPicSize)) * (sf_get_screen_nail_height(puiPara->SendPicSize))*3/(2*JPG_COMERESSED_RATIO_8)) + (((sf_get_screen_nail_width(puiPara->SendPicSize)) * (sf_get_screen_nail_height(puiPara->SendPicSize))*3/(2*JPG_COMERESSED_RATIO_8)) * 20 / 100));
#else
slice_encode_screennail_info->bs_buf_mem_info.blk_size = PhotoExe_GetScreenNailSize(); slice_encode_screennail_info->bs_buf_mem_info.blk_size = PhotoExe_GetScreenNailSize();
#endif
if(PhotoExe_Preview_SliceEncode_Alloc_Buffer(&slice_encode_screennail_info->bs_buf_mem_info, "slice_enc_screennail") != E_OK){ if(PhotoExe_Preview_SliceEncode_Alloc_Buffer(&slice_encode_screennail_info->bs_buf_mem_info, "slice_enc_screennail") != E_OK){
goto EXIT; goto EXIT;
} }
@ -5423,13 +5592,19 @@ INT32 PhotoExe_Preview_SliceEncode(VControl *pCtrl, UINT32 paramNum, UINT32 *par
/* screennail encode */ /* screennail encode */
SLICE_ENC_VOS_TICK_TRIG(SLICE_ENC_VOS_TICK_SCR_ENC_S); SLICE_ENC_VOS_TICK_TRIG(SLICE_ENC_VOS_TICK_SCR_ENC_S);
//PhotoExe_Preview_SliceEncode_Encode_Set_In(slice_encode_screennail_info->enc_path_id, vproc_out_pxlfmt, (HD_DIM) {CFG_SCREENNAIL_W, CFG_SCREENNAIL_H});
PhotoExe_Preview_SliceEncode_Encode_Set_In(slice_encode_screennail_info->enc_path_id, vproc_out_pxlfmt, (HD_DIM) {sf_get_screen_nail_width(puiPara->SendPicSize), sf_get_screen_nail_height(puiPara->SendPicSize)});
PhotoExe_Preview_SliceEncode_Encode_Set_In(slice_encode_screennail_info->enc_path_id, vproc_out_pxlfmt, (HD_DIM) {CFG_SCREENNAIL_W, CFG_SCREENNAIL_H}); #if CFG_JPG_PREVIEW_SLICE_ENC_RC_SCREENNAIL
if(PhotoExe_Preview_SliceEncode_Encode_Screennail_RC(&video_frame_out_screennail) != E_OK){
goto EXIT;
}
#else
PhotoExe_Preview_SliceEncode_Encode_Set_Out(slice_encode_screennail_info->enc_path_id, CFG_JPG_PREVIEW_SLICE_ENC_INIT_QUALITY_SCREENNAIL); PhotoExe_Preview_SliceEncode_Encode_Set_Out(slice_encode_screennail_info->enc_path_id, CFG_JPG_PREVIEW_SLICE_ENC_INIT_QUALITY_SCREENNAIL);
if(PhotoExe_Preview_SliceEncode_Encode_Screennail(&video_frame_out_screennail) != E_OK){ if(PhotoExe_Preview_SliceEncode_Encode_Screennail(&video_frame_out_screennail) != E_OK){
goto EXIT; goto EXIT;
} }
#endif
SLICE_ENC_VOS_TICK_TRIG(SLICE_ENC_VOS_TICK_SCR_ENC_E); SLICE_ENC_VOS_TICK_TRIG(SLICE_ENC_VOS_TICK_SCR_ENC_E);
@ -5627,7 +5802,7 @@ THREAD_RETTYPE _PhotoExe_Preview_SliceEncode_Worker(void* arg)
} }
if(flag & FLG_PHOTO_SLICE_ENC_CMD_START){ if(flag & FLG_PHOTO_SLICE_ENC_CMD_START){
DBG_DUMP("start\n"); DBG_IND("start\n");
set_flg(param->flag_id, FLG_PHOTO_SLICE_ENC_STA_STARTED); set_flg(param->flag_id, FLG_PHOTO_SLICE_ENC_STA_STARTED);
if(param->callback){ if(param->callback){
param->callback(param->user_data); param->callback(param->user_data);
@ -5675,7 +5850,6 @@ typedef struct {
UINT8 cnt; UINT8 cnt;
lfqueue_t* queue12; /* shared with CB1 */ lfqueue_t* queue12; /* shared with CB1 */
lfqueue_t* queue23; /* shared with CB3 */ lfqueue_t* queue23; /* shared with CB3 */
} PhotoExe_Preview_SliceEncode_CB2_Param; } PhotoExe_Preview_SliceEncode_CB2_Param;
typedef struct { typedef struct {
@ -5695,7 +5869,7 @@ INT32 PhotoExe_Preview_SliceEncode_CB1(void* user_data)
PHOTO_VID_IN vid_in = PHOTO_VID_IN_1; PHOTO_VID_IN vid_in = PHOTO_VID_IN_1;
HD_PATH_ID vproc_path_id; HD_PATH_ID vproc_path_id;
PhotoExe_Preview_SliceEncode_Queue12_Param* queue_ele_out = NULL; PhotoExe_Preview_SliceEncode_Queue12_Param* queue_ele_out = NULL;
VOS_TICK tick1 = 0, tick2 = 0, elapsed = 0; VOS_TICK tick1;
UINT32 err_cnt = 0, err_timeout = 30; UINT32 err_cnt = 0, err_timeout = 30;
if(!user_data){ if(!user_data){
@ -5715,23 +5889,8 @@ INT32 PhotoExe_Preview_SliceEncode_CB1(void* user_data)
ImageApp_Photo_Get_Hdal_Path(vid_in, PHOTO_HDAL_VPRC_3DNR_REF_PATH, (UINT32 *)&vproc_path_id); ImageApp_Photo_Get_Hdal_Path(vid_in, PHOTO_HDAL_VPRC_3DNR_REF_PATH, (UINT32 *)&vproc_path_id);
do{ do{
if(param->cnt)
vos_perf_mark(&tick1); vos_util_delay_ms(param->period);
if(tick2){
elapsed = vos_perf_duration(tick2, tick1);
elapsed /= 1000;
if(elapsed < param->period){
vos_util_delay_ms(param->period - elapsed);
continue;
}
else{
tick2 = tick1;
}
}
else{
tick2 = tick1;
}
hd_ret = hd_videoproc_pull_out_buf(vproc_path_id, &video_frame, -1); hd_ret = hd_videoproc_pull_out_buf(vproc_path_id, &video_frame, -1);
@ -5747,9 +5906,12 @@ INT32 PhotoExe_Preview_SliceEncode_CB1(void* user_data)
} }
} }
DBG_DUMP("pic%lu = %lu\n", param->cnt, tick2); vos_perf_mark(&tick1);
DBG_DUMP("frame%lu : %lu ms\n", param->cnt, tick1 / 1000);
queue_ele_out = (PhotoExe_Preview_SliceEncode_Queue12_Param*) malloc(sizeof(PhotoExe_Preview_SliceEncode_Queue12_Param)); queue_ele_out = (PhotoExe_Preview_SliceEncode_Queue12_Param*) malloc(sizeof(PhotoExe_Preview_SliceEncode_Queue12_Param));
memset(queue_ele_out, 0, sizeof(PhotoExe_Preview_SliceEncode_Queue12_Param));
queue_ele_out->frame = video_frame; queue_ele_out->frame = video_frame;
while (lfqueue_enq(param->queue12, (void*) queue_ele_out) == -1) { while (lfqueue_enq(param->queue12, (void*) queue_ele_out) == -1) {
@ -5763,7 +5925,7 @@ INT32 PhotoExe_Preview_SliceEncode_CB1(void* user_data)
} while(1); } while(1);
DBG_DUMP("task1 job finished\n"); DBG_IND("task1 job finished\n");
exit: exit:
return ret; return ret;
@ -5799,7 +5961,7 @@ INT32 PhotoExe_Preview_SliceEncode_CB2(void* user_data)
param = (PhotoExe_Preview_SliceEncode_CB2_Param*) user_data; param = (PhotoExe_Preview_SliceEncode_CB2_Param*) user_data;
param->cnt = 0; param->cnt = 0;
DBG_DUMP("enter cb2 loop\n"); DBG_IND("enter cb2 loop\n");
/******************************************************************* /*******************************************************************
* Get vproc info * Get vproc info
@ -5858,7 +6020,14 @@ INT32 PhotoExe_Preview_SliceEncode_CB2(void* user_data)
continue; continue;
} }
DBG_DUMP("process frame\n"); if(queue_ele_in->comm.terminate){
DBG_ERR("force terminate\n");
free(queue_ele_in);
queue_ele_in = NULL;
goto EXIT;
}
DBG_IND("process frame %lu\n", param->cnt);
/******************************************************************* /*******************************************************************
* Calculate src slice info * Calculate src slice info
@ -5866,12 +6035,30 @@ INT32 PhotoExe_Preview_SliceEncode_CB2(void* user_data)
PhotoExe_Preview_SliceEncode_Get_Src_Slice_Info(&dst_slice_info, &src_slice_info, queue_ele_in->frame); PhotoExe_Preview_SliceEncode_Get_Src_Slice_Info(&dst_slice_info, &src_slice_info, queue_ele_in->frame);
slice_encode_primary_info->bs_buf_mem_info.blk_size = (VDO_YUV_BUFSIZE(dst_slice_info.width, dst_slice_info.height, queue_ele_in->frame.pxlfmt) / (CFG_JPG_PREVIEW_SLICE_ENC_BS_BUF_RATIO)) + CFG_JPG_HEADER_SIZE + PhotoExe_GetScreenNailSize() ; slice_encode_primary_info->bs_buf_mem_info.blk_size = (VDO_YUV_BUFSIZE(dst_slice_info.width, dst_slice_info.height, queue_ele_in->frame.pxlfmt) / (CFG_JPG_PREVIEW_SLICE_ENC_BS_BUF_RATIO)) + CFG_JPG_HEADER_SIZE + PhotoExe_GetScreenNailSize() ;
if(PhotoExe_Preview_SliceEncode_Alloc_Buffer(&slice_encode_primary_info->bs_buf_mem_info, "slice_enc_primary") != E_OK){ // if(PhotoExe_Preview_SliceEncode_Alloc_Buffer(&slice_encode_primary_info->bs_buf_mem_info, "slice_enc_primary") != E_OK){
// goto EXIT;
// }
if(PhotoExe_Preview_SliceEncode_Alloc_Buffer_Retry(
&slice_encode_primary_info->bs_buf_mem_info,
"slice_enc_primary",
10,
100
) != E_OK){
goto EXIT; goto EXIT;
} }
slice_encode_screennail_info->bs_buf_mem_info.blk_size = PhotoExe_GetScreenNailSize(); slice_encode_screennail_info->bs_buf_mem_info.blk_size = PhotoExe_GetScreenNailSize();
if(PhotoExe_Preview_SliceEncode_Alloc_Buffer(&slice_encode_screennail_info->bs_buf_mem_info, "slice_enc_screennail") != E_OK){ // if(PhotoExe_Preview_SliceEncode_Alloc_Buffer(&slice_encode_screennail_info->bs_buf_mem_info, "slice_enc_screennail") != E_OK){
// goto EXIT;
// }
if(PhotoExe_Preview_SliceEncode_Alloc_Buffer_Retry(
&slice_encode_screennail_info->bs_buf_mem_info,
"slice_enc_screennail",
10,
100
) != E_OK){
goto EXIT; goto EXIT;
} }
@ -5911,14 +6098,21 @@ INT32 PhotoExe_Preview_SliceEncode_CB2(void* user_data)
/******************************************************************* /*******************************************************************
* Screennail & Thumbnail Encode * Screennail & Thumbnail Encode
******************************************************************/ ******************************************************************/
UIMenuStoreInfo *puiPara = sf_ui_para_get();
/* screennail encode */ /* screennail encode */
PhotoExe_Preview_SliceEncode_Encode_Set_In(slice_encode_screennail_info->enc_path_id, vproc_out_pxlfmt, (HD_DIM) {CFG_SCREENNAIL_W, CFG_SCREENNAIL_H}); PhotoExe_Preview_SliceEncode_Encode_Set_In(slice_encode_screennail_info->enc_path_id, vproc_out_pxlfmt, (HD_DIM) {sf_get_screen_nail_width(puiPara->SendPicSize), sf_get_screen_nail_height(puiPara->SendPicSize)});
PhotoExe_Preview_SliceEncode_Encode_Set_Out(slice_encode_screennail_info->enc_path_id, CFG_JPG_PREVIEW_SLICE_ENC_INIT_QUALITY_SCREENNAIL);
#if CFG_JPG_PREVIEW_SLICE_ENC_RC_SCREENNAIL
if(PhotoExe_Preview_SliceEncode_Encode_Screennail_RC(&video_frame_out_screennail) != E_OK){
goto EXIT;
}
#else
PhotoExe_Preview_SliceEncode_Encode_Set_Out(slice_encode_screennail_info->enc_path_id, CFG_JPG_PREVIEW_SLICE_ENC_INIT_QUALITY_SCREENNAIL);
if(PhotoExe_Preview_SliceEncode_Encode_Screennail(&video_frame_out_screennail) != E_OK){ if(PhotoExe_Preview_SliceEncode_Encode_Screennail(&video_frame_out_screennail) != E_OK){
goto EXIT; goto EXIT;
} }
#endif
/* thumbnail encode */ /* thumbnail encode */
PhotoExe_Preview_SliceEncode_Encode_Set_In(slice_encode_thumbnail_info->enc_path_id, vproc_out_pxlfmt, (HD_DIM) {CFG_THUMBNAIL_W, CFG_THUMBNAIL_H}); PhotoExe_Preview_SliceEncode_Encode_Set_In(slice_encode_thumbnail_info->enc_path_id, vproc_out_pxlfmt, (HD_DIM) {CFG_THUMBNAIL_W, CFG_THUMBNAIL_H});
@ -5941,7 +6135,6 @@ INT32 PhotoExe_Preview_SliceEncode_CB2(void* user_data)
MEM_RANGE pri_jpg = {.addr = slice_encode_primary_info->bs_buf_mem_info.va + CFG_JPG_HEADER_SIZE, .size = slice_encode_primary_info->bs_buf_mem_info.used_size}; MEM_RANGE pri_jpg = {.addr = slice_encode_primary_info->bs_buf_mem_info.va + CFG_JPG_HEADER_SIZE, .size = slice_encode_primary_info->bs_buf_mem_info.used_size};
MEM_RANGE scr_jpg = {.addr = slice_encode_screennail_info->bs_buf_mem_info.va, .size = slice_encode_screennail_info->bs_buf_mem_info.used_size}; MEM_RANGE scr_jpg = {.addr = slice_encode_screennail_info->bs_buf_mem_info.va, .size = slice_encode_screennail_info->bs_buf_mem_info.used_size};
MEM_RANGE dst_jpg_file = { 0 }; MEM_RANGE dst_jpg_file = { 0 };
DBG_WRN(" EXIF\r\n");
/* exif */ /* exif */
ExifVendor_Write0thIFD(EXIF_HDL_ID_1); ExifVendor_Write0thIFD(EXIF_HDL_ID_1);
@ -5967,6 +6160,7 @@ INT32 PhotoExe_Preview_SliceEncode_CB2(void* user_data)
/* enqueue jpg buffer info */ /* enqueue jpg buffer info */
queue_ele_out = (PhotoExe_Preview_SliceEncode_Queue23_Param*) malloc(sizeof(PhotoExe_Preview_SliceEncode_Queue23_Param)); queue_ele_out = (PhotoExe_Preview_SliceEncode_Queue23_Param*) malloc(sizeof(PhotoExe_Preview_SliceEncode_Queue23_Param));
memset(queue_ele_out, 0, sizeof(PhotoExe_Preview_SliceEncode_Queue23_Param));
queue_ele_out->jpg_combined_addr = (UINT8*) dst_jpg_file.addr; queue_ele_out->jpg_combined_addr = (UINT8*) dst_jpg_file.addr;
queue_ele_out->jpg_combined_size = dst_jpg_file.size; queue_ele_out->jpg_combined_size = dst_jpg_file.size;
queue_ele_out->jpg_thumb_addr = (UINT8*) scr_jpg.addr; queue_ele_out->jpg_thumb_addr = (UINT8*) scr_jpg.addr;
@ -6013,7 +6207,13 @@ EXIT:
PhotoExe_Preview_SliceEncode_Free_Buffer(&exif_mem_info); PhotoExe_Preview_SliceEncode_Free_Buffer(&exif_mem_info);
} }
DBG_DUMP("task2 job finished\n"); if(param->cnt < param->max_cnt){
queue_ele_out = (PhotoExe_Preview_SliceEncode_Queue23_Param*) malloc(sizeof(PhotoExe_Preview_SliceEncode_Queue23_Param));
queue_ele_out->comm.terminate = 1;
lfqueue_enq(param->queue23, (void*) queue_ele_out);
}
DBG_IND("task2 job finished\n");
return ret; return ret;
} }
@ -6042,6 +6242,13 @@ INT32 PhotoExe_Preview_SliceEncode_CB3(void* user_data)
continue; continue;
} }
if(queue_ele_in->comm.terminate){
DBG_ERR("force terminate\n");
free(queue_ele_in);
queue_ele_in = NULL;
goto EXIT;
}
/******************************************************************* /*******************************************************************
* Output jpg file * Output jpg file
******************************************************************/ ******************************************************************/
@ -6062,7 +6269,7 @@ INT32 PhotoExe_Preview_SliceEncode_CB3(void* user_data)
snprintf(tmp, sizeof(tmp), "%s%s", PHOTO_THUMB_PATH, file_path + length - 12); /* DCF 8.3 naming rule */ snprintf(tmp, sizeof(tmp), "%s%s", PHOTO_THUMB_PATH, file_path + length - 12); /* DCF 8.3 naming rule */
snprintf(tmp + strlen(tmp) - 3, sizeof(tmp), "%s", "JPG"); snprintf(tmp + strlen(tmp) - 3, sizeof(tmp), "%s", "JPG");
DBG_DUMP("PHOTO THUMB %s \n %s\n", tmp, file_path); DBG_IND("PHOTO THUMB %s\n", tmp);
FST_FILE fp = FileSys_OpenFile(tmp, FST_OPEN_ALWAYS | FST_OPEN_WRITE); FST_FILE fp = FileSys_OpenFile(tmp, FST_OPEN_ALWAYS | FST_OPEN_WRITE);
@ -6076,7 +6283,7 @@ INT32 PhotoExe_Preview_SliceEncode_CB3(void* user_data)
snprintf(tmp2 + strlen(tmp2) - 3, sizeof(tmp2), "%s", "JPG"); snprintf(tmp2 + strlen(tmp2) - 3, sizeof(tmp2), "%s", "JPG");
DBG_DUMP("PHOTO THUMB %s \n %s\n", tmp, tmp2); DBG_DUMP("PHOTO THUMB %s \n %s\n", tmp, tmp2);
sf_file_thumb_cfg_fill(tmp, tmp2, SF_FILE_TYPE_PIC_SMALL); sf_file_thumb_cfg_fill(tmp, tmp2, queue_ele_in->jpg_thumb_size, SF_FILE_TYPE_PIC_SMALL);
UIMenuStoreInfo *puiPara = sf_ui_para_get(); UIMenuStoreInfo *puiPara = sf_ui_para_get();
if(SF_CAM_MODE_PHOTO == puiPara->CamMode) if(SF_CAM_MODE_PHOTO == puiPara->CamMode)
{ {
@ -6117,7 +6324,11 @@ EXIT:
PhotoExe_Preview_SliceEncode2_Close(); PhotoExe_Preview_SliceEncode2_Close();
DBG_DUMP("task3 job finished\n"); if(param->cnt < param->max_cnt){
DBG_ERR("force terminate\n");
}
DBG_IND("task3 job finished\n");
return ret; return ret;
} }
@ -6256,9 +6467,8 @@ INT32 PhotoExe_Preview_SliceEncode2(VControl *pCtrl, UINT32 paramNum, UINT32 *pa
cb1_param.queue12 = &queue12; cb1_param.queue12 = &queue12;
cb1_param.period = 1000 / max_cnt; /* average ms in one second */ cb1_param.period = 1000 / max_cnt; /* average ms in one second */
// cb1_param.period = 1000;
DBG_DUMP("resume task1\n"); DBG_IND("resume task1\n");
task1_param.run = 1; task1_param.run = 1;
vos_task_resume(task1_param.task_id); vos_task_resume(task1_param.task_id);
@ -6288,7 +6498,7 @@ INT32 PhotoExe_Preview_SliceEncode2(VControl *pCtrl, UINT32 paramNum, UINT32 *pa
cb2_param.queue12 = &queue12; cb2_param.queue12 = &queue12;
cb2_param.queue23 = &queue23; cb2_param.queue23 = &queue23;
DBG_DUMP("resume task2\n"); DBG_IND("resume task2\n");
task2_param.run = 1; task2_param.run = 1;
vos_task_resume(task2_param.task_id); vos_task_resume(task2_param.task_id);
@ -6318,7 +6528,7 @@ INT32 PhotoExe_Preview_SliceEncode2(VControl *pCtrl, UINT32 paramNum, UINT32 *pa
cb3_param.cnt = 0; cb3_param.cnt = 0;
cb3_param.queue23 = &queue23; cb3_param.queue23 = &queue23;
DBG_DUMP("resume task3\n"); DBG_IND("resume task3\n");
task3_param.run = 1; task3_param.run = 1;
vos_task_resume(task3_param.task_id); vos_task_resume(task3_param.task_id);

View File

@ -319,8 +319,8 @@ void UiDateImprint_InitBuff(void)
} }
else if ( i == DATE_IMPRINT_EVENT_SCR && g_DateImprintPool[i].pool_va == 0) { else if ( i == DATE_IMPRINT_EVENT_SCR && g_DateImprintPool[i].pool_va == 0) {
pInfo->MemSize = 0x80000; pInfo->MemSize = 0x80000;
UIMenuStoreInfo *puiPara = sf_ui_para_get();
UiDateImprint_GetStampFont(CFG_SCREENNAIL_W,(char**)&pFont); UiDateImprint_GetStampFont(sf_get_screen_nail_width(puiPara->SendPicSize),(char**)&pFont);
#if defined(_UI_STYLE_LVGL_) #if defined(_UI_STYLE_LVGL_)
pInfo->MemSize = UIDateImprint_GetStampMemSize_LVGL((const lv_font_t *)pFont, UiDateImprint_InitStrBuf()); pInfo->MemSize = UIDateImprint_GetStampMemSize_LVGL((const lv_font_t *)pFont, UiDateImprint_InitStrBuf());
@ -424,7 +424,7 @@ void UiDateImprint_DestroyBuff(void)
} }
} }
} }
extern void PhotoStamp_get_isp_status(UINT32 id, char* Buf, UINT32 BufLen); /*extern void PhotoStamp_get_isp_status(UINT32 id, char* Buf, UINT32 BufLen);
BOOL UiDateImprint_UpdateDate(char *StrBuf, UINT32 buff_len) BOOL UiDateImprint_UpdateDate(char *StrBuf, UINT32 buff_len)
{ {
char *str; char *str;
@ -456,7 +456,7 @@ BOOL UiDateImprint_UpdateDate(char *StrBuf, UINT32 buff_len)
StrBuf[0] = 0; //Empty String StrBuf[0] = 0; //Empty String
} }
return FALSE; return FALSE;
} }*/
char * UiDateImprint_InitStrBuf(void) char * UiDateImprint_InitStrBuf(void)
{ {
char *str=NULL; char *str=NULL;

View File

@ -61,6 +61,7 @@ static CHAR *resolution_Buf[MOVIE_SIZE_ID_MAX] = {
[MOVIE_SIZE_CLONE_2304x1296P30_848x480P30] = "3MHD P30+WVGA P30", [MOVIE_SIZE_CLONE_2304x1296P30_848x480P30] = "3MHD P30+WVGA P30",
[MOVIE_SIZE_CLONE_1920x1080P60_848x480P30] = "FHD P60+WVGA P30", [MOVIE_SIZE_CLONE_1920x1080P60_848x480P30] = "FHD P60+WVGA P30",
[MOVIE_SIZE_CLONE_1920x1080P60_640x360P30] = "FHD P60+VGA P30", [MOVIE_SIZE_CLONE_1920x1080P60_640x360P30] = "FHD P60+VGA P30",
[MOVIE_SIZE_CLONE_1920x1080P30_640x360P30] = "FHD P60+VGA P30",
[MOVIE_SIZE_CLONE_1920x1080P30_848x480P30] = "FHD P30+WVGA P30", [MOVIE_SIZE_CLONE_1920x1080P30_848x480P30] = "FHD P30+WVGA P30",
[MOVIE_SIZE_CLONE_2048x2048P30_480x480P30] = "2048x2048 P30 + 480x480 P30", [MOVIE_SIZE_CLONE_2048x2048P30_480x480P30] = "2048x2048 P30 + 480x480 P30",
}; };

View File

@ -471,7 +471,8 @@ static void UIFlowPhoto_OnExeCaptureStart(lv_obj_t* obj)
} }
/* Check capture prerequisite */ /* Check capture prerequisite */
if (FlowPhoto_IsStorageErr() == TRUE) { //if (FlowPhoto_IsStorageErr() == TRUE) {
if((FileSys_GetDiskInfo(FST_INFO_FREE_SPACE)/ 1024) < (30*1024)){//30MB
DBG_ERR("UIFlowPhoto_OnKeyShutter2: Card or memory full!\r\n"); DBG_ERR("UIFlowPhoto_OnKeyShutter2: Card or memory full!\r\n");
gPhotoData.State = PHOTO_ST_WARNING_MENU; gPhotoData.State = PHOTO_ST_WARNING_MENU;
return; return;
@ -773,7 +774,7 @@ void UIFlowPhoto_OnStorageChange(lv_obj_t* obj, const LV_USER_EVENT_NVTMSG_DATA*
//#NT#2016/10/04#Lincy Lin -begin //#NT#2016/10/04#Lincy Lin -begin
//#NT#Support SD hot plug function //#NT#Support SD hot plug function
#if (SDHOTPLUG_FUNCTION == ENABLE) #if (SDHOTPLUG_FUNCTION == ENABLE)
Ux_PostEvent(NVTEVT_SYSTEM_MODE, 1, System_GetState(SYS_STATE_CURRMODE)); //Ux_PostEvent(NVTEVT_SYSTEM_MODE, 1, System_GetState(SYS_STATE_CURRMODE));
#endif #endif
//#NT#2016/10/04#Lincy Lin -end //#NT#2016/10/04#Lincy Lin -end
return; return;
@ -815,11 +816,18 @@ static void UIFlowPhoto_ScrOpen(lv_obj_t* obj)
//#NT#Support SD hot plug function //#NT#Support SD hot plug function
//#if (SDHOTPLUG_FUNCTION == ENABLE) //#if (SDHOTPLUG_FUNCTION == ENABLE)
if (UIStorageCheck(STORAGE_CHECK_ERROR, NULL) == TRUE) { if (UIStorageCheck(STORAGE_CHECK_ERROR, NULL) == TRUE) {
#if (DRAM_SIZE_64MB_DISP_OFF == ENABLE)
//sd error,no panel! playsound or flash led being warring msg
UISound_Play(DEMOSOUND_SOUND_SHUTTER_TONE);
UISound_Play(DEMOSOUND_SOUND_SHUTTER_TONE);
UISound_Play(DEMOSOUND_SOUND_SHUTTER_TONE);
#else
/* never closed */ /* never closed */
gPhotoData.State = PHOTO_ST_WARNING_MENU; gPhotoData.State = PHOTO_ST_WARNING_MENU;
UIFlowWrnMsgAPI_Open_StringID(LV_PLUGIN_STRING_ID_STRID_PLEASE_INSERT_SD, 0); UIFlowWrnMsgAPI_Open_StringID(LV_PLUGIN_STRING_ID_STRID_PLEASE_INSERT_SD, 0);
return; return;
#endif
} }
//#endif //#endif
//#NT#2016/10/04#Lincy Lin -end //#NT#2016/10/04#Lincy Lin -end

View File

@ -5,7 +5,7 @@
// Photo // Photo
#define DEFAULT_PHOTO_CAPTURE SELFTIMER_OFF #define DEFAULT_PHOTO_CAPTURE SELFTIMER_OFF
#define DEFAULT_PHOTO_SIZE PHOTO_SIZE_5M//PHOTO_MAX_CAP_SIZE #define DEFAULT_PHOTO_SIZE PHOTO_SIZE_8M//PHOTO_MAX_CAP_SIZE
#define DEFAULT_PHOTO_QUALITY QUALITY_FINE #define DEFAULT_PHOTO_QUALITY QUALITY_FINE
#define DEFAULT_PHOTO_COLOR COLOR_EFFECT_STANDARD #define DEFAULT_PHOTO_COLOR COLOR_EFFECT_STANDARD
#define DEFAULT_SCENE SCENE_AUTO #define DEFAULT_SCENE SCENE_AUTO
@ -63,7 +63,7 @@
#define DEFAULT_MOVIE_SIZE MOVIE_SIZE_DUAL_1920x1080P30_848x480P30//MOVIE_SIZE_FRONT_1920x1080P30 #define DEFAULT_MOVIE_SIZE MOVIE_SIZE_DUAL_1920x1080P30_848x480P30//MOVIE_SIZE_FRONT_1920x1080P30
#else #else
#if (MOVIE_AI_DEMO == DISABLE) #if (MOVIE_AI_DEMO == DISABLE)
#define DEFAULT_MOVIE_SIZE MOVIE_SIZE_FRONT_1920x1080P30 #define DEFAULT_MOVIE_SIZE MOVIE_SIZE_CLONE_1920x1080P30_640x360P30
#else #else
#define DEFAULT_MOVIE_SIZE MOVIE_SIZE_DUAL_1920x1080P30_848x480P30//MOVIE_SIZE_FRONT_1920x1080P30 #define DEFAULT_MOVIE_SIZE MOVIE_SIZE_DUAL_1920x1080P30_848x480P30//MOVIE_SIZE_FRONT_1920x1080P30
#endif #endif
@ -71,8 +71,8 @@
#endif #endif
#define DEFAULT_MOVIE_SIZE_DUAL MOVIE_SIZE_FRONT_1920x1080P30//MOVIE_SIZE_FRONT_2560x1440P30 #define DEFAULT_MOVIE_SIZE_DUAL MOVIE_SIZE_CLONE_1920x1080P30_640x360P30//MOVIE_SIZE_FRONT_2560x1440P30
#define DEFAULT_MOVIE_SIZE_SINGLE MOVIE_SIZE_FRONT_1920x1080P30//MOVIE_SIZE_FRONT_2560x1440P30 #define DEFAULT_MOVIE_SIZE_SINGLE MOVIE_SIZE_CLONE_1920x1080P30_640x360P30//MOVIE_SIZE_FRONT_2560x1440P30
#define DEFAULT_MOVIE_QUALITY MOVIE_QUALITY_FINE #define DEFAULT_MOVIE_QUALITY MOVIE_QUALITY_FINE
#define DEFAULT_MOVIE_COLOR MOVIE_COLOR_NORMAL #define DEFAULT_MOVIE_COLOR MOVIE_COLOR_NORMAL

View File

@ -417,6 +417,8 @@ typedef struct _UIMenuUIMenuStoreInfo {
CHAR ImgSize;/* 24M/12M/8M/5M */ CHAR ImgSize;/* 24M/12M/8M/5M */
CHAR NightMode;/* Max.Range/Balanced/Min.Blur */ CHAR NightMode;/* Max.Range/Balanced/Min.Blur */
CHAR Multishot;/*1P/2P/3P/4P/5P*/ CHAR Multishot;/*1P/2P/3P/4P/5P*/
CHAR MultiShotIntevel;/*0s/1s/2s*/
CHAR SendMulti;/*OFF/ON*/
CHAR VideoSize;/*FHD-1080P/HD-720P/WVGA*/ CHAR VideoSize;/*FHD-1080P/HD-720P/WVGA*/
CHAR VideoTimeMenu;/*5/10/15/20/30/40/50/59*/ CHAR VideoTimeMenu;/*5/10/15/20/30/40/50/59*/
CHAR VideoLenth; CHAR VideoLenth;
@ -480,6 +482,7 @@ typedef struct _UIMenuUIMenuStoreInfo {
CHAR TimeSend3Switch;/*OFF/ON*/ CHAR TimeSend3Switch;/*OFF/ON*/
CHAR TimeSend4Switch;/*OFF/ON*/ CHAR TimeSend4Switch;/*OFF/ON*/
CHAR SendType; CHAR SendType;
CHAR PicUpDailyReport;
/////////////////////// ///////////////////////
#endif #endif
@ -507,7 +510,7 @@ typedef struct _UIMenuUIMenuStoreInfo {
CHAR SimIccid[21]; CHAR SimIccid[21];
CHAR ServiceProvider[64]; CHAR ServiceProvider[64];
UINT8 SimSignal; UINT8 SimSignal;
UINT8 SimType; UINT8 SimType;
UINT8 FtpSwitch;/*FTP/OFF/FTPS*/ UINT8 FtpSwitch;/*FTP/OFF/FTPS*/
UINT8 FtpIp[40]; UINT8 FtpIp[40];
UINT8 FtpPort[5]; UINT8 FtpPort[5];
@ -518,6 +521,11 @@ typedef struct _UIMenuUIMenuStoreInfo {
UINT8 FtpsPort[5]; UINT8 FtpsPort[5];
UINT8 FtpsUsr[40]; UINT8 FtpsUsr[40];
UINT8 FtpsPwd[20]; UINT8 FtpsPwd[20];
UINT8 WifiSwitch;
UINT8 WifiMode;
UINT8 WifiApPWD[16];
UINT8 Zoom;
//============Sifar==============///Payton //============Sifar==============///Payton
} UIMenuStoreInfo; } UIMenuStoreInfo;
@ -1148,6 +1156,7 @@ enum _MOVIE_MENU_SIZE {
MOVIE_SIZE_CLONE_1920x1080P60_848x480P60, /// FHD WVGA MOVIE_SIZE_CLONE_1920x1080P60_848x480P60, /// FHD WVGA
MOVIE_SIZE_CLONE_1920x1080P60_848x480P30, /// FHD WVGA MOVIE_SIZE_CLONE_1920x1080P60_848x480P30, /// FHD WVGA
MOVIE_SIZE_CLONE_1920x1080P60_640x360P30, /// FHD VGA MOVIE_SIZE_CLONE_1920x1080P60_640x360P30, /// FHD VGA
MOVIE_SIZE_CLONE_1920x1080P30_640x360P30, /// FHD VGA
MOVIE_SIZE_CLONE_1920x1080P30_848x480P30, /// FHD WVGA MOVIE_SIZE_CLONE_1920x1080P30_848x480P30, /// FHD WVGA
MOVIE_SIZE_CLONE_2048x2048P30_480x480P30, MOVIE_SIZE_CLONE_2048x2048P30_480x480P30,
MOVIE_SIZE_CLONE_1280x720P60_1280x720P60, /// HD HD p60 MOVIE_SIZE_CLONE_1280x720P60_1280x720P60, /// HD HD p60

View File

@ -147,9 +147,9 @@ static MOVIE_SIZE_ITEM g_MovieSizeTable[] = {
}, },
[MOVIE_SIZE_1920x1080P30] = { [MOVIE_SIZE_1920x1080P30] = {
{1920, 1080, 30, 262144/* 2M = 2*1024*1024/8 */, MEDIAREC_DAR_DEFAULT, IMAGERATIO_16_9}, {1920, 1080, 30, 104857/*262144 2M = 2*1024*1024/8 */, MEDIAREC_DAR_DEFAULT, IMAGERATIO_16_9},
{1, 3, 36, 8, -8, 0}, {1, 3, 36, 8, -8, 0},
{1, 4, 30, 262144/* 2M = 2*1024*1024/8 */, 15, 26, 15, 50, 26, 15, 50, 0, 1, 8, 4}, {1, 4, 30, 104857/*262144 2M = 2*1024*1024/8 */, 30, 26, 15, 50, 26, 15, 50, 0, 1, 8, 4},
}, },
[MOVIE_SIZE_1280x720P240] = { [MOVIE_SIZE_1280x720P240] = {
@ -171,15 +171,15 @@ static MOVIE_SIZE_ITEM g_MovieSizeTable[] = {
}, },
[MOVIE_SIZE_1280x720P30] = { [MOVIE_SIZE_1280x720P30] = {
{1280, 720, 30, 131072 /* 1M = 1*1024*1024/8 */, MEDIAREC_DAR_DEFAULT, IMAGERATIO_16_9}, {1280, 720, 30, 58982/*131072 1M = 1*1024*1024/8 */, MEDIAREC_DAR_DEFAULT, IMAGERATIO_16_9},
{1, 3, 36, 8, -8, 0}, {1, 3, 36, 8, -8, 0},
{1, 4, 30, 131072 /* 1M = 1*1024*1024/8 */, 15, 26, 15, 50, 26, 15, 50, 0, 1, 8, 4}, {1, 4, 30, 58982/*131072 1M = 1*1024*1024/8 */, 30, 26, 15, 50, 26, 15, 50, 0, 1, 8, 4},
}, },
[MOVIE_SIZE_848x480P30] = { [MOVIE_SIZE_848x480P30] = {
{848, 480, 30, 110100, MEDIAREC_DAR_DEFAULT, IMAGERATIO_16_9}, {848, 480, 30, 32768/*110100*/, MEDIAREC_DAR_DEFAULT, IMAGERATIO_16_9},
{1, 3, 36, 8, -8, 0}, {1, 3, 36, 8, -8, 0},
{1, 4, 30, 110100, 15, 26, 15, 50, 26, 15, 50, 0, 1, 8, 4}, {1, 4, 30, 32768/*110100*/, 30, 26, 15, 50, 26, 15, 50, 0, 1, 8, 4},
}, },
[MOVIE_SIZE_848x480P30_WIFI] = { [MOVIE_SIZE_848x480P30_WIFI] = {
@ -212,9 +212,9 @@ static MOVIE_SIZE_ITEM g_MovieSizeTable[] = {
{1, 3, 36, 8, -8, 0}, {1, 3, 36, 8, -8, 0},
{1, 4, 30, 80 * 1024, 15, 26, 15, 45, 26, 15, 45, 0, 1, 8, 4}, {1, 4, 30, 80 * 1024, 15, 26, 15, 45, 26, 15, 45, 0, 1, 8, 4},
#else #else
{ 640, 360, 30, 150 * 1024, MEDIAREC_DAR_DEFAULT, IMAGERATIO_16_9}, { 640, 360, 30, 78643, MEDIAREC_DAR_DEFAULT, IMAGERATIO_16_9},
{1, 3, 36, 8, -8, 0}, {1, 3, 36, 8, -8, 0},
{1, 4, 30, 150 * 1024, 15, 26, 15, 45, 26, 15, 45, 0, 1, 8, 4}, {1, 4, 30, 78643, 15, 26, 15, 50, 26, 15, 50, 0, 1, 8, 4},
#endif #endif
}, },
@ -444,6 +444,12 @@ static MOVIE_SIZE_MAPPING g_MovieRecMappingTable[MOVIE_SIZE_ID_MAX] = {
{MOVIE_SIZE_1920x1080P60, 0}, {MOVIE_SIZE_1920x1080P60, 0},
{MOVIE_SIZE_640x360P30, 0}, {MOVIE_SIZE_640x360P30, 0},
}, },
[MOVIE_SIZE_CLONE_1920x1080P30_640x360P30] = {
MOVIE_REC_TYPE_CLONE,
{MOVIE_SIZE_1920x1080P30, 0},
{MOVIE_SIZE_640x360P30, 0},
},
[MOVIE_SIZE_CLONE_1920x1080P30_848x480P30] = { [MOVIE_SIZE_CLONE_1920x1080P30_848x480P30] = {
MOVIE_REC_TYPE_CLONE, MOVIE_REC_TYPE_CLONE,

View File

@ -52,8 +52,8 @@ static PHOTO_SIZE_PARAM g_ScreenNailSizeTable[PHOTO_SIZE_ID_MAX + 2] = {
#if defined(_MODEL_565_HUNTING_EVB_LINUX_4G_68CS_) #if defined(_MODEL_565_HUNTING_EVB_LINUX_4G_68CS_)
{1024, 768, IMAGERATIO_4_3, "0.78M"}, // 0.78M {1024, 768, IMAGERATIO_4_3, "0.78M"}, // 0.78M
#elif defined(_MODEL_565_HUNTING_EVB_LINUX_4G_S530_) #elif defined(_MODEL_565_HUNTING_EVB_LINUX_4G_S530_)
{1024, 768, IMAGERATIO_4_3, "0.78M"}, // 0.78M
{640, 480, IMAGERATIO_4_3, "VGA"}, // VGA {640, 480, IMAGERATIO_4_3, "VGA"}, // VGA
{1024, 768, IMAGERATIO_4_3, "0.78M"}, // 0.78M
#endif #endif
//CFG_SCREENNAIL_W //CFG_SCREENNAIL_W
//CFG_SCREENNAIL_H //CFG_SCREENNAIL_H

View File

@ -68,7 +68,7 @@ EXTRA_INCLUDE += \
-I$(EXT_DIR)/audio/aud_common/include \ -I$(EXT_DIR)/audio/aud_common/include \
-I$(KFLOW_DIR)/include \ -I$(KFLOW_DIR)/include \
-I$(NVT_DRIVER_DIR)/include \ -I$(NVT_DRIVER_DIR)/include \
-I$(LIBRARY_DIR)/include \ -I$(LIBRARY_DIR)/include/libnl3 \
-I$(APP_DIR)/include \ -I$(APP_DIR)/include \
-I$(KDRV_DIR)/source/kdrv_gfx2d/kdrv_affine/include \ -I$(KDRV_DIR)/source/kdrv_gfx2d/kdrv_affine/include \
-I$(NVT_HDAL_DIR)/vendor/media/include \ -I$(NVT_HDAL_DIR)/vendor/media/include \
@ -258,8 +258,11 @@ SRC = \
./code/source/utils/sf_aes.c \ ./code/source/utils/sf_aes.c \
./code/source/debugMng/sf_debug.c \ ./code/source/debugMng/sf_debug.c \
./code/source/updataMng/sf_md5.c \ ./code/source/updataMng/sf_md5.c \
./code/source/updataMng/sf_otamng.c ./code/source/updataMng/sf_otamng.c \
./code/source/wifi/sf_data_transfer.c \
./code/source/wifi/sf_svr_send.c \
./code/source/wifi/sf_wifi_svr.c
#--------- END OF SOURCEs FOR APPLICATION --------------------------------------------- #--------- END OF SOURCEs FOR APPLICATION ---------------------------------------------
#--------- ENVIRONMENT SETTING -------------------- #--------- ENVIRONMENT SETTING --------------------

View File

@ -62,6 +62,19 @@ extern "C" {
} \ } \
} while (0) } while (0)
#define SF_STRLEN(a) (UINT32)strlen((char *)a)
#define SF_STRCPY(a, b) strcpy((char *)a, (char *)b)
#define SF_STRNCPY(a, b, c) strncpy((char *)a, (char *)b, c)
#define SF_STRCMP(a, b) strcmp((char *)a, (char *)b)
#define SF_STRNCMP(a, b, c) strncmp((char *)a, (char *)b, c)
#define SF_STRSTR(a, b) (UINT8 *)strstr((char *)a, (char *)b)
#define SF_STRTOK(a, b) (UINT8 *)strtok((char *)a, (char *)b)
#define SF_SPRINTF(a, ...) sprintf((char *)a, __VA_ARGS__)
#define SF_STRCASECMP(a, b) strcasecmp((char *)a, (char *)b)
#define SF_STRSEP(a, b) strsep((char **)a, (char *)b)
#define SF_STRCAT(a, b) strcat((char *)a, (char *)b)
#define SF_STRTOLL(a, b, c) strtoll((char *)a, (char **)b, c)
void app_message_recv_start(void); void app_message_recv_start(void);
#ifdef __cplusplus #ifdef __cplusplus

View File

@ -296,6 +296,20 @@ typedef enum sfPOWEROFF_TYPE_E
SF_POWEROFF_BUTT, SF_POWEROFF_BUTT,
} SF_POWEROFF_TYPE_E; } SF_POWEROFF_TYPE_E;
#endif #endif
typedef enum {
APP_POWER_OFF_NORMAL,
APP_POWER_OFF_LENS_ERROR,
APP_POWER_OFF_BATT_EMPTY,
APP_POWER_OFF_CHARGE_ERROR,
APP_POWER_OFF_CARD_PLUG,
APP_POWER_OFF_USB_PLUG,
APP_POWER_OFF_TV_PLUG,
APP_POWER_OFF_HDMI_PLUG,
APP_POWER_OFF_VIDEO_REC_ERROR, /*slow card, fail to video recording*/
APP_POWER_OFF_APO,
} appUiPowerOff_e;
typedef struct sf_TIME_S { typedef struct sf_TIME_S {
unsigned short Year; /* Year > 1970*/ unsigned short Year; /* Year > 1970*/
unsigned short Mon; /* Mon range[1-12]*/ unsigned short Mon; /* Mon range[1-12]*/
@ -342,9 +356,10 @@ unsigned char sf_mcu_wdg_off(void);
void sf_set_module_sleep_flag(UINT8 flag); void sf_set_module_sleep_flag(UINT8 flag);
int sf_app_while_flag(void); int sf_app_while_flag(void);
void sf_set_sim_insert(UINT32 sim); void sf_set_sim_insert(UINT32 sim);
UINT8 sf_get_signal_ready(void); int sf_get_signal_ready(void);
void sf_set_sim_pin_flag(UINT8 simPin, UINT8 simPins, UINT8 simPinPuk); void sf_set_sim_pin_flag(UINT8 simPin, UINT8 simPins, UINT8 simPinPuk);
void sf_set_cq_signal(UINT8 csq); void sf_set_cq_signal(UINT8 csq);
void sf_mcu_version_get(UINT8 *mcuVer);
extern unsigned short TrigType; extern unsigned short TrigType;

View File

@ -0,0 +1,57 @@
/**************************************************************************
*
* Copyright (c) 2009-2018 by SiFar Technology, Inc.
*
* This software is copyrighted by and is the property of SiFar
* Technology, Inc.. All rights are reserved by SiFar Technology, Inc..
* This software may only be used in accordance with the corresponding
* license agreement. Any unauthorized use, duplication, distribution,
* or disclosure of this software is expressly forbidden.
*
* This Copyright notice MUST not be removed or modified without prior
* written consent of SiFar Technology, Inc..
*
* SiFar Technology, Inc. reserves the right to modify this software without notice.
*
* Author: Oliver
* Ver: 1.0.0 2019/01/14
**************************************************************************/
#ifndef __APP_DATA_TRANSFER_H__
#define __APP_DATA_TRANSFER_H__
#include "sf_type.h"
typedef struct DataErrCode_s {
U32 port;
U8 errCode;
struct DataErrCode_s *pNext;
}DataErrCode_t;
#if 0
typedef enum
{
DATA_SUCCESS = 0x00,
DATA_CMD = 0x01,
DATA_CMD_8855_NO_CONNECT = 0x02,
DATA_CMD_ADD_TO_FLOW_ERR = 0x03,
DATA_CMD_PORT_IS_USED = 0x04,
DATA_CMD_NO_THIS_PORT = 0x05,
DATA_CMD_OPEN_FILE_FAIL = 0x06,
DATA_UP_CREAT_FILE_FAIL = 0x07,
DATA_UP_NO_FILE_NAME = 0x08,
DATA_UP_TIME_OUT = 0x09,
DATA_UP_WRITE_FILE_ERR = 0x0A,
DATA_DOWN_OPEN_FILE_FAIL = 0x0B,
DATA_DOWN_NO_FILE_NAME = 0x0C,
DATA_DOWN_SEND_DATA_ERR = 0x0D,
DATA_DOWN_READ_FILE_ERR = 0x0E,
DATA_DOWN_TIME_OUT = 0x0F,
DATA_ERROR_CODE_MAX = 0x10,
}DataTransErrCode_t;
#endif
S32 sf_DataSvrInit(void);
U8 sf_DataMapSet(U32 key, U8 function, S8 *fileName, U32 FileSize);
#endif /*__APP_DATA_TRANSFER_H__*/

View File

@ -11,6 +11,7 @@ extern "C" {
#define MMZBLOCKSIZE 1024 #define MMZBLOCKSIZE 1024
#define SF_VIDEO_LOOP_NUM 4 /*PIC 3 + VIDEO 1*/ #define SF_VIDEO_LOOP_NUM 4 /*PIC 3 + VIDEO 1*/
#define SF_SD_THUMB_PATH_CFG "/mnt/sd/Thumb/ThumbFileCfg"
#define SF_FILE_ERROR_NO_FILE SF_ERR_ID(SF_MOD_FILE, ERROR_NO_FILE) #define SF_FILE_ERROR_NO_FILE SF_ERR_ID(SF_MOD_FILE, ERROR_NO_FILE)
typedef enum sf_SUBSCRIBE_TYPE_E typedef enum sf_SUBSCRIBE_TYPE_E
@ -66,7 +67,7 @@ SINT16 sf_file_subscribe_check(SF_FILE_ATTR_S *pstfileAttr, SF_SEND_FILE_ATTR_S*
SINT32 sf_file_IsExsit(CHAR *fileName); SINT32 sf_file_IsExsit(CHAR *fileName);
void sf_file_thumb_cfg_fill(char* filepath,char* fileName,SF_FILE_TYPE_E enFileType); void sf_file_thumb_cfg_fill(char* filepath,char* fileName,UINT32 size, SF_FILE_TYPE_E enFileType);
void sf_file_thumb_cfg_set(SF_SRCFILE_ATTR_S *pThumbFileCfgl); void sf_file_thumb_cfg_set(SF_SRCFILE_ATTR_S *pThumbFileCfgl);
void sf_file_thumb_cfg_set_down(SF_SRCFILE_ATTR_S *pSfCustomerPara); void sf_file_thumb_cfg_set_down(SF_SRCFILE_ATTR_S *pSfCustomerPara);
@ -76,6 +77,7 @@ void sf_file_thumb_cfg_clear(void);
SF_SRCFILE_ATTR_S* sf_file_thumb_cfg_get(void); SF_SRCFILE_ATTR_S* sf_file_thumb_cfg_get(void);
SINT32 sf_file_size_get(SF_CHAR *filePath,UINT32 *pFileSize); SINT32 sf_file_size_get(SF_CHAR *filePath,UINT32 *pFileSize);
BOOL sf_check_auto_thumb_file(VOID);
#ifdef __cplusplus #ifdef __cplusplus
#if __cplusplus #if __cplusplus

View File

@ -184,6 +184,7 @@ extern "C" {
#define SF_THUMB_BIG_DIR SF_SD_DISK"\\DCIM\\THUMB\\big" #define SF_THUMB_BIG_DIR SF_SD_DISK"\\DCIM\\THUMB\\big"
#define SF_THUMB_VIDEO_DIR SF_SD_DISK"\\DCIM\\THUMB\\video" #define SF_THUMB_VIDEO_DIR SF_SD_DISK"\\DCIM\\THUMB\\video"
#define DCF_DIR_FREE_CHAR "MEDIA" #define DCF_DIR_FREE_CHAR "MEDIA"
#define DCF_FILE_FREE_CHAR "SYFW"
#define SF_TRUE 1 #define SF_TRUE 1
#define SF_FALSE 0 #define SF_FALSE 0
@ -346,6 +347,7 @@ typedef enum sf_IMG_SIZE_E
{ {
SF_IMG_SIZE_32M = 0, SF_IMG_SIZE_32M = 0,
SF_IMG_SIZE_24M, SF_IMG_SIZE_24M,
SF_IMG_SIZE_16M,
SF_IMG_SIZE_12M, SF_IMG_SIZE_12M,
SF_IMG_SIZE_8M, SF_IMG_SIZE_8M,
SF_IMG_SIZE_5M, SF_IMG_SIZE_5M,
@ -378,6 +380,7 @@ typedef enum sf_MESSAGE_TYPE_E
CMD_MCU = 0x1F01, CMD_MCU = 0x1F01,
CMD_PARA = 0x1F02, CMD_PARA = 0x1F02,
CMD_GPRS = 0x1F03, CMD_GPRS = 0x1F03,
CMD_WIFI = 0x1F04,
}SF_MESSAGE_TYPE_E; }SF_MESSAGE_TYPE_E;
@ -467,6 +470,14 @@ typedef enum sf_PARA_MESSAGE_TYPE_E
}SF_PARA_MESSAGE_TYPE_E; }SF_PARA_MESSAGE_TYPE_E;
typedef enum sf_WIFI_MESSAGE_TYPE_E
{
SF_WIFI_CMD_START = 0x1A00,
SF_WIFI_CMD_STOP = 0x1B00,
}SF_WIFI_MESSAGE_TYPE_E;
typedef enum _GPRS_SEARCH_STEP_e{ typedef enum _GPRS_SEARCH_STEP_e{
GPRS_SEARCH_STEP_IDLE = 0x0, GPRS_SEARCH_STEP_IDLE = 0x0,

View File

@ -0,0 +1,37 @@
/**************************************************************************
*
* Copyright (c) 2009-2018 by SiFar Technology, Inc.
*
* This software is copyrighted by and is the property of SiFar
* Technology, Inc.. All rights are reserved by SiFar Technology, Inc..
* This software may only be used in accordance with the corresponding
* license agreement. Any unauthorized use, duplication, distribution,
* or disclosure of this software is expressly forbidden.
*
* This Copyright notice MUST not be removed or modified without prior
* written consent of SiFar Technology, Inc..
*
* SiFar Technology, Inc. reserves the right to modify this software without notice.
*
* Author: Oliver
* Ver: 1.0.0 2018/11/14
**************************************************************************/
#ifndef __APP_SVR_SEND_H__
#define __APP_SVR_SEND_H__
typedef enum
{
SEND_THUMB,
SEND_TIME_MAP,
SEND_FILE,
SEND_MAX
}WIFI_SEND_CMD_T;
SINT32 appSvrSendInit(void);
void appSvrStopSendFile(void);
UINT32 sp5kFsFileSizeGet(const char *path);
#endif /*__APP_SVR_SEND_H__*/

View File

@ -0,0 +1,946 @@
#ifndef __SF_WIFI_SERVER__
#define __SF_WIFI_SERVER__
#include <netinet/in.h>
#include <arpa/inet.h>
#include "sf_common.h"
//#include "sf_customer_app.h"
#include "sf_type.h"
#ifdef __x86_64__
#define LISTEN_PARAM 0
#else
#define LISTEN_PARAM 5
#endif
#define SF_LPA_SDK 0
#define SF_GPS_SUPPORT 0
#define DEBUG_INFO_ON_LCD 0
#define DBG_LOG 0
#define MAX_SSID_NAME_LEN (20)
#define MAX_PASSWORD_LEN (63)
#define PTPIP_ALIVE_TIME (60)
#define RTP_ALIVE_TIME (60)
#define SF_DCF_FILENAME_LEN_MAX 256 /**< DCF File Name Len Max */
#define SF_FILENAME_MAXLEN SF_DCF_FILENAME_LEN_MAX //256
#define PACKET_MAX_LEN 51200
#define MSG_PRE_FIX 0x55AA
#define MSG_END_FIX 0xFFEE
#define MSG_APP_2_WIFI 0
#define MSG_WIFI_2_APP 1
#define DEV_LOGIN 0x1000
#define DEV_LOGIN_RSP 0x1001
#define DEV_UPDATESTA 0x1002
#define DEV_UPDATESTA_RSP 0x1003
#define DEV_UPLOADFILE 0x1004
#define DEV_UPLOADFILE_RSP 0x1005
#define DEV_UPLOADFILE_BEGIN 0x1006
#define DEV_UPLOADFILE_BEGIN_RSP 0x1007
#define DEV_UPLOADFILE_END 0x1008
#define DEV_UPLOADFILE_END_RSP 0x1009
#define SF_DCF_SD_ROOT "/mnt/sd/" /**< DCF File Name (it must be 4-characters) */
#define SD_PATH SF_DCF_SD_ROOT //"/sdcard/mmcblk0p1" //mnt/hgfs
#define THUMB_PATH SD_PATH "/DCIM/THUMB/SMALL"
#define THUMB_HD_PATH SD_PATH "/DCIM/THUMB/LARGE"
#define SF_DCF_SD_ROOT2 "/sdcard/mmcblk0p1/" /**< DCF File Name (it must be 4-characters) */
#define SD_PATH2 SF_DCF_SD_ROOT2 //"/sdcard/mmcblk0p1" //mnt/hgfs
/*typedef enum {
POWEROFF_COUNTDOWN = 1,
POWEROFF_PVDOWN,
POWEROFF_KEYDOWN,
POWEROFF_KEYREBOOT,
POWEROFF_GPRSREBOOT,
POWEROFF_KEYOFF
}POWEROFF_MODE;*/
typedef enum sfWIFI_STATUS_E
{
SF_WIFI_OK = 0x01,/*wifi start success*/
SF_WIFI_CON, /*wifi has been connected*/
SF_WIFI_FAIL, /*wifi start fail*/
SF_WIFI_BUTT,
} SF_WIFI_STATUS_E;
typedef struct
{
UINT32 cmd;
UINT32 param;
} sysMsg_t;
typedef struct socketKeyMap_s
{
UINT32 key;
UINT8 function; //0:stop transter 1:upload 2:download
UINT8 fileName[64];
SINT32 fd;
UINT32 fileSize;
UINT32 transferSize;
UINT32 count;
UINT32 seek;
struct socketKeyMap_s *next;
}socketKeyMap_t;
typedef struct clientContext_s
{
struct clientContext_s *p_next;
SINT32 totalBytes;
SINT32 sentBytes;
SINT32 socket; /* accepted socket */
socketKeyMap_t map;
pthread_t pthread;
struct sockaddr_in ClientAddr;
UINT8 szBuffer[PACKET_MAX_LEN];
}clientContext_t;
typedef enum
{
SVR_INIT = 1,
SVR_CONNECT,
SVR_LOGIN
} SVR_STATE_E;
typedef enum
{
DEV_TYPE_NORMAL = 1,
DEV_TYPE_WIFI ,
DEV_TYPE_GPRS,
DEV_TYPE_MAX
} dev_type_e;
typedef enum
{
WIFI_TYPE_NONE = 0,
WIFI_TYPE_8189FS,
WIFI_TYPE_HI3881,
WIFI_TYPE_MAX
} WIFI_TYPE_E;
typedef enum
{
CMD_SUCCESS = 0x00, //command success
CMD_ERR = 0x01, //command error
/* 文件传输错误码 */
DATA_ERR_CMD = 0x11, //CMD error
DATA_CMD_8855_NO_CONNECT = 0x12, //APP还没有和相机的数据端口8855建立连接
DATA_CMD_ADD_TO_FLOW_ERR = 0x13, //相机添加传输队列失败
DATA_CMD_PORT_IS_USED = 0x14, //相机端口被占用
DATA_CMD_NO_THIS_PORT = 0x15, //相机在收发数据时未找到对应的端口
DATA_CMD_OPEN_FILE_FAIL = 0x16, //相机打开SD卡文件失败
DATA_UP_CREAT_FILE_FAIL = 0x17, //APP上传文件时相机在SD卡上创建文件失败
DATA_UP_NO_FILE_NAME = 0x18, // APP上传文件时相机未接收到有效文件名
DATA_UP_TIME_OUT = 0x19, // APP上传文件时相机接收文件数据超时
DATA_UP_WRITE_FILE_ERR = 0x1A, // APP上传文件时相机在向SD卡文件写入数据时出错
DATA_DOWN_OPEN_FILE_FAIL = 0x1B, // APP下载文件时相机打开文件失败
DATA_DOWN_NO_FILE_NAME = 0x1C, // APP下载文件时相机未接收到有效文件名
DATA_DOWN_SEND_DATA_ERR = 0x1D, // APP下载文件时相机发送数据出错
DATA_DOWN_READ_FILE_ERR = 0x1E, // APP下载文件时相机读取SD卡文件出错
DATA_DOWN_TIME_OUT = 0x1F, // APP下载文件时相机发送数据超时
/*运营商scan错误码*/
NETWORK_CAMERA_BUSY =0x31, //相机忙,正在拍照/录像/发送,请等待相机空闲
NETWORK_NO_SIM =0x32, //无SIM卡
NETWORK_SIM_NOT_SUPPORTED =0x33, // SIM卡不支持scan(不是ESIM卡)
NETWORK_NOT_NEED_SET =0x34, // 网络已选择,不需要重新设置
NETWORK_PROFILE_NOT_FOUND =0x35,// 找不到对应的profile
NETWORK_PROFILE_SELECT_FAILED =0x36,// 网络选择失败
NETWORK_PROFILE_SELECT_BUSY =0x37,// 网络繁忙,切换失败
NETWORK_CMD_NOT_SUPPORT =0x38, //网络指令不支持
NETWORK_CMD_READ_SIM_FAIL =0x39, //读卡失败,请重试
NETWORK_CMD_TIME_OUT =0x3a, //命令超时
NETWORK_EERROR_MAX = 0x40,
}WIFICameraErrCode_t;
typedef enum
{
/**********获取从0x01开始***********/
WIFI_GET_CAMERA_CONNECT = 0x01, // WIFI长连接心跳包
WIFI_GET_CAMERA_INFORMATIION = 0x02, //获取相机设备信息
WIFI_GET_CAMERA_PARAM = 0x03, //获取设备的所有参数信息
WIFI_GET_CAMERA_THUMB_LIST = 0x04, //获取缩略图文件名列表
WIFI_GET_CAMERA_HD_FILE = 0x05, //获取缩略图对应SD卡上的照片或视频原文件
/* 相机功能参数设置区地址从10开始为其它的接口做预留 */
WIFI_SET_CAMERA_Zoom = 0x10, //设置相机变焦倍数
WIFI_SET_CAMERA_CameraMode = 0x11, //设置相机工作模式
WIFI_SET_CAMERA_ImageSize = 0x12, //设置照片分辨率
WIFI_SET_CAMERA_MultiShot = 0x13, //设置连拍张数
WIFI_SET_CAMERA_PirSensitivity = 0x14, //设置PIR感应灵敏度
WIFI_SET_CAMERA_Timer = 0x15, //设置Timer
WIFI_SET_CAMERA_MaxNum = 0x16, //设置每天最大发送张数
WIFI_SET_CAMERA_Delay = 0x17, //设置Delay
WIFI_SET_CAMERA_SDLoop = 0x18, //设置SD卡循环
WIFI_SET_CAMERA_FlashPower = 0x19, //设置夜视灯亮度等级
WIFI_SET_CAMERA_NightMode= 0x1A, //设置夜视曝光时间等级
WIFI_SET_CAMERA_SendType = 0x1B, //设置发送类型
WIFI_SET_CAMERA_SMSCtrl = 0x1C, //设置SMS Ctrl
WIFI_SET_CAMERA_VideoSize = 0x1D, //设置录影分辨率
WIFI_SET_CAMERA_VideoTime = 0x1E, //设置录影时长
WIFI_SET_CAMERA_BatteryType = 0x1F, //设置电池类型
WIFI_SET_CAMERA_CameraID = 0x20, //设置Camera ID
WIFI_SET_CAMERA_DateTime = 0x21, //设置相机时间和日期
WIFI_SET_CAMERA_GPS = 0x22, //设置相机GPS
WIFI_SET_CAMERA_timeLapse = 0x23, //设置相机缩时摄影
WIFI_SET_CAMERA_PicUponDailyReport = 0x24, //设置DailyReport时是否发送照片.
WIFI_SET_CAMERA_WifiPWD = 0x25, //设置相机的wifi密码
/* 相机操作命令从0x30开始 */
WIFI_CONTROL_CAMERA_FormatSDCard = 0x30,//格式化SD卡
WIFI_CONTROL_CAMERA_Reboot = 0x31, //重启相机
WIFI_CONTROL_CAMERA_Recovery = 0x32, //恢复出厂设置
WIFI_CONTROL_CAMERA_CloseAPMode = 0x33, //关闭AP模式
WIFI_CONTROL_CAMERA_FileTransfer = 0x34,//文件收/发
WIFI_CONTROL_CAMERA_StopTransfer = 0x35,//中断数据发送(用于停止发送文件)
WIFI_CONTROL_CAMERA_DeleteFile = 0x36, //删除相机SD卡上的某个文件
WIFI_CONTROL_CAMERA_CheckThumb = 0x37, //核对缩略图
WIFI_CONTROL_CAMERA_SHOOT = 0x38, //相机拍摄
WIFI_CONTROL_CAMERA_Update = 0x39, //相机软件升级
WIFI_CONTROL_CAMERA_Debug = 0x3a, //debug模式
WIFI_CONTROL_CAMERA_Network_Scan = 0x3b, //Network scan
WIFI_CONTROL_CAMERA_Network_Select = 0x3c,//Network select
WIFI_CMD_MAX = 0x40,
} CAMERA_CFG_CMD;
/*--------------------WiFi Module Get CMD-------------------------------*/
typedef struct
{
UINT8 reserve; /*不传值就是0本接口就不需要传需要设置值的接口需要比如cameraMode、PirSensitivity*/
UINT16 suffix; /* 0xFFEE */
} __attribute__((packed)) MSG_DEV_Heart_Send_T;
typedef struct
{
UINT8 cmdRet; /*结果标志位0成功否则返回错误码 */
UINT16 suffix; /* 0xFFEE */
} __attribute__((packed)) MSG_DEV_Heart_Send_Rsp_T;
typedef struct
{
UINT8 reserve; /* 0*/
UINT16 suffix; /* 0xFFEE */
} __attribute__((packed)) MSG_DEV_INFO_Get_T;
typedef struct
{
UINT8 cmdRet; /* 0: mean cmd OK othermean cmd errorCode */
UINT8 protocolVersion[3]; /* 协议版本号1.0 */
UINT8 devType; /* 设备类型 */
UINT8 devId[16]; /* 设备ID */
UINT8 batLevel; /* 电池电量1~4,4格显示 */
UINT8 batteryPercent; /* 电量百分比 */
UINT8 batteryType; /*0: normal 正常 1: Customer 定制*/
UINT32 SDFree; /* SD卡剩余容量 MB */
UINT32 SDTotalSize; /* SD卡总容量MB */
UINT32 SDStatus; /*0正常 1:未插卡 2错误*/
UINT8 GpsLongitude[16]; /* GPS经度 */
UINT8 GpsLatitude[16]; /* GPS纬度 */
UINT8 hwType[16]; /*相机型号reveal-x, reveal-sk*/
UINT8 swVer[16]; /*相机软件版本 */
UINT8 swVer1[16]; /*相机软件特征码 */
UINT8 McuVer[10]; /* MCU 软件版本 */
UINT8 moduleVer[40]; /* 模块软件版本 */
UINT8 moduleIMEI[16]; /* 模块IMEI号 */
UINT8 signalLevel; /* 信号强度 */
UINT8 SimICCID[32]; /* SIM 卡的 ICCID */
UINT8 WifiMac[32]; /* WIFI模块的MAC地址 */
UINT16 suffix; /* 0xFFEE */
}__attribute__((packed)) MSG_DEV_INFO_Get_Rsp_T;
typedef struct
{
UINT8 reserve; /*如果不需要传数据就是0*/
UINT16 suffix; /* 0xFFEE */
} __attribute__((packed))MSG_DEV_Param_Get_T;
typedef struct devPara_t
{
UINT8 cmdRet; /* 0成功否则返回错误码 */
UINT8 zoom; /* zoom 1:1x 2:2x 3:3x 4:4x */
UINT8 cameraMode; /* 相机拍照模式0拍照1拍照+录像 */
UINT8 imageSize; /* 照片分辨率024M112M18M */
UINT8 multiShot; /* 连拍张数,0-单拍1~2连拍 */
UINT8 multiInterval; /* 连拍时的时间间隔 1-2s */
UINT8 sendMulti; /* 连拍发送设置 0关闭 1打开*/
UINT8 PirSensitivity; /* PIR感应灵敏度度0high1Middle2Low */
UINT8 timer; /* timer的开关,0: OFF1: ON */
UINT8 timerStartHour; /* 0-23 */
UINT8 timerStartMinute; /* 0-59 */
UINT8 timerEndHour; /* 0-23 */
UINT8 timerEndMinute; /* 0-59 */
UINT8 maxNum; /* 0:Unlimited 01-99:每天最大发送张数 */
UINT8 delay; /* 延时开关,0: OFF1: ON */
UINT8 delayHour; /*0-23*/
UINT8 delayMinute; /*0-59*/
UINT8 delaySecond; /*0-59 默认时间是30S*/
UINT8 SDLoop; /* SD卡循环开关0: OFF1: ON */
UINT8 flashPower; /* 夜视灯亮度等级 0Hight 1Low */
UINT8 nightMode; /* 夜视曝光时间等级0Max Range1Balanced ; 2: Min Blur */
UINT8 sendType; /* 发送类型 0Timely1Once/12 hours; 2Once/24hours */
UINT8 sendFirstTimeH; /* 0~23 (12小时和 24小时共用) */
UINT8 sendFirstTimeM; /* 0~59 (12小时和 24小时共用) */
UINT8 sendSecondTimeH; /* 0~23 */
UINT8 sendSecondTimeM; /* 0~59 */
UINT8 SMSCtrl; /* 模块上电状态0Daily 1Instant */
UINT8 videoSize; /* 录影分辨率 01080P 1720P 2WVGA */
UINT8 videoTime; /* 录影时长 0~545~59s */
UINT8 batType; /* 电池类型 0: AKALINE 1: NI-MH 2: LITHIUM */
UINT8 cameraID; /* 0: OFF1: ON */
UINT8 cameraIDstr[5]; /* 最长4个有效字符最后一位补0 */
UINT8 dateTimeAuto; /* 时间和日期同步方式 */
UINT8 timeZone; /* 时区设置 1: EST(-05:00) 2: CST(-06:00) 3: MST(-07:00)4: PST(-08:00)5: AKST(-09:00)6: HST(-10:00)*/
UINT8 gpsSwitch; /*GPS 开关: 0:OFF 1:ON*/
UINT8 gpsSendType; /*GPS信息发送设置 0:when camera trun on 1: one time 2:twice time*/
UINT8 timelapse; /* 0: OFF 1: ON */
UINT8 timelapseHour; /* 0 ~ 23 */
UINT8 timelapseMin; /* 0 ~ 59 */
UINT8 timelapseSec; /* 0 ~ 59 */
UINT8 picUponDailyReport;/* 在发送dailyreport 时发送一张照片0OFF 1ON */
UINT16 suffix; /* 0xFFEE */
} __attribute__((packed)) MSG_DEV_Param_Get_Rsp_T;
/*获取缩略图文件列表*/
typedef struct
{
UINT8 fileName[32]; /*最后一个文件名取增量,为空取全部*/
UINT16 suffix; /* 0xFFEE */
} __attribute__((packed)) MSG_DEV_THUMB_LIST_Get_T;
/*确认缩略图文件列表请求后,返回应答数据包*/
typedef struct
{
UINT8 cmdRet; /*0 成功,否则返回错误码*/
UINT32 fileNums; /*缩略图文件总数量*/
UINT32 packageSize; /*数据包大小*/
UINT16 suffix; /* 0xFFEE */
} __attribute__((packed)) MSG_DEV_THUMB_LIST_Get_Rsp_T;
/*接收完MSG_DEV_THUMB_LIST_Get_Rsp_T数据包之后紧接着接收下面缩略图信息数据包*/
typedef struct
{
UINT8 srcFileType;
UINT8 fileNameString[32]; /*每个缩略图的名称*/
} __attribute__((packed)) MSG_DEV_THUMB_LIST_Get_Data_Rsp_T;
#if 1// remove
/*获取某一个文件(视频/图片)*/
typedef struct
{
UINT8 dirName[32]; /*缩略图名称*/
UINT8 type; /*0缩略图1源文件(不包含文件名),2:作为其他文件的预留*/
UINT16 suffix; /* 0xFFEE */
} __attribute__((packed)) MSG_DEV_HD_FILE_Get_T;
typedef struct
{
UINT8 cmdRet; /*0成功否则是errcode*/
UINT32 fileSize; /*文件大小*/
UINT8 fileName[32]; /*文件名*/
UINT8 filePath[32]; /*每个缩略图所在文件夹的位置(不包含文件名,比如 :D/thumb/)*/
UINT8 type; /*0:pic 1: Video*/
UINT16 year; /*2018*/
UINT8 month; /*11*/
UINT8 day; /*20*/
UINT8 hour; /*0-23*/
UINT8 minute; /*0-59*/
UINT8 second; /*0-59*/
UINT16 suffix; /* 0xFFEE */
} __attribute__((packed)) MSG_DEV_HD_FILE_Get_Rsp_T;
#endif
/***** 相机功能参数设置区地址从10开始为其它的接口做预留 *****/
typedef struct
{
UINT8 cmdRet; /* 0: mean cmd OK othermean cmd error */
UINT16 suffix; /* 0xFFEE */
} __attribute__((packed)) MSG_DEV_SET_Rsp_T;
typedef struct
{
UINT8 zoom; /*1:x12:x23:x3; 4:4x*/
UINT16 suffix; /* 0xFFEE */
} __attribute__((packed)) MSG_DEV_Zoom_Set_T;
typedef struct
{
UINT8 cameraMode; /*0拍照1拍照+录像*/
UINT16 suffix; /* 0xFFEE */
} __attribute__((packed)) MSG_DEV_CameraMODE_Set_T;
typedef struct
{
UINT8 imageSize; /* 024M112M28M */
UINT16 suffix; /* 0xFFEE */
} __attribute__((packed)) MSG_DEV_ImageSize_Set_T;
typedef struct
{
UINT8 multiShot; /* 值0-2 0表示单拍1~2表示2到3连拍 */
UINT8 multiInterval; /* 值0-1 01s 1:2s */
UINT8 sendMulti; /*值0-1 0: 关闭连拍发送 1打开连拍发送*/
UINT16 suffix; /* 0xFFEE */
} __attribute__((packed)) MSG_DEV_MultiShot_Set_T;
typedef struct
{
UINT8 PirSensitivity; /* 红外触发强度0high1Middle2Low */
UINT16 suffix; /* 0xFFEE */
} __attribute__((packed)) MSG_DEV_PirSensitivity_Set_T;
typedef struct
{
UINT8 timer; /* 0:OFF 1:ON */
UINT8 timerStartHour; /* 0-23 */
UINT8 timerStartMinute; /* 0-59 */
UINT8 timerEndHour; /* 0-23 */
UINT8 timerEndMinute; /* 0-59 */
UINT16 suffix; /* 0xFFEE */
} __attribute__((packed)) MSG_DEV_Timer_Set_T;
typedef struct
{
UINT8 maxNum; /* 0:Unlimited 01-99:每天最大发送张数 */
UINT16 suffix; /* 0xFFEE */
} __attribute__((packed)) MSG_DEV_MaxNum_Set_T;
typedef struct
{
UINT8 delay; /* 0: OFF 1: ON */
UINT8 delayHour; /* 0-23 */
UINT8 delayMinute; /* 0-59 */
UINT8 delaySecond; /* 0-59 */
UINT16 suffix; /* 0xFFEE */
} __attribute__((packed)) MSG_DEV_Delay_Set_T;
typedef struct
{
UINT8 SDLoop; /* 0: OFF1: ON */
UINT16 suffix; /* 0xFFEE */
} __attribute__((packed)) MSG_DEV_SDLoop_Set_T;
typedef struct
{
UINT8 flashPower; /* 0Hight 1Low */
UINT16 suffix; /* 0xFFEE */
} __attribute__((packed)) MSG_DEV_flashPower_Set_T;
typedef struct
{
UINT8 nightMode; /* 0Max Range1Balanced ; 2: Min Blur*/
UINT16 suffix; /* 0xFFEE */
} __attribute__((packed)) MSG_DEV_NightMode_Set_T;
typedef struct
{
UINT8 sendType; /* 0Timely1Once/12 hours; 2Once/24hours */
UINT8 sendFirstTimeH; /* 0~23 (12小时和 24小时共用) */
UINT8 sendFirstTimeM; /* 0~59 (12小时和 24小时共用) */
UINT8 sendSecondTimeH; /* 0~23 */
UINT8 sendSecondTimeM; /* 0~59 */
UINT16 suffix; /* 0xFFEE */
} __attribute__((packed)) MSG_DEV_SendType_Set_T;
typedef struct
{
UINT8 SMSCtrl; /* 0Daily 1Instant */
UINT16 suffix; /* 0xFFEE */
} __attribute__((packed)) MSG_DEV_SMSCtrl_Set_T;
typedef struct
{
UINT8 videoSize; /* 0FHD 1HD 2WVGA*/
UINT16 suffix; /* 0xFFEE */
} __attribute__((packed)) MSG_DEV_VideoSize_Set_T;
typedef struct
{
UINT8 videoTime; /*录影时长设置 值0~54 代表 5~59秒*/
UINT16 suffix; /* 0xFFEE */
} __attribute__((packed)) MSG_DEV_VideoTime_Set_T;
typedef struct
{
UINT8 batType; /* 电池类型 0: AKALINE 1: NI-MH 2: LITHIUM */
/*当获取到的状态中batteryType为1时此项不可设置.*/
UINT16 suffix; /* 0xFFEE */
} __attribute__((packed)) MSG_DEV_batteryType_Set_T;
typedef struct
{
UINT8 cameraID; /* 0: ON 1:OFF */
UINT8 cameraIDstr[5]; /*最长4个有效字符最后一位补0 */
UINT16 suffix; /* 0xFFEE */
} __attribute__((packed)) MSG_DEV_CameraID_Set_T;
typedef struct
{
UINT8 dateTimeAuto; /* 0: 手动APP传时间 1: 自动相机通过UTC获取 */
UINT8 timeZone; /* 时区设置自动模式需要设置1: EST(-05:00) 2: CST(-06:00) 3: MST(-07:00)4: PST(-08:00)5: AKST(-09:00)6: HST(-10:00) */
UINT16 year; /* 2020-2030*/
UINT8 month; /* 1-12 */
UINT8 day; /* 1-31 */
UINT8 hour; /* 0-23 */
UINT8 minute; /* 0-59 */
UINT8 second; /* 0-59 */
UINT16 suffix; /* 0xFFEE */
} __attribute__((packed)) MSG_DEV_DateTime_Set_T;
typedef struct
{
UINT8 gpsSwitch; /* 0: OFF 1: ON */
UINT8 gpsSendType; /* 0when camera trun on. 1: 1次(DailyReport时间) 22次(DailyReport时间 DailyReport+12小时时间) */
UINT16 suffix; /* 0xFFEE */
} __attribute__((packed)) MSG_DEV_GPS_Set_T;
typedef struct
{
UINT8 timelapse; /* 0: OFF 1: ON */
UINT8 timelapseHour; /* 0 ~ 23 */
UINT8 timelapseMin; /* 0 ~ 59 */
UINT8 timelapseSec; /* 0 ~ 59 */
UINT16 suffix; /* 0xFFEE */
} __attribute__((packed)) MSG_DEV_TimeLapse_Set_T;
typedef struct
{
UINT8 picUponDailyReport; /* 0OFF 1ON */
UINT16 suffix; /* 0xFFEE */
} __attribute__((packed)) MSG_DEV_PicUponDailyReport_Set_T;
typedef struct
{
UINT8 PWDlength; /* 密码字符串的长度8~15 */
UINT8 newPWD[16]; /* WIFI密码字符串长度需小于等于15个字节并以\0结尾 */
UINT16 sufix; /* 0xFFEE */
} __attribute__((packed)) MSG_DEV_WifiPWD_Set_T;
typedef struct
{
UINT8 debugMode; /* 0:关闭debugMode 1:开启Debug Mode */
UINT16 suffix; /* 0xFFEE */
} __attribute__((packed)) MSG_DEV_DebugMode_Set_T;
/*******相机控制指令结构体***********/
typedef struct
{
UINT8 format; /* 1format immediately */
UINT16 sufix; /* 0xFFEE */
} __attribute__((packed)) MSG_DEV_FormatSDCard_Ctrl_T;
typedef struct
{
UINT8 cmdRet; /* 0: mean cmd OK othermean cmd error */
UINT16 suffix; /* 0xFFEE */
} __attribute__((packed)) MSG_DEV_FormatSDCard_Ctrl_RSP_T;
typedef struct
{
UINT8 reboot; /* 1: Reboot */
UINT16 sufix; /* 0xFFEE */
} __attribute__((packed)) MSG_DEV_REBOOT_Ctrl_T;
typedef struct
{
UINT8 cmdRet; /* 0: mean cmd OK othermean cmd error */
UINT16 suffix; /* 0xFFEE */
} __attribute__((packed)) MSG_DEV_REBOOT_Ctrl_RSP_T;
typedef struct
{
UINT8 reset; /* reset */
UINT16 sufix; /* 0xFFEE */
} __attribute__((packed)) MSG_DEV_Reset_Ctrl_T;
typedef struct
{
UINT8 cmdRet; /* 0: mean cmd OK othermean cmd error */
UINT16 suffix; /* 0xFFEE */
} __attribute__((packed)) MSG_DEV_Reset_Ctrl_RSP_T;
typedef struct
{
UINT8 closeAp; /* 0*/
UINT16 sufix; /* 0xFFEE */
} __attribute__((packed)) MSG_DEV_CloseAPMode_Ctrl_T;
typedef struct
{
UINT8 cmdRet; /* 0: mean cmd OK othermean cmd error */
UINT16 suffix; /* 0xFFEE */
} __attribute__((packed))MSG_DEV_CloseAPMode_Ctrl_RSP_T;
typedef struct
{
UINT32 PORT; /* 这个端口是APP连接相机8855端口时用的socket端口*/
UINT8 function; /* 0:stop transter 1:upload 2:download */
UINT8 type; /* 0缩略图1原图或视频 */
UINT32 fileSize; /* 传文件给相机时提供文件大小 */
UINT8 fileName[32]; /* 缩略图名称 或 全路径的文件名 */
UINT16 suffix; /* 0xFFEE */
} __attribute__((packed))MSG_DEV_FileTransfer_Ctrl_T;
typedef struct
{
UINT8 cmdRet; /* 0: 准备好收/发 其他为错误码*/
UINT32 fileSize; /* 文件大小 Byte */
UINT8 fileName[32]; /* 文件名 */
UINT8 filePath[32]; /* 文件所在文件夹的位置(不包含文件名,比如 :D/thumb/) */
UINT8 type; /* 0:pic 1: Video */
UINT16 year; /* 2020-2050 */
UINT8 month; /* 1-12 */
UINT8 day; /* 1-31 */
UINT8 hour; /*0-23*/
UINT8 minute; /*0-59*/
UINT8 second; /*0-59*/
UINT16 suffix; /* 0xFFEE */
} __attribute__((packed)) MSG_DEV_FileTransfer_Infor_Rsp_T;
typedef struct
{
UINT8 buff[PACKET_MAX_LEN]; /* 文件二进制数据通过8855端口传输 */
} __attribute__((packed)) MSG_DEV_FileTransfer_Data_Rsp_T;
typedef struct
{
UINT8 cmdRet; /* 0:收/发成功,其他为错误码*/
UINT32 port; /* PORT */
UINT16 suffix; /* 0xFFEE */
} __attribute__((packed)) MSG_DEV_FileTransfer_Ctrl_Rsp_T;
/*本接口主要用来中断原图与视频类大文件剩余数据的传输*/
typedef struct
{
UINT8 resever; /* 0 */
UINT16 sufix; /* 0xFFEE */
} __attribute__((packed)) MSG_DEV_StopTransfer_Ctrl_T;
typedef struct
{
UINT8 cmdRet; /* 0: mean cmd OK othermean cmd error */
UINT16 suffix; /* 0xFFEE */
} __attribute__((packed)) MSG_DEV_StopTransfer_Ctrl_Rsp_T;
typedef struct
{
UINT8 reserve;
UINT8 fileName [32]; /*带绝对路径的文件名*/
UINT16 suffix; /* 0xFFEE */
} __attribute__((packed))MSG_DEV_DelFile_Ctrl_T;
typedef struct
{
UINT8 cmdRet; /* 0: mean cmd OK othermean cmd error */
UINT16 suffix; /* 0xFFEE */
} __attribute__((packed)) MSG_DEV_DelFile_Ctrl_Rsp_T;
typedef struct
{
UINT8 reserve; /* 保留 */
UINT16 suffix; /* 0xFFEE */
} __attribute__((packed)) MSG_DEV_CheckThumb_Ctrl_T;
typedef struct
{
UINT8 cmdRet; /* 0: mean cmd OK othermean cmd error */
UINT16 suffix; /* 0xFFEE */
} __attribute__((packed)) MSG_DEV_CheckThumb_Ctrl_Rsp_T;
typedef struct
{
UINT8 shoot; /* 1拍照 2开始录影 3结束录影 */
UINT16 suffix; /* 0xFFEE */
} __attribute__((packed)) MSG_DEV_SHOOT_Ctrl_T;
typedef struct
{
UINT8 cmdRet; /* 0: mean cmd OK othermean cmd error */
UINT16 suffix; /* 0xFFEE */
} __attribute__((packed)) MSG_DEV_SHOOT_Ctrl_Rsp_T;
typedef struct
{
UINT8 updateType; /* 0:相机升级 1:模块升级 */
UINT16 suffix; /* 0xFFEE */
} __attribute__((packed)) MSG_DEV_Update_Ctrl_T;
typedef struct
{
UINT8 cmdRet; /* 0: mean cmd OK othermean cmd error */
UINT16 suffix; /* 0xFFEE */
} __attribute__((packed)) MSG_DEV_Update_Ctrl_Rsp_T;
typedef struct
{
UINT8 networkCtrl; /* 0:scan and get 1: get only*/
UINT16 suffix; /* 0xFFEE */
}__attribute__((packed)) MSG_DEV_NetworkScan_Ctrl_T;
typedef struct
{
UINT8 cmdRet; /* 0: mean cmd OK othermean cmd error */
UINT8 buff[4]; /*Variable length, only as a mark*/
UINT16 suffix; /* 0xFFEE */
} __attribute__((packed)) MSG_DEV_NetworkScan_Ctrl_Rsp_T;
typedef struct
{
UINT8 profileId; /*profile ID */
UINT16 suffix; /* 0xFFEE */
}__attribute__((packed)) MSG_DEV_NetworkSelect_Ctrl_T;
typedef struct
{
UINT8 cmdRet; /* 0: mean cmd OK othermean cmd error */
UINT16 suffix; /* 0xFFEE */
} __attribute__((packed)) MSG_DEV_NetworkSelect_Ctrl_Rsp_T;
/************* APP_MSG_T 数据结构 **************/
typedef struct
{
union
{
/**********获取相机信息***********/
/*长连接、心跳包*/
MSG_DEV_Heart_Send_T GetHeartPackage;
MSG_DEV_Heart_Send_Rsp_T rGetHeartPackage;
/*获取设备的所有参数设置信息*/
MSG_DEV_INFO_Get_T getDevInfo;
MSG_DEV_INFO_Get_Rsp_T rgetDevInfo;
MSG_DEV_Param_Get_T getDevParam;
MSG_DEV_Param_Get_Rsp_T rgetDevParam;
/*获取缩略图文件列表*/
MSG_DEV_THUMB_LIST_Get_T getThumbList;/*获取缩略图列表*/
MSG_DEV_THUMB_LIST_Get_Rsp_T rgetThumbList;/*缩略图信息数据包*/
MSG_DEV_THUMB_LIST_Get_Data_Rsp_T rgetThumbListData;/*缩略图文件名*/
#if 1//remove
/*获取照片或视频原文件*/
MSG_DEV_HD_FILE_Get_T getHdFile;
MSG_DEV_HD_FILE_Get_Rsp_T rgetHdFile;
#endif
/*------------------------------相机参数设置模块--------------------------*/
/* 0x10到0x24 命令共用的回复结构*/
MSG_DEV_SET_Rsp_T camreaSetRsp;
/*变焦放大倍数*/
MSG_DEV_Zoom_Set_T deviceZoomSet;
/* CameraMode设置*/
MSG_DEV_CameraMODE_Set_T setCameraMode;
/* 图片大小*/
MSG_DEV_ImageSize_Set_T setImageSize;
/* 连拍数*/
MSG_DEV_MultiShot_Set_T setMultiShot;
/* Pir感应*/
MSG_DEV_PirSensitivity_Set_T setPirSensitivity;
/* timer设置项*/
MSG_DEV_Timer_Set_T setTimer;
/* MaxNum设置项*/
MSG_DEV_MaxNum_Set_T setMaxNum;
/* Delay设置项*/
MSG_DEV_Delay_Set_T setDelay;
/* SD卡循环设置项*/
MSG_DEV_SDLoop_Set_T setSDLoop;
/*设置夜视灯亮度等级*/
MSG_DEV_flashPower_Set_T setFlashPower;
/*设置夜视曝光时间等级*/
MSG_DEV_NightMode_Set_T setNightMode;
/*设置发送类型*/
MSG_DEV_SendType_Set_T setSendType;
/*设置SMS Ctrl */
MSG_DEV_SMSCtrl_Set_T setSMSCtrl;
/* 录影分辨率设置*/
MSG_DEV_VideoSize_Set_T setVideoSize;
/*录影时长设置 值*/
MSG_DEV_VideoTime_Set_T setVideoTime;
/*设置电池类型*/
MSG_DEV_batteryType_Set_T setBatType;
/*设置camera ID*/
MSG_DEV_CameraID_Set_T setCameraID;
/*相机时间和日期*/
MSG_DEV_DateTime_Set_T setDateTime;
/*设置相机GPS */
MSG_DEV_GPS_Set_T setGPS;
/*设置相机缩时摄影*/
MSG_DEV_TimeLapse_Set_T setTimeLapseTime;
/*设置发送DailyReport时是否发送照片*/
MSG_DEV_PicUponDailyReport_Set_T setDailyReport;
/*设置相机的wifi密码*/
MSG_DEV_WifiPWD_Set_T setWifiPWD;
/*设置调试模式*/
MSG_DEV_DebugMode_Set_T setDebugMode;
/*******相机控制指令结构体***********/
/*格式化SD卡*/
MSG_DEV_FormatSDCard_Ctrl_T ctrlFormat;
MSG_DEV_FormatSDCard_Ctrl_RSP_T rctrlFormat;
/*重启*/
MSG_DEV_REBOOT_Ctrl_T ctrlReboot;
MSG_DEV_REBOOT_Ctrl_RSP_T rctrlReboot;
/*恢复出厂设置*/
MSG_DEV_Reset_Ctrl_T ctrlReset;
MSG_DEV_Reset_Ctrl_RSP_T rctrlReset;
/*关闭AP模式*/
MSG_DEV_CloseAPMode_Ctrl_T ctrlCloseAP;
MSG_DEV_CloseAPMode_Ctrl_RSP_T rctrlCloseAP;
/*接收/发送文件*/
MSG_DEV_FileTransfer_Ctrl_T ctrlFileTransfer;
MSG_DEV_FileTransfer_Infor_Rsp_T rctrlFileTransferInfo;
MSG_DEV_FileTransfer_Ctrl_Rsp_T rctrlFileTransfer;
/*停止发送原图数据*/
MSG_DEV_StopTransfer_Ctrl_T stopTransfer;
MSG_DEV_StopTransfer_Ctrl_Rsp_T rstopTransfer;
/*删除相机SD卡上的某个文件*/
MSG_DEV_DelFile_Ctrl_T ctrlDelFile;
MSG_DEV_DelFile_Ctrl_Rsp_T rctrlDelFile;
/*核对缩略图*/
MSG_DEV_CheckThumb_Ctrl_T ctrlCheckThumb;
MSG_DEV_CheckThumb_Ctrl_Rsp_T rctrlCheckThumb;
/*相机拍摄*/
MSG_DEV_SHOOT_Ctrl_T ctrlShoot;
MSG_DEV_SHOOT_Ctrl_Rsp_T rctrlShoot;
/*相机软件升级*/
MSG_DEV_Update_Ctrl_T ctrlUpdate;
MSG_DEV_Update_Ctrl_Rsp_T rctrlUpdate;
/*Network Scan*/
MSG_DEV_NetworkScan_Ctrl_T ctrlNetworkScan;
MSG_DEV_NetworkScan_Ctrl_Rsp_T rctrlNetworkScan;
/*Network select*/
MSG_DEV_NetworkSelect_Ctrl_T ctrlNetworkSelect;
MSG_DEV_NetworkSelect_Ctrl_Rsp_T rctrlNetworkSelect;
};
} __attribute__((packed)) APP_MSG_T;
typedef struct APP_SVR_PACKET_S
{
UINT16 magicNum; /* 0x55AA */
UINT16 msglen; /* from cmd to endflag(0xFFEE); not include prefix && msglen*/
UINT16 cmd; /* wifi act as ac/pm2.5 */
UINT16 rsp; /* used for response */
APP_MSG_T msgBuf;
} __attribute__((packed)) APP_SVR_PACKET_T;
typedef struct
{
SINT8 dirName[32]; //
UINT32 dirSize; //
} __attribute__((packed)) MSG_DEV_THUMB_DIR_LIST_T;
//forbuild fix----start------------------------------
//#define THUMB_PATH "D:\\THUMB"
//#define THUMB_PATH SD_PATH "/DCIM/THUMB/SMALL"
typedef enum thumbType{
STILL_THUMB,
VIDEO_THUMB,
TMLPS_THUMB, //timelapse
}thumbType_t;
typedef enum thumbSize{
THUMB_320x240,
THUMB_1280x960,
THUMB_1920x1440,
}thumbSize_t;
/*
UINT8 forbuild[32];
#define appBatteryLevelGet() 0
#define appStillBackgroundGetFree(x) 0
#define appVersionGet() NULL
#define appCurDiskInfoGet() ((void *)&forbuild)
#define appPbTotalFileCountGet() 100
#define sf_get_temper() 0
#define appHOSTVersionGet() "forbuild"
#define appBatteryLevelGet() 0
#define appBatteryValueGet() 0
*/
void memdump(void *buf,int len);
void sf_wifi_hw_init(void);
void *sf_wifi_sevrer_init(void *);
void sf_set_wifi_status(SF_WIFI_STATUS_E enStatus);
SF_WIFI_STATUS_E sf_get_wifi_status(void);
void sf_get_wifi_ssid(char *ssid);
int sf_is_ip_in_list(char *macbuf);
UINT8 sf_get_wifi_type(void);
void sf_wifi_app_start(void);
#endif /*__SF_WIFI_SERVER__*/

View File

@ -98,7 +98,8 @@ int main(int argc, char *argv[])
printf("*********************************************\n"); printf("*********************************************\n");
//gpio_direction_input(C_GPIO(10)); //gpio_direction_input(C_GPIO(10));
SINT16 startup = 0; SINT16 startup = 0;
SF_MESSAGE_BUF_S stMessageBuf = {0};
BOOL autosend = FALSE;
SF_MUTEX_INIT_LOCK(Param_mutexLock); SF_MUTEX_INIT_LOCK(Param_mutexLock);
SF_MUTEX_INIT_LOCK(GPIO_mutexLock); SF_MUTEX_INIT_LOCK(GPIO_mutexLock);
//test_sd_free(); //test_sd_free();
@ -153,11 +154,39 @@ int main(int argc, char *argv[])
//app_led_pin_init(); //app_led_pin_init();
//app_upgrade_sd_execute(); //app_upgrade_sd_execute();
app_preinit(); app_preinit();
//#if
app_RegisterNet_start(); app_RegisterNet_start();
//#endif
startup = sf_poweron_type_get(); startup = sf_poweron_type_get();
SLOGD("poweron type beginning :[%d,%s]\n", startup, sf_poweron_type_string(startup)); SLOGD("poweron type beginning :[%d,%s]\n", startup, sf_poweron_type_string(startup));
if(SF_MCU_STARTUP_ONKEY == startup) /*if(SF_MCU_STARTUP_ONKEY != startup)
{
sf_share_mem_file_init();
autosend = sf_check_auto_thumb_file();
if(TRUE == autosend)
{
while (1)
{
if(-1 != sf_get_signal_ready())//init
{
break;
}
}
if(sf_get_signal_ready())
{
stMessageBuf.arg1 = SF_PARA_CMD_UPDATE;
stMessageBuf.cmdId = CMD_FILE;
sf_com_message_send_to_app(&stMessageBuf);
}
else
{
autosend = FALSE;
}
}
}*/
//if((SF_MCU_STARTUP_ONKEY == startup) || (TRUE == autosend))
{ {
//////////////////////////////// ////////////////////////////////
app_debug_init(); app_debug_init();
@ -169,14 +198,14 @@ int main(int argc, char *argv[])
app_debug_deinit(); app_debug_deinit();
///////////////////////////// /////////////////////////////
} }
else//tese /*else//tese
{ {
SF_MESSAGE_BUF_S stMessageBuf = {0}; SF_MESSAGE_BUF_S stMessageBuf = {0};
stMessageBuf.cmdId = CMD_KEY; stMessageBuf.cmdId = CMD_KEY;
stMessageBuf.arg1 = SF_EVENT_KEY_SHORT_CLICK; stMessageBuf.arg1 = SF_EVENT_KEY_SHORT_CLICK;
stMessageBuf.arg2 = SF_KEY_PIN_AOTU_MODE_POWOFF;//auto mode powoff stMessageBuf.arg2 = SF_KEY_PIN_AOTU_MODE_POWOFF;//auto mode powoff
sf_com_message_send_to_cardv(&stMessageBuf); sf_com_message_send_to_cardv(&stMessageBuf);
} }*/
sf_share_mem_file_deinit(); sf_share_mem_file_deinit();

View File

@ -51,6 +51,7 @@ extern "C" {
#include "sf_system.h" #include "sf_system.h"
#include "sf_service.h" #include "sf_service.h"
#include <FileSysTsk.h> #include <FileSysTsk.h>
#include "sf_wifi_svr.h"
extern pthread_mutex_t Param_mutexLock; extern pthread_mutex_t Param_mutexLock;
@ -500,10 +501,12 @@ static SINT32 app_process_cmd_SD(SF_MESSAGE_BUF_S *pMessageBuf)
break; break;
case CMD_SD_STRG_CB_INSERTED: case CMD_SD_STRG_CB_INSERTED:
sf_set_card(1); sf_set_card(1);
sf_sd_status_set(SF_SD_OK);
break; break;
case CMD_SD_STRG_CB_REMOVED: case CMD_SD_STRG_CB_REMOVED:
sf_set_card(0); sf_set_card(0);
sf_sys_status_led_set(SF_LED_SYS_STATE_SD_FULL); sf_sd_status_set(SF_SD_OUT);
sf_sys_status_led_set(SF_LED_SYS_STATE_SD_ERROR);
break; break;
case CMD_SD_STRG_CB_MOUNT_FINISH: case CMD_SD_STRG_CB_MOUNT_FINISH:
@ -512,11 +515,14 @@ static SINT32 app_process_cmd_SD(SF_MESSAGE_BUF_S *pMessageBuf)
{ {
case FST_STA_OK: case FST_STA_OK:
sf_set_card(1); sf_set_card(1);
sf_sd_status_set(SF_SD_OK);
sf_sys_status_led_set(SF_LED_SYS_STATE_SD_NORMAL); sf_sys_status_led_set(SF_LED_SYS_STATE_SD_NORMAL);
MLOGI("card-%d mount OK\r\n", pMessageBuf->arg2 + 1); MLOGI("card-%d mount OK\r\n", pMessageBuf->arg2 + 1);
break; break;
case FST_STA_DISK_UNFORMAT: case FST_STA_DISK_UNFORMAT:
sf_sys_status_led_set(SF_LED_SYS_STATE_SD_ERROR); sf_set_card(1);
sf_sd_status_set(SF_SD_OK);
sf_sys_status_led_set(SF_LED_SYS_STATE_SD_NORMAL);
MLOGI("^Rcard-%d mount FAIL: Unformat\r\n", pMessageBuf->arg2 + 1); MLOGI("^Rcard-%d mount FAIL: Unformat\r\n", pMessageBuf->arg2 + 1);
break; break;
case FST_STA_DISK_UNKNOWN_FORMAT: case FST_STA_DISK_UNKNOWN_FORMAT:
@ -534,14 +540,19 @@ static SINT32 app_process_cmd_SD(SF_MESSAGE_BUF_S *pMessageBuf)
break; break;
case CMD_SD_STRG_CB_UNMOUNT_FINISH: case CMD_SD_STRG_CB_UNMOUNT_FINISH:
sf_set_card(0);
break; sf_sd_status_set(SF_SD_OUT);
sf_sys_status_led_set(SF_LED_SYS_STATE_SD_ERROR);
MLOGI("CMD_SD_STRG_CB_UNMOUNT_FINISH\r\n");
break;
case CMD_SD_SYSTEM_CB_CONFIG: case CMD_SD_SYSTEM_CB_CONFIG:
break; break;
case CMD_SD_FULL: case CMD_SD_FULL:
sf_sys_status_led_set(SF_LED_SYS_STATE_SD_ERROR);
MLOGI("CMD_SD_FULL\r\n");
sf_set_card_full(1); sf_set_card_full(1);
sf_sd_status_set(SF_SD_FULL);
/*sf_sd_status_set(SF_SD_FULL); /*sf_sd_status_set(SF_SD_FULL);
if(sf_poweron_type_get() == SF_MCU_STARTUP_ONKEY) { if(sf_poweron_type_get() == SF_MCU_STARTUP_ONKEY) {
if(!(SF_UPGRADE_ING == sf_upgrade_status_get() || SF_UPGRADE_FAIL == sf_upgrade_status_get())) if(!(SF_UPGRADE_ING == sf_upgrade_status_get() || SF_UPGRADE_FAIL == sf_upgrade_status_get()))
@ -625,11 +636,11 @@ static SINT32 app_proccess_cmd_file(SF_MESSAGE_BUF_S *pMessageBuf)
return SF_SUCCESS; return SF_SUCCESS;
#endif #endif
sf_mcu_wdg_set(5); sf_mcu_wdg_set(5);
if(sf_poweron_type_get() != SF_MCU_STARTUP_RING && sf_poweron_type_get() != SF_MCU_STARTUP_ONKEY) /*if(sf_poweron_type_get() != SF_MCU_STARTUP_RING && sf_poweron_type_get() != SF_MCU_STARTUP_ONKEY)
{ {
app_t110(); app_t110();
} }
else else*/
{ {
app_FileSend_start(); app_FileSend_start();
} }
@ -693,6 +704,23 @@ static SINT32 app_proccess_cmd_para_update(SF_MESSAGE_BUF_S *pMessageBuf)
return SF_SUCCESS; return SF_SUCCESS;
} }
static SINT32 sf_proccess_cmd_wifi(SF_MESSAGE_BUF_S *pMessageBuf)
{
MLOGI("ID = %#x\n",pMessageBuf->arg1);
switch(pMessageBuf->arg1)
{
case SF_WIFI_CMD_START:
sf_wifi_app_start();
sf_sys_status_led_set(SF_LED_SYS_STATE_WIFI_DISCONNECT);
break;
default:
break;
}
return SF_SUCCESS;
}
#if defined(CFG_LIVE_ENBLE) #if defined(CFG_LIVE_ENBLE)
static SINT32 app_proccess_cmd_venc(SF_MESSAGE_BUF_S *pMessageBuf) static SINT32 app_proccess_cmd_venc(SF_MESSAGE_BUF_S *pMessageBuf)
{ {
@ -772,6 +800,9 @@ void* app_message_recv_thread(void *arg)
break; break;
case CMD_PARA: case CMD_PARA:
app_proccess_cmd_para_update(&stMessagebuf); app_proccess_cmd_para_update(&stMessagebuf);
break;
case CMD_WIFI:
sf_proccess_cmd_wifi(&stMessagebuf);
break; break;
default: default:
break; break;

View File

@ -1018,7 +1018,6 @@ static SINT16 app_file_transfer(SF_FN_PARAM_S *pfnParam)
//sf_thumb_file_creat(); //sf_thumb_file_creat();
sf_share_mem_file_init();
s32ret = sf_simcom_ftp_send(1); s32ret = sf_simcom_ftp_send(1);
if(s32ret == SF_SUCCESS) { if(s32ret == SF_SUCCESS) {
@ -1029,40 +1028,24 @@ static SINT16 app_file_transfer(SF_FN_PARAM_S *pfnParam)
sf_sys_status_led_set(SF_LED_SYS_STATE_SEND_FAIL); sf_sys_status_led_set(SF_LED_SYS_STATE_SEND_FAIL);
} }
} }
sf_file_thumb_cfg_clear(); //sf_file_thumb_cfg_clear();
sf_share_mem_file_down(1); //sf_share_mem_file_down(1);
sf_set_upload_to_module_flag(0);//test sf_set_upload_to_module_flag(0);//test
break; break;
#if 0
case SF_MCU_STARTUP_TIMELAPSE: case SF_MCU_STARTUP_TIMELAPSE:
case SF_MCU_STARTUP_PIR: case SF_MCU_STARTUP_PIR:
if(pStaticParam->PicPlan == 0) { //sf_share_mem_file_init();
s32ret = sf_4G_server_open(pfnParam); sf_check_auto_thumb_file();
s32ret = app_server_querystatus(SF_CMD_LOGIN_IN,pfnParam,SF_NULL); s32ret = sf_simcom_ftp_send(1);
s32ret = sf_4G_server_close(pfnParam);
}
if(pStaticParam->PicPlan == 1) {
s32ret = app_file_thumbsend(pfnParam);
// SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_NO_SUPPOET);
}
s32ret |= app_server_excute_cmd(pfnParam); stMessageBuf.cmdId = CMD_KEY;
// SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_NO_SUPPOET); stMessageBuf.arg1 = SF_EVENT_KEY_SHORT_CLICK;
if(pStaticParam->AliveIp[0] !='\0') { stMessageBuf.arg2 = SF_KEY_PIN_AOTU_MODE_POWOFF;//auto mode powoff
s32ret = sf_4G_acm_tcp_server_open(pfnParam); sf_com_message_send_to_cardv(&stMessageBuf);
SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_NO_SUPPOET);
s32ret = app_server_Iskeepconnect(pfnParam,pCustomerParam->GprsMode);
SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_NO_SUPPOET);
}
stMessageBuf.arg1 = SF_POWEROFF_NOT;
stMessageBuf.cmdId = CMD_POWEROFF;
sf_com_message_send_to_app(&stMessageBuf);
break; break;
#if 0
case SF_MCU_STARTUP_NORMAL: case SF_MCU_STARTUP_NORMAL:
case SF_MCU_STARTUP_RING: case SF_MCU_STARTUP_RING:
sf_thumb_file_creat(); sf_thumb_file_creat();
@ -1113,12 +1096,14 @@ SINT32 app_FileSend_thread(void)
pthread_detach(pthread_self()); pthread_detach(pthread_self());
sf_share_mem_file_init();
//s32ret = app_file_send_check(stpfncallback.pstaticParam); //s32ret = app_file_send_check(stpfncallback.pstaticParam);
s32ret = sf_check_ftp_send(1); s32ret = sf_check_ftp_send(1);
if(s32ret != SF_SUCCESS) if(s32ret != SF_SUCCESS)
{ {
MLOGE("ERROR:%#x\n", s32ret); MLOGE("ERROR:%#x\n", s32ret);
ThumbSend.IsRun = 0; ThumbSend.IsRun = 0;
sf_file_thumb_cfg_clear();
sf_share_mem_file_down(1); sf_share_mem_file_down(1);
return s32ret; return s32ret;
} }
@ -1127,6 +1112,8 @@ SINT32 app_FileSend_thread(void)
//if(s32ret == SF_APP_ERROR_NO_SUPPOET) //if(s32ret == SF_APP_ERROR_NO_SUPPOET)
// app_file_transfer_Error_return_server(&stpfncallback); // app_file_transfer_Error_return_server(&stpfncallback);
ThumbSend.IsRun = 0; ThumbSend.IsRun = 0;
sf_file_thumb_cfg_clear();
sf_share_mem_file_down(1);
return s32ret; return s32ret;
@ -1366,7 +1353,7 @@ static SINT32 app_Register_Net_startup_mode(SF_FN_PARAM_S *pfnParam)
case SF_MCU_STARTUP_TIMELAPSE: case SF_MCU_STARTUP_TIMELAPSE:
case SF_MCU_STARTUP_PIR: case SF_MCU_STARTUP_PIR:
/*
#ifdef SF_HARDWARE_TEST #ifdef SF_HARDWARE_TEST
app_system_poweroff(SF_POWEROFF_NOT); app_system_poweroff(SF_POWEROFF_NOT);
break; break;
@ -1392,17 +1379,17 @@ static SINT32 app_Register_Net_startup_mode(SF_FN_PARAM_S *pfnParam)
s32ret = sf_4G_register_net_auto(pfnParam); s32ret = sf_4G_register_net_auto(pfnParam);
SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_REQUEST); SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_REQUEST);
sf_thumb_file_creat(); //sf_thumb_file_creat();
sf_4G_usb_net_apn_cfg(pfnParam); //sf_4G_usb_net_apn_cfg(pfnParam);
sf_USB_net_init(); //sf_USB_net_init();
s32ret = app_http_IsAuthenrequst(pfnParam); //s32ret = app_http_IsAuthenrequst(pfnParam);
SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_REQUEST); //SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_REQUEST);
s32ret = app_FileSend_thread(); s32ret = app_FileSend_thread();
SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_REQUEST); SF_APPCOMM_CHECK_RETURN(s32ret,SF_APP_ERROR_REQUEST);
*/
break; break;
case SF_MCU_STARTUP_WARNING: case SF_MCU_STARTUP_WARNING:

View File

@ -194,7 +194,7 @@ SINT32 sf_share_mem_file_down(UINT32 to)
if(pThumbFileCfg <= 0) if(pThumbFileCfg <= 0)
{ {
printf("[%s:%d] creat share mem failed!!!\n", __FUNCTION__, __LINE__); printf("[%s:%d] creat share mem failed!!!to:%d\n", __FUNCTION__, __LINE__,to);
return SF_FAILURE; return SF_FAILURE;
} }
else else

View File

@ -12,6 +12,7 @@
#include <sf_message_queue.h> #include <sf_message_queue.h>
#include "sf_log.h" #include "sf_log.h"
#include "sf_fileMng.h" #include "sf_fileMng.h"
#include "sf_common.h"
#ifdef __cplusplus #ifdef __cplusplus
#if __cplusplus #if __cplusplus
@ -627,7 +628,7 @@ SINT16 sf_file_subscribe_check(SF_FILE_ATTR_S *pstfileAttr, SF_SEND_FILE_ATTR_S*
} }
#endif #endif
void sf_file_thumb_cfg_fill(char* filepath,char* fileName,SF_FILE_TYPE_E enFileType) void sf_file_thumb_cfg_fill(char* filepath,char* fileName, UINT32 size, SF_FILE_TYPE_E enFileType)
{ {
if(pThumbFileCfg->filecnt >= SF_SRCFILE_MAX) if(pThumbFileCfg->filecnt >= SF_SRCFILE_MAX)
{ {
@ -638,6 +639,7 @@ void sf_file_thumb_cfg_fill(char* filepath,char* fileName,SF_FILE_TYPE_E enFileT
sprintf(pThumbFileCfg->stfileattr[pThumbFileCfg->filecnt].thumbfileName, "%s", fileName); sprintf(pThumbFileCfg->stfileattr[pThumbFileCfg->filecnt].thumbfileName, "%s", fileName);
printf("sf_file_thumb_cfg_fill:enFileType:%d\n",enFileType); printf("sf_file_thumb_cfg_fill:enFileType:%d\n",enFileType);
pThumbFileCfg->stfileattr[pThumbFileCfg->filecnt].enFileTye = enFileType; pThumbFileCfg->stfileattr[pThumbFileCfg->filecnt].enFileTye = enFileType;
pThumbFileCfg->stfileattr[pThumbFileCfg->filecnt].thumbfileSize = size;
pThumbFileCfg->filecnt++; pThumbFileCfg->filecnt++;
@ -649,8 +651,8 @@ void sf_file_thumb_cfg_set(SF_SRCFILE_ATTR_S *pThumbFileCfgl)
} }
void sf_file_thumb_cfg_set_down(SF_SRCFILE_ATTR_S *pSfCustomerPara) void sf_file_thumb_cfg_set_down(SF_SRCFILE_ATTR_S *pSfCustomerPara)
{ {
//currentInfo = *pSfCustomerPara; //currentInfo = *pSfCustomerPara;
memcpy(pSfCustomerPara,&pThumbFileCfg,sizeof(pThumbFileCfg)); memcpy(pSfCustomerPara,&pThumbFileCfg,sizeof(pThumbFileCfg));
} }
@ -663,6 +665,45 @@ void sf_file_thumb_cfg_clear(void)
pThumbFileCfg->filecnt = 0; pThumbFileCfg->filecnt = 0;
} }
BOOL sf_check_auto_thumb_file(VOID)
{
FILE *fp = NULL;
UINT32 u32ize = 0;
BOOL ret = FALSE;
UINT8 fileIndex = 0;
printf("%s:%d s\n", __FUNCTION__, __LINE__);
char tmp[64] = {'\0'};
SF_SRCFILE_ATTR_S* fileCfg = sf_file_thumb_cfg_get();
snprintf(tmp, sizeof(tmp), "%s", SF_SD_THUMB_PATH_CFG);
fp = fopen(tmp,"r");
if(fp == NULL){
return FALSE;
}
u32ize = ftell(fp);
if (fileCfg) {
fread(fileCfg, 1, sizeof(SF_SRCFILE_ATTR_S), fp);
if(fileCfg->filecnt)
{
ret = TRUE;
for(fileIndex = 0; fileIndex < fileCfg->filecnt; fileIndex++)
{
printf("%s:%d thumbfileSize:%d thumbfileName:%s thumbfilePath:%s\n", __FUNCTION__, __LINE__,pThumbFileCfg->stfileattr[fileIndex].thumbfileSize,fileCfg->stfileattr[fileIndex].thumbfileName,fileCfg->stfileattr[fileIndex].thumbfilePath);
}
}
}
fclose(fp);
sf_file_remove(tmp);
printf("%s:%d e u32ize:%d sizeof:%d\n", __FUNCTION__, __LINE__,u32ize,sizeof(SF_SRCFILE_ATTR_S));
fp = NULL;
u32ize = 0;
return ret;
}
#ifdef __cplusplus #ifdef __cplusplus
#if __cplusplus #if __cplusplus
} }

View File

@ -51,12 +51,12 @@ unsigned short TrigType = 0;
unsigned int powerSave_t1 = 0; unsigned int powerSave_t1 = 0;
unsigned char DailyReportStartMode = 0; unsigned char DailyReportStartMode = 0;
unsigned char POWEROFF = 0; unsigned char POWEROFF = 0;
SF_TIME_S sfMcuTime = { 0 }; SF_TIME_S sfMcuTime = { 0 };
static BOOL ConfigureModeFlag = 0; /* 0: HTC Mode, 1: Nomal Mode */ static BOOL ConfigureModeFlag = 0; /* 0: HTC Mode, 1: Nomal Mode */
static UINT8 PowerOnMode = 0; //=>PWR_ON_SETUP static UINT8 PowerOnMode = 0; //=>PWR_ON_SETUP
static UINT32 simCardInsert=0; static UINT32 simCardInsert=0;
static UINT8 gModuleSleep = 1; static UINT8 gModuleSleep = 1;
static UINT8 isSignalReady = 0; static int isSignalReady = -1;
static UINT32 GPRS_ERRNO = 0; static UINT32 GPRS_ERRNO = 0;
static UINT32 SmsCheck = 0; static UINT32 SmsCheck = 0;
static UINT8 SIMPIN1 = 1; static UINT8 SIMPIN1 = 1;
@ -289,8 +289,8 @@ void sf_mcu_poweron_4g_module(void)
const unsigned char PirDigtSensLevel[3] = {0, 1, 2}; // /*analog PIR: High/Middle/Low/OFF*/ const unsigned char PirDigtSensLevel[3] = {0, 1, 2}; // /*analog PIR: High/Middle/Low/OFF*/
#endif #endif
#define APP_POWER_OFF_APO 0 //#define APP_POWER_OFF_APO 0
#define APP_POWER_OFF_BATT_EMPTY 0 //#define APP_POWER_OFF_BATT_EMPTY 0
extern SF_TIME_S sf_get_mcu_poweroff_date(void); extern SF_TIME_S sf_get_mcu_poweroff_date(void);
UINT8 sf_set_digit_pir_level(UINT8 pirs) UINT8 sf_set_digit_pir_level(UINT8 pirs)
{ {
@ -353,7 +353,7 @@ unsigned char sf_mcu_reg_set(MCUParam_t attrId, unsigned char val)
SINT32 isCardFull = sf_is_card_full(); SINT32 isCardFull = sf_is_card_full();
//CameraBootSetting_t* pCameraBootSetting = CameraBootSettingGetHandle(); //CameraBootSetting_t* pCameraBootSetting = CameraBootSettingGetHandle();
MLOGI("isUsb = %d isCard = %d isCardFull = %d\n", isUsb, isCard, isCardFull); MLOGI("isUsb = %d isCard = %d isCardFull = %d val = %d simCardInsert = %d\n", isUsb, isCard, isCardFull, val, simCardInsert);
if(!isCard) if(!isCard)
{ {
isCard = sf_is_card(); isCard = sf_is_card();
@ -822,8 +822,8 @@ unsigned char sf_mcu_reg_set(MCUParam_t attrId, unsigned char val)
SF_TIME_S sf_get_mcu_poweroff_date(void) SF_TIME_S sf_get_mcu_poweroff_date(void)
{ {
return sfMcuTime; return sfMcuTime;
} }
void sf_set_mcu_poweroff_date(SF_PARA_TIME_S date) void sf_set_mcu_poweroff_date(SF_PARA_TIME_S date)
@ -1025,6 +1025,18 @@ unsigned short sf_get_mcu_ver(void)
return McuVersion; return McuVersion;
} }
/*************************************************
Function: sf_mcu_version_get
Description: get mcu ver
Input: N/A
Output: ver str
Return: N/A
Others: N/A
*************************************************/
void sf_mcu_version_get(UINT8 *mcuVer)
{
sprintf((char *)mcuVer, "%d.%d.%d", (McuVersion>>4)&0x0F, McuVersion & 0x0F, McuSubVersion);
}
/************************************************* /*************************************************
@ -1135,7 +1147,7 @@ void sf_set_cq_signal(UINT8 csq)
printf("[%s:%d]cq_Signal=%d,isSignalReady=%d\n", __FUNCTION__, __LINE__, cq_Signal, isSignalReady); printf("[%s:%d]cq_Signal=%d,isSignalReady=%d\n", __FUNCTION__, __LINE__, cq_Signal, isSignalReady);
} }
UINT8 sf_get_signal_ready(void) int sf_get_signal_ready(void)
{ {
return isSignalReady; return isSignalReady;
} }

View File

@ -0,0 +1,864 @@
/**************************************************************************
*
* Copyright (c) 2009-2018 by SiFar Technology, Inc.
*
* This software is copyrighted by and is the property of SiFar
* Technology, Inc.. All rights are reserved by SiFar Technology, Inc..
* This software may only be used in accordance with the corresponding
* license agreement. Any unauthorized use, duplication, distribution,
* or disclosure of this software is expressly forbidden.
*
* This Copyright notice MUST not be removed or modified without prior
* written consent of SiFar Technology, Inc..
*
* SiFar Technology, Inc. reserves the right to modify this software without notice.
*
* Author: Oliver
* Ver: 1.0.0 2018/11/14 New thread used to send file
**************************************************************************/
#include <stdio.h>
#include <stdlib.h>//malloc
#include <string.h>
#include <ctype.h>
#include <unistd.h> //usleep()
#include <pthread.h>
#include <fcntl.h>
#include <errno.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/times.h>
#include "sf_common.h"
#include "sf_wifi_svr.h"
#include "sf_data_transfer.h"
#include "sf_svr_send.h"
#include "sf_system.h"
//#include "sf_customer_app.h"
//#include "sf_4g_common.h"
/**************************************************************************
* C O N S T A N T S *
**************************************************************************/
/**************************************************************************
* M A C R O S *
**************************************************************************/
#define DATA_SVR_PORT 8855
/**************************************************************************
* D A T A T Y P E S *
**************************************************************************/
/**************************************************************************
* G L O B A L D A T A *
**************************************************************************/
//nouse TX_QUEUE *gAppDataSvrQueue = NULL;
pthread_t gAppDataSvrThreadId;
pthread_mutex_t gAppDataSvrMutex;
pthread_mutex_t gDataErrCodeMutex;
//S32 gAppDataSvrSocket = -1;
//fileInfo_t socketKeyMap[64];
socketKeyMap_t *socketKeyMapHead = NULL;
clientContext_t *pDataClientHead = NULL ;
DataErrCode_t *pDataErrCode = NULL;
//sem_t s_DataSvrSem;
/**************************************************************************
* E X T E R N A L R E F E R E N C E S *
**************************************************************************/
extern U8 poweroff_mode;
/**************************************************************************
* F U N C T I O N D E C L A R A T I O N S *
**************************************************************************/
void socketKeyMapAdd(S32 socket, U32 key)
{
socketKeyMap_t *p = socketKeyMapHead;
if(socketKeyMapHead == NULL)
{
socketKeyMapHead = (socketKeyMap_t *)malloc(sizeof(socketKeyMap_t));
socketKeyMapHead->key = key;
//socketKeyMapHead->socket = socket;
socketKeyMapHead->next = NULL;
}
else
{
while(p != NULL)
{
p = p->next;
}
p = (socketKeyMap_t *)malloc(sizeof(socketKeyMap_t));
p->key = key;
//p.socket = socket;
p->next = NULL;
}
}
void socketKeyMapDel(S32 socket, U32 key)
{
//U8 i;
//socketKeyMap_t *p = socketKeyMapHead;
}
static void fdClears(S32 clientsd, fd_set *rdfds, fd_set *wrfds, fd_set *errfds)
{
/* Initialize */
FD_CLR(clientsd, rdfds);
FD_CLR(clientsd, wrfds);
FD_CLR(clientsd, errfds);
}
static void fdInitSets(clientContext_t *pClientHead, S32 serversd, fd_set *rdfds, fd_set *wrfds, fd_set *errfds)
{
clientContext_t *pClient = pClientHead;
/* Initialize */
FD_ZERO(rdfds);
FD_ZERO(wrfds);
FD_ZERO(errfds);
FD_SET(serversd, rdfds);
FD_SET(serversd, errfds);
/* Iterate the client context list and assign the sockets to Sets */
while(pClient != NULL)
{
FD_SET(pClient->socket, rdfds);
FD_SET(pClient->socket, errfds);
pClient = pClient->p_next ;
}
}
static clientContext_t* DeleteClientContext( clientContext_t **ppClientHead, clientContext_t *pClient)
{
clientContext_t *pTemp;
clientContext_t *pPrev = *ppClientHead;
clientContext_t *pCurr = (*ppClientHead)->p_next;
pthread_mutex_lock(&gAppDataSvrMutex);
if (pClient == *ppClientHead)
{
pTemp = *ppClientHead;
*ppClientHead = (*ppClientHead)->p_next ;
close(pTemp->socket);
free(pTemp);
pthread_mutex_unlock(&gAppDataSvrMutex);
return *ppClientHead;
}
pPrev = *ppClientHead;
pCurr = (*ppClientHead)->p_next;
while (pCurr != NULL)
{
if (pCurr == pClient)
{
pTemp = pCurr->p_next;
pPrev->p_next = pTemp;
close(pCurr->socket);
free(pCurr);
pthread_mutex_unlock(&gAppDataSvrMutex);
return pTemp;
}
pPrev = pCurr;
pCurr = pCurr->p_next;
}
pthread_mutex_unlock(&gAppDataSvrMutex);
return NULL;
}
static clientContext_t* AddClientContextToList( clientContext_t *pClientHead, clientContext_t *pClient)
{
printf("data client add \n");
pthread_mutex_lock(&gAppDataSvrMutex);
//printf("data client add m\n");
if ( pClientHead != NULL )
{
pClient->p_next = pClientHead ;
}
pthread_mutex_unlock(&gAppDataSvrMutex);
//printf("data client add e\n");
return pClient;
}
void dataClientListPrint(void)
{
clientContext_t *pClient = pDataClientHead;
while ( pClient != NULL )
{
printf("data key:%d,fun:%d, fd:%d, %s\n",pClient->map.key,pClient->map.function,pClient->map.fd,pClient->map.fileName);
pClient = pClient->p_next;
}
//printf("list end\n");
//pthread_mutex_unlock(&gAppDataSvrMutex);
}
U8 dataTransErrCodeSet(U32 port, U8 errCode)
{
DataErrCode_t *p;
pthread_mutex_lock(&gDataErrCodeMutex);
if(pDataErrCode == NULL)
{
pDataErrCode = (DataErrCode_t *)malloc(sizeof(DataErrCode_t));
if(pDataErrCode == NULL)
{
goto ErrCodeSetFail;
}
memset(pDataErrCode, 0, sizeof(DataErrCode_t));
}
p = pDataErrCode;
while(p->pNext != NULL)
{
p = p->pNext;
}
p->pNext = (DataErrCode_t *)malloc(sizeof(DataErrCode_t));
if(p->pNext == NULL)
{
goto ErrCodeSetFail;
}
memset(p->pNext, 0, sizeof(DataErrCode_t));
p = p->pNext;
p->port = port;
p->errCode = errCode;
#if 1 /*debug*/
p = pDataErrCode;
while(p->pNext != NULL )
{
p = p->pNext;
if(p->errCode != CMD_SUCCESS)
{
printf("port:%d,errCode:%d\n",p->port,p->errCode);
}
}
#endif
pthread_mutex_unlock(&gDataErrCodeMutex);
/*forbuild sp5kHostMsgSend(APP_UI_MSG_DATA_ERROR_CODE, port);*/
return SUCCESS;
ErrCodeSetFail:
pthread_mutex_unlock(&gDataErrCodeMutex);
/*forbuild sp5kHostMsgSend(APP_UI_MSG_DATA_ERROR_CODE, port);*/
return FAIL;
}
U8 dataTransErrCodeGet(U32 port)
{
DataErrCode_t *p,*q;
if(pDataErrCode == NULL)
{
return 0;
}
pthread_mutex_lock(&gDataErrCodeMutex);
p = pDataErrCode;
while(p->pNext != NULL)
{
q = p;
p = p->pNext;
if(p->port == port)
{
q->pNext = p->pNext;
free(p);
pthread_mutex_unlock(&gDataErrCodeMutex);
return p->errCode;
}
}
#if DBG_LOG /*debug*/
p = pDataErrCode;
while(p->pNext != NULL)
{
p = p->pNext;
printf("port:%d,errCode:%d",p->port,p->errCode);
}
#endif
pthread_mutex_unlock(&gDataErrCodeMutex);
return 0;
}
void sf_DataMapClear(clientContext_t *pClient)
{
//pClient->map.key = 0;
// printf("pClient.map:%d,socket:%d\n",pClient->map.fd,pClient->socket);
if(pClient->map.fd)
close(pClient->map.fd);
pClient->map.fd = 0;
pClient->map.fileName[0] = 0;
pClient->map.function = 3;//idle
pClient->map.count = 0;
pClient->map.fileSize = 0;
pClient->map.transferSize = 0;
pClient->map.seek = 0;
//printf("sf_DataMapClear e\n");
}
U8 sf_DataMapSet(U32 key, U8 function, S8 *fileName, U32 FileSize)
{
clientContext_t *pClient = pDataClientHead;
U32 err;
U32 i = 0;
printf("[sf_DataMapSet],key:%d,fileName:%s\n",key,fileName);
if(fileName == NULL)
return CMD_ERR;
if(pClient == NULL)
{
return DATA_CMD_8855_NO_CONNECT;
}
err = pthread_mutex_lock(&gAppDataSvrMutex);
if(err != SUCCESS)
{
printf("Map set error!\n");
return DATA_CMD_ADD_TO_FLOW_ERR;
}
while(pClient != NULL)
{
// printf("socket=%d,key=%d,function=%d,name=%s\n",pClient->socket,pClient->map.key,pClient->map.function,pClient->map.fileName);
#ifndef __x86_64__
if(pClient->map.key == key)
#endif
{
if((pClient->map.function == 1 || pClient->map.function == 2) && (function))
{
printf("[ERROR]file data is still transfer!\n");
pthread_mutex_unlock(&gAppDataSvrMutex);
return DATA_CMD_PORT_IS_USED;
}
pClient->map.function = function;
if(function)
{
memcpy((char *)&pClient->map.fileName[0], (char *)fileName,strlen((char *)fileName));
// printf("map.fileName:%s,filename:%s,len:%d\n",pClient->map.fileName,fileName,strlen((char *)fileName));
// pClient->map.fileName[strlen(fileName)+1]=0;
pClient->map.fileSize = FileSize;
}
else
{
//sf_DataMapClear(pClient);
usleep(50*1000);
while(pClient->map.function != 3)
{
usleep(20*1000);
i++;
printf("function2=%d\n",pClient->map.function);
if(i >= 50)
{
pthread_mutex_unlock(&gAppDataSvrMutex);
return DATA_CMD_PORT_IS_USED;
}
}
}
pthread_mutex_unlock(&gAppDataSvrMutex);
return SUCCESS;
}
pClient = pClient->p_next;
}
pthread_mutex_unlock(&gAppDataSvrMutex);
return DATA_CMD_NO_THIS_PORT;
}
#if 0//forbuild
void thread_destroy(TX_THREAD *pthread)
{
/*terminate and delete thread*/
if (sp5kOsThreadTerminate(pthread) !=0)
{
HOST_ASSERT(0);/**/
}
if (sp5kOsThreadDelete(pthread) !=0)
{
HOST_ASSERT(0);/**/
}
}
#endif
void *sf_DataSvrTransferThread(void *addr)
{
S32 nbytes=0,nErr;
S32 ret =0 ,writedsize=0;
S32 readSize;
//fd_set rdfds, wrfds, errfds;
static U32 oldTime,CurrTime,countByte;
//pthread_t *pthread;
U32 sendSizeTemp = 0;
//U32 i = 0;;
/*U8 tmpbuf[100];*/
printf("new data thread = %p\n",addr);
if(addr == 0)
{
sleep(3);
return NULL;
}
clientContext_t *pClient = (clientContext_t *)addr ;
//pthread = (pthread_t *)(&pClient->pthread);
while(1)
{
nbytes = recv(pClient->socket, pClient->szBuffer, PACKET_MAX_LEN,0);
if( nbytes < 0 )
{
// printf("[Error][sf_DataSvrTransferThread]receive: %d\n", nbytes );
// if (FD_ISSET(pClient->socket, &errfds))
{
nErr = errno;//getSocketError(pClient->socket);
//printf("[Error][sf_DataSvrTransferThread] Error: %d,socket:%d.\n",nErr,pClient->socket );
if(nErr != 11)//EAGAIN/EINTR
{
printf("Socket:%d, errno: %d,key:%d,fd:%d\n",pClient->socket,errno,pClient->map.key,pClient->map.fd );
perror("Error:");
sf_DataMapClear(pClient);
//fdClears(pClient->socket,&rdfds,&wrfds,&errfds);
pClient = DeleteClientContext(&pDataClientHead,pClient);
if ( pClient == NULL )
{
//pDataClientHead = NULL ;
}
dataClientListPrint();
printf("[Error][thread_destroy] end\n");
//forbuild sp5kHostMsgSend(APP_UI_MSG_DATA_THREAD_DEL, pthread);
pthread_exit(NULL);
}
}
//usleep(10*1000);
}
else if(nbytes == 0)
{
printf("client close socket:%d, key:%d, errno: %d.\n",pClient->socket,pClient->map.key , errno );
sf_DataMapClear(pClient);
pClient = DeleteClientContext(&pDataClientHead,pClient);
dataClientListPrint();
//sf_set_wifi_status(SF_WIFI_OK);
//printf("destroy thread\n");
pthread_exit(NULL);
}
if(pClient->map.function != 3)
{
printf("function=%d,name=%s\n",pClient->map.function,pClient->map.fileName);
//printf("socket=%d,key=%d,C_port=%d\n",pClient->socket,pClient->map.key,ntohs(pClient->ClientAddr.sin_port));
}
//pClient->map.fileName[47]=0;
//stprintf(tmpbuf,"function=%d,name=%s,port=%d\n",pClient->map.function,pClient->map.fileName,ntohs(pClient->ClientAddr.sin_port));
//send(pClient->socket, tmpbuf, 100);
if(pClient->map.function == 0 || poweroff_mode) //stop
{
sf_DataMapClear(pClient);
if(poweroff_mode)
{
return NULL;
}
}
else if(pClient->map.function == 1) //upload
{
app_poweroff_time_clear();/*reset power off count time*/
if(pClient->map.fd == 0)
{
pClient->map.fileName[strlen((char *)(pClient->map.fileName))+1]=0;
if(pClient->map.fileName[0] != '\0')
{
pClient->map.fd = open((char *)pClient->map.fileName, O_RDWR|O_CREAT,0);
if(pClient->map.fd == 0)
{
//creat file failed.
printf("fd=0\n");
sf_DataMapClear(pClient);
dataTransErrCodeSet(pClient->map.key, DATA_UP_CREAT_FILE_FAIL);
continue;
}
//pClient->map.fileSize = sp5kFsFileSizeGet(pClient->map.fd);
//pClient->map.transferSize = 0;
printf("data filesize=%d\n",pClient->map.fileSize);
}
else
{
printf("err\n");
sf_DataMapClear(pClient);
dataTransErrCodeSet(pClient->map.key, DATA_UP_NO_FILE_NAME);
continue;
}
}
#if 1
if(nbytes <= 0)
nbytes = 0;
CurrTime = times(NULL)/100;
if(oldTime == 0)
{
oldTime = times(NULL)/100;
}
else if(oldTime != CurrTime)
{
countByte += nbytes;
printf("receive speed=% 3dKB/s, %d\n",countByte/1024,countByte);
countByte = 0;
oldTime = CurrTime;
}
else
{
countByte += nbytes;
}
#endif
if(nbytes <= 0)
{
pClient->map.count++;
/*printf(">");*/
usleep(25*1000); /* ms */
if(pClient->map.count > 200)
{
printf("receive time out\n");
sf_DataMapClear(pClient);
dataTransErrCodeSet(pClient->map.key, DATA_UP_TIME_OUT);
}
continue;
}
else
{
pClient->map.count = 0;
}
//printf("fd=%d,nbytes=%d\n",pClient->map.fd, nbytes);
ret = write(pClient->map.fd, pClient->szBuffer, nbytes);
if(ret <= 0)
{
printf("wirte error ! ret=%d\n",ret);
usleep(25*1000); /* ms */
sf_DataMapClear(pClient);
dataTransErrCodeSet(pClient->map.key, DATA_UP_WRITE_FILE_ERR);
continue;
}
pClient->map.transferSize += ret;
if(pClient->map.transferSize >= pClient->map.fileSize)
{
printf("receive success! Tsize=%d,Fsize=%d\n", pClient->map.transferSize,pClient->map.fileSize);
sf_DataMapClear(pClient);
dataTransErrCodeSet(pClient->map.key, CMD_SUCCESS);
}
}
else if(pClient->map.function == 2) //download
{
app_poweroff_time_clear();/*reset power off count time*/
// printf("[read],fd:%x,pClient->map.fileName:%s,len:%d\n",pClient->map.fd,pClient->map.fileName,strlen((char*)(pClient->map.fileName)));
if(pClient->map.fd <= 0)
{
if(pClient->map.fileName[0] != '\0')
{
pClient->map.fd = open((char *)pClient->map.fileName, O_RDWR,0/*borbuild FS_OPEN_RDONLY*/);
// printf("pClient->map.fd = %d\n",pClient->map.fd);
if(pClient->map.fd == -1)
{
//open file failed.
sf_DataMapClear(pClient);
//dataTransErrCodeSet(pClient->map.key, DATA_DOWN_OPEN_FILE_FAIL);//remove,because APP not use
continue;
}
pClient->map.fileSize = sp5kFsFileSizeGet((char *)pClient->map.fileName);
pClient->map.transferSize = 0;
// printf("filesize=%d\n",pClient->map.fileSize);
//i = 0;
}
else
{
printf("ssdfeef\n");
sf_DataMapClear(pClient);
//dataTransErrCodeSet(pClient->map.key, DATA_DOWN_NO_FILE_NAME);//remove,because APP not use
continue;
}
}
readSize = read(pClient->map.fd, pClient->szBuffer, PACKET_MAX_LEN);
// printf("[read],fd:%x,readsize:%d,len:%x\n",pClient->map.fd,readSize,PACKET_MAX_LEN);
if(readSize > 0)
{
//printf("data socket send->%d\n",pClient->socket);
//i=0;
sendSizeTemp = 0;
while(readSize > 0)
{
writedsize = send(pClient->socket, (void *)&pClient->szBuffer[sendSizeTemp], readSize, 0);
// printf("R=%d, W=%d\n", readSize, writedsize);
if(writedsize <= 0)
{
perror("Send Failed!\n");
pClient->map.count++;
usleep(pClient->map.count*50*1000); /* ms */
//printf("c");
//sp5kFsFileSeek(pClient->map.fd, -readSize, SP5K_FS_SEEK_CUR);
}
else if(writedsize > readSize)
{
printf("[ERROR] send size > read size\n");
sf_DataMapClear(pClient);
//dataTransErrCodeSet(pClient->map.key, DATA_DOWN_SEND_DATA_ERR);//remove,because APP not use
}
else
{
pClient->map.transferSize += writedsize;
//printf("send=%d\n",pClient->map.transferSize);
pClient->map.count = 0;
if(writedsize < readSize)
{
readSize -= writedsize;
sendSizeTemp += writedsize;
printf("send left =%d,index:%d\n",readSize,sendSizeTemp);
usleep(30*1000); /* ms */
//sp5kFsFileSeek(pClient->map.fd, ret-readSize, SP5K_FS_SEEK_CUR); seek function has a bug
}
else
{
readSize = 0;
sendSizeTemp = 0;
if(pClient->map.transferSize >= pClient->map.fileSize)
{
// printf("send success!\n");
sf_DataMapClear(pClient);
//dataTransErrCodeSet(pClient->map.key, CMD_SUCCESS);//remove,because APP not use
}
}
}
#if 1
if(writedsize <= 0)
writedsize = 0;
CurrTime = times(NULL)/100;
if(oldTime == 0)
{
oldTime = times(NULL)/100;
}
else if(oldTime != CurrTime)
{
countByte += writedsize;
printf("send speed=% 3dKB/s, %d\n",countByte/1024,countByte);
countByte = 0;
oldTime = CurrTime;
}
else
{
countByte += writedsize;
}
#endif
if((pClient->map.count >= 10))
{
readSize = 0;
sendSizeTemp = 0;
//send time out.
//printf("time out == 30\n");
printf("timeOut sendSize=%d,filesize=%d\n",pClient->map.transferSize,pClient->map.fileSize);
sf_DataMapClear(pClient);
//dataTransErrCodeSet(pClient->map.key, DATA_DOWN_TIME_OUT);//remove,because APP not use
}
usleep(25*1000);
}
}
else
{
printf("[ERROR] read size = 0\n");
sf_DataMapClear(pClient);
//dataTransErrCodeSet(pClient->map.key, DATA_DOWN_READ_FILE_ERR);//remove,because APP not use
}
//ros_thread_sleep(25); /* ms */
}
usleep(5*1000);
}
}
void *sf_DataSvrThread(void *p)
{
//S32 s32Ret;
S32 nbytes=0;
//U32 i;
//U32 readSize, sendSize;
S32 new_fd,on;//nErr,, count
S32 appDataSvrSocket;
U32 clientLength;
//U8 tempbuf[21] = {0};
//U8 key = 0;
S32 ret = 0 ;
struct sockaddr_in cliAddr;
fd_set rdfds, wrfds, errfds;
clientContext_t *pClient = NULL;
S32 maxSD = -1;
struct timeval timeout = {60, 0};
//socklen_t len;
//struct sockaddr_in addr;
struct sockaddr_in addrSend;
//printf("[sf_DataSvrThread]\n");
appDataSvrSocket = socket(AF_INET, SOCK_STREAM, 0);
if (appDataSvrSocket < 0)
{
printf("[Error][sf_DataSvrThread] socket,ret:%x\n",appDataSvrSocket);
return NULL;
}
printf("[sf_DataSvrThread],gAppSvrSocket:%d\n",appDataSvrSocket);
pthread_mutex_init(&gAppDataSvrMutex,NULL);
pthread_mutex_init(&gDataErrCodeMutex,NULL);
// strcpy(gAppSvrIp,sIp);
//gAppSvrPort = nPort;
on = 1 ;
ret = setsockopt(appDataSvrSocket, IPPROTO_TCP, SO_KEEPALIVE, &on, sizeof(on));
if ( ret < 0 )
{
printf("[Error][sf_DataSvrThread] setsockopt,ret:%x\n",ret);
}
ret = setsockopt( appDataSvrSocket, SOL_SOCKET, SO_REUSEADDR, &on, sizeof( on ) );
if( ret < 0 )
{
printf("[Error][sf_DataSvrThread] SO_REUSEADDR,ret:%d \n",ret);
//return -1;
}
int opt = 512*1024;
setsockopt(appDataSvrSocket,SOL_SOCKET,SO_SNDBUF,&opt,sizeof(int));
memset(&addrSend, 0, sizeof(addrSend));
// addrSend.sin_addr.s_addr = inet_addr(gAppLocalIp);
addrSend.sin_addr.s_addr = htonl(INADDR_ANY);
addrSend.sin_port = htons(DATA_SVR_PORT);
addrSend.sin_family = AF_INET;
ret = bind(appDataSvrSocket, (struct sockaddr*)&addrSend, sizeof(addrSend));
if( ret < 0 )
{
printf("[Error][sf_DataSvrThread] bind:%d \n",ret);
return NULL;
}
ret =listen(appDataSvrSocket, LISTEN_PARAM);
if (ret < 0)
{
printf("[Error][sf_DataSvrThread]listen:%d\n",ret);
close(appDataSvrSocket);
return NULL;
}
clientLength = sizeof(cliAddr);
maxSD = appDataSvrSocket;
while(1)
{
fdInitSets(pDataClientHead,appDataSvrSocket,&rdfds,&wrfds,&errfds);
//printf("sec = %ld, usec = %ld\n", timeout.tv_sec, timeout.tv_usec);
timeout.tv_sec = 60;
timeout.tv_usec = 0;
//printf("w");
ret = select(maxSD+1, &rdfds, NULL, &errfds, &timeout) ;
//printf("2sec = %ld, usec = %ld\n", timeout.tv_sec, timeout.tv_usec);
//printf("data select ret=%d, appDataSvrSocket=%d\n",ret, appDataSvrSocket);
if (ret > 0)
{
//U32 flags = fcntl(appDataSvrSocket, F_GETFL, 0); //获取文件的flags值。
//fcntl(appDataSvrSocket, F_SETFL, flags | O_NONBLOCK); //设置成非阻塞模式;
//printf("[sf_DataSvrThread]select,rdfds:%d,errfds:%d\n",rdfds,errfds);
//if (FD_ISSET(appDataSvrSocket, &rdfds))
{
printf("data accept wait\n");
new_fd = accept(appDataSvrSocket, (struct sockaddr *) &cliAddr, &clientLength);
if (new_fd < 0)
{
printf("[Error][sf_DataSvrThread]accept:%d\n",new_fd);
continue;
}
else
{
printf("\n\n[Port:8855]new data channel socket:%d --------oliver\n", new_fd);
printf("data channel.IP:%s, Port:%d\n\n\n", inet_ntoa(cliAddr.sin_addr), htons(cliAddr.sin_port));
/*
if(SF_SUCCESS != sf_is_ip_in_list(inet_ntoa(cliAddr.sin_addr)))
{
LOGD("Already device connected ,Pls Wait!");
continue;
}
*/
//sf_set_wifi_status(SF_WIFI_CON);
//memdump((void *)&cliAddr, sizeof(cliAddr));
ret = 1 ;
//ioctlsocket(new_fd,FIONBIO,&ret); /* set/clear non-blocking i/o */
U32 flags = fcntl(new_fd, F_GETFL, 0); //获取文件的flags值。
fcntl(new_fd, F_SETFL, flags | O_NONBLOCK); //设置成非阻塞模式;
int opt = 512*1024;
setsockopt(new_fd,SOL_SOCKET,SO_SNDBUF,&opt,sizeof(int));
pClient = (clientContext_t *) malloc(sizeof(clientContext_t));
memset(pClient, 0, sizeof(clientContext_t));
pClient->socket = new_fd ;
pClient->map.key = ntohs(cliAddr.sin_port);
memcpy((void *)&pClient->ClientAddr, (void *)&cliAddr, sizeof(cliAddr));
pDataClientHead = AddClientContextToList(pDataClientHead,pClient);
if ( maxSD < pClient->socket )
maxSD = pClient->socket ;
dataClientListPrint();
//printf("thread create s\n");
/*s32Ret = */pthread_create(&pClient->pthread, NULL, sf_DataSvrTransferThread, pClient);
//printf("data server thread create:%d\n", s32Ret);
fdClears(pClient->socket,&rdfds,&wrfds,&errfds);
}
}
}
else if (ret == 0)
{
/*usleep(1*1000); ms */
}
else
{
printf("[Error][sf_DataSvrThread]nbytes %d,lwip_close\n", nbytes );
pClient = pDataClientHead ;
while (pClient != NULL)
{
fdClears(pClient->socket,&rdfds,&wrfds,&errfds);
pClient = DeleteClientContext(&pDataClientHead,pClient);
}
close(appDataSvrSocket);
return NULL;
}
}
}
S32 sf_DataSvrInit(void)
{
S32 s32Ret;
s32Ret = pthread_create(&gAppDataSvrThreadId, NULL, sf_DataSvrThread, NULL);
return s32Ret;
}

View File

@ -0,0 +1,444 @@
#include <errno.h>
#include <stdio.h>
#include <string.h>
#include <net/if.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdbool.h>
#include <linux/netlink.h>
#include <inttypes.h>
#include <netlink/genl/genl.h>
#include <netlink/genl/family.h>
#include <netlink/genl/ctrl.h>
#include <netlink/msg.h>
#include <netlink/attr.h>
//#include "nl80211.h"
//#include "iw.h"
//#include "sf_4g_app.h"
//#include "sf_syslib.h"
int iw_debug = 0;
static int (*registered_handler)(struct nl_msg *, void *);
static void *registered_handler_data;
void register_handler(int (*handler)(struct nl_msg *, void *), void *data)
{
registered_handler = handler;
registered_handler_data = data;
}
int valid_handler(struct nl_msg *msg, void *arg)
{
if (registered_handler)
return registered_handler(msg, registered_handler_data);
return NL_OK;
}
static int error_handler(struct sockaddr_nl *nla, struct nlmsgerr *err,
void *arg)
{
int *ret = arg;
*ret = err->error;
return NL_STOP;
}
static int ack_handler(struct nl_msg *msg, void *arg)
{
int *ret = arg;
*ret = 0;
return NL_STOP;
}
struct handler_args {
const char *group;
int id;
};
static int no_seq_check(struct nl_msg *msg, void *arg)
{
return NL_OK;
}
void mac_addr_n2a(char *mac_addr, const unsigned char *arg)
{
int i, l;
l = 0;
for (i = 0; i < ETH_ALEN ; i++) {
if (i == 0) {
sprintf(mac_addr+l, "%02x", arg[i]);
l += 2;
} else {
sprintf(mac_addr+l, ":%02x", arg[i]);
l += 3;
}
}
}
static int family_handler(struct nl_msg *msg, void *arg)
{
struct handler_args *grp = arg;
struct nlattr *tb[CTRL_ATTR_MAX + 1];
struct genlmsghdr *gnlh = nlmsg_data(nlmsg_hdr(msg));
struct nlattr *mcgrp;
int rem_mcgrp;
nla_parse(tb, CTRL_ATTR_MAX, genlmsg_attrdata(gnlh, 0),
genlmsg_attrlen(gnlh, 0), NULL);
if (!tb[CTRL_ATTR_MCAST_GROUPS])
return NL_SKIP;
nla_for_each_nested(mcgrp, tb[CTRL_ATTR_MCAST_GROUPS], rem_mcgrp) {
struct nlattr *tb_mcgrp[CTRL_ATTR_MCAST_GRP_MAX + 1];
nla_parse(tb_mcgrp, CTRL_ATTR_MCAST_GRP_MAX,
nla_data(mcgrp), nla_len(mcgrp), NULL);
if (!tb_mcgrp[CTRL_ATTR_MCAST_GRP_NAME] ||
!tb_mcgrp[CTRL_ATTR_MCAST_GRP_ID])
continue;
if (strncmp(nla_data(tb_mcgrp[CTRL_ATTR_MCAST_GRP_NAME]),
grp->group, nla_len(tb_mcgrp[CTRL_ATTR_MCAST_GRP_NAME])))
continue;
grp->id = nla_get_u32(tb_mcgrp[CTRL_ATTR_MCAST_GRP_ID]);
break;
}
return NL_SKIP;
}
int nl_get_multicast_id(struct nl_sock *sock, const char *family, const char *group)
{
struct nl_msg *msg;
struct nl_cb *cb;
int ret, ctrlid;
struct handler_args grp = {
.group = group,
.id = -ENOENT,
};
msg = nlmsg_alloc();
if (!msg)
return -ENOMEM;
cb = nl_cb_alloc(NL_CB_DEFAULT);
if (!cb) {
ret = -ENOMEM;
goto out_fail_cb;
}
ctrlid = genl_ctrl_resolve(sock, "nlctrl");
genlmsg_put(msg, 0, 0, ctrlid, 0,
0, CTRL_CMD_GETFAMILY, 0);
ret = -ENOBUFS;
NLA_PUT_STRING(msg, CTRL_ATTR_FAMILY_NAME, family);
ret = nl_send_auto_complete(sock, msg);
if (ret < 0)
goto out;
ret = 1;
nl_cb_err(cb, NL_CB_CUSTOM, error_handler, &ret);
nl_cb_set(cb, NL_CB_ACK, NL_CB_CUSTOM, ack_handler, &ret);
nl_cb_set(cb, NL_CB_VALID, NL_CB_CUSTOM, family_handler, &grp);
while (ret > 0)
nl_recvmsgs(sock, cb);
if (ret == 0)
ret = grp.id;
nla_put_failure:
out:
nl_cb_put(cb);
out_fail_cb:
nlmsg_free(msg);
return ret;
}
static int nl80211_init(struct nl80211_state *state)
{
int err;
state->nl_sock = nl_socket_alloc();
if (!state->nl_sock) {
fprintf(stderr, "Failed to allocate netlink socket.\n");
return -ENOMEM;
}
if (genl_connect(state->nl_sock)) {
fprintf(stderr, "Failed to connect to generic netlink.\n");
err = -ENOLINK;
goto out_handle_destroy;
}
nl_socket_set_buffer_size(state->nl_sock, 8192, 8192);
/* try to set NETLINK_EXT_ACK to 1, ignoring errors */
err = 1;
setsockopt(nl_socket_get_fd(state->nl_sock), SOL_NETLINK,
NETLINK_EXT_ACK, &err, sizeof(err));
state->nl80211_id = genl_ctrl_resolve(state->nl_sock, "nl80211");
if (state->nl80211_id < 0) {
fprintf(stderr, "nl80211 not found.\n");
err = -ENOENT;
goto out_handle_destroy;
}
return 0;
out_handle_destroy:
nl_socket_free(state->nl_sock);
return err;
}
static void nl80211_cleanup(struct nl80211_state *state)
{
nl_socket_free(state->nl_sock);
}
int __prepare_listen_events(struct nl80211_state *state)
{
int mcid, ret;
/* Configuration multicast group */
mcid = nl_get_multicast_id(state->nl_sock, "nl80211", "config");
if (mcid < 0)
return mcid;
ret = nl_socket_add_membership(state->nl_sock, mcid);
if (ret)
return ret;
/* Scan multicast group */
mcid = nl_get_multicast_id(state->nl_sock, "nl80211", "scan");
if (mcid >= 0) {
ret = nl_socket_add_membership(state->nl_sock, mcid);
if (ret)
return ret;
}
/* Regulatory multicast group */
mcid = nl_get_multicast_id(state->nl_sock, "nl80211", "regulatory");
if (mcid >= 0) {
ret = nl_socket_add_membership(state->nl_sock, mcid);
if (ret)
return ret;
}
/* MLME multicast group */
mcid = nl_get_multicast_id(state->nl_sock, "nl80211", "mlme");
if (mcid >= 0) {
ret = nl_socket_add_membership(state->nl_sock, mcid);
if (ret)
return ret;
}
mcid = nl_get_multicast_id(state->nl_sock, "nl80211", "vendor");
if (mcid >= 0) {
ret = nl_socket_add_membership(state->nl_sock, mcid);
if (ret)
return ret;
}
mcid = nl_get_multicast_id(state->nl_sock, "nl80211", "nan");
if (mcid >= 0) {
ret = nl_socket_add_membership(state->nl_sock, mcid);
if (ret)
return ret;
}
return 0;
}
static int connectNum=0;
static int print_event(struct nl_msg *msg, void *arg)
{
struct genlmsghdr *gnlh = nlmsg_data(nlmsg_hdr(msg));
struct nlattr *tb[NL80211_ATTR_MAX + 1], *nst;
struct print_event_args *args = arg;
char ifname[100];
char macbuf[6*3];
__u8 reg_type;
__u32 wiphy_idx = 0;
int rem_nst;
__u16 status;
nla_parse(tb, NL80211_ATTR_MAX, genlmsg_attrdata(gnlh, 0),
genlmsg_attrlen(gnlh, 0), NULL);
if (tb[NL80211_ATTR_IFINDEX] && tb[NL80211_ATTR_WIPHY]) {
/* if_indextoname may fails on delete interface/wiphy event */
if (if_indextoname(nla_get_u32(tb[NL80211_ATTR_IFINDEX]), ifname))
printf("%s (phy #%d): ", ifname, nla_get_u32(tb[NL80211_ATTR_WIPHY]));
else
printf("phy #%d: ", nla_get_u32(tb[NL80211_ATTR_WIPHY]));
} else if (tb[NL80211_ATTR_WDEV] && tb[NL80211_ATTR_WIPHY]) {
printf("wdev 0x%llx (phy #%d): ",
(unsigned long long)nla_get_u64(tb[NL80211_ATTR_WDEV]),
nla_get_u32(tb[NL80211_ATTR_WIPHY]));
} else if (tb[NL80211_ATTR_IFINDEX]) {
if_indextoname(nla_get_u32(tb[NL80211_ATTR_IFINDEX]), ifname);
printf("%s: ", ifname);
} else if (tb[NL80211_ATTR_WDEV]) {
printf("wdev 0x%llx: ", (unsigned long long)nla_get_u64(tb[NL80211_ATTR_WDEV]));
} else if (tb[NL80211_ATTR_WIPHY]) {
printf("phy #%d: ", nla_get_u32(tb[NL80211_ATTR_WIPHY]));
}
switch (gnlh->cmd) {
case NL80211_CMD_NEW_STATION:
mac_addr_n2a(macbuf, nla_data(tb[NL80211_ATTR_MAC]));
printf("new station %s\n", macbuf);
connectNum++;
if(connectNum == 1)
{
//sf_app_msg_data_snd(SY_MSG_WIFI_CONNECT,(unsigned char*)NULL);
}
break;
case NL80211_CMD_DEL_STATION:
mac_addr_n2a(macbuf, nla_data(tb[NL80211_ATTR_MAC]));
printf("del station %s\n", macbuf);
connectNum--;
if(connectNum < 0)
connectNum = 0;
if(connectNum == 0)
{
//sf_app_msg_data_snd(SY_MSG_WIFI_DISCONNECT,(unsigned char*)NULL);
//sf_rtsp_msg_data_snd(1,(unsigned char*)NULL);
}
break;
default:
printf("unknown event %d\n",
gnlh->cmd);
break;
}
fflush(stdout);
return NL_SKIP;
}
struct wait_event {
int n_cmds, n_prints;
const __u32 *cmds;
const __u32 *prints;
__u32 cmd;
struct print_event_args *pargs;
};
static int wait_event(struct nl_msg *msg, void *arg)
{
struct wait_event *wait = arg;
struct genlmsghdr *gnlh = nlmsg_data(nlmsg_hdr(msg));
int i;
if (wait->pargs) {
for (i = 0; i < wait->n_prints; i++) {
if (gnlh->cmd == wait->prints[i])
print_event(msg, wait->pargs);
}
}
for (i = 0; i < wait->n_cmds; i++) {
if (gnlh->cmd == wait->cmds[i])
wait->cmd = gnlh->cmd;
}
return NL_SKIP;
}
__u32 __do_listen_events(struct nl80211_state *state,
const int n_waits, const __u32 *waits,
const int n_prints, const __u32 *prints,
struct print_event_args *args)
{
struct nl_cb *cb = nl_cb_alloc(iw_debug ? NL_CB_DEBUG : NL_CB_DEFAULT);
struct wait_event wait_ev;
if (!cb) {
fprintf(stderr, "failed to allocate netlink callbacks\n");
return -ENOMEM;
}
/* no sequence checking for multicast messages */
nl_cb_set(cb, NL_CB_SEQ_CHECK, NL_CB_CUSTOM, no_seq_check, NULL);
nl_cb_set(cb, NL_CB_VALID, NL_CB_CUSTOM, valid_handler, NULL);
if (n_waits && waits) {
wait_ev.cmds = waits;
wait_ev.n_cmds = n_waits;
wait_ev.prints = prints;
wait_ev.n_prints = n_prints;
wait_ev.pargs = args;
register_handler(wait_event, &wait_ev);
} else
register_handler(print_event, args);
wait_ev.cmd = 0;
while (!wait_ev.cmd)
nl_recvmsgs(state->nl_sock, cb);
nl_cb_put(cb);
return wait_ev.cmd;
}
__u32 listen_events1(struct nl80211_state *state)
{
int ret;
ret = __prepare_listen_events(state);
if (ret)
return ret;
return __do_listen_events(state, 0, NULL, 0, NULL, NULL);
}
void* apinfoThread(void* args)
{
/*struct nl80211_state nlstate;
int err;
err = nl80211_init(&nlstate);
if (err)
return NULL;
listen_events1(&nlstate);
nl80211_cleanup(&nlstate);
*/
return NULL;
}
#if 0
int main(int argc, char **argv)
{
struct nl80211_state nlstate;
int err;
err = nl80211_init(&nlstate);
if (err)
return 1;
listen_events1(&nlstate);
nl80211_cleanup(&nlstate);
return err;
}
#endif

View File

@ -0,0 +1,312 @@
/**************************************************************************
*
* Copyright (c) 2009-2018 by SiFar Technology, Inc.
*
* This software is copyrighted by and is the property of SiFar
* Technology, Inc.. All rights are reserved by SiFar Technology, Inc..
* This software may only be used in accordance with the corresponding
* license agreement. Any unauthorized use, duplication, distribution,
* or disclosure of this software is expressly forbidden.
*
* This Copyright notice MUST not be removed or modified without prior
* written consent of SiFar Technology, Inc..
*
* SiFar Technology, Inc. reserves the right to modify this software without notice.
*
* Author: Oliver
* Ver: 1.0.0 2018/11/14 New thread used to send file
**************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <unistd.h> //usleep()
#include <pthread.h>
#include <fcntl.h>
#include <errno.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/stat.h>//stat()
#include <semaphore.h>
#include "sf_wifi_svr.h"
#include "sf_data_transfer.h"
#include "sf_svr_send.h"
//#include "sf_para.h"
//#define TIME_MAP_PATH "/app/sd/timemap"
#define TIME_MAP_PATH "."
pthread_t gAppSvrSendThreadId;
sem_t gAppSvrSendQueue;
UINT8 StopSendFile = 0;
extern UINT8 SendingFile;
extern UINT8 QUICKLY_CAPTURE_ON;
extern UINT16 CurrentWifiCmd;
extern sysMsg_t sendMsg;
void appSvrStopSendFile(void)
{
printf("stop send file\n");
if(SendingFile == 1)
{
StopSendFile = 1;
}
}
char *find_file_name(const char *name)
{
char *name_start = NULL;
int sep = '/';
if (NULL == name)
{
printf("the path name is NULL\n");
return NULL;
}
name_start = strrchr(name, sep);
return (NULL == name_start)?(char *)name:(name_start + 1);
}
UINT8 appSvrSendFile(UINT32 socket, const UINT8 *fname)
{
SINT32 fd = 0;
UINT32 length = 0;
UINT32 count = 0;
UINT32 i = 0;
UINT32 offset = 0;
SINT32 size = 0;
SINT32 sendsize = 0;
UINT32 fileTotalSize = 0;
UINT8 *buff = NULL;
UINT8 ret = SUCCESS;
UINT32 temp;
UINT8 tempName[32] = {0};
struct tm mtime = {0};//, atime = {0}, ctime = {0};
APP_SVR_PACKET_T msgParse;
printf("[SEND FILE oliver]file:%s\n", fname);
SendingFile = 1;
if((socket == 0) || (fname == NULL))
{
printf("appSvrSendFile param ERROR!\n");
ret = FAIL;
}
else
{
buff = (UINT8 *)malloc(PACKET_MAX_LEN+1);
if(buff == NULL)
{
ret = FAIL;
}
else
{
fd = open((char *)fname, O_RDONLY /*SP5K_FS_OPEN_RDONLY*/);
if(fd == -1)
{
printf("open file error: %s!", fname);
ret = FAIL;
}
else
{
size = sp5kFsFileSizeGet((char *)fname);
//struct stat statbuff;
//stat(fname, &statbuff);
//size = statbuff.st
//forbuild sp5kFsFileTimeGet(fname, &atime, &mtime, &ctime);
//sp5kFsFileAttrGet();
printf("sp5kFsFileSizeGet:%d\n",size);
/**********get file name and path***********/
strcpy((char *)tempName, (char *)fname);
length = strlen((char *)tempName);
for(i = 1; i <= length; i++)
{
if(tempName[length - i] == '/')
{
offset = length - i;
break;
}
}
tempName[offset] = 0;
offset += 1;
}
}
}
printf("bufsize=%d,",PACKET_MAX_LEN);
/*******send file respons cmd********/
memset((void *)&msgParse, 0, sizeof(msgParse));
msgParse.magicNum = htons(MSG_PRE_FIX);
msgParse.msglen = htons(sizeof(MSG_DEV_FileTransfer_Infor_Rsp_T) + 2*sizeof(UINT16));
msgParse.cmd = htons(CurrentWifiCmd); /*ERROR RSP CMD*/
msgParse.rsp = htons(MSG_WIFI_2_APP);
msgParse.msgBuf.rctrlFileTransferInfo.cmdRet = ret;
msgParse.msgBuf.rctrlFileTransferInfo.fileSize = htonl(size);
strcpy((char *)msgParse.msgBuf.rctrlFileTransferInfo.fileName, (char *)tempName+offset);
strcpy((char *)msgParse.msgBuf.rctrlFileTransferInfo.filePath, (char *)tempName);
msgParse.msgBuf.rctrlFileTransferInfo.type = (tempName[offset+9] == 'J' ? 0 : 1);//!IS_FILETYPE_JPG();
msgParse.msgBuf.rctrlFileTransferInfo.year = htons(mtime.tm_year+1900);
msgParse.msgBuf.rctrlFileTransferInfo.month = mtime.tm_mon;
msgParse.msgBuf.rctrlFileTransferInfo.day = mtime.tm_mday;
msgParse.msgBuf.rctrlFileTransferInfo.hour = mtime.tm_hour;
msgParse.msgBuf.rctrlFileTransferInfo.minute = mtime.tm_min;
msgParse.msgBuf.rctrlFileTransferInfo.second = mtime.tm_sec;
msgParse.msgBuf.rctrlFileTransferInfo.suffix = htons(MSG_END_FIX);
/* add the magic + len total 2*2 bytes; */
temp = ntohs(msgParse.msglen);
printf("send file:");
//memdump((&msgParse), (temp + sizeof(UINT16)*2));
send( socket,(void *)(&msgParse), (temp + sizeof(UINT16)*2), 0);
//printf("send cmd = 0\n", htons(msgParse.cmd));
if(ret != SUCCESS)
{
printf("info error send fail!\n");
StopSendFile = 0;
SendingFile = 0;
free(buff);
buff = NULL;
return ret;
}
//send(socket, (void *)(buff), 24*2, 0);
/************send file data*************/
i = 0;
length = 0;
fileTotalSize = size;
count = 0;
size = PACKET_MAX_LEN;
//static UINT8 dofirst=1;
while((length < fileTotalSize) && (!StopSendFile) && (count < 300) && size)
{
i++;
memset(buff, 0, PACKET_MAX_LEN);
size = read(fd, buff, PACKET_MAX_LEN);
sendsize = send(socket, (void *)(buff), size, 0);
printf("writesize=%d,readsize=%d, i=%d-----",sendsize, size, i);
if(sendsize < 1)
{
printf("send error");
//forbuild sp5kFsFileSeek(fd, -size, SP5K_FS_SEEK_CUR);
usleep(50*1000);
count++;
sendsize = 0;
}
else if(sendsize < size)
{
//printf("seek=%d,i=%d-----\n",(SINT32)sendsize-(SINT32)size, i);
//forbuild sp5kFsFileSeek(fd, sendsize-size, SP5K_FS_SEEK_CUR);
usleep(25*1000);
count = 0;
}
else
{
count = 0;
sendsize = size;
}
length += sendsize;
//printf("length=%d, seek=%d", length,fsFileTell(fd));
usleep(30*1000);
}
close(fd);
free(buff);
buff = NULL;
StopSendFile = 0;
SendingFile = 0;
//appTimeDelayMs(10000);
printf("fSize=%d,len=%d cnt=%d",fileTotalSize,length,count);
printf("send end,fSize=%d,len=%d\n",fileTotalSize,length);
#if 1
printf("count=%d,size=%d,stopflag=%d\n", count, size, StopSendFile);
if(length == fileTotalSize)
{
printf("send file SUCCESS\n" );
}
else
{
printf("send file failed!\n");
}
#endif
return SUCCESS;
}
void *appSvrSendThread(void *p)
{
//UINT32 ret = 0;
//sysMsg_t sendMsg;
UINT32 socket = 0;
//UINT8 fileName[32];
//SF_PDT_PARAM_CFG_S *puiPara = sf_UiParaGet();
while(1)
{
sem_wait(&gAppSvrSendQueue);
if(sendMsg.cmd == SEND_THUMB)
{
printf("cmd: SEND_THUMB\n");
socket = sendMsg.param;
appSvrSendFile(socket, (UINT8 *)"D:\\DCIM\\100MEDIA\\DCAM0001.JPG");
}
else if(sendMsg.cmd == SEND_TIME_MAP)
{
printf("cmd: SEND_TIME_MAP\n");
socket = sendMsg.param;
#if 0
sprintf((char *)fileName, "%s/%04d%02d%02d.txt", TIME_MAP_PATH, puiPara->timeMapToday.year,
puiPara->timeMapToday.mon, puiPara->timeMapToday.day);
appSvrSendFile(socket, fileName);
#endif
}
else if(sendMsg.cmd == SEND_FILE)
{
extern UINT8 gFileName[];
printf("cmd: SEND_FILE->%s\n",gFileName);
socket = sendMsg.param;
appSvrSendFile(socket, gFileName);
}
else
{
printf("cmd: send other\n");
}
}
}
SINT32 appSvrSendInit(void)
{
SINT32 s32Ret;
s32Ret = sem_init(&gAppSvrSendQueue, 0, 0);
if ( s32Ret != 0 /*ROS_SUCCESS*/)
{
printf("[appSvrSendInit]Line %d, ret=0x%x\n", __LINE__, s32Ret);
//HOST_ASSERT(0);
return s32Ret;
}
s32Ret = pthread_create(&gAppSvrSendThreadId, NULL, appSvrSendThread, NULL);
return s32Ret;
}

File diff suppressed because it is too large Load Diff

View File

@ -7,7 +7,7 @@
version-info = [00 01 00 01]; version-info = [00 01 00 01];
ae_expect_lum { ae_expect_lum {
size = [b0 00 00 00]; size = [b0 00 00 00];
data = [3c 00 00 00 32 00 00 00 3d 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3d 00 00 00 41 00 00 00 46 00 00 00 4d 00 00 00 54 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 46 00 00 00 50 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00]; data = [3c 00 00 00 3c 00 00 00 44 00 00 00 44 00 00 00 44 00 00 00 44 00 00 00 44 00 00 00 44 00 00 00 44 00 00 00 44 00 00 00 44 00 00 00 44 00 00 00 44 00 00 00 52 00 00 00 52 00 00 00 52 00 00 00 52 00 00 00 52 00 00 00 52 00 00 00 52 00 00 00 52 00 00 00 52 00 00 00 52 00 00 00 32 00 00 00 32 00 00 00 32 00 00 00 32 00 00 00 32 00 00 00 32 00 00 00 32 00 00 00 32 00 00 00 3c 00 00 00 46 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00];
}; };
ae_la_clamp { ae_la_clamp {
size = [50 01 00 00]; size = [50 01 00 00];
@ -15,7 +15,7 @@
}; };
ae_over_exposure { ae_over_exposure {
size = [b0 01 00 00]; size = [b0 01 00 00];
data = [01 00 00 00 8c 00 00 00 03 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 02 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00 06 00 00 00 07 00 00 00 08 00 00 00 09 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 05 00 00 00 07 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 04 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00]; data = [01 00 00 00 8c 00 00 00 03 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 02 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00 06 00 00 00 07 00 00 00 08 00 00 00 09 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 05 00 00 00 07 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 04 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00];
}; };
ae_convergence { ae_convergence {
size = [2c 00 00 00]; size = [2c 00 00 00];
@ -23,11 +23,11 @@
}; };
ae_curve_gen_movie { ae_curve_gen_movie {
size = [10 01 00 00]; size = [10 01 00 00];
data = [f4 01 00 00 01 00 00 00 2c 00 00 00 64 00 00 00 00 00 00 00 00 00 00 00 1a 41 00 00 90 01 00 00 00 00 00 00 00 00 00 00 35 82 00 00 90 01 00 00 00 00 00 00 00 00 00 00 35 82 00 00 40 06 00 00 00 00 00 00 00 00 00 00 35 82 00 00 00 32 00 00 00 00 00 00 00 00 00 00 80 38 01 00 00 19 00 00 00 00 00 00 00 00 00 00 20 4e 00 00 c8 00 00 00 00 00 00 00 00 00 00 00 20 4e 00 00 c8 00 00 00 00 00 00 00 00 00 00 00 20 4e 00 00 c8 00 00 00 00 00 00 00 00 00 00 00 20 4e 00 00 c8 00 00 00 00 00 00 00 00 00 00 00 20 4e 00 00 c8 00 00 00 00 00 00 00 00 00 00 00 20 4e 00 00 c8 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 00 19 00 00 01 00 00 00 10 00 00 00 00 00 00 00 b8 0b 00 00 b8 0b 00 00 60 09 00 00 e2 04 00 00 d0 07 00 00 d0 07 00 00 dc 05 00 00 dc 05 00 00 b0 04 00 00 b0 04 00 00 00 00 00 00 f6 ec 00 00 00 00 00 00]; data = [f4 01 00 00 01 00 00 00 2c 00 00 00 64 00 00 00 00 00 00 00 00 00 00 00 1a 41 00 00 90 01 00 00 00 00 00 00 00 00 00 00 35 82 00 00 90 01 00 00 00 00 00 00 00 00 00 00 35 82 00 00 40 06 00 00 00 00 00 00 00 00 00 00 35 82 00 00 00 32 00 00 00 00 00 00 00 00 00 00 80 38 01 00 00 19 00 00 00 00 00 00 00 00 00 00 20 4e 00 00 c8 00 00 00 00 00 00 00 00 00 00 00 20 4e 00 00 c8 00 00 00 00 00 00 00 00 00 00 00 20 4e 00 00 c8 00 00 00 00 00 00 00 00 00 00 00 20 4e 00 00 c8 00 00 00 00 00 00 00 00 00 00 00 20 4e 00 00 c8 00 00 00 00 00 00 00 00 00 00 00 20 4e 00 00 c8 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 00 19 00 00 01 00 00 00 10 00 00 00 01 00 00 00 b8 0b 00 00 b8 0b 00 00 60 09 00 00 e2 04 00 00 d0 07 00 00 d0 07 00 00 dc 05 00 00 dc 05 00 00 b0 04 00 00 b0 04 00 00 00 00 00 00 f6 ec 00 00 00 00 00 00];
}; };
ae_meter_window { ae_meter_window {
size = [00 01 00 00]; size = [00 01 00 00];
data = [01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 02 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 03 00 00 00 02 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 03 00 00 00 02 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 02 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 01 00 00 00 01 00 00 00]; data = [01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 02 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 03 00 00 00 02 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 03 00 00 00 02 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 01 00 00 00 01 00 00 00];
}; };
ae_lum_gamma { ae_lum_gamma {
size = [82 00 00 00]; size = [82 00 00 00];

View File

@ -19,7 +19,7 @@
}; };
awb_target { awb_target {
size = [24 00 00 00]; size = [24 00 00 00];
data = [60 03 00 00 f7 03 00 00 23 04 00 00 00 04 00 00 18 04 00 00 18 04 00 00 00 04 00 00 e8 03 00 00 e8 03 00 00]; data = [60 03 00 00 f7 03 00 00 23 04 00 00 00 04 00 00 18 04 00 00 1c 04 00 00 00 04 00 00 e8 03 00 00 e8 03 00 00];
}; };
awb_ct_info { awb_ct_info {
size = [60 00 00 00]; size = [60 00 00 00];

File diff suppressed because one or more lines are too long

Binary file not shown.

Binary file not shown.

View File

@ -22,5 +22,6 @@ void sf_set_night_led_flag(UINT8 flag);
UINT32 sf_battery_level_get(void); UINT32 sf_battery_level_get(void);
void sf_view_osd_battery_draw(UINT8 bShow); void sf_view_osd_battery_draw(UINT8 bShow);
UINT8 sf_battery_value_get(UINT8 nightMode); UINT8 sf_battery_value_get(UINT8 nightMode);
UINT8 sf_battery_type_get(void);
#endif #endif

View File

@ -1096,5 +1096,20 @@ UINT8 sf_battery_value_get(UINT8 nightMode)
return value; return value;
} }
/*************************************************
Function: sf_battery_type_get
Description: Get battery type.
Input: N/A
Output: N/A
Return: value: battery type, 0:normal 1:LiPolymer
Others: N/A
*************************************************/
UINT8 sf_battery_type_get(void)
{
if(LiPolymerVoltageVal)
return 1;
return 0;
}
#endif #endif

View File

@ -1,6 +1,6 @@
; Source Insight Project File List ; Source Insight Project File List
; Project Name: s530_app ; Project Name: s530_app
; Generated by Source Insight 4.00.0107 at 2023/4/25 17:47:48 ; Generated by Source Insight 4.00.0107 at 2023/5/15 11:09:12
; Version=4.00.0107 ; Version=4.00.0107
; ;
; Each line should contain either a file name, a wildcard, or a sub-directory name. ; Each line should contain either a file name, a wildcard, or a sub-directory name.
@ -569,6 +569,7 @@ application\source\sf_app\code\include\sf_commu_mcu.h
application\source\sf_app\code\include\sf_commu_mcu_reg.h application\source\sf_app\code\include\sf_commu_mcu_reg.h
application\source\sf_app\code\include\sf_datahttp.h application\source\sf_app\code\include\sf_datahttp.h
application\source\sf_app\code\include\sf_dataMng.h application\source\sf_app\code\include\sf_dataMng.h
application\source\sf_app\code\include\sf_data_transfer.h
application\source\sf_app\code\include\sf_dbg.h application\source\sf_app\code\include\sf_dbg.h
application\source\sf_app\code\include\sf_debug.h application\source\sf_app\code\include\sf_debug.h
application\source\sf_app\code\include\sf_device.h application\source\sf_app\code\include\sf_device.h
@ -577,7 +578,9 @@ application\source\sf_app\code\include\sf_dev_usb.h
application\source\sf_app\code\include\sf_eg91_gps.h application\source\sf_app\code\include\sf_eg91_gps.h
application\source\sf_app\code\include\sf_eg91_server.h application\source\sf_app\code\include\sf_eg91_server.h
application\source\sf_app\code\include\sf_eg91_sim.h application\source\sf_app\code\include\sf_eg91_sim.h
application\source\sf_app\code\include\sf_file.h
application\source\sf_app\code\include\sf_fileMng.h application\source\sf_app\code\include\sf_fileMng.h
application\source\sf_app\code\include\sf_ftp.h
application\source\sf_app\code\include\sf_hal_gpio.h application\source\sf_app\code\include\sf_hal_gpio.h
application\source\sf_app\code\include\sf_hal_ttyusb.h application\source\sf_app\code\include\sf_hal_ttyusb.h
application\source\sf_app\code\include\sf_http_server.h application\source\sf_app\code\include\sf_http_server.h
@ -596,15 +599,21 @@ application\source\sf_app\code\include\sf_qrcode.h
application\source\sf_app\code\include\sf_qrutils.h application\source\sf_app\code\include\sf_qrutils.h
application\source\sf_app\code\include\sf_service.h application\source\sf_app\code\include\sf_service.h
application\source\sf_app\code\include\sf_storeMng.h application\source\sf_app\code\include\sf_storeMng.h
application\source\sf_app\code\include\sf_svr_send.h
application\source\sf_app\code\include\sf_system.h application\source\sf_app\code\include\sf_system.h
application\source\sf_app\code\include\sf_systemMng.h application\source\sf_app\code\include\sf_systemMng.h
application\source\sf_app\code\include\sf_transdata1.h application\source\sf_app\code\include\sf_transdata1.h
application\source\sf_app\code\include\sf_type.h application\source\sf_app\code\include\sf_type.h
application\source\sf_app\code\include\sf_wifi_data_transfer.h
application\source\sf_app\code\include\sf_wifi_svr.h
application\source\sf_app\code\include\sf_wifi_svr_send.h
application\source\sf_app\code\include\sha256.h application\source\sf_app\code\include\sha256.h
application\source\sf_app\code\include\split.h application\source\sf_app\code\include\split.h
application\source\sf_app\code\source\4gMng\sf_4G_auto_operation.c
application\source\sf_app\code\source\4gMng\sf_eg91_gps.c application\source\sf_app\code\source\4gMng\sf_eg91_gps.c
application\source\sf_app\code\source\4gMng\sf_eg91_server.c application\source\sf_app\code\source\4gMng\sf_eg91_server.c
application\source\sf_app\code\source\4gMng\sf_eg91_sim.c application\source\sf_app\code\source\4gMng\sf_eg91_sim.c
application\source\sf_app\code\source\4gMng\sf_ftp.c
application\source\sf_app\code\source\4gMng\sf_http_server.c application\source\sf_app\code\source\4gMng\sf_http_server.c
application\source\sf_app\code\source\4gMng\sf_module.c application\source\sf_app\code\source\4gMng\sf_module.c
application\source\sf_app\code\source\4gMng\sf_opera_adapt.c application\source\sf_app\code\source\4gMng\sf_opera_adapt.c
@ -626,6 +635,7 @@ application\source\sf_app\code\source\devMng\sf_dev_usb.c
application\source\sf_app\code\source\devMng\sf_keymng.c application\source\sf_app\code\source\devMng\sf_keymng.c
application\source\sf_app\code\source\devMng\sf_ledmng.c application\source\sf_app\code\source\devMng\sf_ledmng.c
application\source\sf_app\code\source\fileMng\cJSON.c application\source\sf_app\code\source\fileMng\cJSON.c
application\source\sf_app\code\source\fileMng\sf_file.c
application\source\sf_app\code\source\fileMng\sf_fileMng.c application\source\sf_app\code\source\fileMng\sf_fileMng.c
application\source\sf_app\code\source\gpio\sf_hal_gpio.c application\source\sf_app\code\source\gpio\sf_hal_gpio.c
application\source\sf_app\code\source\logMng\sf_log.c application\source\sf_app\code\source\logMng\sf_log.c
@ -657,6 +667,12 @@ application\source\sf_app\code\source\updataMng\sf_otamng.c
application\source\sf_app\code\source\utils\mbedtls.c application\source\sf_app\code\source\utils\mbedtls.c
application\source\sf_app\code\source\utils\sf_aes.c application\source\sf_app\code\source\utils\sf_aes.c
application\source\sf_app\code\source\utils\sf_qrutils.c application\source\sf_app\code\source\utils\sf_qrutils.c
application\source\sf_app\code\source\wifi\sf_data_transfer.c
application\source\sf_app\code\source\wifi\sf_getapinfo.c
application\source\sf_app\code\source\wifi\sf_svr_send.c
application\source\sf_app\code\source\wifi\sf_wifi_data_transfer.c
application\source\sf_app\code\source\wifi\sf_wifi_svr.c
application\source\sf_app\code\source\wifi\sf_wifi_svr_send.c
application\source\sf_app\component\liveMng\inc\exports\aiot_authorize_api.h application\source\sf_app\component\liveMng\inc\exports\aiot_authorize_api.h
application\source\sf_app\component\liveMng\inc\exports\iot_export_awss.h application\source\sf_app\component\liveMng\inc\exports\iot_export_awss.h
application\source\sf_app\component\liveMng\inc\exports\iot_export_coap.h application\source\sf_app\component\liveMng\inc\exports\iot_export_coap.h

File diff suppressed because it is too large Load Diff

View File

@ -5,7 +5,7 @@
"includePath": [ "includePath": [
"${workspaceFolder}/**" "${workspaceFolder}/**"
], ],
"defines": ["_MODEL_565_HUNTING_EVB_LINUX_4G_S530_","_EMBMEM_SPI_NOR_"], "defines": ["_MODEL_565_HUNTING_EVB_LINUX_4G_S530_","_EMBMEM_SPI_NOR_","_UI_STYLE_LVGL_"],
"compilerPath": "/usr/bin/gcc", "compilerPath": "/usr/bin/gcc",
"cStandard": "c11", "cStandard": "c11",
"cppStandard": "gnu++14", "cppStandard": "gnu++14",

5
rtos/code/.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,5 @@
{
"files.associations": {
"uiappphoto_param.h": "c"
}
}

View File

@ -169,10 +169,11 @@ static HD_RESULT flowpreview_mem_relayout(void)
} }
#endif #endif
UIMenuStoreInfo *puiPara = sf_ui_para_get();
// config common pool (screennail image) // config common pool (screennail image)
mem_cfg.pool_info[3].type = HD_COMMON_MEM_COMMON_POOL; mem_cfg.pool_info[3].type = HD_COMMON_MEM_COMMON_POOL;
mem_cfg.pool_info[3].blk_size = DBGINFO_BUFSIZE()+VDO_YUV_BUFSIZE(CFG_SCREENNAIL_W, CFG_SCREENNAIL_H, HD_VIDEO_PXLFMT_YUV420); //mem_cfg.pool_info[3].blk_size = DBGINFO_BUFSIZE()+VDO_YUV_BUFSIZE(CFG_SCREENNAIL_W, CFG_SCREENNAIL_H, HD_VIDEO_PXLFMT_YUV420);
mem_cfg.pool_info[3].blk_size = DBGINFO_BUFSIZE()+VDO_YUV_BUFSIZE(sf_get_screen_nail_width(puiPara->SendPicSize), sf_get_screen_nail_height(puiPara->SendPicSize), HD_VIDEO_PXLFMT_YUV420);
mem_cfg.pool_info[3].blk_cnt = 1; mem_cfg.pool_info[3].blk_cnt = 1;
mem_cfg.pool_info[3].ddr_id = DDR_ID0; mem_cfg.pool_info[3].ddr_id = DDR_ID0;
// config common pool (thumbnail image) // config common pool (thumbnail image)

View File

@ -98,7 +98,7 @@
#define POWERON_TRACE DISABLE //stop and wait for user enter cmd: "dsc boot" #define POWERON_TRACE DISABLE //stop and wait for user enter cmd: "dsc boot"
#define POWERON_BOOT_REPORT ENABLE #define POWERON_BOOT_REPORT ENABLE
#define POWERON_FAST_BOOT DISABLE #define POWERON_FAST_BOOT DISABLE
#define POWERON_FAST_BOOT_MSG DISABLE // disable boot msg for fast boot, but hard to debug #define POWERON_FAST_BOOT_MSG ENABLE//DISABLE // disable boot msg for fast boot, but hard to debug
#define POWERON_FAST_CPU2_BOOT DISABLE #define POWERON_FAST_CPU2_BOOT DISABLE
#define POWERON_FAST_RECORD DISABLE #define POWERON_FAST_RECORD DISABLE
#define POWERON_FAST_WIFI DISABLE //NOTE: need to enable POWERON_FAST_CPU2_BOOT too #define POWERON_FAST_WIFI DISABLE //NOTE: need to enable POWERON_FAST_CPU2_BOOT too
@ -345,7 +345,7 @@
#define LCD2_INSERT_FUNCTION LCD2_FUNC //Auto Detect - LCD2 cable insert #define LCD2_INSERT_FUNCTION LCD2_FUNC //Auto Detect - LCD2 cable insert
#endif #endif
#define DRAM_SIZE_64MB_DISP_OFF DISABLE #define DRAM_SIZE_64MB_DISP_OFF ENABLE
#if (DRAM_SIZE_64MB_DISP_OFF==ENABLE) #if (DRAM_SIZE_64MB_DISP_OFF==ENABLE)
#undef POWERONLOGO_FUNCTION #undef POWERONLOGO_FUNCTION
@ -936,7 +936,7 @@
#define HUNTING_CAMERA_SYS_PARTITION_NAME sys #define HUNTING_CAMERA_SYS_PARTITION_NAME sys
#define HUNTING_CAMERA_BOOT_LINUX ENABLE #define HUNTING_CAMERA_BOOT_LINUX ENABLE
#define HUNTING_CAMERA_MCU ENABLE #define HUNTING_CAMERA_MCU ENABLE
#define HUNTING_CAMERA_4G DISABLE #define HUNTING_CAMERA_4G DISABLE//ENABLE
#define PHOTO_STAMP_ISP_STATUS DISABLE//ENABLE #define PHOTO_STAMP_ISP_STATUS DISABLE//ENABLE
#define PHOTO_PREVIEW_SLICE_ENC_FUNC ENABLE #define PHOTO_PREVIEW_SLICE_ENC_FUNC ENABLE
#define PHOTO_PREVIEW_SLICE_ENC_VER2_FUNC ENABLE #define PHOTO_PREVIEW_SLICE_ENC_VER2_FUNC ENABLE

View File

@ -102,7 +102,79 @@
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
static HD_COMMON_MEM_INIT_CONFIG mem_cfg = {0}; static HD_COMMON_MEM_INIT_CONFIG mem_cfg = {0};
#if 1
void Movie_CommPoolInit(void)
{
UINT32 id=0;
UINT32 vcap_buf_size = 0;
HD_VIDEO_PXLFMT vcap_fmt = HD_VIDEO_PXLFMT_RAW12;
// config common pool (cap)
for (id = 0; id < SENSOR_CAPS_COUNT; id++) {
System_GetSensorInfo(id, SENSOR_CAPOUT_FMT, &vcap_fmt);
if (HD_VIDEO_PXLFMT_CLASS(vcap_fmt) == HD_VIDEO_PXLFMT_CLASS_YUV) { // YUV
switch (id) {
case 0: //single sensor
vcap_buf_size = VDO_YUV_BUFSIZE(VDO_SIZE_W, VDO_SIZE_H, vcap_fmt);
break;
case 1: // dual sensor
vcap_buf_size = VDO_YUV_BUFSIZE(VDO2_SIZE_W, VDO2_SIZE_H, vcap_fmt);
break;
}
} else { // RAW
switch (id) {
case 0:
vcap_buf_size = VDO_RAW_BUFSIZE(VDO_SIZE_W, VDO_SIZE_H, vcap_fmt);
break;
case 1:
vcap_buf_size = VDO_RAW_BUFSIZE(VDO2_SIZE_W, VDO2_SIZE_H, vcap_fmt);
break;
}
}
#if (MOVIE_DIRECT_FUNC == ENABLE)
if (id == 0) {
vcap_buf_size = 0;
}
#endif // (MOVIE_DIRECT_FUNC == ENABLE)
mem_cfg.pool_info[id].type = HD_COMMON_MEM_COMMON_POOL;
mem_cfg.pool_info[id].blk_size = DBGINFO_BUFSIZE() +
vcap_buf_size +
VDO_CA_BUF_SIZE(CA_WIN_NUM_W, CA_WIN_NUM_H) +
VDO_LA_BUF_SIZE(LA_WIN_NUM_W, LA_WIN_NUM_H);
mem_cfg.pool_info[id].blk_cnt = 7;
mem_cfg.pool_info[id].ddr_id = DDR_ID0;
}
#if (_BOARD_DRAM_SIZE_ > 0x04000000)
#if (SENSOR_CAPS_COUNT == 1)
// config common pool (clone)
id ++;
mem_cfg.pool_info[id].type = HD_COMMON_MEM_COMMON_POOL;
#if (MOVIE_DIS == DISABLE)
mem_cfg.pool_info[id].blk_size = DBGINFO_BUFSIZE()+VDO_YUV_BUFSIZE(VDO_CLONE_SIZE_W, VDO_CLONE_SIZE_H, HD_VIDEO_PXLFMT_YUV420);
#else // (MOVIE_DIS == DISABLE)
mem_cfg.pool_info[id].blk_size = DBGINFO_BUFSIZE()+VDO_DIS_BUFSIZE(VDO_CLONE_SIZE_W, VDO_CLONE_SIZE_H, HD_VIDEO_PXLFMT_YUV420);
#endif // (MOVIE_DIS == DISABLE)
#if (defined(_MODEL_565_CARDV_HS880C_)||defined(_MODEL_565_CARDV_HS880CC_)||defined(_MODEL_565_CARDV_WH565_)||defined(_MODEL_565_CARDV_EVA51_))
#if (MOVIE_DIRECT_FUNC == ENABLE)
mem_cfg.pool_info[id].blk_cnt = 2;
#else // (MOVIE_DIRECT_FUNC == ENABLE)
mem_cfg.pool_info[id].blk_cnt = 4;
#endif // (MOVIE_DIRECT_FUNC == ENABLE)
#else // (defined(_MODEL_565_CARDV_HS880C_)||defined(_MODEL_565_CARDV_HS880CC_)||defined(_MODEL_565_CARDV_WH565_))
mem_cfg.pool_info[id].blk_cnt = 6;
#endif // (defined(_MODEL_565_CARDV_HS880C_)||defined(_MODEL_565_CARDV_HS880CC_)||defined(_MODEL_565_CARDV_WH565_))
mem_cfg.pool_info[id].ddr_id = DDR_ID0;
#endif // (SENSOR_CAPS_COUNT == 1)
#endif // (_BOARD_DRAM_SIZE_ > 0x04000000)
ImageApp_MovieMulti_Config(MOVIE_CONFIG_MEM_POOL_INFO, (UINT32)&mem_cfg);
}
#else
void Movie_CommPoolInit(void) void Movie_CommPoolInit(void)
{ {
UINT32 id=0; UINT32 id=0;
@ -161,7 +233,7 @@ void Movie_CommPoolInit(void)
vcap_buf_size + vcap_buf_size +
VDO_CA_BUF_SIZE(CA_WIN_NUM_W, CA_WIN_NUM_H) + VDO_CA_BUF_SIZE(CA_WIN_NUM_W, CA_WIN_NUM_H) +
VDO_LA_BUF_SIZE(LA_WIN_NUM_W, LA_WIN_NUM_H); VDO_LA_BUF_SIZE(LA_WIN_NUM_W, LA_WIN_NUM_H);
mem_cfg.pool_info[id].blk_cnt = 2; mem_cfg.pool_info[id].blk_cnt = 7;
mem_cfg.pool_info[id].ddr_id = DDR_ID0; mem_cfg.pool_info[id].ddr_id = DDR_ID0;
} }
@ -318,6 +390,8 @@ void Movie_CommPoolInit(void)
ImageApp_MovieMulti_Config(MOVIE_CONFIG_MEM_POOL_INFO, (UINT32)&mem_cfg); ImageApp_MovieMulti_Config(MOVIE_CONFIG_MEM_POOL_INFO, (UINT32)&mem_cfg);
} }
#endif
void Movie_CommPool_AI2_Init(void) void Movie_CommPool_AI2_Init(void)
{ {
#if (ALG_FUNC_AI2 == ENABLE) #if (ALG_FUNC_AI2 == ENABLE)

View File

@ -445,6 +445,20 @@ static void MovieFast_SetRecInfoByUISetting(void)
} }
} }
static void MovieFast_SetAq(HD_PATH_ID path_id, UINT8 ip_str)
{
HD_H26XENC_AQ aq_param = {0};
if(ip_str > 8)
ip_str = 8;
aq_param.enable = 1; // AQ enable. default: 0, range: 0~1 (0: disable, 1: enable)
aq_param.i_str = ip_str; // aq strength of I frame. default: 3, range: 1~8
aq_param.p_str = ip_str; // aq strength of P frame. default: 1, range: 1~8
aq_param.min_delta_qp = -8; // max delta qp of aq.
aq_param.max_delta_qp = 8; // min delta qp of aq.
hd_videoenc_set(path_id, HD_VIDEOENC_PARAM_OUT_AQ, &aq_param);
}
static void MovieFast_OnRecStart(void) static void MovieFast_OnRecStart(void)
{ {
@ -503,6 +517,7 @@ static void MovieFast_OnRecStart(void)
ImageApp_MovieMulti_SetParam(_CFG_REC_ID_1 + i, MOVIEMULTI_PARAM_IMGCAP_THUM_SIZE, (UINT32)&thmub_size); ImageApp_MovieMulti_SetParam(_CFG_REC_ID_1 + i, MOVIEMULTI_PARAM_IMGCAP_THUM_SIZE, (UINT32)&thmub_size);
MovieFast_SetRecParamByRecID(gMovie_Rec_Info[i].rec_id); MovieFast_SetRecParamByRecID(gMovie_Rec_Info[i].rec_id);
MovieFast_SetAq(ImageApp_MovieMulti_GetVdoEncPort(gMovie_Rec_Info[i].rec_id), 4);
} }
if (clone_rec_mask & mask) { if (clone_rec_mask & mask) {
@ -513,6 +528,7 @@ static void MovieFast_OnRecStart(void)
ImageApp_MovieMulti_SetParam(_CFG_CLONE_ID_1 + i, MOVIEMULTI_PARAM_IMGCAP_THUM_SIZE, (UINT32)&thmub_size); ImageApp_MovieMulti_SetParam(_CFG_CLONE_ID_1 + i, MOVIEMULTI_PARAM_IMGCAP_THUM_SIZE, (UINT32)&thmub_size);
MovieFast_SetRecParamByRecID(gMovie_Clone_Info[i].rec_id); MovieFast_SetRecParamByRecID(gMovie_Clone_Info[i].rec_id);
MovieFast_SetAq(ImageApp_MovieMulti_GetVdoEncPort(gMovie_Clone_Info[i].rec_id), 4);
} }
mask <<= 1; mask <<= 1;
@ -820,6 +836,13 @@ THREAD_RETTYPE MovieFast_InitMovieModeThread(void *arg)
#endif #endif
ImageApp_MovieMulti_SetParam(_CFG_REC_ID_1, MOVIEMULTI_PRARM_FILEDB_MAX_MUM, 5000); ImageApp_MovieMulti_SetParam(_CFG_REC_ID_1, MOVIEMULTI_PRARM_FILEDB_MAX_MUM, 5000);
MOVIEMULTI_IPL_SIZE_INFO ipl_size={{2560,1440},30};
ImageApp_MovieMulti_SetParam(_CFG_REC_ID_1 , MOVIEMULTI_PARAM_IPL_USER_IMG_SIZE, (UINT32)&ipl_size);
ImageApp_MovieMulti_SetParam(_CFG_REC_ID_1 , MOVIEMULTI_PARAM_IPL_FORCED_IMG_SIZE, MOVIE_IPL_SIZE_USER);
#if (ANR_FUNC == ENABLE) #if (ANR_FUNC == ENABLE)
HD_AUDIOCAP_ANR audio_cfg_param = {0}; HD_AUDIOCAP_ANR audio_cfg_param = {0};
@ -859,7 +882,7 @@ THREAD_RETTYPE MovieFast_InitMovieModeThread(void *arg)
#endif #endif
MovieFast_InstallID(); MovieFast_InstallID();
vos_util_delay_ms(500); vos_util_delay_ms(330);
//Set_AEMODE(1); //Set_AEMODE(1);
//vos_util_delay_ms(500); //vos_util_delay_ms(500);

View File

@ -6,7 +6,7 @@
#include "GxVideoFile.h" #include "GxVideoFile.h"
#include "hdal.h" #include "hdal.h"
#define MOVIE_ISP_LOG ENABLE #define MOVIE_ISP_LOG DISABLE
#if (MOVIE_ISP_LOG == ENABLE) #if (MOVIE_ISP_LOG == ENABLE)
#undef WATERLOGO_FUNCTION #undef WATERLOGO_FUNCTION

View File

@ -109,7 +109,7 @@
#define JPG_BRC_INIT_Q 85 #define JPG_BRC_INIT_Q 85
#define JPG_BRC_RETRY_CNT 4 #define JPG_BRC_RETRY_CNT 4
#define THUMBNAIL_TARGETBYTERATE (160*120*2/JPG_COMERESSED_RATIO_5) #define THUMBNAIL_TARGETBYTERATE (160*120*2/JPG_COMERESSED_RATIO_5)
#define SCREENNAIL_TARGETBYTERATE (CFG_SCREENNAIL_W*CFG_SCREENNAIL_H/(2*JPG_COMERESSED_RATIO_8)) #define SCREENNAIL_TARGETBYTERATE (CFG_SCREENNAIL_W*CFG_SCREENNAIL_H*3/(2*JPG_COMERESSED_RATIO_8))
#define PRIMARY_TARGETBYTERATE_UBOUND(TBR) (TBR + (TBR * 15 / 100)) #define PRIMARY_TARGETBYTERATE_UBOUND(TBR) (TBR + (TBR * 15 / 100))
#define PRIMARY_TARGETBYTERATE_LBOUND(TBR) (TBR - (TBR * 15 / 100)) #define PRIMARY_TARGETBYTERATE_LBOUND(TBR) (TBR - (TBR * 15 / 100))
#define JPG_FILE_BUFFER_SIZE(primary, screenail, thumbnail, exif) (primary + screenail + thumbnail + exif*6) #define JPG_FILE_BUFFER_SIZE(primary, screenail, thumbnail, exif) (primary + screenail + thumbnail + exif*6)

View File

@ -364,11 +364,13 @@ static UINT32 PhotoExe_GetScreenNailSize(void)
UINT32 uiImageSize, ScreenNailSize; UINT32 uiImageSize, ScreenNailSize;
UINT32 BitStreamSize; UINT32 BitStreamSize;
UIMenuStoreInfo *puiPara = sf_ui_para_get();
ScreenNailSize = CFG_SCREENNAIL_SIZE; ScreenNailSize = CFG_SCREENNAIL_SIZE;
uiImageSize = UI_GetData(FL_PHOTO_SIZE); uiImageSize = UI_GetData(FL_PHOTO_SIZE);
if (uiImageSize < ScreenNailSize) { if (uiImageSize < ScreenNailSize) {
BitStreamSize = CFG_SCREENNAIL_W * CFG_SCREENNAIL_H / 2; //BitStreamSize = CFG_SCREENNAIL_W * CFG_SCREENNAIL_H / 2;
BitStreamSize = (sf_get_screen_nail_width(puiPara->SendPicSize)) * (sf_get_screen_nail_height(puiPara->SendPicSize)) / 2;
} else { } else {
BitStreamSize = 0; BitStreamSize = 0;
} }
@ -400,7 +402,9 @@ void PhotoExe_SetScreenNailSize(UINT32 sensor_id)
if (uiImageSize < ScreenNailSize) { if (uiImageSize < ScreenNailSize) {
//BufferSize.w = GetPhotoSizeWidth(ScreenNailSize); //BufferSize.w = GetPhotoSizeWidth(ScreenNailSize);
//BufferSize.h = GetPhotoSizeHeight(ScreenNailSize); //BufferSize.h = GetPhotoSizeHeight(ScreenNailSize);
BufferSize.w = CFG_SCREENNAIL_W; UIMenuStoreInfo *puiPara = sf_ui_para_get();
BufferSize.w = sf_get_screen_nail_width(puiPara->SendPicSize);
//BufferSize.w = CFG_SCREENNAIL_W;//SendPicSize
BufferSize.h = BufferSize.w * 3 / 4; BufferSize.h = BufferSize.w * 3 / 4;
ImageRatioIdx = GetPhotoSizeRatio(UI_GetData(FL_PHOTO_SIZE)); ImageRatioIdx = GetPhotoSizeRatio(UI_GetData(FL_PHOTO_SIZE));
@ -459,9 +463,12 @@ void PhotoExe_SetQuickViewSize(UINT32 sensor_id)
DevSize = GxVideo_GetDeviceSize(DOUT1); DevSize = GxVideo_GetDeviceSize(DOUT1);
#if (_QUICKVIEW_SIZE_ == _QUICKVIEW_SIZE_VGA_) #if (_QUICKVIEW_SIZE_ == _QUICKVIEW_SIZE_VGA_)
{ {
UIMenuStoreInfo *puiPara = sf_ui_para_get();
// fix bug: w/h size will be wrong if no VGA/3M resolution! // fix bug: w/h size will be wrong if no VGA/3M resolution!
BufferSize.w = CFG_SCREENNAIL_W; //BufferSize.w = CFG_SCREENNAIL_W;
BufferSize.h = CFG_SCREENNAIL_H; //BufferSize.h = CFG_SCREENNAIL_H;
BufferSize.w = sf_get_screen_nail_width(puiPara->SendPicSize);
BufferSize.h = sf_get_screen_nail_height(puiPara->SendPicSize);
if (BufferSize.w > (UINT32)DevSize.w) { if (BufferSize.w > (UINT32)DevSize.w) {
BufferSize.w = DevSize.w; BufferSize.w = DevSize.w;
@ -1342,6 +1349,7 @@ void PhotoExe_CommPoolInit(void)
HD_PATH_ID video_out_ctrl = (HD_PATH_ID)GxVideo_GetDeviceCtrl(DOUT1, DISPLAY_DEVCTRL_CTRLPATH); HD_PATH_ID video_out_ctrl = (HD_PATH_ID)GxVideo_GetDeviceCtrl(DOUT1, DISPLAY_DEVCTRL_CTRLPATH);
HD_RESULT hd_ret = HD_OK; HD_RESULT hd_ret = HD_OK;
USIZE DispDevSize = {0}; USIZE DispDevSize = {0};
UIMenuStoreInfo *puiPara = sf_ui_para_get();
hd_ret = hd_videoout_get(video_out_ctrl, HD_VIDEOOUT_PARAM_SYSCAPS, p_video_out_syscaps); hd_ret = hd_videoout_get(video_out_ctrl, HD_VIDEOOUT_PARAM_SYSCAPS, p_video_out_syscaps);
if (hd_ret != HD_OK) { if (hd_ret != HD_OK) {
@ -1435,7 +1443,8 @@ void PhotoExe_CommPoolInit(void)
g_photo_mem_cfg.pool_info[id].ddr_id = DDR_ID0; g_photo_mem_cfg.pool_info[id].ddr_id = DDR_ID0;
id ++; id ++;
g_photo_mem_cfg.pool_info[id].type = HD_COMMON_MEM_COMMON_POOL; g_photo_mem_cfg.pool_info[id].type = HD_COMMON_MEM_COMMON_POOL;
g_photo_mem_cfg.pool_info[id].blk_size = DBGINFO_BUFSIZE() + VDO_YUV_BUFSIZE(CFG_SCREENNAIL_W, CFG_SCREENNAIL_H, pxl_fmt); g_photo_mem_cfg.pool_info[id].blk_size = DBGINFO_BUFSIZE() + VDO_YUV_BUFSIZE(sf_get_screen_nail_width(puiPara->SendPicSize), sf_get_screen_nail_height(puiPara->SendPicSize), pxl_fmt);
//g_photo_mem_cfg.pool_info[id].blk_size = DBGINFO_BUFSIZE() + VDO_YUV_BUFSIZE(CFG_SCREENNAIL_W, CFG_SCREENNAIL_H, pxl_fmt);
g_photo_mem_cfg.pool_info[id].blk_cnt = 1; g_photo_mem_cfg.pool_info[id].blk_cnt = 1;
g_photo_mem_cfg.pool_info[id].ddr_id = DDR_ID0; g_photo_mem_cfg.pool_info[id].ddr_id = DDR_ID0;
@ -3877,11 +3886,16 @@ static INT32 PhotoExe_Preview_SliceEncode_Open(void)
case PHOTO_ENC_JPG_SCREENNAIL: case PHOTO_ENC_JPG_SCREENNAIL:
{ {
info->enc_path_id = venc_path_id; UIMenuStoreInfo *puiPara = sf_ui_para_get();
info->yuv_buf_mem_info.blk_size = VDO_YUV_BUFSIZE(CFG_SCREENNAIL_W, CFG_SCREENNAIL_H, vproc_out_pxlfmt);
dim = (HD_DIM){CFG_SCREENNAIL_W, CFG_SCREENNAIL_H}; info->enc_path_id = venc_path_id;
bitrate = SCREENNAIL_TARGETBYTERATE * 8; //info->yuv_buf_mem_info.blk_size = VDO_YUV_BUFSIZE(CFG_SCREENNAIL_W, CFG_SCREENNAIL_H, vproc_out_pxlfmt);
//dim = (HD_DIM){CFG_SCREENNAIL_W, CFG_SCREENNAIL_H};
info->yuv_buf_mem_info.blk_size = VDO_YUV_BUFSIZE(sf_get_screen_nail_width(puiPara->SendPicSize), sf_get_screen_nail_height(puiPara->SendPicSize), vproc_out_pxlfmt);
dim = (HD_DIM){sf_get_screen_nail_width(puiPara->SendPicSize), sf_get_screen_nail_height(puiPara->SendPicSize)};
//bitrate = SCREENNAIL_TARGETBYTERATE * 8;
bitrate = ((sf_get_screen_nail_width(puiPara->SendPicSize)) * (sf_get_screen_nail_height(puiPara->SendPicSize))*3/(2*JPG_COMERESSED_RATIO_8)) * 8;
break; break;
} }
@ -4644,11 +4658,14 @@ static INT32 PhotoExe_Preview_SliceEncode_Scale_Screennail(
VF_GFX_SCALE vf_gfx_scale = {0}; VF_GFX_SCALE vf_gfx_scale = {0};
URECT dest_win = {0}; URECT dest_win = {0};
USIZE src_size = {0}, dest_size = {0}; USIZE src_size = {0}, dest_size = {0};
UIMenuStoreInfo *puiPara = sf_ui_para_get();
src_size.w = video_frame_in->dim.w; src_size.w = video_frame_in->dim.w;
src_size.h = video_frame_in->dim.h; src_size.h = video_frame_in->dim.h;
dest_size.w = CFG_SCREENNAIL_W; dest_size.w = sf_get_screen_nail_width(puiPara->SendPicSize);
dest_size.h = CFG_SCREENNAIL_H; dest_size.h = sf_get_screen_nail_height(puiPara->SendPicSize);
//dest_size.w = CFG_SCREENNAIL_W;
//dest_size.h = CFG_SCREENNAIL_H;
PhotoExe_Cal_Jpg_Size(&src_size, &dest_size , &dest_win); PhotoExe_Cal_Jpg_Size(&src_size, &dest_size , &dest_win);
ret = PhotoExe_Preview_SliceEncode_Scale_YUV(&vf_gfx_scale, video_frame_in, screennail_buffer_info, &dest_size, &dest_win, HD_VIDEO_PXLFMT_YUV420); ret = PhotoExe_Preview_SliceEncode_Scale_YUV(&vf_gfx_scale, video_frame_in, screennail_buffer_info, &dest_size, &dest_win, HD_VIDEO_PXLFMT_YUV420);
@ -5124,9 +5141,11 @@ INT32 PhotoExe_Preview_SliceEncode(VControl *pCtrl, UINT32 paramNum, UINT32 *par
/******************************************************************* /*******************************************************************
* Screennail & Thumbnail Encode * Screennail & Thumbnail Encode
******************************************************************/ ******************************************************************/
UIMenuStoreInfo *puiPara = sf_ui_para_get();
/* screennail encode */ /* screennail encode */
PhotoExe_Preview_SliceEncode_Encode_Set_In(slice_encode_screennail_info->enc_path_id, vproc_out_pxlfmt, (HD_DIM) {CFG_SCREENNAIL_W, CFG_SCREENNAIL_H}); PhotoExe_Preview_SliceEncode_Encode_Set_In(slice_encode_screennail_info->enc_path_id, vproc_out_pxlfmt, (HD_DIM) {sf_get_screen_nail_width(puiPara->SendPicSize), sf_get_screen_nail_height(puiPara->SendPicSize)});
//PhotoExe_Preview_SliceEncode_Encode_Set_In(slice_encode_screennail_info->enc_path_id, vproc_out_pxlfmt, (HD_DIM) {CFG_SCREENNAIL_W, CFG_SCREENNAIL_H});
PhotoExe_Preview_SliceEncode_Encode_Set_Out(slice_encode_screennail_info->enc_path_id, CFG_JPG_PREVIEW_SLICE_ENC_INIT_QUALITY_SCREENNAIL); PhotoExe_Preview_SliceEncode_Encode_Set_Out(slice_encode_screennail_info->enc_path_id, CFG_JPG_PREVIEW_SLICE_ENC_INIT_QUALITY_SCREENNAIL);
if(PhotoExe_Preview_SliceEncode_Encode_Screennail(&video_frame_out_screennail) != E_OK){ if(PhotoExe_Preview_SliceEncode_Encode_Screennail(&video_frame_out_screennail) != E_OK){

View File

@ -308,8 +308,10 @@ void UiDateImprint_InitBuff(void)
} }
else if ( i == DATE_IMPRINT_EVENT_SCR && g_DateImprintPool[i].pool_va == 0) { else if ( i == DATE_IMPRINT_EVENT_SCR && g_DateImprintPool[i].pool_va == 0) {
pInfo->MemSize = 0x80000; pInfo->MemSize = 0x80000;
UIMenuStoreInfo *puiPara = sf_ui_para_get();
UiDateImprint_GetStampFont(CFG_SCREENNAIL_W,(char**)&pFont); UiDateImprint_GetStampFont(sf_get_screen_nail_width(puiPara->SendPicSize),(char**)&pFont);
//UiDateImprint_GetStampFont(CFG_SCREENNAIL_W,(char**)&pFont);
#if defined(_UI_STYLE_LVGL_) #if defined(_UI_STYLE_LVGL_)
pInfo->MemSize = UIDateImprint_GetStampMemSize_LVGL((const lv_font_t *)pFont, UiDateImprint_InitStrBuf()); pInfo->MemSize = UIDateImprint_GetStampMemSize_LVGL((const lv_font_t *)pFont, UiDateImprint_InitStrBuf());

View File

@ -189,8 +189,11 @@ static HD_RESULT set_enc_cfg(void)
HD_VIDEOENC_PATH_CONFIG video_enc_path_config = {0}; HD_VIDEOENC_PATH_CONFIG video_enc_path_config = {0};
HD_RESULT hd_ret; HD_RESULT hd_ret;
UINT32 u32W, u32H; UINT32 u32W, u32H;
UIMenuStoreInfo *puiPara = sf_ui_para_get();
UINT32 ThumbTargetBytes = THUMBNAIL_TARGETBYTERATE; UINT32 ThumbTargetBytes = THUMBNAIL_TARGETBYTERATE;
UINT32 ScrTargetBytes = SCREENNAIL_TARGETBYTERATE; //UINT32 ScrTargetBytes = SCREENNAIL_TARGETBYTERATE;
UINT32 ScrTargetBytes = ((sf_get_screen_nail_width(puiPara->SendPicSize)) * (sf_get_screen_nail_height(puiPara->SendPicSize))*3/(2*JPG_COMERESSED_RATIO_8));
UINT32 PriTargetBytes = PhotoFast_GetExpectSize_RhoBRCrtl(UI_GetData(FL_PHOTO_SIZE), TRUE); UINT32 PriTargetBytes = PhotoFast_GetExpectSize_RhoBRCrtl(UI_GetData(FL_PHOTO_SIZE), TRUE);
UINT32 PriTargetUBoundBytes = PRIMARY_TARGETBYTERATE_UBOUND(PriTargetBytes); UINT32 PriTargetUBoundBytes = PRIMARY_TARGETBYTERATE_UBOUND(PriTargetBytes);
@ -213,12 +216,15 @@ static HD_RESULT set_enc_cfg(void)
} }
//screennail image //screennail image
u32W = CFG_SCREENNAIL_W; //u32W = CFG_SCREENNAIL_W;
u32H = CFG_SCREENNAIL_H; //u32H = CFG_SCREENNAIL_H;
u32W = sf_get_screen_nail_width(puiPara->SendPicSize);
u32H = sf_get_screen_nail_height(puiPara->SendPicSize);
video_enc_path_config.max_mem.codec_type = HD_CODEC_TYPE_JPEG; video_enc_path_config.max_mem.codec_type = HD_CODEC_TYPE_JPEG;
video_enc_path_config.max_mem.max_dim.w = u32W; video_enc_path_config.max_mem.max_dim.w = u32W;
video_enc_path_config.max_mem.max_dim.h = u32H; video_enc_path_config.max_mem.max_dim.h = u32H;
video_enc_path_config.max_mem.bitrate = SCREENNAIL_TARGETBYTERATE*8; //video_enc_path_config.max_mem.bitrate = SCREENNAIL_TARGETBYTERATE*8;
video_enc_path_config.max_mem.bitrate = ScrTargetBytes*8;
video_enc_path_config.max_mem.enc_buf_ms = 1500; video_enc_path_config.max_mem.enc_buf_ms = 1500;
video_enc_path_config.max_mem.svc_layer = HD_SVC_DISABLE; video_enc_path_config.max_mem.svc_layer = HD_SVC_DISABLE;
video_enc_path_config.max_mem.ltr = FALSE; video_enc_path_config.max_mem.ltr = FALSE;
@ -525,11 +531,13 @@ static UINT32 PhotoFast_GetScreenNailSize(void)
UINT32 uiImageSize, ScreenNailSize; UINT32 uiImageSize, ScreenNailSize;
UINT32 BitStreamSize; UINT32 BitStreamSize;
UIMenuStoreInfo *puiPara = sf_ui_para_get();
ScreenNailSize = CFG_SCREENNAIL_SIZE; ScreenNailSize = CFG_SCREENNAIL_SIZE;
uiImageSize = UI_GetData(FL_PHOTO_SIZE); uiImageSize = UI_GetData(FL_PHOTO_SIZE);
if (uiImageSize < ScreenNailSize) { if (uiImageSize < ScreenNailSize) {
BitStreamSize = CFG_SCREENNAIL_W * CFG_SCREENNAIL_H / 2; //BitStreamSize = CFG_SCREENNAIL_W * CFG_SCREENNAIL_H / 2;
BitStreamSize = (sf_get_screen_nail_width(puiPara->SendPicSize)) * (sf_get_screen_nail_height(puiPara->SendPicSize)) / 2;
} else { } else {
BitStreamSize = 0; BitStreamSize = 0;
} }
@ -1053,7 +1061,8 @@ static ER PhotoFast_CaptureInit(void)
PhotoFast_get_hd_common_buf(&g_enc_yuv_buf[PHOTO_ENC_JPG_PRIMARY]); PhotoFast_get_hd_common_buf(&g_enc_yuv_buf[PHOTO_ENC_JPG_PRIMARY]);
// allocate screennail captured resolution // allocate screennail captured resolution
g_enc_yuv_buf[PHOTO_ENC_JPG_SCREENNAIL].blk_size = CFG_SCREENNAIL_W*CFG_SCREENNAIL_H*3/2; //g_enc_yuv_buf[PHOTO_ENC_JPG_SCREENNAIL].blk_size = CFG_SCREENNAIL_W*CFG_SCREENNAIL_H*3/2;
g_enc_yuv_buf[PHOTO_ENC_JPG_SCREENNAIL].blk_size = (sf_get_screen_nail_width(puiPara->SendPicSize))*(sf_get_screen_nail_height(puiPara->SendPicSize))*3/2;
PhotoFast_get_hd_common_buf(&g_enc_yuv_buf[PHOTO_ENC_JPG_SCREENNAIL]); PhotoFast_get_hd_common_buf(&g_enc_yuv_buf[PHOTO_ENC_JPG_SCREENNAIL]);
// allocate thumbnail captured resolution // allocate thumbnail captured resolution
@ -1186,8 +1195,10 @@ static void PhotoFast_CaptureStart(HD_VIDEO_FRAME *p_video_frame)
/* --- The flow of encoded screenail image. ---*/ /* --- The flow of encoded screenail image. ---*/
memset(&gfx_scale, 0, sizeof(VF_GFX_SCALE)); memset(&gfx_scale, 0, sizeof(VF_GFX_SCALE));
//scale to screennail resolution //scale to screennail resolution
u32W = CFG_SCREENNAIL_W; //u32W = CFG_SCREENNAIL_W;
u32H = CFG_SCREENNAIL_H; //u32H = CFG_SCREENNAIL_H;
u32W = (sf_get_screen_nail_width(puiPara->SendPicSize));
u32H = (sf_get_screen_nail_height(puiPara->SendPicSize));
src_size.w = p_video_frame->dim.w; src_size.w = p_video_frame->dim.w;
src_size.h = p_video_frame->dim.h; src_size.h = p_video_frame->dim.h;
dest_size.w = u32W; dest_size.w = u32W;
@ -1552,7 +1563,12 @@ THREAD_RETTYPE PhotoFast_FlowPreviewThread(void *arg)
g_bFrmCnt = 0; g_bFrmCnt = 0;
PhotoFast_PhotoClose(); PhotoFast_PhotoClose();
vos_perf_list_mark("sie_vd", __LINE__, 3);
if(sf_get_power_off_flag())
{
vos_flag_set(PHOTOFAST_FLG_ID, FLGPHOTOFAST_SHUTDOWN);
}
sf_file_thumb_cfg_sava();
switch (DrvGPIO_GetPhotoMovieModeFromMonitor()) { switch (DrvGPIO_GetPhotoMovieModeFromMonitor()) {
case DX_HUNTING_MODE_PHOTO: case DX_HUNTING_MODE_PHOTO:
vos_flag_set(PHOTOFAST_FLG_ID, FLGPHOTOFAST_SHUTDOWN); vos_flag_set(PHOTOFAST_FLG_ID, FLGPHOTOFAST_SHUTDOWN);
@ -1561,7 +1577,6 @@ THREAD_RETTYPE PhotoFast_FlowPreviewThread(void *arg)
case DX_HUNTING_MODE_PHOTO_MOVIE: case DX_HUNTING_MODE_PHOTO_MOVIE:
case DX_HUNTING_MODE_CAMERA_PHOTO_MOVIE: case DX_HUNTING_MODE_CAMERA_PHOTO_MOVIE:
vos_perf_list_mark("sie_vd", __LINE__, 3);
vos_flag_set(PHOTOFAST_FLG_ID, FLGPHOTOFAST_CHGMODE); vos_flag_set(PHOTOFAST_FLG_ID, FLGPHOTOFAST_CHGMODE);
break; break;

View File

@ -13,10 +13,11 @@
#include "sys_fastboot.h" #include "sys_fastboot.h"
#include "UIApp/ExifVendor.h" #include "UIApp/ExifVendor.h"
#include "PhotoFastCapDateImprint.h" #include "PhotoFastCapDateImprint.h"
#include "PhotoFast.h"
#include "sf_mcu.h"
#include <kwrap/cmdsys.h> #include <kwrap/cmdsys.h>
#define VDO_YUV_BUFSIZE(w, h, pxlfmt) ALIGN_CEIL_4(((w) * (h) * HD_VIDEO_PXLFMT_BPP(pxlfmt)) / 8) #define VDO_YUV_BUFSIZE(w, h, pxlfmt) ALIGN_CEIL_4(((w) * (h) * HD_VIDEO_PXLFMT_BPP(pxlfmt)) / 8)
#define VDO_RAW_BUFSIZE(w, h, pxlfmt) (ALIGN_CEIL_4((w) * HD_VIDEO_PXLFMT_BPP(pxlfmt) / 8) * (h))
/********************************************************************************** /**********************************************************************************
* independent thumbnail * independent thumbnail
@ -44,7 +45,6 @@
#define PHOTOFAST_SLICE_ENC_DUMP(fmtstr, args...) #define PHOTOFAST_SLICE_ENC_DUMP(fmtstr, args...)
#endif #endif
typedef struct typedef struct
{ {
UINT32 va; UINT32 va;
@ -69,6 +69,7 @@ static HD_DIM PhotoFast_SliceEncode_Get_Encode_Max_Size(void);
static UINT32 PhotoFast_SliceEncode_Get_Encode_Max_Bitrate(HD_VIDEO_PXLFMT vproc_out_pxlfmt); static UINT32 PhotoFast_SliceEncode_Get_Encode_Max_Bitrate(HD_VIDEO_PXLFMT vproc_out_pxlfmt);
static INT32 PhotoFast_SliceEncode_Get_Comm_Buffer(PhotoFast_MEM_Info* mem_info); static INT32 PhotoFast_SliceEncode_Get_Comm_Buffer(PhotoFast_MEM_Info* mem_info);
static INT32 PhotoFast_SliceEncode_Release_Comm_Buffer(PhotoFast_MEM_Info mem_info); static INT32 PhotoFast_SliceEncode_Release_Comm_Buffer(PhotoFast_MEM_Info mem_info);
static INT32 PhotoFast_SliceEncode_Encode_Screennail(HD_VIDEO_FRAME* video_frame_in);
static UINT32 PhotoFast_PHY2VIRT(UINT32 pa_pos, UINT32 pa_start, UINT32 va) static UINT32 PhotoFast_PHY2VIRT(UINT32 pa_pos, UINT32 pa_start, UINT32 va)
{ {
@ -117,8 +118,7 @@ static void PhotoFast_SliceEncode_Get_Src_Slice_Info(
INT32 PhotoFast_SliceEncode_Get_Max_Dst_Slice_Buffer_Size(HD_VIDEO_PXLFMT pxl_fmt) INT32 PhotoFast_SliceEncode_Get_Max_Dst_Slice_Buffer_Size(HD_VIDEO_PXLFMT pxl_fmt)
{ {
HD_DIM dim = PhotoFast_SliceEncode_Get_Encode_Max_Size(); HD_DIM dim = PhotoFast_SliceEncode_Get_Encode_Max_Size();
UINT32 reserved_buffer_height = ((dim.h * 3) / 10); UINT32 reserved_buffer = 0;
UINT32 reserved_buffer = VDO_YUV_BUFSIZE(dim.w, reserved_buffer_height, pxl_fmt);
UINT32 max_buffer_size = VDO_YUV_BUFSIZE(dim.w, dim.h, pxl_fmt) + reserved_buffer; UINT32 max_buffer_size = VDO_YUV_BUFSIZE(dim.w, dim.h, pxl_fmt) + reserved_buffer;
return max_buffer_size; return max_buffer_size;
@ -126,11 +126,6 @@ INT32 PhotoFast_SliceEncode_Get_Max_Dst_Slice_Buffer_Size(HD_VIDEO_PXLFMT pxl_fm
static INT32 PhotoFast_SliceEncode_Get_Dst_Slice_Info(PhotoFast_SliceSize_Info *info, UINT32 cap_size_w, UINT32 cap_size_h, UINT32 slice_num) static INT32 PhotoFast_SliceEncode_Get_Dst_Slice_Info(PhotoFast_SliceSize_Info *info, UINT32 cap_size_w, UINT32 cap_size_h, UINT32 slice_num)
{ {
if((cap_size_h % slice_num) != 0){
DBG_ERR("Height(%lu) should be %lu aligned!, please check photo size of PhotoMapping\r\n", cap_size_h, slice_num);
return E_SYS;
}
info->width = cap_size_w; info->width = cap_size_w;
info->height = cap_size_h; info->height = cap_size_h;
info->slice_num = slice_num; info->slice_num = slice_num;
@ -163,18 +158,10 @@ INT32 PhotoFast_SliceEncode_Get_Curr_Dst_Slice_Info(PhotoFast_SliceSize_Info *in
slice_num = 1; slice_num = 1;
} }
else{ else{
PHOTOFAST_SLICE_ENC_DUMP("cap_size = %lu buf_size = %lu\n", cap_size, buf_size); PHOTOFAST_SLICE_ENC_DUMP("cap_size = %lu buf_size = %lu\n", cap_size, buf_size);
UINT32 lines = (buf_size / cap_size_w); UINT32 lines = (buf_size / cap_size_w);
slice_num = cap_size_h / lines + (cap_size_h % lines ? 1 : 0); slice_num = cap_size_h / lines + (cap_size_h % lines ? 1 : 0);
if(cap_size_h % slice_num){
// cap_size_h = ALIGN_FLOOR(cap_size_h, slice_num);
cap_size_h -= (cap_size_h % slice_num);
// DBG_WRN("fix photo height to %u to meet alignment requirement slice_num=%lu\n", cap_size_h, slice_num);
}
} }
return PhotoFast_SliceEncode_Get_Dst_Slice_Info(info, cap_size_w, cap_size_h, slice_num); return PhotoFast_SliceEncode_Get_Dst_Slice_Info(info, cap_size_w, cap_size_h, slice_num);
@ -375,11 +362,17 @@ INT32 PhotoFast_SliceEncode_Open(const HD_PATH_ID vproc_path_id)
case PHOTO_ENC_JPG_SCREENNAIL: case PHOTO_ENC_JPG_SCREENNAIL:
{ {
info->enc_path_id = venc_path_id; UIMenuStoreInfo *puiPara = sf_ui_para_get();
info->yuv_buf_mem_info.blk_size = VDO_YUV_BUFSIZE(CFG_SCREENNAIL_W, CFG_SCREENNAIL_H, vproc_out_pxlfmt);
dim = (HD_DIM){CFG_SCREENNAIL_W, CFG_SCREENNAIL_H}; info->enc_path_id = venc_path_id;
bitrate = SCREENNAIL_TARGETBYTERATE * 8; //info->yuv_buf_mem_info.blk_size = VDO_YUV_BUFSIZE(CFG_SCREENNAIL_W, CFG_SCREENNAIL_H, vproc_out_pxlfmt);
//dim = (HD_DIM){CFG_SCREENNAIL_W, CFG_SCREENNAIL_H};
info->yuv_buf_mem_info.blk_size = VDO_YUV_BUFSIZE(sf_get_screen_nail_width(puiPara->SendPicSize), sf_get_screen_nail_height(puiPara->SendPicSize), vproc_out_pxlfmt);
dim = (HD_DIM){sf_get_screen_nail_width(puiPara->SendPicSize), sf_get_screen_nail_height(puiPara->SendPicSize)};
//bitrate = SCREENNAIL_TARGETBYTERATE * 8;
bitrate = ((sf_get_screen_nail_width(puiPara->SendPicSize)) * (sf_get_screen_nail_height(puiPara->SendPicSize))*3/(2*JPG_COMERESSED_RATIO_8)) * 8;
break; break;
} }
@ -499,6 +492,26 @@ static INT32 PhotoFast_SliceEncode_Alloc_Buffer(PhotoFast_MEM_Info* info, char*
return E_OK; return E_OK;
} }
static INT32 PhotoFast_SliceEncode_Alloc_Buffer_Retry(PhotoFast_MEM_Info* info, char* name, UINT8 timeout, UINT32 delay_ms)
{
INT32 ret;
UINT8 cnt = 0;
do{
if(cnt > 0){
DBG_WRN("retrying %u...\n", cnt);
vos_util_delay_ms(delay_ms);
}
ret = PhotoFast_SliceEncode_Alloc_Buffer(info, name);
if(ret == E_OK)
break;
} while(++cnt < timeout);
return ret;
}
static INT32 PhotoFast_SliceEncode_Free_Buffer(PhotoFast_MEM_Info* info) static INT32 PhotoFast_SliceEncode_Free_Buffer(PhotoFast_MEM_Info* info)
{ {
HD_RESULT ret; HD_RESULT ret;
@ -557,7 +570,7 @@ static INT32 PhotoFast_SliceEncode_Init_VF_GFX_Slice(
UINT32 loff_dst[HD_VIDEO_MAX_PLANE] = {0}; UINT32 loff_dst[HD_VIDEO_MAX_PLANE] = {0};
UINT32 offset; UINT32 offset;
UINT32 scr_slice_height = (slice_idx == (src_slice_info.slice_num - 1)) ? src_slice_info.last_slice_height : src_slice_info.slice_height; UINT32 scr_slice_height = (slice_idx == (src_slice_info.slice_num - 1)) ? src_slice_info.last_slice_height : src_slice_info.slice_height;
UINT32 dst_slice_height = (slice_idx == (dst_slice_info.slice_num - 1)) ? (src_slice_info.last_slice_height * dst_slice_info.slice_height / src_slice_info.slice_height) : dst_slice_info.slice_height; UINT32 dst_slice_height = (slice_idx == (dst_slice_info.slice_num - 1)) ? dst_slice_info.last_slice_height : dst_slice_info.slice_height;
/* dst img */ /* dst img */
@ -620,34 +633,23 @@ static INT32 PhotoFast_SliceEncode_Init_VF_GFX_Slice(
return E_OK; return E_OK;
} }
#if 1//PHOTOFAST_SLICE_ENC_DBG_PRIMARY_YUV #if PHOTOFAST_SLICE_ENC_DBG_PRIMARY_YUV
INT32 PhotoFast_SliceEncode_Dump_Frame(const HD_VIDEO_FRAME video_frame, UINT32 format) static INT32 PhotoFast_SliceEncode_Dump_Frame(const HD_VIDEO_FRAME video_frame)
//static INT32 PhotoFast_SliceEncode_Dump_Frame(const HD_VIDEO_FRAME video_frame)
{ {
char fileName[128] = {0}; char fileName[128] = {0};
FST_FILE fp = NULL; FST_FILE fp = NULL;
UINT32 size; UINT32 size;
UINT32 va; UINT32 va;
static UINT32 cnt = 0;
size = VDO_YUV_BUFSIZE(video_frame.dim.w, video_frame.dim.h, video_frame.pxlfmt);
if(format == HD_VIDEO_PXLFMT_YUV420){
size = VDO_YUV_BUFSIZE(video_frame.dim.w, video_frame.dim.h, video_frame.pxlfmt);
}else{
// video_frame.pxlfmt = HD_VIDEO_PXLFMT_RAW12;
size = VDO_RAW_BUFSIZE(video_frame.dim.w, video_frame.dim.h, video_frame.pxlfmt);
}
va = (UINT32)hd_common_mem_mmap(HD_COMMON_MEM_MEM_TYPE_CACHE, video_frame.phy_addr[0], size); va = (UINT32)hd_common_mem_mmap(HD_COMMON_MEM_MEM_TYPE_CACHE, video_frame.phy_addr[0], size);
if (va == 0) { if (va == 0) {
DBG_ERR("hd_common_mem_mmap error!r\n"); DBG_ERR("hd_common_mem_mmap error!r\n");
return E_SYS; return E_SYS;
} }
if(format == HD_VIDEO_PXLFMT_YUV420){
sprintf(fileName, "A:\\frame_%lux%lu_fmt%lx.dat", video_frame.dim.w, video_frame.dim.h, video_frame.pxlfmt); sprintf(fileName, "A:\\frame_%lux%lu_fmt%lx.dat", video_frame.dim.w, video_frame.dim.h, video_frame.pxlfmt);
}else{
sprintf(fileName, "A:\\frame_%lux%lu_fmt%lx_%02d.raw", video_frame.dim.w, video_frame.dim.h, video_frame.pxlfmt, cnt);
cnt++;
}
fp = FileSys_OpenFile(fileName, FST_CREATE_ALWAYS | FST_OPEN_WRITE); fp = FileSys_OpenFile(fileName, FST_CREATE_ALWAYS | FST_OPEN_WRITE);
FileSys_WriteFile(fp, (UINT8*)va, &size, 0, NULL); FileSys_WriteFile(fp, (UINT8*)va, &size, 0, NULL);
@ -802,11 +804,14 @@ static INT32 PhotoFast_SliceEncode_Scale_Screennail(
VF_GFX_SCALE vf_gfx_scale = {0}; VF_GFX_SCALE vf_gfx_scale = {0};
URECT dest_win = {0}; URECT dest_win = {0};
USIZE src_size = {0}, dest_size = {0}; USIZE src_size = {0}, dest_size = {0};
UIMenuStoreInfo *puiPara = sf_ui_para_get();
src_size.w = video_frame_in->dim.w; src_size.w = video_frame_in->dim.w;
src_size.h = video_frame_in->dim.h; src_size.h = video_frame_in->dim.h;
dest_size.w = CFG_SCREENNAIL_W; dest_size.w = sf_get_screen_nail_width(puiPara->SendPicSize);
dest_size.h = CFG_SCREENNAIL_H; dest_size.h = sf_get_screen_nail_height(puiPara->SendPicSize);
//dest_size.w = CFG_SCREENNAIL_W;
//dest_size.h = CFG_SCREENNAIL_H;
PhotoFast_Cal_Jpg_Size(&src_size, &dest_size , &dest_win); PhotoFast_Cal_Jpg_Size(&src_size, &dest_size , &dest_win);
ret = PhotoFast_SliceEncode_Scale_YUV(&vf_gfx_scale, video_frame_in, screennail_buffer_info, &dest_size, &dest_win, HD_VIDEO_PXLFMT_YUV420); ret = PhotoFast_SliceEncode_Scale_YUV(&vf_gfx_scale, video_frame_in, screennail_buffer_info, &dest_size, &dest_win, HD_VIDEO_PXLFMT_YUV420);
@ -819,6 +824,89 @@ static INT32 PhotoFast_SliceEncode_Scale_Screennail(
return E_OK; return E_OK;
} }
#if CFG_PHOTOFAST_SLICE_ENC_RC_SCREENNAIL
static INT32 PhotoFast_SliceEncode_Encode_Screennail_RC(HD_VIDEO_FRAME* video_frame_in)
{
static UINT32 quality = CFG_PHOTOFAST_SLICE_ENC_INIT_QUALITY_SCREENNAIL;
INT8 direction = 0;
INT32 ret = E_OK;
PhotoFast_SliceEncode_Info* slice_encode_screennail_info = PhotoFast_SliceEncode_Get_Info(PHOTO_ENC_JPG_SCREENNAIL);
// UIMenuStoreInfo *puiPara = sf_ui_para_get();
//((sf_get_screen_nail_width(puiPara->SendPicSize)) * (sf_get_screen_nail_height(puiPara->SendPicSize))*3/(2*JPG_COMERESSED_RATIO_8)) * 8;
const UINT32 ubount = CFG_PHOTOFAST_SLICE_ENC_RC_SCREENNAIL_UBOUND;
const UINT32 lbount = CFG_PHOTOFAST_SLICE_ENC_RC_SCREENNAIL_UBOUND;
//const UINT32 ubount = (((sf_get_screen_nail_width(puiPara->SendPicSize)) * (sf_get_screen_nail_height(puiPara->SendPicSize))*3/(2*JPG_COMERESSED_RATIO_8)) + (((sf_get_screen_nail_width(puiPara->SendPicSize)) * (sf_get_screen_nail_height(puiPara->SendPicSize))*3/(2*JPG_COMERESSED_RATIO_8)) * 20 / 100));
//const UINT32 lbount = (((sf_get_screen_nail_width(puiPara->SendPicSize)) * (sf_get_screen_nail_height(puiPara->SendPicSize))*3/(2*JPG_COMERESSED_RATIO_8)) - (((sf_get_screen_nail_width(puiPara->SendPicSize)) * (sf_get_screen_nail_height(puiPara->SendPicSize))*3/(2*JPG_COMERESSED_RATIO_8)) * 20 / 100));
bool stop_flag = false;
do {
PHOTOFAST_SLICE_ENC_DUMP("screennail quality = %lu\n", quality);
ret = PhotoFast_SliceEncode_Encode_Set_Out(slice_encode_screennail_info->enc_path_id, quality);
if(ret != E_OK){
goto EXIT;
}
ret = PhotoFast_SliceEncode_Encode_Screennail(video_frame_in);
if ( (ret != E_OK) && (ret != HD_ERR_NOMEM)){
goto EXIT;
}
if((slice_encode_screennail_info->bs_buf_mem_info.used_size > ubount) || (ret == HD_ERR_NOMEM)){
if(direction == 1){
quality -= CFG_PHOTOFAST_SLICE_ENC_RC_SCREENNAIL_QUALITY_STEP;
stop_flag = true; /* current step > ubound and next prev step < lbound , stop rc flow (choose prev step)*/
continue;
}
else{
direction = -1;
if(quality == 0){
DBG_WRN("lowest quality reached, stop rc flow!\n");
goto EXIT;
}
else if(quality > CFG_PHOTOFAST_SLICE_ENC_RC_SCREENNAIL_QUALITY_STEP)
quality -= CFG_PHOTOFAST_SLICE_ENC_RC_SCREENNAIL_QUALITY_STEP;
else{
quality = 0;
}
}
}
else if(slice_encode_screennail_info->bs_buf_mem_info.used_size < lbount){
if(stop_flag){
break;
}
if(direction == -1){
DBG_WRN("back search due to low resolution of CFG_PHOTOFAST_SLICE_ENC_RC_SCREENNAIL_QUALITY_STEP(%lu), stop rc flow\n", CFG_PHOTOFAST_SLICE_ENC_RC_SCREENNAIL_QUALITY_STEP);
break;
}
else{
direction = 1;
if(quality >= 99){
quality = 99;
DBG_WRN("highest quality reached, stop rc flow!\n");
goto EXIT;
}
else if(quality < (99 - CFG_PHOTOFAST_SLICE_ENC_RC_SCREENNAIL_QUALITY_STEP))
quality += CFG_PHOTOFAST_SLICE_ENC_RC_SCREENNAIL_QUALITY_STEP;
else{
quality = 99;
}
}
}
} while(1);
EXIT:
return ret;
}
#endif
static INT32 PhotoFast_SliceEncode_Scale_Thumbnail( static INT32 PhotoFast_SliceEncode_Scale_Thumbnail(
const HD_VIDEO_FRAME* video_frame_in, const HD_VIDEO_FRAME* video_frame_in,
HD_VIDEO_FRAME* video_frame_out) HD_VIDEO_FRAME* video_frame_out)
@ -861,13 +949,13 @@ static INT32 PhotoFast_SliceEncode_Encode_Thumbnail(HD_VIDEO_FRAME* video_frame_
PhotoFast_SliceEncode_Get_Enc_Buffer_Info(enc_path_id, &slice_enc_info->hd_enc_internal_buf_mem_info); PhotoFast_SliceEncode_Get_Enc_Buffer_Info(enc_path_id, &slice_enc_info->hd_enc_internal_buf_mem_info);
ret = hd_videoenc_push_in_buf(enc_path_id, video_frame_in, NULL, -1); // -1 = blocking mode ret = hd_videoenc_push_in_buf(enc_path_id, video_frame_in, NULL, PHOTOFAST_HD_PUSH_PULL_TIMEOUT_MS); // -1 = blocking mode
if (ret != HD_OK) { if (ret != HD_OK) {
DBG_ERR("hd_videoenc_push_in_buf failed!(%d)\r\n", ret); DBG_ERR("hd_videoenc_push_in_buf failed!(%d)\r\n", ret);
goto EXIT; goto EXIT;
} }
ret = hd_videoenc_pull_out_buf(enc_path_id, &bs_data_pull, -1); // -1 = blocking mode ret = hd_videoenc_pull_out_buf(enc_path_id, &bs_data_pull, PHOTOFAST_HD_PUSH_PULL_TIMEOUT_MS); // -1 = blocking mode
if (ret != HD_OK) { if (ret != HD_OK) {
DBG_ERR("hd_videoenc_pull_out_buf failed!(%d)\r\n", ret); DBG_ERR("hd_videoenc_pull_out_buf failed!(%d)\r\n", ret);
goto EXIT; goto EXIT;
@ -882,7 +970,7 @@ static INT32 PhotoFast_SliceEncode_Encode_Thumbnail(HD_VIDEO_FRAME* video_frame_
PHOTOFAST_SLICE_ENC_DUMP("copy bs data (%lx -> %lx) , size = %lx\r\n", enc_jpg_va, slice_enc_info->bs_buf_mem_info.va, bs_data_pull.video_pack[0].size); PHOTOFAST_SLICE_ENC_DUMP("copy bs data (%lx -> %lx) , size = %lx\r\n", enc_jpg_va, slice_enc_info->bs_buf_mem_info.va, bs_data_pull.video_pack[0].size);
if(bs_data_pull.video_pack[0].size > slice_enc_info->bs_buf_mem_info.blk_size){ if(bs_data_pull.video_pack[0].size > slice_enc_info->bs_buf_mem_info.blk_size){
DBG_ERR("bs overflow!(data size: %lx buffer size: %lx)\r\n", bs_data_pull.video_pack[0].size, slice_enc_info->bs_buf_mem_info.blk_size); DBG_ERR("bs overflow!(data size: %lx buffer size: %lx)\r\n", bs_data_pull.video_pack[0].size, slice_enc_info->bs_buf_mem_info.blk_size);
ret = HD_ERR_SYS; ret = HD_ERR_NOMEM;
goto EXIT; goto EXIT;
} }
@ -927,13 +1015,13 @@ static INT32 PhotoFast_SliceEncode_Encode_Screennail(HD_VIDEO_FRAME* video_frame
PhotoFast_SliceEncode_Get_Enc_Buffer_Info(enc_path_id, &slice_enc_info->hd_enc_internal_buf_mem_info); PhotoFast_SliceEncode_Get_Enc_Buffer_Info(enc_path_id, &slice_enc_info->hd_enc_internal_buf_mem_info);
ret = hd_videoenc_push_in_buf(enc_path_id, video_frame_in, NULL, -1); // -1 = blocking mode ret = hd_videoenc_push_in_buf(enc_path_id, video_frame_in, NULL, PHOTOFAST_HD_PUSH_PULL_TIMEOUT_MS); // -1 = blocking mode
if (ret != HD_OK) { if (ret != HD_OK) {
DBG_ERR("hd_videoenc_push_in_buf failed!(%d)\r\n", ret); DBG_ERR("hd_videoenc_push_in_buf failed!(%d)\r\n", ret);
goto EXIT; goto EXIT;
} }
ret = hd_videoenc_pull_out_buf(enc_path_id, &bs_data_pull, -1); // -1 = blocking mode ret = hd_videoenc_pull_out_buf(enc_path_id, &bs_data_pull, PHOTOFAST_HD_PUSH_PULL_TIMEOUT_MS); // -1 = blocking mode
if (ret != HD_OK) { if (ret != HD_OK) {
DBG_ERR("hd_videoenc_pull_out_buf failed!(%d)\r\n", ret); DBG_ERR("hd_videoenc_pull_out_buf failed!(%d)\r\n", ret);
goto EXIT; goto EXIT;
@ -948,7 +1036,7 @@ static INT32 PhotoFast_SliceEncode_Encode_Screennail(HD_VIDEO_FRAME* video_frame
PHOTOFAST_SLICE_ENC_DUMP("copy bs data (%lx -> %lx) , size = %lx\r\n", enc_jpg_va, slice_enc_info->bs_buf_mem_info.va, bs_data_pull.video_pack[0].size); PHOTOFAST_SLICE_ENC_DUMP("copy bs data (%lx -> %lx) , size = %lx\r\n", enc_jpg_va, slice_enc_info->bs_buf_mem_info.va, bs_data_pull.video_pack[0].size);
if(bs_data_pull.video_pack[0].size > slice_enc_info->bs_buf_mem_info.blk_size){ if(bs_data_pull.video_pack[0].size > slice_enc_info->bs_buf_mem_info.blk_size){
DBG_ERR("bs overflow!(data size: %lx buffer size: %lx)\r\n", bs_data_pull.video_pack[0].size, slice_enc_info->bs_buf_mem_info.blk_size); DBG_ERR("bs overflow!(data size: %lx buffer size: %lx)\r\n", bs_data_pull.video_pack[0].size, slice_enc_info->bs_buf_mem_info.blk_size);
ret = HD_ERR_SYS; ret = HD_ERR_NOMEM;
goto EXIT; goto EXIT;
} }
@ -984,11 +1072,13 @@ static UINT32 PhotoFast_GetScreenNailSize(void)
UINT32 uiImageSize, ScreenNailSize; UINT32 uiImageSize, ScreenNailSize;
UINT32 BitStreamSize; UINT32 BitStreamSize;
UIMenuStoreInfo *puiPara = sf_ui_para_get();
ScreenNailSize = CFG_SCREENNAIL_SIZE; ScreenNailSize = CFG_SCREENNAIL_SIZE;
uiImageSize = UI_GetData(FL_PHOTO_SIZE); uiImageSize = UI_GetData(FL_PHOTO_SIZE);
if (uiImageSize < ScreenNailSize) { if (uiImageSize < ScreenNailSize) {
BitStreamSize = CFG_SCREENNAIL_W * CFG_SCREENNAIL_H / 2; //BitStreamSize = CFG_SCREENNAIL_W * CFG_SCREENNAIL_H / 2;
BitStreamSize = (sf_get_screen_nail_width(puiPara->SendPicSize)) * (sf_get_screen_nail_height(puiPara->SendPicSize)) / 2;
} else { } else {
BitStreamSize = 0; BitStreamSize = 0;
} }
@ -1100,13 +1190,13 @@ static INT32 PhotoFast_SliceEncode_Encode_Primary(
vf_gfx_scale_param.dst_img.dim.w, vf_gfx_scale_param.dst_img.dim.h vf_gfx_scale_param.dst_img.dim.w, vf_gfx_scale_param.dst_img.dim.h
); );
ret = hd_videoenc_push_in_buf(enc_path_id, &vf_gfx_scale_param.dst_img, NULL, -1); // -1 = blocking mode ret = hd_videoenc_push_in_buf(enc_path_id, &vf_gfx_scale_param.dst_img, NULL, PHOTOFAST_HD_PUSH_PULL_TIMEOUT_MS); // -1 = blocking mode
if (ret != HD_OK) { if (ret != HD_OK) {
DBG_ERR("hd_videoenc_push_in_buf failed!(%d)\r\n", ret); DBG_ERR("hd_videoenc_push_in_buf failed!(%d)\r\n", ret);
goto EXIT; goto EXIT;
} }
ret = hd_videoenc_pull_out_buf(enc_path_id, &bs_data_pull, -1); // -1 = blocking mode ret = hd_videoenc_pull_out_buf(enc_path_id, &bs_data_pull, PHOTOFAST_HD_PUSH_PULL_TIMEOUT_MS); // -1 = blocking mode
if (ret != HD_OK) { if (ret != HD_OK) {
DBG_ERR("hd_videoenc_pull_out_buf failed!(%d)\r\n", ret); DBG_ERR("hd_videoenc_pull_out_buf failed!(%d)\r\n", ret);
goto EXIT; goto EXIT;
@ -1160,12 +1250,12 @@ static INT32 PhotoFast_SliceEncode_Encode_Primary(
if(quality_old == 1){ if(quality_old == 1){
restart = FALSE; restart = FALSE;
} }
else if(quality_old <= CFG_PHOTOFAST_SLICE_ENC_QUALITY_DOWN_STEP){ else if(quality_old <= CFG_PHOTOFAST_SLICE_ENC_QUALITY_STEP){
quality_new = 1; quality_new = 1;
restart = TRUE; restart = TRUE;
} }
else if(quality_old > CFG_PHOTOFAST_SLICE_ENC_QUALITY_DOWN_STEP){ else if(quality_old > CFG_PHOTOFAST_SLICE_ENC_QUALITY_STEP){
quality_new = quality_old - CFG_PHOTOFAST_SLICE_ENC_QUALITY_DOWN_STEP; quality_new = quality_old - CFG_PHOTOFAST_SLICE_ENC_QUALITY_STEP;
restart = TRUE; restart = TRUE;
} }
else{ else{
@ -1261,7 +1351,7 @@ INT32 PhotoFast_SliceEncode(const HD_PATH_ID vproc_path_id, const HD_VIDEO_FRAME
// VOS_TICK tick_thumbnail_s, tick_thumbnail_e; // VOS_TICK tick_thumbnail_s, tick_thumbnail_e;
// VOS_TICK tick_stamp_s, tick_stamp_e; // VOS_TICK tick_stamp_s, tick_stamp_e;
// VOS_TICK tick_combine_s, tick_combine_e; // VOS_TICK tick_combine_s, tick_combine_e;
UIMenuStoreInfo *puiPara = sf_ui_para_get();
vos_perf_mark(&tick_start); vos_perf_mark(&tick_start);
/******************************************************************* /*******************************************************************
@ -1287,7 +1377,7 @@ INT32 PhotoFast_SliceEncode(const HD_PATH_ID vproc_path_id, const HD_VIDEO_FRAME
#if PHOTOFAST_SLICE_ENC_DBG_PRIMARY_YUV #if PHOTOFAST_SLICE_ENC_DBG_PRIMARY_YUV
PhotoFast_SliceEncode_Dump_Frame(video_frame, HD_VIDEO_PXLFMT_YUV420); PhotoFast_SliceEncode_Dump_Frame(video_frame);
#endif #endif
@ -1311,7 +1401,15 @@ INT32 PhotoFast_SliceEncode(const HD_PATH_ID vproc_path_id, const HD_VIDEO_FRAME
goto EXIT; goto EXIT;
} }
#if CFG_PHOTOFAST_SLICE_ENC_RC_SCREENNAIL
slice_encode_screennail_info->bs_buf_mem_info.blk_size = CFG_PHOTOFAST_SLICE_ENC_RC_SCREENNAIL_UBOUND;
//slice_encode_screennail_info->bs_buf_mem_info.blk_size = (((sf_get_screen_nail_width(puiPara->SendPicSize)) * (sf_get_screen_nail_height(puiPara->SendPicSize))*3/(2*JPG_COMERESSED_RATIO_8)) + (((sf_get_screen_nail_width(puiPara->SendPicSize)) * (sf_get_screen_nail_height(puiPara->SendPicSize))*3/(2*JPG_COMERESSED_RATIO_8)) * 20 / 100));
#else
slice_encode_screennail_info->bs_buf_mem_info.blk_size = PhotoFast_GetScreenNailSize(); slice_encode_screennail_info->bs_buf_mem_info.blk_size = PhotoFast_GetScreenNailSize();
#endif
if(PhotoFast_SliceEncode_Alloc_Buffer(&slice_encode_screennail_info->bs_buf_mem_info, "slice_enc_screennail") != E_OK){ if(PhotoFast_SliceEncode_Alloc_Buffer(&slice_encode_screennail_info->bs_buf_mem_info, "slice_enc_screennail") != E_OK){
goto EXIT; goto EXIT;
} }
@ -1367,14 +1465,24 @@ INT32 PhotoFast_SliceEncode(const HD_PATH_ID vproc_path_id, const HD_VIDEO_FRAME
/******************************************************************* /*******************************************************************
* Screennail & Thumbnail Encode * Screennail & Thumbnail Encode
******************************************************************/ ******************************************************************/
/* screennail encode */ /* screennail encode */
PhotoFast_SliceEncode_Encode_Set_In(slice_encode_screennail_info->enc_path_id, vproc_out_pxlfmt, (HD_DIM) {CFG_SCREENNAIL_W, CFG_SCREENNAIL_H}); PhotoFast_SliceEncode_Encode_Set_In(slice_encode_screennail_info->enc_path_id, vproc_out_pxlfmt, (HD_DIM) {(sf_get_screen_nail_width(puiPara->SendPicSize)), (sf_get_screen_nail_height(puiPara->SendPicSize))});
#if CFG_PHOTOFAST_SLICE_ENC_RC_SCREENNAIL
if(PhotoFast_SliceEncode_Encode_Screennail_RC(&video_frame_out_screennail) != E_OK){
goto EXIT;
}
#else
PhotoFast_SliceEncode_Encode_Set_Out(slice_encode_screennail_info->enc_path_id, CFG_PHOTOFAST_SLICE_ENC_INIT_QUALITY_SCREENNAIL); PhotoFast_SliceEncode_Encode_Set_Out(slice_encode_screennail_info->enc_path_id, CFG_PHOTOFAST_SLICE_ENC_INIT_QUALITY_SCREENNAIL);
if(PhotoFast_SliceEncode_Encode_Screennail(&video_frame_out_screennail) != E_OK){ if(PhotoFast_SliceEncode_Encode_Screennail(&video_frame_out_screennail) != E_OK){
goto EXIT; goto EXIT;
} }
#endif
#if PHOTOFAST_SLICE_ENC_DBG_SCREENNAIL_JPG #if PHOTOFAST_SLICE_ENC_DBG_SCREENNAIL_JPG
/* dump file */ /* dump file */
@ -1585,6 +1693,7 @@ INT32 PhotoFast_Sliceencode2_Enq_Frame(const HD_VIDEO_FRAME* video_frame)
{ {
PhotoFast_SliceEncode_Queue12_Param* queue_ele_out = NULL; PhotoFast_SliceEncode_Queue12_Param* queue_ele_out = NULL;
queue_ele_out = (PhotoFast_SliceEncode_Queue12_Param*) malloc(sizeof(PhotoFast_SliceEncode_Queue12_Param)); queue_ele_out = (PhotoFast_SliceEncode_Queue12_Param*) malloc(sizeof(PhotoFast_SliceEncode_Queue12_Param));
memset(queue_ele_out, 0, sizeof(PhotoFast_SliceEncode_Queue12_Param));
queue_ele_out->frame = *video_frame; queue_ele_out->frame = *video_frame;
while (lfqueue_enq(&queue12, (void*) queue_ele_out) == -1) while (lfqueue_enq(&queue12, (void*) queue_ele_out) == -1)
@ -1686,7 +1795,14 @@ INT32 PhotoFast_SliceEncode_CB2(void* user_data)
continue; continue;
} }
DBG_DUMP("process frame\n"); if(queue_ele_in->comm.terminate){
DBG_ERR("force terminate\n");
free(queue_ele_in);
queue_ele_in = NULL;
goto EXIT;
}
DBG_IND("process frame %lu\n", param->cnt);
/******************************************************************* /*******************************************************************
* Calculate src slice info * Calculate src slice info
@ -1694,12 +1810,22 @@ INT32 PhotoFast_SliceEncode_CB2(void* user_data)
PhotoFast_SliceEncode_Get_Src_Slice_Info(&dst_slice_info, &src_slice_info, queue_ele_in->frame); PhotoFast_SliceEncode_Get_Src_Slice_Info(&dst_slice_info, &src_slice_info, queue_ele_in->frame);
slice_encode_primary_info->bs_buf_mem_info.blk_size = (VDO_YUV_BUFSIZE(dst_slice_info.width, dst_slice_info.height, queue_ele_in->frame.pxlfmt) / (CFG_PHOTOFAST_SLICE_ENC_BS_BUF_RATIO)) + CFG_JPG_HEADER_SIZE + PhotoFast_GetScreenNailSize() ; slice_encode_primary_info->bs_buf_mem_info.blk_size = (VDO_YUV_BUFSIZE(dst_slice_info.width, dst_slice_info.height, queue_ele_in->frame.pxlfmt) / (CFG_PHOTOFAST_SLICE_ENC_BS_BUF_RATIO)) + CFG_JPG_HEADER_SIZE + PhotoFast_GetScreenNailSize() ;
if(PhotoFast_SliceEncode_Alloc_Buffer(&slice_encode_primary_info->bs_buf_mem_info, "slice_enc_primary") != E_OK){ if(PhotoFast_SliceEncode_Alloc_Buffer_Retry(
&slice_encode_primary_info->bs_buf_mem_info,
"slice_enc_primary",
10,
100
) != E_OK){
goto EXIT; goto EXIT;
} }
slice_encode_screennail_info->bs_buf_mem_info.blk_size = PhotoFast_GetScreenNailSize(); slice_encode_screennail_info->bs_buf_mem_info.blk_size = PhotoFast_GetScreenNailSize();
if(PhotoFast_SliceEncode_Alloc_Buffer(&slice_encode_screennail_info->bs_buf_mem_info, "slice_enc_screennail") != E_OK){ if(PhotoFast_SliceEncode_Alloc_Buffer_Retry(
&slice_encode_screennail_info->bs_buf_mem_info,
"slice_enc_screennail",
10,
100
) != E_OK){
goto EXIT; goto EXIT;
} }
@ -1734,14 +1860,23 @@ INT32 PhotoFast_SliceEncode_CB2(void* user_data)
/******************************************************************* /*******************************************************************
* Screennail & Thumbnail Encode * Screennail & Thumbnail Encode
******************************************************************/ ******************************************************************/
UIMenuStoreInfo *puiPara = sf_ui_para_get();
/* screennail encode */ /* screennail encode */
PhotoFast_SliceEncode_Encode_Set_In(slice_encode_screennail_info->enc_path_id, vproc_out_pxlfmt, (HD_DIM) {CFG_SCREENNAIL_W, CFG_SCREENNAIL_H}); PhotoFast_SliceEncode_Encode_Set_In(slice_encode_screennail_info->enc_path_id, vproc_out_pxlfmt, (HD_DIM) {(sf_get_screen_nail_width(puiPara->SendPicSize)), (sf_get_screen_nail_height(puiPara->SendPicSize))});
PhotoFast_SliceEncode_Encode_Set_Out(slice_encode_screennail_info->enc_path_id, CFG_PHOTOFAST_SLICE_ENC_INIT_QUALITY_SCREENNAIL);
if(PhotoFast_SliceEncode_Encode_Screennail(&video_frame_out_screennail) != E_OK){
goto EXIT; #if CFG_PHOTOFAST_SLICE_ENC_RC_SCREENNAIL
} if(PhotoFast_SliceEncode_Encode_Screennail_RC(&video_frame_out_screennail) != E_OK){
goto EXIT;
}
#else
PhotoFast_SliceEncode_Encode_Set_Out(slice_encode_screennail_info->enc_path_id, CFG_PHOTOFAST_SLICE_ENC_INIT_QUALITY_SCREENNAIL);
if(PhotoFast_SliceEncode_Encode_Screennail(&video_frame_out_screennail) != E_OK){
goto EXIT;
}
#endif
/* thumbnail encode */ /* thumbnail encode */
PhotoFast_SliceEncode_Encode_Set_In(slice_encode_thumbnail_info->enc_path_id, vproc_out_pxlfmt, (HD_DIM) {CFG_THUMBNAIL_W, CFG_THUMBNAIL_H}); PhotoFast_SliceEncode_Encode_Set_In(slice_encode_thumbnail_info->enc_path_id, vproc_out_pxlfmt, (HD_DIM) {CFG_THUMBNAIL_W, CFG_THUMBNAIL_H});
@ -1790,6 +1925,7 @@ INT32 PhotoFast_SliceEncode_CB2(void* user_data)
/* enqueue jpg buffer info */ /* enqueue jpg buffer info */
queue_ele_out = (PhotoFast_SliceEncode_Queue23_Param*) malloc(sizeof(PhotoFast_SliceEncode_Queue23_Param)); queue_ele_out = (PhotoFast_SliceEncode_Queue23_Param*) malloc(sizeof(PhotoFast_SliceEncode_Queue23_Param));
memset(queue_ele_out, 0, sizeof(PhotoFast_SliceEncode_Queue23_Param));
queue_ele_out->jpg_combined_addr = (UINT8*) dst_jpg_file.addr; queue_ele_out->jpg_combined_addr = (UINT8*) dst_jpg_file.addr;
queue_ele_out->jpg_combined_size = dst_jpg_file.size; queue_ele_out->jpg_combined_size = dst_jpg_file.size;
queue_ele_out->jpg_thumb_addr = (UINT8*) scr_jpg.addr; queue_ele_out->jpg_thumb_addr = (UINT8*) scr_jpg.addr;
@ -1836,7 +1972,14 @@ EXIT:
PhotoFast_SliceEncode_Free_Buffer(&exif_mem_info); PhotoFast_SliceEncode_Free_Buffer(&exif_mem_info);
} }
DBG_DUMP("task2 job finished\n"); if(param->cnt < param->max_cnt){
queue_ele_out = (PhotoFast_SliceEncode_Queue23_Param*) malloc(sizeof(PhotoFast_SliceEncode_Queue23_Param));
memset(queue_ele_out, 0, sizeof(PhotoFast_SliceEncode_Queue23_Param));
queue_ele_out->comm.terminate = 1;
lfqueue_enq(param->queue23, (void*) queue_ele_out);
}
DBG_IND("task2 job finished\n");
return ret; return ret;
} }
@ -1865,13 +2008,18 @@ INT32 PhotoFast_SliceEncode_CB3(void* user_data)
continue; continue;
} }
if(queue_ele_in->comm.terminate){
DBG_ERR("force terminate\n");
free(queue_ele_in);
queue_ele_in = NULL;
goto EXIT;
}
/******************************************************************* /*******************************************************************
* Output jpg file * Output jpg file
******************************************************************/ ******************************************************************/
extern INT32 PhotoFast_WriteFile(UINT32 Addr, UINT32 Size, UINT32 Fmt, UINT32 uiPathId); extern INT32 PhotoFast_WriteFile(UINT32 Addr, UINT32 Size, UINT32 Fmt, UINT32 uiPathId);
vos_perf_list_mark("sie_vd", __LINE__, 4);
fastboot_wait_done(BOOT_INIT_FILESYSOK); fastboot_wait_done(BOOT_INIT_FILESYSOK);
fastboot_wait_done(BOOT_INIT_FILENAMINGOK); fastboot_wait_done(BOOT_INIT_FILENAMINGOK);
PhotoFast_WriteFile( PhotoFast_WriteFile(
@ -1884,17 +2032,27 @@ INT32 PhotoFast_SliceEncode_CB3(void* user_data)
extern CHAR* PhotoFast_GetLastWriteFilePath(void); extern CHAR* PhotoFast_GetLastWriteFilePath(void);
char* file_path = PhotoFast_GetLastWriteFilePath(); char* file_path = PhotoFast_GetLastWriteFilePath();
char tmp[256] = {'\0'}; char tmp[256] = {'\0'};
char tmp2[64] = {'\0'};
UINT32 length = strlen(file_path); UINT32 length = strlen(file_path);
snprintf(tmp, sizeof(tmp), "%s%s", PHOTO_THUMB_PATH, file_path + length - 12); /* DCF 8.3 naming rule */ snprintf(tmp, sizeof(tmp), "%s%s", PHOTO_THUMB_PATH, file_path + length - 12); /* DCF 8.3 naming rule */
snprintf(tmp + strlen(tmp) - 3, sizeof(tmp), "%s", "JPG"); snprintf(tmp + strlen(tmp) - 3, sizeof(tmp), "%s", "JPG");
DBG_DUMP("PHOTO THUMB %s\n", tmp); DBG_IND("PHOTO THUMB %s\n", tmp);
FST_FILE fp = FileSys_OpenFile(tmp, FST_OPEN_ALWAYS | FST_OPEN_WRITE); FST_FILE fp = FileSys_OpenFile(tmp, FST_OPEN_ALWAYS | FST_OPEN_WRITE);
FileSys_WriteFile(fp, (UINT8*)queue_ele_in->jpg_thumb_addr, &queue_ele_in->jpg_thumb_size, 0, NULL); FileSys_WriteFile(fp, (UINT8*)queue_ele_in->jpg_thumb_addr, &queue_ele_in->jpg_thumb_size, 0, NULL);
FileSys_CloseFile(fp); FileSys_CloseFile(fp);
memset(tmp, '\0', sizeof(tmp));
snprintf(tmp, sizeof(tmp), "%s%s", SF_SD_THUMB_PATH, file_path + length - 12); /* DCF 8.3 naming rule */
snprintf(tmp + strlen(tmp) - 3, sizeof(tmp), "%s", "JPG");
snprintf(tmp2, sizeof(tmp2), "%s", file_path + length - 12); /* DCF 8.3 naming rule */
snprintf(tmp2 + strlen(tmp2) - 3, sizeof(tmp2), "%s", "JPG");
DBG_DUMP("PHOTO THUMB %s \n %s\n", tmp, tmp2);
sf_file_thumb_cfg_fill(tmp, tmp2, queue_ele_in->jpg_thumb_size, SF_FILE_TYPE_PIC_SMALL);
} }
/* check user bs buffer is freed */ /* check user bs buffer is freed */
@ -1919,7 +2077,11 @@ INT32 PhotoFast_SliceEncode_CB3(void* user_data)
EXIT: EXIT:
DBG_DUMP("task3 job finished\n"); if(param->cnt < param->max_cnt){
DBG_ERR("force terminate\n");
}
DBG_IND("task3 job finished\n");
return ret; return ret;
} }

View File

@ -11,7 +11,13 @@
#define CFG_PHOTOFAST_SLICE_ENC_INIT_QUALITY_PRIMARY 85 #define CFG_PHOTOFAST_SLICE_ENC_INIT_QUALITY_PRIMARY 85
#define CFG_PHOTOFAST_SLICE_ENC_INIT_QUALITY_THUMBNAIL 70 #define CFG_PHOTOFAST_SLICE_ENC_INIT_QUALITY_THUMBNAIL 70
#define CFG_PHOTOFAST_SLICE_ENC_INIT_QUALITY_SCREENNAIL 70 #define CFG_PHOTOFAST_SLICE_ENC_INIT_QUALITY_SCREENNAIL 70
#define CFG_PHOTOFAST_SLICE_ENC_QUALITY_DOWN_STEP 3 #define CFG_PHOTOFAST_SLICE_ENC_QUALITY_STEP 3
#define CFG_PHOTOFAST_SLICE_ENC_RC_SCREENNAIL 1 /* rate control */
#define CFG_PHOTOFAST_SLICE_ENC_RC_SCREENNAIL_UBOUND (SCREENNAIL_TARGETBYTERATE + (SCREENNAIL_TARGETBYTERATE * 20 / 100))
#define CFG_PHOTOFAST_SLICE_ENC_RC_SCREENNAIL_LBOUND (SCREENNAIL_TARGETBYTERATE - (SCREENNAIL_TARGETBYTERATE * 20 / 100))
#define CFG_PHOTOFAST_SLICE_ENC_RC_SCREENNAIL_QUALITY_STEP 2
#define PHOTOFAST_HD_PUSH_PULL_TIMEOUT_MS 3000
typedef struct typedef struct
{ {

View File

@ -52,6 +52,7 @@ static CHAR *resolution_Buf[MOVIE_SIZE_ID_MAX] = {
[MOVIE_SIZE_CLONE_2304x1296P30_848x480P30] = "3MHD P30+WVGA P30", [MOVIE_SIZE_CLONE_2304x1296P30_848x480P30] = "3MHD P30+WVGA P30",
[MOVIE_SIZE_CLONE_1920x1080P60_848x480P30] = "FHD P60+WVGA P30", [MOVIE_SIZE_CLONE_1920x1080P60_848x480P30] = "FHD P60+WVGA P30",
[MOVIE_SIZE_CLONE_1920x1080P60_640x360P30] = "FHD P60+VGA P30", [MOVIE_SIZE_CLONE_1920x1080P60_640x360P30] = "FHD P60+VGA P30",
[MOVIE_SIZE_CLONE_1920x1080P30_640x360P30] = "FHD P60+VGA P30",
[MOVIE_SIZE_CLONE_1920x1080P30_848x480P30] = "FHD P30+WVGA P30", [MOVIE_SIZE_CLONE_1920x1080P30_848x480P30] = "FHD P30+WVGA P30",
[MOVIE_SIZE_CLONE_2048x2048P30_480x480P30] = "2048x2048 P30 + 480x480 P30", [MOVIE_SIZE_CLONE_2048x2048P30_480x480P30] = "2048x2048 P30 + 480x480 P30",
}; };

View File

@ -5,7 +5,7 @@
// Photo // Photo
#define DEFAULT_PHOTO_CAPTURE SELFTIMER_OFF #define DEFAULT_PHOTO_CAPTURE SELFTIMER_OFF
#define DEFAULT_PHOTO_SIZE PHOTO_SIZE_5M//PHOTO_MAX_CAP_SIZE #define DEFAULT_PHOTO_SIZE PHOTO_SIZE_8M//PHOTO_MAX_CAP_SIZE
#define DEFAULT_PHOTO_QUALITY QUALITY_FINE #define DEFAULT_PHOTO_QUALITY QUALITY_FINE
#define DEFAULT_PHOTO_COLOR COLOR_EFFECT_STANDARD #define DEFAULT_PHOTO_COLOR COLOR_EFFECT_STANDARD
#define DEFAULT_SCENE SCENE_AUTO #define DEFAULT_SCENE SCENE_AUTO
@ -63,7 +63,7 @@
#define DEFAULT_MOVIE_SIZE MOVIE_SIZE_DUAL_1920x1080P30_848x480P30//MOVIE_SIZE_FRONT_1920x1080P30 #define DEFAULT_MOVIE_SIZE MOVIE_SIZE_DUAL_1920x1080P30_848x480P30//MOVIE_SIZE_FRONT_1920x1080P30
#else #else
#if (MOVIE_AI_DEMO == DISABLE) #if (MOVIE_AI_DEMO == DISABLE)
#define DEFAULT_MOVIE_SIZE MOVIE_SIZE_FRONT_1920x1080P30 #define DEFAULT_MOVIE_SIZE MOVIE_SIZE_CLONE_1920x1080P30_640x360P30
#else #else
#define DEFAULT_MOVIE_SIZE MOVIE_SIZE_DUAL_1920x1080P30_848x480P30//MOVIE_SIZE_FRONT_1920x1080P30 #define DEFAULT_MOVIE_SIZE MOVIE_SIZE_DUAL_1920x1080P30_848x480P30//MOVIE_SIZE_FRONT_1920x1080P30
#endif #endif
@ -71,8 +71,8 @@
#endif #endif
#define DEFAULT_MOVIE_SIZE_DUAL MOVIE_SIZE_FRONT_1920x1080P30//MOVIE_SIZE_FRONT_2560x1440P30 #define DEFAULT_MOVIE_SIZE_DUAL MOVIE_SIZE_CLONE_1920x1080P30_640x360P30//MOVIE_SIZE_FRONT_2560x1440P30
#define DEFAULT_MOVIE_SIZE_SINGLE MOVIE_SIZE_FRONT_1920x1080P30//MOVIE_SIZE_FRONT_2560x1440P30 #define DEFAULT_MOVIE_SIZE_SINGLE MOVIE_SIZE_CLONE_1920x1080P30_640x360P30//MOVIE_SIZE_FRONT_2560x1440P30
#define DEFAULT_MOVIE_QUALITY MOVIE_QUALITY_FINE #define DEFAULT_MOVIE_QUALITY MOVIE_QUALITY_FINE
#define DEFAULT_MOVIE_COLOR MOVIE_COLOR_NORMAL #define DEFAULT_MOVIE_COLOR MOVIE_COLOR_NORMAL

View File

@ -417,6 +417,8 @@ typedef struct _UIMenuUIMenuStoreInfo {
CHAR ImgSize;/* 24M/12M/8M/5M */ CHAR ImgSize;/* 24M/12M/8M/5M */
CHAR NightMode;/* Max.Range/Balanced/Min.Blur */ CHAR NightMode;/* Max.Range/Balanced/Min.Blur */
CHAR Multishot;/*1P/2P/3P/4P/5P*/ CHAR Multishot;/*1P/2P/3P/4P/5P*/
CHAR MultiShotIntevel;/*0s/1s/2s*/
CHAR SendMulti;/*OFF/ON*/
CHAR VideoSize;/*FHD-1080P/HD-720P/WVGA*/ CHAR VideoSize;/*FHD-1080P/HD-720P/WVGA*/
CHAR VideoTimeMenu;/*5/10/15/20/30/40/50/59*/ CHAR VideoTimeMenu;/*5/10/15/20/30/40/50/59*/
CHAR VideoLenth; CHAR VideoLenth;
@ -480,6 +482,7 @@ typedef struct _UIMenuUIMenuStoreInfo {
CHAR TimeSend3Switch;/*OFF/ON*/ CHAR TimeSend3Switch;/*OFF/ON*/
CHAR TimeSend4Switch;/*OFF/ON*/ CHAR TimeSend4Switch;/*OFF/ON*/
CHAR SendType; CHAR SendType;
CHAR PicUpDailyReport;
/////////////////////// ///////////////////////
#endif #endif
@ -507,7 +510,7 @@ typedef struct _UIMenuUIMenuStoreInfo {
CHAR SimIccid[21]; CHAR SimIccid[21];
CHAR ServiceProvider[64]; CHAR ServiceProvider[64];
UINT8 SimSignal; UINT8 SimSignal;
UINT8 SimType; UINT8 SimType;
UINT8 FtpSwitch;/*FTP/OFF/FTPS*/ UINT8 FtpSwitch;/*FTP/OFF/FTPS*/
UINT8 FtpIp[40]; UINT8 FtpIp[40];
UINT8 FtpPort[5]; UINT8 FtpPort[5];
@ -518,6 +521,11 @@ typedef struct _UIMenuUIMenuStoreInfo {
UINT8 FtpsPort[5]; UINT8 FtpsPort[5];
UINT8 FtpsUsr[40]; UINT8 FtpsUsr[40];
UINT8 FtpsPwd[20]; UINT8 FtpsPwd[20];
UINT8 WifiSwitch;
UINT8 WifiMode;
UINT8 WifiApPWD[16];
UINT8 Zoom;
//============Sifar==============///Payton //============Sifar==============///Payton
} UIMenuStoreInfo; } UIMenuStoreInfo;
@ -1148,6 +1156,7 @@ enum _MOVIE_MENU_SIZE {
MOVIE_SIZE_CLONE_1920x1080P60_848x480P60, /// FHD WVGA MOVIE_SIZE_CLONE_1920x1080P60_848x480P60, /// FHD WVGA
MOVIE_SIZE_CLONE_1920x1080P60_848x480P30, /// FHD WVGA MOVIE_SIZE_CLONE_1920x1080P60_848x480P30, /// FHD WVGA
MOVIE_SIZE_CLONE_1920x1080P60_640x360P30, /// FHD VGA MOVIE_SIZE_CLONE_1920x1080P60_640x360P30, /// FHD VGA
MOVIE_SIZE_CLONE_1920x1080P30_640x360P30, /// FHD VGA
MOVIE_SIZE_CLONE_1920x1080P30_848x480P30, /// FHD WVGA MOVIE_SIZE_CLONE_1920x1080P30_848x480P30, /// FHD WVGA
MOVIE_SIZE_CLONE_2048x2048P30_480x480P30, MOVIE_SIZE_CLONE_2048x2048P30_480x480P30,
MOVIE_SIZE_CLONE_1280x720P60_1280x720P60, /// HD HD p60 MOVIE_SIZE_CLONE_1280x720P60_1280x720P60, /// HD HD p60

View File

@ -164,9 +164,9 @@ static MOVIE_SIZE_ITEM g_MovieSizeTable[] = {
{1, 3, 36, 8, -8, 0}, {1, 3, 36, 8, -8, 0},
{1, 4, 30, 200 * 1024, 30, 26, 10, 40, 26, 10, 40, -40, 1, 8, 4}, {1, 4, 30, 200 * 1024, 30, 26, 10, 40, 26, 10, 40, -40, 1, 8, 4},
#else #else
{1920, 1080, 30, 262144/* 2M = 2*1024*1024/8 */, MEDIAREC_DAR_DEFAULT, IMAGERATIO_16_9}, {1920, 1080, 30, 104857/*262144 2M = 2*1024*1024/8 */, MEDIAREC_DAR_DEFAULT, IMAGERATIO_16_9},
{1, 3, 36, 8, -8, 0}, {1, 3, 36, 8, -8, 0},
{1, 4, 30, 262144/* 2M = 2*1024*1024/8 */, 15, 26, 15, 50, 26, 15, 50, 0, 1, 8, 4}, {1, 4, 30, 104857/*262144 2M = 2*1024*1024/8 */, 30, 26, 15, 50, 26, 15, 50, 0, 1, 8, 4},
#endif #endif
}, },
@ -194,9 +194,9 @@ static MOVIE_SIZE_ITEM g_MovieSizeTable[] = {
{1, 2, 36, 6, -6, 0}, {1, 2, 36, 6, -6, 0},
{1, 4, 30, 100 * 1024, 1800, 26, 10, 50, 26, 10, 50, -40, 1, 8, 4}, {1, 4, 30, 100 * 1024, 1800, 26, 10, 50, 26, 10, 50, -40, 1, 8, 4},
#else #else
{1280, 720, 30, 131072 /* 1M = 1*1024*1024/8 */, MEDIAREC_DAR_DEFAULT, IMAGERATIO_16_9}, {1280, 720, 30, 58982/*131072 1M = 1*1024*1024/8 */, MEDIAREC_DAR_DEFAULT, IMAGERATIO_16_9},
{1, 3, 36, 8, -8, 0}, {1, 3, 36, 8, -8, 0},
{1, 4, 30, 131072 /* 1M = 1*1024*1024/8 */, 15, 26, 15, 50, 26, 15, 50, 0, 1, 8, 4}, {1, 4, 30, 58982/*131072 1M = 1*1024*1024/8 */, 30, 26, 15, 50, 26, 15, 50, 0, 1, 8, 4},
#endif #endif
}, },
@ -218,9 +218,9 @@ static MOVIE_SIZE_ITEM g_MovieSizeTable[] = {
{1, 3, 36, 8, -8, 0}, {1, 3, 36, 8, -8, 0},
{1, 4, 30, 84 * 1024, 1800, 26, 10, 50, 26, 10, 50, -40, 1, 8, 4}, {1, 4, 30, 84 * 1024, 1800, 26, 10, 50, 26, 10, 50, -40, 1, 8, 4},
#else #else
{848, 480, 30, 110100, MEDIAREC_DAR_DEFAULT, IMAGERATIO_16_9}, {848, 480, 30, 32768/*110100*/, MEDIAREC_DAR_DEFAULT, IMAGERATIO_16_9},
{1, 3, 36, 8, -8, 0}, {1, 3, 36, 8, -8, 0},
{1, 4, 30, 110100, 15, 26, 15, 50, 26, 15, 50, 0, 1, 8, 4}, {1, 4, 30, 32768/*110100*/, 30, 26, 15, 50, 26, 15, 50, 0, 1, 8, 4},
#endif #endif
}, },
@ -254,9 +254,9 @@ static MOVIE_SIZE_ITEM g_MovieSizeTable[] = {
{1, 3, 36, 8, -8, 0}, {1, 3, 36, 8, -8, 0},
{1, 4, 30, 80 * 1024, 15, 26, 10, 40, 26, 10, 40, 0, 1, 8, 4}, {1, 4, 30, 80 * 1024, 15, 26, 10, 40, 26, 10, 40, 0, 1, 8, 4},
#else #else
{ 640, 360, 30, 150 * 1024, MEDIAREC_DAR_DEFAULT, IMAGERATIO_16_9}, { 640, 360, 30, 78643, MEDIAREC_DAR_DEFAULT, IMAGERATIO_16_9},
{1, 3, 36, 8, -8, 0}, {1, 3, 36, 8, -8, 0},
{1, 4, 30, 150 * 1024, 15, 26, 10, 40, 26, 10, 40, 0, 1, 8, 4}, {1, 4, 30, 78643, 15, 26, 10, 50, 26, 10, 50, 0, 1, 8, 4},
#endif #endif
}, },
@ -498,6 +498,12 @@ static MOVIE_SIZE_MAPPING g_MovieRecMappingTable[MOVIE_SIZE_ID_MAX] = {
{MOVIE_SIZE_1920x1080P60, 0, 0}, {MOVIE_SIZE_1920x1080P60, 0, 0},
{MOVIE_SIZE_640x360P30, 0, 0}, {MOVIE_SIZE_640x360P30, 0, 0},
}, },
[MOVIE_SIZE_CLONE_1920x1080P30_640x360P30] = {
MOVIE_REC_TYPE_CLONE,
{MOVIE_SIZE_1920x1080P30, 0, 0},
{MOVIE_SIZE_640x360P30, 0, 0},
},
[MOVIE_SIZE_CLONE_1920x1080P30_848x480P30] = { [MOVIE_SIZE_CLONE_1920x1080P30_848x480P30] = {
MOVIE_REC_TYPE_CLONE, MOVIE_REC_TYPE_CLONE,

View File

@ -48,6 +48,18 @@ static PHOTO_SIZE_PARAM g_PhotoCapSizeTable[PHOTO_SIZE_ID_MAX + 2] = {
{1920, 1080, IMAGERATIO_16_9, "2MHD"}, // 2MHD {1920, 1080, IMAGERATIO_16_9, "2MHD"}, // 2MHD
}; };
static PHOTO_SIZE_PARAM g_ScreenNailSizeTable[PHOTO_SIZE_ID_MAX + 2] = {
#if defined(_MODEL_565_HUNTING_EVB_LINUX_4G_68CS_)
{1024, 768, IMAGERATIO_4_3, "0.78M"}, // 0.78M
#elif defined(_MODEL_565_HUNTING_EVB_LINUX_4G_S530_)
{640, 480, IMAGERATIO_4_3, "VGA"}, // VGA
{1024, 768, IMAGERATIO_4_3, "0.78M"}, // 0.78M
#endif
//CFG_SCREENNAIL_W
//CFG_SCREENNAIL_H
//SCREENNAIL_TARGETBYTERATE
};
const CHAR *Get_SizeString(UINT32 uiIndex) const CHAR *Get_SizeString(UINT32 uiIndex)
{ {
if (uiIndex < PHOTO_SIZE_ID_MAX) { if (uiIndex < PHOTO_SIZE_ID_MAX) {
@ -72,6 +84,21 @@ UINT32 GetPhotoSizeRatio(UINT32 ubIndex)
return g_PhotoCapSizeTable[ubIndex].uiImageRatio; return g_PhotoCapSizeTable[ubIndex].uiImageRatio;
} }
UINT32 sf_get_screen_nail_width(UINT32 ubIndex)
{
return g_ScreenNailSizeTable[ubIndex].uiWidth;
}
UINT32 sf_get_screen_nail_height(UINT32 ubIndex)
{
return g_ScreenNailSizeTable[ubIndex].uiHeight;
}
UINT32 sf_get_screen_nail_ratio(UINT32 ubIndex)
{
return g_ScreenNailSizeTable[ubIndex].uiImageRatio;
}
/************************************************* /*************************************************
Dzoom string handling Dzoom string handling
**************************************************/ **************************************************/

View File

@ -4,6 +4,9 @@
extern UINT32 GetPhotoSizeWidth(UINT32 ubIndex); extern UINT32 GetPhotoSizeWidth(UINT32 ubIndex);
extern UINT32 GetPhotoSizeHeight(UINT32 ubIndex); extern UINT32 GetPhotoSizeHeight(UINT32 ubIndex);
extern UINT32 GetPhotoSizeRatio(UINT32 ubIndex); extern UINT32 GetPhotoSizeRatio(UINT32 ubIndex);
extern UINT32 sf_get_screen_nail_width(UINT32 ubIndex);
extern UINT32 sf_get_screen_nail_height(UINT32 ubIndex);
extern UINT32 sf_get_screen_nail_ratio(UINT32 ubIndex);
extern CHAR *Get_DZoomRatioString(void); extern CHAR *Get_DZoomRatioString(void);
extern UINT32 Get_AFWindowIndexFromValue(UINT32 value); extern UINT32 Get_AFWindowIndexFromValue(UINT32 value);
extern UINT32 Get_AFWindowValue(UINT32 uhIndex); extern UINT32 Get_AFWindowValue(UINT32 uhIndex);

View File

@ -29,6 +29,7 @@
#define SF_I2C_NAME "sf_mcu" #define SF_I2C_NAME "sf_mcu"
//#endif //#endif
#define SF_SD_THUMB_PATH "A:\\Thumb\\ThumbFileCfg"
//#ifndef SF_I2C_ADDR //#ifndef SF_I2C_ADDR
#if defined(_MODEL_565_HUNTING_EVB_LINUX_4G_S530_) #if defined(_MODEL_565_HUNTING_EVB_LINUX_4G_S530_)
#define MCU_I2C_SLAVE_ADDR (0x20>>1) #define MCU_I2C_SLAVE_ADDR (0x20>>1)
@ -426,6 +427,57 @@ typedef struct sfCAMERA_CMD_S
UINT8 GotoServerGetPara; UINT8 GotoServerGetPara;
} SF_CAMERA_CMD_S; } SF_CAMERA_CMD_S;
#define SF_MAX_PATH_LEN 128
#define SF_MAX_PIC_LEN 64
#define SF_SRCFILE_MAX 5
typedef enum sf_FILE_TYPE_E
{
SF_FILE_TYPE_PIC_THUM_3M = 0x00,
SF_FILE_TYPE_PIC_3M = 0x01,
SF_FILE_TYPE_VIDEO_THUM_WVGA = 0X02,
SF_FILE_TYPE_VIDEO_WVGA = 0X03,
SF_FILE_TYPE_VIDEO_THUM_720P = 0X04,
SF_FILE_TYPE_VIDEO_720P = 0X05,
SF_FILE_TYPE_VIDEO_THUM_1080P = 0X06,
SF_FILE_TYPE_VIDEO_1080P = 0X07,
SF_FILE_TYPE_PIC_THUM_5M = 0x08,
SF_FILE_TYPE_PIC_5M = 0x09,
SF_FILE_TYPE_LOG_ERROR = 0x0A,
SF_FILE_TYPE_CFG = 0x0B,
SF_FILE_TYPE_TRIGGER = 0x0C,
SF_FILE_TYPE_PIC_BIG,
SF_FILE_TYPE_PIC_SMALL,
SF_FILE_TYPE_PIC_VIDEO,
SF_FILE_TYPE_VIDEO,
SF_FILE_TYPE_LOG_DP, /*dailyreport file*/
SF_FILE_TYPE_GPS,
SF_FILE_TYPE_TXT,
SF_FILE_TYPE_UPDATE,
SF_FILE_TYPE_FOTA,
SF_FILE_TYPE_BT_ALARM, /*Bettery Alarm*/
SF_FILE_TYPE_OTHER,
SF_FILE_TYPE_BUTT,
}SF_FILE_TYPE_E;
typedef struct sf_FILE_ATTR_S {
SF_FILE_TYPE_E enFileTye;
char thumbfileName[SF_MAX_PIC_LEN];
char thumbfilePath[SF_MAX_PATH_LEN];
char txtfilePath[SF_MAX_PATH_LEN];
char txtfileName[SF_MAX_PIC_LEN];
UINT32 thumbfileSize;
}SF_FILE_ATTR_S;
typedef struct sf_SRCFILE_ATTR_S {
UINT8 filecnt;
SF_FILE_ATTR_S stfileattr[SF_SRCFILE_MAX];
}SF_SRCFILE_ATTR_S;
ER sf_i2c_init_driver(UINT32 i2c_id); ER sf_i2c_init_driver(UINT32 i2c_id);
void sf_i2c_remove_driver(UINT32 id); void sf_i2c_remove_driver(UINT32 id);
INT32 sf_i2c_transfer(struct i2c_msg *msgs, INT32 num); INT32 sf_i2c_transfer(struct i2c_msg *msgs, INT32 num);
@ -458,5 +510,10 @@ void sf_set_power_off_flag(UINT8 flag);
UINT32 sf_set_pir_sensitivity(UINT8 pirs); UINT32 sf_set_pir_sensitivity(UINT8 pirs);
void sf_set_module_sleep_flag(UINT8 flag); void sf_set_module_sleep_flag(UINT8 flag);
void sf_file_thumb_cfg_fill(char* filepath,char* fileName,UINT32 size, SF_FILE_TYPE_E enFileType);
void sf_file_thumb_cfg_set(SF_SRCFILE_ATTR_S *pThumbFileCfgl);
void sf_file_thumb_cfg_clear(void);
void sf_file_thumb_cfg_sava(void);
#endif #endif

View File

@ -18,33 +18,33 @@
* Description: creat * Description: creat
**************************************************************************/ **************************************************************************/
#ifdef __KERNEL__ #ifdef __KERNEL__
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/module.h> #include <linux/module.h>
//#include <mach/rcw_macro.h> //#include <mach/rcw_macro.h>
//#include "kwrap/type.h" //#include "kwrap/type.h"
//#include "kwrap/semaphore.h" //#include "kwrap/semaphore.h"
//#include "kwrap/flag.h" //#include "kwrap/flag.h"
#include <sf_mcu.h> #include <sf_mcu.h>
#else #else
//#include "kwrap/type.h" //#include "kwrap/type.h"
//#include "kwrap/semaphore.h" //#include "kwrap/semaphore.h"
//#include "kwrap/flag.h" //#include "kwrap/flag.h"
#include <sf_mcu.h> #include <sf_mcu.h>
#endif #endif
#define __MODULE__ sf_i2c_mcu #define __MODULE__ sf_i2c_mcu
#define __DBGLVL__ 2 // 0=FATAL, 1=ERR, 2=WRN, 3=UNIT, 4=FUNC, 5=IND, 6=MSG, 7=VALUE, 8=USER #define __DBGLVL__ 2 // 0=FATAL, 1=ERR, 2=WRN, 3=UNIT, 4=FUNC, 5=IND, 6=MSG, 7=VALUE, 8=USER
#define __DBGFLT__ "*" // *=All, [mark]=CustomClass #define __DBGFLT__ "*" // *=All, [mark]=CustomClass
#include "kwrap/debug.h" #include "kwrap/debug.h"
//#include <kwrap/debug.h> //#include <kwrap/debug.h>
#include <stdio.h> #include <stdio.h>
#include <kwrap/util.h> #include <kwrap/util.h>
#include "comm/hwclock.h" #include "comm/hwclock.h"
#include "comm/timer.h" #include "comm/timer.h"
#include <time.h> #include <time.h>
#include <rtos_na51089/gpio.h> #include <rtos_na51089/gpio.h>
#include "UIInfo.h" #include "UIInfo.h"
#include "GxUSB.h" #include "GxUSB.h"
#include "kwrap/task.h" #include "kwrap/task.h"
#include <uart.h> #include <uart.h>
@ -143,7 +143,7 @@ unsigned char cmpValBuf[BUF_REG_SIZE] = {0};
static unsigned char sf_commu_mcu_exit = 1; static unsigned char sf_commu_mcu_exit = 1;
static VK_TASK_HANDLE sfCommuMcuThread = 0; static VK_TASK_HANDLE sfCommuMcuThread = 0;
THREAD_RETTYPE sf_commu_mcu_task(void *arg); THREAD_RETTYPE sf_commu_mcu_task(void *arg);
int gsfd = -1; int gsfd = -1;
void mcubuf_reset(void) void mcubuf_reset(void)
@ -286,7 +286,7 @@ int sf_set_mcu_reg_many(unsigned char reg[], unsigned char val[], unsigned int n
sndBuf[index] = num; sndBuf[index] = num;
for(i = 0; i < num; i++) for(i = 0; i < num; i++)
{ {
index++; index++;
sndBuf[index] = reg[i]; sndBuf[index] = reg[i];
index++; index++;
@ -330,9 +330,9 @@ int sf_get_mcu_reg_many(unsigned char reg[], unsigned int num)
index++; index++;
sndBuf[index] = num; sndBuf[index] = num;
for(i = 0; i < num; i++) for(i = 0; i < num; i++)
{ {
index++; index++;
sndBuf[index] = reg[i]; sndBuf[index] = reg[i];
} }
@ -428,7 +428,7 @@ unsigned int sf_get_mcu_reg_ack_depack_many(unsigned char reg[], unsigned char v
*num = smap_buf.buf[3]; *num = smap_buf.buf[3];
for(i = 0; i < *num; i++) for(i = 0; i < *num; i++)
{ {
reg[i]= smap_buf.buf[j]; reg[i]= smap_buf.buf[j];
j++; j++;
val[i]= smap_buf.buf[j]; val[i]= smap_buf.buf[j];
@ -682,7 +682,8 @@ unsigned char sf_commu_parse_mcu_data(unsigned char * src, unsigned int len)
//stMessageBuf.arg2 = SF_KEY_PIN_DATAREADY; //stMessageBuf.arg2 = SF_KEY_PIN_DATAREADY;
//sf_com_message_send_to_app(&stMessageBuf); //sf_com_message_send_to_app(&stMessageBuf);
ret = 0x05; ret = 0x05;
Ux_PostEvent(NVTEVT_SYSTEM_SHUTDOWN, 1, APP_POWER_OFF_APO); sf_set_power_off_flag(1);
//Ux_PostEvent(NVTEVT_SYSTEM_SHUTDOWN, 1, APP_POWER_OFF_APO);
} }
else else
{ {
@ -713,7 +714,7 @@ unsigned char sf_commu_parse_mcu_data(unsigned char * src, unsigned int len)
THREAD_RETTYPE sf_commu_mcu_task(void *arg) THREAD_RETTYPE sf_commu_mcu_task(void *arg)
{ {
THREAD_ENTRY(); THREAD_ENTRY();
static unsigned char buffer[BUF_REG_SIZE] = {0}; static unsigned char buffer[BUF_REG_SIZE] = {0};
int i = 0; int i = 0;
int readLen = 0; int readLen = 0;
@ -832,7 +833,7 @@ THREAD_RETTYPE sf_commu_mcu_task(void *arg)
} }
} }
} }
THREAD_RETURN(0); THREAD_RETURN(0);
} }

View File

@ -41,6 +41,9 @@
#include "GxUSB.h" #include "GxUSB.h"
#include <uart.h> #include <uart.h>
#include "FileSysTsk.h"
#include <stdio.h>
#include <stdlib.h>
static UINT8 McuSubVersion = 0; static UINT8 McuSubVersion = 0;
static UINT16 McuVersion = 0; static UINT16 McuVersion = 0;
@ -66,6 +69,8 @@ static UINT32 GPRS_ERRNO = 0;
#endif #endif
SF_SRCFILE_ATTR_S *pThumbFileCfg = NULL;
#if DIGITAL_PIR #if DIGITAL_PIR
const UINT8 PirDigtSensRegValue[3] = { 7, 9, 16 }; /*digital Level PIR: 7/9/16 -> reg:9/7/5*/ const UINT8 PirDigtSensRegValue[3] = { 7, 9, 16 }; /*digital Level PIR: 7/9/16 -> reg:9/7/5*/
#else /*analog PIR*/ #else /*analog PIR*/
@ -2006,6 +2011,62 @@ void sf_set_module_sleep_flag(UINT8 flag)
gModuleSleep = flag; gModuleSleep = flag;
} }
void sf_file_thumb_cfg_fill(char* filepath,char* fileName, UINT32 size, SF_FILE_TYPE_E enFileType)
{
if (pThumbFileCfg == NULL) {
pThumbFileCfg = malloc(sizeof(SF_SRCFILE_ATTR_S));
printf("%s:%d pThumbFileCfg malloc\n", __FUNCTION__, __LINE__);
}
if(pThumbFileCfg->filecnt >= SF_SRCFILE_MAX)
{
pThumbFileCfg->filecnt = 0;
}
sprintf(pThumbFileCfg->stfileattr[pThumbFileCfg->filecnt].thumbfilePath, "%s", filepath);
sprintf(pThumbFileCfg->stfileattr[pThumbFileCfg->filecnt].thumbfileName, "%s", fileName);
printf("sf_file_thumb_cfg_fill:enFileType:%d\n",enFileType);
pThumbFileCfg->stfileattr[pThumbFileCfg->filecnt].enFileTye = enFileType;
pThumbFileCfg->stfileattr[pThumbFileCfg->filecnt].thumbfileSize = size;
pThumbFileCfg->filecnt++;
}
void sf_file_thumb_cfg_set(SF_SRCFILE_ATTR_S *pThumbFileCfgl)
{
pThumbFileCfg = pThumbFileCfgl;
//memcpy(&pThumbFileCfg,pThumbFileCfgl,sizeof(pThumbFileCfg));
}
SF_SRCFILE_ATTR_S* sf_file_thumb_cfg_get(void)
{
return pThumbFileCfg;
}
void sf_file_thumb_cfg_clear(void)
{
pThumbFileCfg->filecnt = 0;
}
void sf_file_thumb_cfg_sava(void)
{
printf("%s:%d s\n", __FUNCTION__, __LINE__);
char tmp[64] = {'\0'};
snprintf(tmp, sizeof(tmp), "%s", SF_SD_THUMB_PATH);
if (FileSys_DeleteFile(tmp) != FST_STA_OK)
{
printf("%s:%d delete failed\n", __FUNCTION__, __LINE__);
}
FST_FILE fp = FileSys_OpenFile(tmp, FST_CREATE_ALWAYS | FST_OPEN_WRITE);
UINT32 size = sizeof(SF_SRCFILE_ATTR_S);
FileSys_WriteFile(fp, (UINT8*)pThumbFileCfg, &size, 0, NULL);
FileSys_CloseFile(fp);
free(pThumbFileCfg);
printf("%s:%d e\n", __FUNCTION__, __LINE__);
}
#if defined __FREERTOS #if defined __FREERTOS
int sf_mod_init(void) int sf_mod_init(void)

View File

@ -7,7 +7,7 @@
version-info = [00 01 00 01]; version-info = [00 01 00 01];
ae_expect_lum { ae_expect_lum {
size = [b0 00 00 00]; size = [b0 00 00 00];
data = [36 00 00 00 3c 00 00 00 32 00 00 00 31 00 00 00 31 00 00 00 31 00 00 00 31 00 00 00 31 00 00 00 31 00 00 00 31 00 00 00 31 00 00 00 31 00 00 00 31 00 00 00 4f 00 00 00 4f 00 00 00 4f 00 00 00 4f 00 00 00 4f 00 00 00 4f 00 00 00 4f 00 00 00 4f 00 00 00 4f 00 00 00 4f 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 3c 00 00 00 46 00 00 00 50 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00]; data = [3c 00 00 00 3c 00 00 00 44 00 00 00 44 00 00 00 44 00 00 00 44 00 00 00 44 00 00 00 44 00 00 00 44 00 00 00 44 00 00 00 44 00 00 00 44 00 00 00 44 00 00 00 52 00 00 00 52 00 00 00 52 00 00 00 52 00 00 00 52 00 00 00 52 00 00 00 52 00 00 00 52 00 00 00 52 00 00 00 52 00 00 00 32 00 00 00 32 00 00 00 32 00 00 00 32 00 00 00 32 00 00 00 32 00 00 00 32 00 00 00 32 00 00 00 3c 00 00 00 46 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00 5a 00 00 00];
}; };
ae_la_clamp { ae_la_clamp {
size = [50 01 00 00]; size = [50 01 00 00];
@ -15,7 +15,7 @@
}; };
ae_over_exposure { ae_over_exposure {
size = [b0 01 00 00]; size = [b0 01 00 00];
data = [01 00 00 00 8c 00 00 00 03 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 02 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00 06 00 00 00 07 00 00 00 08 00 00 00 09 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 05 00 00 00 07 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 04 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00]; data = [01 00 00 00 8c 00 00 00 03 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 64 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 02 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00 06 00 00 00 07 00 00 00 08 00 00 00 09 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 04 00 00 00 05 00 00 00 07 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 0a 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 04 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00 07 00 00 00];
}; };
ae_convergence { ae_convergence {
size = [2c 00 00 00]; size = [2c 00 00 00];
@ -27,7 +27,7 @@
}; };
ae_meter_window { ae_meter_window {
size = [00 01 00 00]; size = [00 01 00 00];
data = [01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 02 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 03 00 00 00 02 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 03 00 00 00 02 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 02 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 01 00 00 00 01 00 00 00]; data = [01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 03 00 00 00 02 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 03 00 00 00 02 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 04 00 00 00 03 00 00 00 02 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 02 00 00 00 01 00 00 00 01 00 00 00];
}; };
ae_lum_gamma { ae_lum_gamma {
size = [82 00 00 00]; size = [82 00 00 00];

File diff suppressed because one or more lines are too long