⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cpia2_core.c

📁 V4l driver for DVB HD
💻 C
📖 第 1 页 / 共 5 页
字号:
		    (u8) (((STV_IMAGE_QCIF_ROWS / 4) - (height / 4)) / 2);	else		cmd.buffer.registers[i++].value =		    (u8) (((STV_IMAGE_CIF_ROWS / 4) - (height / 4)) / 2);	/* Scaling registers (defaults) */	cmd.buffer.registers[i].index = CPIA2_VC_VC_HPHASE;	cmd.buffer.registers[i++].value = (u8) 0;	cmd.buffer.registers[i].index = CPIA2_VC_VC_VPHASE;	cmd.buffer.registers[i++].value = (u8) 0;	cmd.buffer.registers[i].index = CPIA2_VC_VC_HISPAN;	cmd.buffer.registers[i++].value = (u8) 31;	cmd.buffer.registers[i].index = CPIA2_VC_VC_VISPAN;	cmd.buffer.registers[i++].value = (u8) 31;	cmd.buffer.registers[i].index = CPIA2_VC_VC_HICROP;	cmd.buffer.registers[i++].value = (u8) 0;	cmd.buffer.registers[i].index = CPIA2_VC_VC_VICROP;	cmd.buffer.registers[i++].value = (u8) 0;	cmd.buffer.registers[i].index = CPIA2_VC_VC_HFRACT;	cmd.buffer.registers[i++].value = (u8) 0x81;	/* = 8/1 = 8 (HIBYTE/LOBYTE) */	cmd.buffer.registers[i].index = CPIA2_VC_VC_VFRACT;	cmd.buffer.registers[i++].value = (u8) 0x81;	/* = 8/1 = 8 (HIBYTE/LOBYTE) */	cmd.reg_count = i;	cpia2_send_command(cam, &cmd);	return i;}/****************************************************************************** * *  config_sensor_500(cam) * *****************************************************************************/static int config_sensor_500(struct camera_data *cam,			     int req_width, int req_height){	struct cpia2_command cmd;	int i = 0;	int image_size = VIDEOSIZE_CIF;	int image_type = VIDEOSIZE_VGA;	int width = req_width;	int height = req_height;	unsigned int device = cam->params.pnp_id.device_type;	image_size = cpia2_match_video_size(width, height);	if (width > STV_IMAGE_CIF_COLS || height > STV_IMAGE_CIF_ROWS)		image_type = VIDEOSIZE_VGA;	else if (width > STV_IMAGE_QVGA_COLS || height > STV_IMAGE_QVGA_ROWS)		image_type = VIDEOSIZE_CIF;	else if (width > STV_IMAGE_QCIF_COLS || height > STV_IMAGE_QCIF_ROWS)		image_type = VIDEOSIZE_QVGA;	else		image_type = VIDEOSIZE_QCIF;	if (image_size >= 0) {		set_vw_size(cam, image_size);		width = cam->params.roi.width;		height = cam->params.roi.height;	} else {		ERR("ConfigSensor500 failed\n");		return -EINVAL;	}	DBG("image_size = %d, width = %d, height = %d, type = %d\n",	    image_size, width, height, image_type);	cmd.req_mode = CAMERAACCESS_TYPE_RANDOM | CAMERAACCESS_VC;	cmd.direction = TRANSFER_WRITE;	i = 0;	/* VC Format */	cmd.buffer.registers[i].index = CPIA2_VC_VC_FORMAT;	cmd.buffer.registers[i].value = (u8) CPIA2_VC_VC_FORMAT_UFIRST;	if (image_type == VIDEOSIZE_QCIF)		cmd.buffer.registers[i].value |= (u8) CPIA2_VC_VC_FORMAT_DECIMATING;	i++;	/* VC Clocks */	cmd.buffer.registers[i].index = CPIA2_VC_VC_CLOCKS;	if (device == DEVICE_STV_672) {		if (image_type == VIDEOSIZE_VGA)			cmd.buffer.registers[i].value =				(u8)CPIA2_VC_VC_CLOCKS_LOGDIV1;		else			cmd.buffer.registers[i].value =				(u8)(CPIA2_VC_VC_672_CLOCKS_SCALING |				     CPIA2_VC_VC_CLOCKS_LOGDIV3);	} else {		if (image_type == VIDEOSIZE_VGA)			cmd.buffer.registers[i].value =				(u8)CPIA2_VC_VC_CLOCKS_LOGDIV0;		else			cmd.buffer.registers[i].value =				(u8)(CPIA2_VC_VC_676_CLOCKS_SCALING |				     CPIA2_VC_VC_CLOCKS_LOGDIV2);	}	i++;	DBG("VC_CLOCKS = 0x%X\n", cmd.buffer.registers[i-1].value);	/* Input width from VP */	cmd.buffer.registers[i].index = CPIA2_VC_VC_IHSIZE_LO;	if (image_type == VIDEOSIZE_VGA)		cmd.buffer.registers[i].value =		    (u8) (STV_IMAGE_VGA_COLS / 4);	else		cmd.buffer.registers[i].value =		    (u8) (STV_IMAGE_QVGA_COLS / 4);	i++;	DBG("Input width = %d\n", cmd.buffer.registers[i-1].value);	/* Timings */	cmd.buffer.registers[i].index = CPIA2_VC_VC_XLIM_HI;	if (image_type == VIDEOSIZE_VGA)		cmd.buffer.registers[i++].value = (u8) 2;	else		cmd.buffer.registers[i++].value = (u8) 1;	cmd.buffer.registers[i].index = CPIA2_VC_VC_XLIM_LO;	if (image_type == VIDEOSIZE_VGA)		cmd.buffer.registers[i++].value = (u8) 250;	else if (image_type == VIDEOSIZE_QVGA)		cmd.buffer.registers[i++].value = (u8) 125;	else		cmd.buffer.registers[i++].value = (u8) 160;	cmd.buffer.registers[i].index = CPIA2_VC_VC_YLIM_HI;	if (image_type == VIDEOSIZE_VGA)		cmd.buffer.registers[i++].value = (u8) 2;	else		cmd.buffer.registers[i++].value = (u8) 1;	cmd.buffer.registers[i].index = CPIA2_VC_VC_YLIM_LO;	if (image_type == VIDEOSIZE_VGA)		cmd.buffer.registers[i++].value = (u8) 12;	else if (image_type == VIDEOSIZE_QVGA)		cmd.buffer.registers[i++].value = (u8) 64;	else		cmd.buffer.registers[i++].value = (u8) 6;	/* Output Image Size */	cmd.buffer.registers[i].index = CPIA2_VC_VC_OHSIZE;	if (image_type == VIDEOSIZE_QCIF)		cmd.buffer.registers[i++].value = STV_IMAGE_CIF_COLS  / 4;	else		cmd.buffer.registers[i++].value = width / 4;	cmd.buffer.registers[i].index = CPIA2_VC_VC_OVSIZE;	if (image_type == VIDEOSIZE_QCIF)		cmd.buffer.registers[i++].value = STV_IMAGE_CIF_ROWS  / 4;	else		cmd.buffer.registers[i++].value = height / 4;	/* Cropping */	cmd.buffer.registers[i].index = CPIA2_VC_VC_HCROP;	if (image_type == VIDEOSIZE_VGA)		cmd.buffer.registers[i++].value =		    (u8) (((STV_IMAGE_VGA_COLS / 4) - (width / 4)) / 2);	else if (image_type == VIDEOSIZE_QVGA)		cmd.buffer.registers[i++].value =		    (u8) (((STV_IMAGE_QVGA_COLS / 4) - (width / 4)) / 2);	else if (image_type == VIDEOSIZE_CIF)		cmd.buffer.registers[i++].value =		    (u8) (((STV_IMAGE_CIF_COLS / 4) - (width / 4)) / 2);	else /*if (image_type == VIDEOSIZE_QCIF)*/		cmd.buffer.registers[i++].value =			(u8) (((STV_IMAGE_QCIF_COLS / 4) - (width / 4)) / 2);	cmd.buffer.registers[i].index = CPIA2_VC_VC_VCROP;	if (image_type == VIDEOSIZE_VGA)		cmd.buffer.registers[i++].value =		    (u8) (((STV_IMAGE_VGA_ROWS / 4) - (height / 4)) / 2);	else if (image_type == VIDEOSIZE_QVGA)		cmd.buffer.registers[i++].value =		    (u8) (((STV_IMAGE_QVGA_ROWS / 4) - (height / 4)) / 2);	else if (image_type == VIDEOSIZE_CIF)		cmd.buffer.registers[i++].value =		    (u8) (((STV_IMAGE_CIF_ROWS / 4) - (height / 4)) / 2);	else /*if (image_type == VIDEOSIZE_QCIF)*/		cmd.buffer.registers[i++].value =		    (u8) (((STV_IMAGE_QCIF_ROWS / 4) - (height / 4)) / 2);	/* Scaling registers (defaults) */	cmd.buffer.registers[i].index = CPIA2_VC_VC_HPHASE;	if (image_type == VIDEOSIZE_CIF || image_type == VIDEOSIZE_QCIF)		cmd.buffer.registers[i++].value = (u8) 36;	else		cmd.buffer.registers[i++].value = (u8) 0;	cmd.buffer.registers[i].index = CPIA2_VC_VC_VPHASE;	if (image_type == VIDEOSIZE_CIF || image_type == VIDEOSIZE_QCIF)		cmd.buffer.registers[i++].value = (u8) 32;	else		cmd.buffer.registers[i++].value = (u8) 0;	cmd.buffer.registers[i].index = CPIA2_VC_VC_HISPAN;	if (image_type == VIDEOSIZE_CIF || image_type == VIDEOSIZE_QCIF)		cmd.buffer.registers[i++].value = (u8) 26;	else		cmd.buffer.registers[i++].value = (u8) 31;	cmd.buffer.registers[i].index = CPIA2_VC_VC_VISPAN;	if (image_type == VIDEOSIZE_CIF || image_type == VIDEOSIZE_QCIF)		cmd.buffer.registers[i++].value = (u8) 21;	else		cmd.buffer.registers[i++].value = (u8) 31;	cmd.buffer.registers[i].index = CPIA2_VC_VC_HICROP;	cmd.buffer.registers[i++].value = (u8) 0;	cmd.buffer.registers[i].index = CPIA2_VC_VC_VICROP;	cmd.buffer.registers[i++].value = (u8) 0;	cmd.buffer.registers[i].index = CPIA2_VC_VC_HFRACT;	if (image_type == VIDEOSIZE_CIF || image_type == VIDEOSIZE_QCIF)		cmd.buffer.registers[i++].value = (u8) 0x2B;	/* 2/11 */	else		cmd.buffer.registers[i++].value = (u8) 0x81;	/* 8/1 */	cmd.buffer.registers[i].index = CPIA2_VC_VC_VFRACT;	if (image_type == VIDEOSIZE_CIF || image_type == VIDEOSIZE_QCIF)		cmd.buffer.registers[i++].value = (u8) 0x13;	/* 1/3 */	else		cmd.buffer.registers[i++].value = (u8) 0x81;	/* 8/1 */	cmd.reg_count = i;	cpia2_send_command(cam, &cmd);	return i;}/****************************************************************************** * *  setallproperties * *  This sets all user changeable properties to the values in cam->params. *****************************************************************************/int set_all_properties(struct camera_data *cam){	/**	 * Don't set target_kb here, it will be set later.	 * framerate and user_mode were already set (set_default_user_mode).	 **/	cpia2_set_color_params(cam);	cpia2_usb_change_streaming_alternate(cam,					  cam->params.camera_state.stream_mode);	cpia2_do_command(cam, CPIA2_CMD_SET_USER_EFFECTS, TRANSFER_WRITE,			 cam->params.vp_params.user_effects);	cpia2_set_flicker_mode(cam,			       cam->params.flicker_control.flicker_mode_req);	cpia2_do_command(cam,			 CPIA2_CMD_SET_VC_MP_GPIO_DIRECTION,			 TRANSFER_WRITE, cam->params.vp_params.gpio_direction);	cpia2_do_command(cam, CPIA2_CMD_SET_VC_MP_GPIO_DATA, TRANSFER_WRITE,			 cam->params.vp_params.gpio_data);	wake_system(cam);	set_lowlight_boost(cam);	return 0;}/****************************************************************************** * *  cpia2_save_camera_state * *****************************************************************************/void cpia2_save_camera_state(struct camera_data *cam){	get_color_params(cam);	cpia2_do_command(cam, CPIA2_CMD_GET_USER_EFFECTS, TRANSFER_READ, 0);	cpia2_do_command(cam, CPIA2_CMD_GET_VC_MP_GPIO_DIRECTION, TRANSFER_READ,			 0);	cpia2_do_command(cam, CPIA2_CMD_GET_VC_MP_GPIO_DATA, TRANSFER_READ, 0);	/* Don't get framerate or target_kb. Trust the values we already have */}/****************************************************************************** * *  get_color_params * *****************************************************************************/void get_color_params(struct camera_data *cam){	cpia2_do_command(cam, CPIA2_CMD_GET_VP_BRIGHTNESS, TRANSFER_READ, 0);	cpia2_do_command(cam, CPIA2_CMD_GET_VP_SATURATION, TRANSFER_READ, 0);	cpia2_do_command(cam, CPIA2_CMD_GET_CONTRAST, TRANSFER_READ, 0);}/****************************************************************************** * *  cpia2_set_color_params * *****************************************************************************/void cpia2_set_color_params(struct camera_data *cam){	DBG("Setting color params\n");	cpia2_set_brightness(cam, cam->params.color_params.brightness);	cpia2_set_contrast(cam, cam->params.color_params.contrast);	cpia2_set_saturation(cam, cam->params.color_params.saturation);}/****************************************************************************** * *  cpia2_set_flicker_mode * *****************************************************************************/int cpia2_set_flicker_mode(struct camera_data *cam, int mode){	unsigned char cam_reg;	int err = 0;	if(cam->params.pnp_id.device_type != DEVICE_STV_672)		return -EINVAL;	/* Set the appropriate bits in FLICKER_MODES, preserving the rest */	if((err = cpia2_do_command(cam, CPIA2_CMD_GET_FLICKER_MODES,				   TRANSFER_READ, 0)))		return err;	cam_reg = cam->params.flicker_control.cam_register;	switch(mode) {	case NEVER_FLICKER:		cam_reg |= CPIA2_VP_FLICKER_MODES_NEVER_FLICKER;		cam_reg &= ~CPIA2_VP_FLICKER_MODES_50HZ;		break;	case FLICKER_60:		cam_reg &= ~CPIA2_VP_FLICKER_MODES_NEVER_FLICKER;		cam_reg &= ~CPIA2_VP_FLICKER_MODES_50HZ;		break;	case FLICKER_50:		cam_reg &= ~CPIA2_VP_FLICKER_MODES_NEVER_FLICKER;		cam_reg |= CPIA2_VP_FLICKER_MODES_50HZ;		break;	default:		return -EINVAL;	}	if((err = cpia2_do_command(cam, CPIA2_CMD_SET_FLICKER_MODES,				   TRANSFER_WRITE, cam_reg)))		return err;	/* Set the appropriate bits in EXP_MODES, preserving the rest */	if((err = cpia2_do_command(cam, CPIA2_CMD_GET_VP_EXP_MODES,				   TRANSFER_READ, 0)))		return err;	cam_reg = cam->params.vp_params.exposure_modes;	if (mode == NEVER_FLICKER) {		cam_reg |= CPIA2_VP_EXPOSURE_MODES_INHIBIT_FLICKER;	} else {		cam_reg &= ~CPIA2_VP_EXPOSURE_MODES_INHIBIT_FLICKER;	}	if((err = cpia2_do_command(cam, CPIA2_CMD_SET_VP_EXP_MODES,				   TRANSFER_WRITE, cam_reg)))		return err;	if((err = cpia2_do_command(cam, CPIA2_CMD_REHASH_VP4,				   TRANSFER_WRITE, 1)))		return err;	switch(mode) {	case NEVER_FLICKER:		cam->params.flicker_control.flicker_mode_req = mode;		break;	case FLICKER_60:		cam->params.flicker_control.flicker_mode_req = mode;		cam->params.flicker_control.mains_frequency = 60;		break;	case FLICKER_50:		cam->params.flicker_control.flicker_mode_req = mode;		cam->params.flicker_control.mains_frequency = 50;		break;	default:		err = -EINVAL;	}	return err;}/****************************************************************************** * *  cpia2_set_property_flip * *****************************************************************************/void cpia2_set_property_flip(struct camera_data *cam, int prop_val){	unsigned char cam_reg;	cpia2_do_command(cam, CPIA2_CMD_GET_USER_EFFECTS, TRANSFER_READ, 0);	cam_reg = cam->params.vp_params.user_effects;	if (prop_val)	{		cam_reg |= CPIA2_VP_USER_EFFECTS_FLIP;	}	else	{		cam_reg &= ~CPIA2_VP_USER_EFFECTS_FLIP;	}	cpia2_do_command(cam, CPIA2_CMD_SET_USER_EFFECTS, TRANSFER_WRITE,

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -