📄 usbvideo_cam_if.c
字号:
RESZ_Close(scene_id);
//clean_imgprc_coefficient(scene_id);
IMGPROC_Stop(scene_id);
IMGPROC_Close(scene_id);
stop_image_dma(scene_id);
IMGDMA_Close(scene_id);
deinit_working_mem();
#elif (defined(MT6228)||defined(MT6229)||defined(MT6230))
close_image_data_path(scene_id);
#endif
jpeg_encoder_operation_state=JPEG_ENCODER_STANDBY_STATE;
if((usbvideo_cam_operation_state==USBVIDEO_CAM_OFF_STATE) ||
(usbvideo_cam_operation_state==USBVIDEO_CAM_STANDBY_STATE))
return;
if(usbvideo_complete_flag==KAL_TRUE)
{
if(usbvideo_cam_operation_state==USBVIDEO_CAM_PREVIEW_CHECK_STATE)
USBVideo_Complete_Video_Buffer(g_usbvideo_cam_buff, jpeg_file_size, time, g_usbvideo_cam_size);
else if(usbvideo_cam_operation_state==USBVIDEO_CAM_CAPTURE_STATE)
USBVideo_Complete_Still_Buffer(g_usbvideo_cam_buff, jpeg_file_size, time, g_usbvideo_cam_size);
}
// GetNext?
if(usbvideo_cam_operation_state==USBVIDEO_CAM_PREVIEW_CHECK_STATE)
{
/* Get Next USB Video Buffer */
g_usbvideo_cam_buff = USBVideo_Get_Video_Buffer();
if(g_usbvideo_cam_buff!=NULL)
{
#if (defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227))
#if (defined(MT6219))
if(ae_count==camera_oper_data.ae_setting_gain_delay_frame)
ENABLE_AE_COUNT;
#else
if((REG_ISP_INT_ENABLE & REG_CAMERA_INT_FLASH_DONE_ENABLE_BIT)== 0)
{ // For use Frame Ready interrupt sensor modules
if(ae_count==camera_oper_data.ae_setting_gain_delay_frame)
ENABLE_AE_COUNT;
}
#endif
/* Update desc buff addr */
init_working_mem();
g_usbvideo_camera_data.target_buffer_start_address = (kal_uint32) g_usbvideo_cam_buff;
jpeg_encode_config_data.jpeg_file_start_address=g_usbvideo_camera_data.target_buffer_start_address;
mp4_reset();
config_image_dma(scene_id,g_usbvideo_camera_data.target_width,g_usbvideo_camera_data.target_height);
config_jpeg_encoder(&jpeg_encode_config_data);
config_image_processor(scene_id);
config_pixel_resizer(scene_id);
#elif (defined(MT6228)||defined(MT6229)||defined(MT6230))
ENABLE_CMOS_SESNOR;
#if (defined(MT6228))
if((REG_ISP_INT_ENABLE & REG_CAMERA_INT_VSYNC_ENABLE_BIT)== 0)
{ // For use Frame Ready interrupt sensor modules
if(ae_count==camera_oper_data.ae_setting_gain_delay_frame)
ENABLE_AE_COUNT;
}
#else
if((REG_ISP_INT_ENABLE & REG_CAMERA_INT_FLASH_DONE_ENABLE_BIT)== 0)
{ // For use Frame Ready interrupt sensor modules
if(ae_count==camera_oper_data.ae_setting_gain_delay_frame)
ENABLE_AE_COUNT;
}
#endif
g_usbvideo_camera_data.target_buffer_start_address = (kal_uint32) g_usbvideo_cam_buff;
ipp_capture_jpeg_data.jpeg_file_start_address1=g_usbvideo_camera_data.target_buffer_start_address;
open_image_data_path(scene_id);
config_camera_usbvideo_jpeg_data_path(scene_id,&ipp_capture_jpeg_data);
#endif
// Update effect
usbvideo_camera_update_attr();
usbvideo_cam_operation_state = USBVIDEO_CAM_PREVIEW_CHECK_STATE;
jpeg_encoder_encode_result=0;
SET_CAMERA_CAPTURE_MODE;
ENABLE_VIEW_FINDER_MODE;
}
else // Exit USB or Stop Preview
usbvideo_cam_operation_state = USBVIDEO_CAM_STANDBY_STATE;
}
else
{
usbvideo_cam_operation_state = USBVIDEO_CAM_STANDBY_STATE;
}
}
/*************************************************************************
* Init / Update Attribute for ISP
*************************************************************************/
void usbvideo_camera_init_attr(void)
{
kal_uint32 i;
for (i=0;i<GET_ATTR_PU_IDX(USBVIDEO_ATTRIBUTE_PU_MAX);i++)
{
usbvideo_attr_PU_value_list[i] = USBVIDEO_ATTR_PARA.attr_info[i].def;
}
/* CT Part , Fix(Default) Attributes */
usbvideo_cam_command_CT_map[GET_ATTR_CT_IDX(USBVIDEO_ATTRIBUTE_FOCAL_MIN)] = USBVIDEO_CAM_ATTR_FIX;
usbvideo_cam_command_CT_map[GET_ATTR_CT_IDX(USBVIDEO_ATTRIBUTE_FOCAL_MAX)] = USBVIDEO_CAM_ATTR_FIX;
usbvideo_cam_command_CT_map[GET_ATTR_CT_IDX(USBVIDEO_ATTRIBUTE_FOCAL_LENGTH)] = USBVIDEO_CAM_ATTR_FIX;
}
kal_uint8 usbvideo_camera_update_attr(void)
{
kal_uint32 i;
for (i=0;i<GET_ATTR_PU_IDX(USBVIDEO_ATTRIBUTE_PU_MAX);i++)
{
if(usbvideo_cam_command_PU_map[i]==USBVIDEO_CAM_ATTR_ISP)
usbvideo_attr_setting_PU_index |= (1<<i);
}
usbvideo_camera_effect_background_setting_attr();
return KAL_TRUE;
}
/*************************************************************************
* Set / Get Attribute for ISP
*************************************************************************/
void usbvideo_camera_effect_background_setting_attr(void)
{
kal_uint32 i;
kal_uint32 attr_value;
for (i=0;i<GET_ATTR_PU_IDX(USBVIDEO_ATTRIBUTE_PU_MAX);i++)
{
if (usbvideo_attr_setting_PU_index & (1<<i))
{
attr_value = usbvideo_attr_PU_value_list[i];
if(usbvideo_cam_command_PU_map[i] == USBVIDEO_CAM_ATTR_ISP)
{
switch (i)
{
case GET_ATTR_PU_IDX(USBVIDEO_ATTRIBUTE_CONTRAST):
#if (defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227))
adjustment_brightness_contrast_para(scene_id,
usbvideo_attr_PU_value_list[GET_ATTR_PU_IDX(USBVIDEO_ATTRIBUTE_BRIGHTNESS)],
attr_value);
#elif (defined(MT6228)||defined(MT6229)||defined(MT6230))
isp_contrast_setting(attr_value+1); /*ISP Range: 0~128, WEBCAM Range 0~255*/
#endif
break;
case GET_ATTR_PU_IDX(USBVIDEO_ATTRIBUTE_BRIGHTNESS):
#if (defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227))
adjustment_brightness_contrast_para(scene_id,
attr_value,
usbvideo_attr_PU_value_list[GET_ATTR_PU_IDX(USBVIDEO_ATTRIBUTE_CONTRAST)]);
#elif (defined(MT6228)||defined(MT6229)||defined(MT6230))
isp_bright_setting(attr_value); /*ISP Range: 0~255, WEBCAM Range 0~255*/
#endif
break;
case GET_ATTR_PU_IDX(USBVIDEO_ATTRIBUTE_SATURATION):
#if (defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227))
adjustment_saturation_para(scene_id,attr_value);
#elif (defined(MT6228)||defined(MT6229)||defined(MT6230))
SET_HUE_U_GAIN(((attr_value+1)/128)*0x20); /*ISP Default: 0x20*/
SET_HUE_V_GAIN(((attr_value+1)/128)*0x20);
#endif
break;
case GET_ATTR_PU_IDX(USBVIDEO_ATTRIBUTE_HUE_AUTO):
#if (defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227))
if(attr_value>0)
adjustment_hue_para(scene_id, 0);
#elif (defined(MT6228)||defined(MT6229)||defined(MT6230))
if(attr_value>0)
disable_adjustment_isp_hue_para();
#endif
break;
case GET_ATTR_PU_IDX(USBVIDEO_ATTRIBUTE_HUE):
#if (defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227))
if(usbvideo_attr_PU_value_list[GET_ATTR_PU_IDX(USBVIDEO_ATTRIBUTE_HUE_AUTO)]==0)
adjustment_hue_para(scene_id, attr_value);
#elif (defined(MT6228)||defined(MT6229)||defined(MT6230))
if(usbvideo_attr_PU_value_list[GET_ATTR_PU_IDX(USBVIDEO_ATTRIBUTE_HUE_AUTO)]==0)
adjustment_isp_hue_para(attr_value);
#endif
break;
case GET_ATTR_PU_IDX(USBVIDEO_ATTRIBUTE_POWER_LINE_FREQUENCY):
if(attr_value==1) /* 50Hz */
ae_select_band(CAM_BANDING_50HZ);
else /* 60Hz or Disable */
ae_select_band(CAM_BANDING_60HZ);
break;
case GET_ATTR_PU_IDX(USBVIDEO_ATTRIBUTE_SHARPNESS):
if(attr_value==0)
{
DISABLE_Y_EDGE;
}
else
{
ENABLE_Y_EDGE;
SET_Y_EDGE_GAIN(attr_value);
}
break;
case GET_ATTR_PU_IDX(USBVIDEO_ATTRIBUTE_GAMMA):
if(attr_value==100)
{
SET_GAMMA_B1(USBVIDEO_GAMMA_ATTR[0][0]);
SET_GAMMA_B2(USBVIDEO_GAMMA_ATTR[0][1]);
SET_GAMMA_B3(USBVIDEO_GAMMA_ATTR[0][2]);
SET_GAMMA_B4(USBVIDEO_GAMMA_ATTR[0][3]);
SET_GAMMA_B5(USBVIDEO_GAMMA_ATTR[0][4]);
SET_GAMMA_B6(USBVIDEO_GAMMA_ATTR[0][5]);
SET_GAMMA_B7(USBVIDEO_GAMMA_ATTR[0][6]);
SET_GAMMA_B8(USBVIDEO_GAMMA_ATTR[0][7]);
SET_GAMMA_B9(USBVIDEO_GAMMA_ATTR[0][8]);
SET_GAMMA_B10(USBVIDEO_GAMMA_ATTR[0][9]);
SET_GAMMA_B11(USBVIDEO_GAMMA_ATTR[0][10]);
}
else if(attr_value==160)
{
SET_GAMMA_B1(USBVIDEO_GAMMA_ATTR[1][0]);
SET_GAMMA_B2(USBVIDEO_GAMMA_ATTR[1][1]);
SET_GAMMA_B3(USBVIDEO_GAMMA_ATTR[1][2]);
SET_GAMMA_B4(USBVIDEO_GAMMA_ATTR[1][3]);
SET_GAMMA_B5(USBVIDEO_GAMMA_ATTR[1][4]);
SET_GAMMA_B6(USBVIDEO_GAMMA_ATTR[1][5]);
SET_GAMMA_B7(USBVIDEO_GAMMA_ATTR[1][6]);
SET_GAMMA_B8(USBVIDEO_GAMMA_ATTR[1][7]);
SET_GAMMA_B9(USBVIDEO_GAMMA_ATTR[1][8]);
SET_GAMMA_B10(USBVIDEO_GAMMA_ATTR[1][9]);
SET_GAMMA_B11(USBVIDEO_GAMMA_ATTR[1][10]);
}
else if(attr_value==220)
{
SET_GAMMA_B1(USBVIDEO_GAMMA_ATTR[2][0]);
SET_GAMMA_B2(USBVIDEO_GAMMA_ATTR[2][1]);
SET_GAMMA_B3(USBVIDEO_GAMMA_ATTR[2][2]);
SET_GAMMA_B4(USBVIDEO_GAMMA_ATTR[2][3]);
SET_GAMMA_B5(USBVIDEO_GAMMA_ATTR[2][4]);
SET_GAMMA_B6(USBVIDEO_GAMMA_ATTR[2][5]);
SET_GAMMA_B7(USBVIDEO_GAMMA_ATTR[2][6]);
SET_GAMMA_B8(USBVIDEO_GAMMA_ATTR[2][7]);
SET_GAMMA_B9(USBVIDEO_GAMMA_ATTR[2][8]);
SET_GAMMA_B10(USBVIDEO_GAMMA_ATTR[2][9]);
SET_GAMMA_B11(USBVIDEO_GAMMA_ATTR[2][10]);
}
break;
case GET_ATTR_PU_IDX(USBVIDEO_ATTRIBUTE_BACKLIGHT_COMPENSATION):
ae_set_ev(attr_value);
break;
case GET_ATTR_PU_IDX(USBVIDEO_ATTRIBUTE_WHITE_BALANCE_TMP_AUTO):
if(attr_value>0)
awb_on_off(KAL_TRUE);
else
awb_on_off(KAL_FALSE);
break;
case GET_ATTR_PU_IDX(USBVIDEO_ATTRIBUTE_WHITE_BALANCE_TMP):
if(usbvideo_attr_PU_value_list[GET_ATTR_PU_IDX(USBVIDEO_ATTRIBUTE_WHITE_BALANCE_TMP_AUTO)] == 0 )
{
if(attr_value>5800)
awb_set_manual_gain(CAM_WB_DAYLIGHT);
else if(attr_value>=4800)
awb_set_manual_gain(CAM_WB_INCANDESCENCE);
else if(attr_value>=3800)
awb_set_manual_gain(CAM_WB_FLUORESCENT);
else if(attr_value>=2800)
awb_set_manual_gain(CAM_WB_TUNGSTEN);
awb_set_gain();
}
break;
case GET_ATTR_PU_IDX(USBVIDEO_ATTRIBUTE_WHITE_BALANCE_COMP_AUTO):
if(attr_value>0)
awb_on_off(KAL_TRUE);
else
awb_on_off(KAL_FALSE);
break;
/* May Not Support*/
case GET_ATTR_PU_IDX(USBVIDEO_ATTRIBUTE_WHITE_BALANCE_COMP):
break;
case GET_ATTR_PU_IDX(USBVIDEO_ATTRIBUTE_GAIN):
break;
case GET_ATTR_PU_IDX(USBVIDEO_ATTRIBUTE_DIGITAL_MULTIPLIER):
break;
case GET_ATTR_PU_IDX(USBVIDEO_ATTRIBUTE_DIGITAL_MULTIPLIER_LIMIT):
break;
default:
break;
}
}
usbvideo_attr_setting_PU_index &=~(1<<i);
}
}
}
kal_uint8 usbvideo_camera_effect_setting_attr(USBVideo_Attr_Value *attr)
{
USBVIDEO_ATTRIBUTE_TYPE attr_type = attr->type;
kal_uint32 attr_value = attr->value;
// update attr PU current value
if(attr_type>USBVIDEO_ATTRIBUTE_CT_MAX)
{
usbvideo_attr_PU_value_list[GET_ATTR_PU_IDX(attr_type)] = attr_value;
usbvideo_attr_setting_PU_index |= 1<<GET_ATTR_PU_IDX(attr_type);
}
return KAL_TRUE;
}
kal_uint8 usbvideo_camera_effect_getting_attr(USBVideo_Attr_Value *attr)
{
USBVIDEO_ATTRIBUTE_TYPE attr_type = attr->type;
if(attr_type>USBVIDEO_ATTRIBUTE_CT_MAX)
{
switch(attr->req_type)
{
case USBVIDEO_REQUEST_GET_CUR:
attr->value = usbvideo_attr_PU_value_list[GET_ATTR_PU_IDX(attr_type)];
break;
case USBVIDEO_REQUEST_GET_MIN:
attr->value = USBVIDEO_ATTR_PARA.attr_info[GET_ATTR_PU_IDX(attr->type)].min;
break;
case USBVIDEO_REQUEST_GET_MAX:
attr->value = USBVIDEO_ATTR_PARA.attr_info[GET_ATTR_PU_IDX(attr->type)].max;
break;
case USBVIDEO_REQUEST_GET_DEF:
attr->value = USBVIDEO_ATTR_PARA.attr_info[GET_ATTR_PU_IDX(attr->type)].def;
break;
case USBVIDEO_REQUEST_GET_RES:
attr->value = USBVIDEO_ATTR_PARA.attr_info[GET_ATTR_PU_IDX(attr->type)].res;
break;
default:
EXT_ASSERT(0, (kal_uint32)attr->req_type, 0, 0);
break;
}
return KAL_TRUE;
}
else // CT Part
{
return KAL_FALSE;
}
}
#endif // END_OF_WEBCAM_SUPPORT
#endif // END_OF_ISP_SUPPORT
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -