📄 mmidc_capture_wintab.c
字号:
PUBLIC void MMIDC_OpenCaptureWin(void)
{
MMK_CreateWin((uint32 *)MMIDC_SHOOTWIN_TAB, PNULL);
}
/*****************************************************************************/
// Description : close capture window
// Global resource dependence :
// Author: bruce.chi
// Note:
/*****************************************************************************/
PUBLIC void MMIDC_CloseCaptureWin(void)
{
if (MMK_IsOpenWin(MMIDC_SHOOT_WIN_ID))
{
MMK_CloseWin(MMIDC_SHOOT_WIN_ID);
}
}
/*****************************************************************************/
// Description : capture one photo
// Global resource dependence :
// Author: bruce.chi
// Note:
/*****************************************************************************/
LOCAL BOOLEAN CaptureOnePhoto(uint8 **jpg_ptr_ptr,
uint32 *jpg_len_ptr
)
{
static int s_protect_count = 0;
MMIDC_REVIEW_PHOTO_INFO_T st_review_info = {0};
int dc_status = 0;
MMIDC_SETTING_INFO_T *setting_ptr = PNULL;
RECT_T rect = {0};
//do capture
setting_ptr = MMIDC_GetSettingInfo();
if (!DCAdap_Capture(setting_ptr))
{
SCI_TRACE_LOW("mmidc_capture_wintab.c:HandleCaptureWinMsg, DCAdap_Capture error");
return FALSE;
}
//wait sometime to get data
s_protect_count = 0;
if(DCAdap_GetZoomLevel() == 0)
{
do
{
SCI_Sleep(200);
s_protect_count++;
if (s_protect_count >= 30)
{
break;
}
dc_status = DC_QueryStatus();
}while (((dc_status & DC_STATUS_ENCODE_DONE) == 0));
if (s_protect_count >= 30)
{
s_protect_count = 0;
return FALSE;
}
}
if(DCAdap_GetZoomLevel() > 0)
{
GetCapZoomTrimRect(setting_ptr->e_photo_size,&st_review_info.width,&st_review_info.height);
SCI_TRACE_LOW("GetCapZoomTrimRect: %d, %d", st_review_info.width,\
st_review_info.height);
}
s_protect_count = 0;
st_review_info.photo_ptr = DCAdap_MakeSnapshotData(&st_review_info.photo_len);
if (st_review_info.photo_ptr == PNULL || st_review_info.photo_len == 0)
{
return FALSE;
}
//review at once
st_review_info.e_review_from = PHOTO_REVIEW_FROM_CAPTURE;
st_review_info.e_review_type = REVIEW_WHOLE_PHOTO;
st_review_info.x_start = 0;
st_review_info.y_start = 0;
st_review_info.i_lcd = setting_ptr->e_lcd;
*jpg_ptr_ptr = st_review_info.photo_ptr;
*jpg_len_ptr = st_review_info.photo_len;
//draw background in lcd
if (setting_ptr->e_lcd == MAIN_LCD_ID)
{
DrawDefaultBackGroud(MAIN_LCD_ID);
}
else
{
DrawDefaultBackGroud(SUB_LCD_ID);
}
if (!MMIDC_ReviewPhoto(&st_review_info))
{
SCI_TRACE_LOW("mmidc_capture_wintab.c:HandleCaptureWinMsg, review failed");
return FALSE;
}
return TRUE;
}
/*****************************************************************************/
// Description : capture a photo
// Global resource dependence :
// Author: bruce.chi
// Note:
/*****************************************************************************/
PUBLIC BOOLEAN MMIDC_CaptureOnePhotoForOCR(uint8 **jpg_ptr_ptr,
uint32 *jpg_len_ptr
)
{
#ifdef _MMI_OCR
static int s_protect_count = 0;
MMIDC_REVIEW_PHOTO_INFO_T st_review_info = {0};
int dc_status = 0;
MMIDC_SETTING_INFO_T *setting_ptr = PNULL;
RECT_T rect = {0};
//do capture
setting_ptr = MMIDC_GetSettingInfo();
if (OCR_NONE_ERROR!=OCR_Capture(PNULL))
{
SCI_TRACE_LOW("mmidc_capture_wintab.c:OCR_Capture error");
return FALSE;
}
//wait sometime to get data
s_protect_count = 0;
do
{
SCI_Sleep(200);
s_protect_count++;
if (s_protect_count >= 30)
{
break;
}
dc_status = DC_QueryStatus();
}while (((dc_status & DC_STATUS_ENCODE_DONE) == 0));
if (s_protect_count >= 30)
{
s_protect_count = 0;
return FALSE;
}
s_protect_count = 0;
st_review_info.photo_ptr = OCR_GetYUVbuf(&st_review_info.photo_len);
SCI_TRACE_LOW("mmidc_capture_wintab.c:HandleCaptureWinMsg, enter OCR_GetYUVbuf");
if (st_review_info.photo_ptr == PNULL || st_review_info.photo_len == 0)
{ SCI_TRACE_LOW("mmidc_capture_wintab.c:review data is null.");
return FALSE;
}
//review at once
st_review_info.e_review_from = PHOTO_REVIEW_FROM_CAPTURE;
st_review_info.e_review_type = REVIEW_WHOLE_PHOTO;
st_review_info.x_start = 0;
st_review_info.y_start = 0;
st_review_info.i_lcd = setting_ptr->e_lcd;
*jpg_ptr_ptr = st_review_info.photo_ptr;
*jpg_len_ptr = st_review_info.photo_len;
//draw background in lcd
if (setting_ptr->e_lcd == MAIN_LCD_ID)
{
DrawDefaultBackGroud(MAIN_LCD_ID);
}
else
{
DrawDefaultBackGroud(SUB_LCD_ID);
}
if (!MMIDC_ReviewPhoto(&st_review_info))
{
SCI_TRACE_LOW("mmidc_capture_wintab.c:HandleCaptureWinMsg, review failed");
return FALSE;
}
else
{
DisplayCaptureWaitingStr(MAIN_LCD_ID);
}
return TRUE;
#else
return TRUE;
#endif
}
/*****************************************************************************/
// Description : draw waiting string when capture
// Global resource dependence :
// Author: bruce.chi
// Note:
/*****************************************************************************/
#define STRING_BACK_CR MMI_GREEN_COLOR
PUBLIC void DisplayCaptureWaitingStr(uint8 lcdID)
{
GUI_POINT_T st_start_point = {0};
MMI_STRING_T prompt_str = {0};
uint16 str_width = 0;
uint16 str_height = 0;
GUI_FONT_T font = MMI_DEFAULT_TEXT_FONT;
GUI_RECT_T rect = {0};
int i = 0, j = 0;
int32 screen_width = 0;
int32 screen_height = 0;
GUI_COLOR_T *lcd_buf_ptr = PNULL;
GUI_COLOR_T *p_buf = PNULL;
GUI_COLOR_T cr = 0;
LCD_INFO_T lcd_info = {0};
//get string, string width and height
MMI_GetLabelTextByLang(TXTSYS_WAITING, &prompt_str);
str_width = GUI_CalculateStringPiexlNum(
prompt_str.str_ptr,
prompt_str.length,
prompt_str.is_ucs2,
font,
0
);
str_height = GUI_GetFontHeight(font, prompt_str.is_ucs2);
//draw string in LCD buffer
if (lcdID == MAIN_LCD_ID)
{
#ifndef SC6600M_DVB_MMI
screen_width = MMIDC_MAINSCREEN_WIDTH;
screen_height = MMIDC_MAINSCREEN_HEIGHT;
#else
LCD_GetInfo(MAIN_LCD_ID, &lcd_info);
screen_width = lcd_info.lcd_width;
screen_height = lcd_info.lcd_height;
#endif
#ifdef WIN32
{
extern GUI_COLOR_T * s_mainlcdbuf_ptr;
lcd_buf_ptr = s_mainlcdbuf_ptr;
}
#else
lcd_buf_ptr = (GUI_COLOR_T *)LCD_GetLCDBuffer();
#endif
}
else
{
screen_width = MMI_SUBSCREEN_WIDTH;
screen_height = MMI_SUBSCREEN_HEIGHT;
#ifdef WIN32
{
GUI_SUBLCD_COLOR_T *s_sublcdbuf_ptr = PNULL;
lcd_buf_ptr = s_sublcdbuf_ptr;
}
#else
lcd_buf_ptr = (GUI_COLOR_T *)LCD_GetSubLCDBuffer();
#endif
}
st_start_point.x = (screen_width - str_width) / 2;
st_start_point.y = screen_height / 2;
rect.left = st_start_point.x;
rect.right = st_start_point.x + str_width;
rect.top = st_start_point.y;
rect.bottom = st_start_point.y + str_height;
LCD_FillRect(lcdID, rect, STRING_BACK_CR);
LCD_DisplayIdleString(
lcdID,
st_start_point,
prompt_str.str_ptr,
prompt_str.length,
0,
MMI_BLACK_COLOR,//MMI_WHITE_COLOR,
font,
prompt_str.is_ucs2,
0
);
//this is very important to invalidate the lcd right now and then forbid APP_Task to invalidate lcd
MMITHEME_SetUpdateDelayCount(0);
#if 0
//MMITHEME_UpdateRect();
LCD_InvalidateRect(
lcdID,
st_start_point.x,
st_start_point.y,
st_start_point.x + str_width,
st_start_point.y + str_height
);
#else
for (i = rect.top; i < rect.bottom; i++)
{
for (j = rect.left; j < rect.right; j++)
{
cr = lcd_buf_ptr[i * screen_width + j];
if (cr == STRING_BACK_CR)
{
//skip
}
else if ((cr == MMI_BLACK_COLOR) || (cr == MMI_WHITE_COLOR) )
{
LCD_InvalidateRect(
lcdID,
j,
i,
j,
i
);
}
}
}
#endif
}
/*****************************************************************************/
// Description : Handle_TP_Button_Register
//
// Global resource dependence :
// Author: bown.zhang
// Note:
/*****************************************************************************/
LOCAL void Handle_TP_Button_Register(MMI_WIN_ID_T win_id)
{
MMI_SPECIAL_BUTTON_T special_button_ok = {0};
MMI_SPECIAL_BUTTON_T special_button_cancel = {0};
MMI_RECT_T rect_ok = {0};
MMI_RECT_T rect_cancel = {0};
rect_ok.left = (MMI_MAINSCREEN_WIDTH - s_osd_char_disp_rect.w_width) / 2;
rect_ok.top = (MMI_MAINSCREEN_HEIGHT + s_osd_char_disp_rect.w_height) / 2 - MMIDC_CAPTURE_OK_TEXT_HEIGHT;
rect_ok.right = rect_ok.left + MMIDC_CAPTURE_OK_TEXT_WIDTH;
rect_ok.bottom = (MMI_MAINSCREEN_HEIGHT + s_osd_char_disp_rect.w_height) / 2;
rect_cancel.left = (MMI_MAINSCREEN_WIDTH + s_osd_char_disp_rect.w_width) / 2 - MMIDC_CAPTURE_CANCEL_TEXT_WIDTH;
rect_cancel.top = (MMI_MAINSCREEN_HEIGHT + s_osd_char_disp_rect.w_height) / 2 - MMIDC_CAPTURE_OK_TEXT_HEIGHT;
rect_cancel.right = (MMI_MAINSCREEN_WIDTH + s_osd_char_disp_rect.w_width) / 2;
rect_cancel.bottom = (MMI_MAINSCREEN_HEIGHT + s_osd_char_disp_rect.w_height) / 2;
//register * button
special_button_cancel.type = MMI_SPECIAL_RECT;
special_button_cancel.rect = rect_cancel;
special_button_cancel.callback_msg_id = MSG_APP_CANCEL;
MMK_SetSpecialButtonAction(win_id, &special_button_cancel);
//register = button
special_button_ok.type = MMI_SPECIAL_RECT;
special_button_ok.rect = rect_ok;
special_button_ok.callback_msg_id = MSG_APP_OK;
MMK_SetSpecialButtonAction(win_id, &special_button_ok);
}
#endif//_MMIDC_CAPTURE_WINTAB_C_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -