Esempio n. 1
0
bool _s5p_vlayer_set_dest_size(unsigned long buf_in)
{
	u32 s_w = 0;
	u32 s_h = 0;
	u32 d_w = 0;
	u32 d_h = 0;
	bool ipc = false;

	s5p_img_size *size = (s5p_img_size *)buf_in;
	s5p_tv_vp_err verr;

	s5ptv_status.vl_basic_param.dest_width = size->img_width;
	s5ptv_status.vl_basic_param.dest_height = size->img_height;
	_s5p_vlayer_calc_inner_values();

	s_w = s5ptv_status.vl_src_width;
	s_h = s5ptv_status.vl_src_height;
	d_w = s5ptv_status.vl_dest_width;
	d_h = s5ptv_status.vl_dest_height;
	ipc = s5ptv_status.vl2d_ipc;

	if (_s5p_vlayer_wait_previous_update())
		return false;

	__s5p_vp_set_src_dest_size(s_w, s_h, d_w, d_h, ipc);

	verr = __s5p_vp_update();

	if (verr != VPROC_NO_ERROR)
		return false;

	return true;
}
Esempio n. 2
0
bool _s5p_vlayer_set_dest_position(unsigned long buf_in)
{
	u32 d_ox = 0;
	u32 d_oy = 0;
	s5p_img_offset *offset = (s5p_img_offset *)buf_in;
	s5p_tv_vp_err verr;

	s5ptv_status.vl_basic_param.dest_offset_x = offset->offset_x;
	s5ptv_status.vl_basic_param.dest_offset_y = offset->offset_y;
	_s5p_vlayer_calc_inner_values();

	d_ox = s5ptv_status.vl_dest_offset_x;
	d_oy = s5ptv_status.vl_dest_offset_y;

	if (_s5p_vlayer_wait_previous_update())
		return false;

	__s5p_vp_set_dest_position(d_ox, d_oy);

	verr = __s5p_vp_update();

	if (verr != VPROC_NO_ERROR)
		return false;

	return true;
}
bool _s5p_vlayer_set_src_position(unsigned long buf_in)
{
	struct s5p_img_offset *offset = (struct s5p_img_offset *)buf_in;
	enum s5p_tv_vp_err verr;

	s5ptv_status.vl_basic_param.src_offset_x = offset->offset_x;
	s5ptv_status.vl_basic_param.src_offset_y = offset->offset_y;
	_s5p_vlayer_calc_inner_values();

	if (_s5p_vlayer_wait_previous_update())
		return false;


	__s5p_vp_set_src_position(s5ptv_status.vl_src_offset_x,
				  s5ptv_status.vl_src_x_fact_step,
				  s5ptv_status.vl_src_offset_y);

	verr = __s5p_vp_update();

	if (verr != VPROC_NO_ERROR)
		return false;


	return true;
}
bool _s5p_vlayer_set_bottom_address(unsigned long buf_in)
{
	u32 t_y_addr = 0;
	u32 t_c_addr = 0;
	u32 b_y_addr = 0;
	u32 b_c_addr = 0;

	u32 img_width = s5ptv_status.vl_basic_param.img_width;

	struct s5p_video_img_address *addr =
		(struct s5p_video_img_address *)buf_in;
	enum s5p_tv_vp_err verr;
	enum s5p_vp_src_color s_color = s5ptv_status.src_color;

	if (s_color == VPROC_SRC_COLOR_NV12IW) {
		s5ptv_status.vl_basic_param.top_y_address =
			addr->y_address - img_width;
		s5ptv_status.vl_basic_param.top_c_address =
			addr->c_address - img_width;
	}

	_s5p_vlayer_calc_inner_values();

	t_y_addr = s5ptv_status.vl_top_y_address;
	t_c_addr = s5ptv_status.vl_top_c_address;
	b_y_addr = s5ptv_status.vl_bottom_y_address;
	b_c_addr = s5ptv_status.vl_bottom_c_address;

	if (_s5p_vlayer_wait_previous_update())
		return false;

	verr = __s5p_vp_set_bottom_field_address(b_y_addr, b_c_addr);

	if (verr != VPROC_NO_ERROR)
		return false;


	if (s5ptv_status.src_color == VPROC_SRC_COLOR_NV12IW) {
		verr = __s5p_vp_set_top_field_address(t_y_addr, t_c_addr);

		if (verr != VPROC_NO_ERROR)
			return false;

	}

	verr = __s5p_vp_update();

	if (verr != VPROC_NO_ERROR)
		return false;


	return true;
}
bool _s5p_vlayer_set_top_address(unsigned long buf_in)
{
	u32 t_y_addr = 0;
	u32 t_c_addr = 0;
	u32 b_y_addr = 0;
	u32 b_c_addr = 0;

	struct s5p_video_img_address *addr =
		(struct s5p_video_img_address *)buf_in;
	enum s5p_tv_vp_err verr;

	s5ptv_status.vl_basic_param.top_y_address = addr->y_address;
	s5ptv_status.vl_basic_param.top_c_address = addr->c_address;

	_s5p_vlayer_calc_inner_values();

	t_y_addr = s5ptv_status.vl_top_y_address;
	t_c_addr = s5ptv_status.vl_top_c_address;
	b_y_addr = s5ptv_status.vl_bottom_y_address;
	b_c_addr = s5ptv_status.vl_bottom_c_address;

	if (_s5p_vlayer_wait_previous_update())
		return false;


	verr = __s5p_vp_set_top_field_address(t_y_addr, t_c_addr);

	if (verr != VPROC_NO_ERROR)
		return false;


	if (check_input_mode(s5ptv_status.src_color) == INTERLACED) {
		__s5p_vp_set_field_id(s5ptv_status.field_id);
		verr = __s5p_vp_set_bottom_field_address(b_y_addr, b_c_addr);

		if (verr != VPROC_NO_ERROR)
			return false;
	}

	verr = __s5p_vp_update();

	if (verr != VPROC_NO_ERROR)
		return false;

	return true;
}
Esempio n. 6
0
bool _s5p_vlayer_init_param(unsigned long buf_in)
{
	s5p_tv_status *st = &s5ptv_status;

	bool i_mode, o_mode; /* 0 for interlaced, 1 for progressive */

	switch (st->tvout_param.disp_mode) {

	case TVOUT_480P_60_16_9:

	case TVOUT_480P_60_4_3:

	case TVOUT_576P_50_16_9:

	case TVOUT_576P_50_4_3:

#ifdef CONFIG_CPU_S5PV210
	case TVOUT_480P_59:
		st->vl_csc_type = VPROC_CSC_SD_HD;
		break;

	case TVOUT_1080I_50:

	case TVOUT_1080I_60:

	case TVOUT_1080P_50:

	case TVOUT_1080P_30:

	case TVOUT_1080P_60:

	case TVOUT_720P_59:

	case TVOUT_1080I_59:

	case TVOUT_1080P_59:
#endif
	case TVOUT_720P_50:

	case TVOUT_720P_60:
		st->vl_csc_type = VPROC_CSC_HD_SD;
		break;

	default:
		break;
	}

	st->vl_csc_control.csc_en = false;


	i_mode = check_input_mode(st->src_color);
	o_mode = check_output_mode(st->tvout_param.disp_mode,
				st->tvout_param.out_mode);

	/* check o_mode */
	if (i_mode == INTERLACED) {
		/* i to i : line skip 1, ipc 0, auto toggle 0 */
		if (o_mode == INTERLACED) {
			st->vl_op_mode.line_skip = true;
			st->vl2d_ipc 		 = false;
			st->vl_op_mode.toggle_id = false;
		} else {
		/* i to p : line skip 1, ipc 1, auto toggle 0 */
			st->vl_op_mode.line_skip = true;
			st->vl2d_ipc 		 = true;
			st->vl_op_mode.toggle_id = false;
		}
	} else {
		/* p to i : line skip 1, ipc 0, auto toggle 0 */
		if (o_mode == INTERLACED) {
			st->vl_op_mode.line_skip = true;
			st->vl2d_ipc 		 = false;
			st->vl_op_mode.toggle_id = false;
		} else {
		/* p to p : line skip 0, ipc 0, auto toggle 0 */
			st->vl_op_mode.line_skip = false;
			st->vl2d_ipc 		 = false;
			st->vl_op_mode.toggle_id = false;
		}
	}

	st->vl_op_mode.mem_mode = ((st->src_color == VPROC_SRC_COLOR_NV12) ||
				st->src_color == VPROC_SRC_COLOR_NV12IW) ?
				VPROC_LINEAR_MODE : VPROC_2D_TILE_MODE;
/*
	st->vl_op_mode.chroma_exp = (pro) ? VPROC_USING_C_TOP
				: VPROC_USING_C_TOP_BOTTOM;
*/
	st->vl_op_mode.chroma_exp = 0; /* use only top y addr */

	_s5p_vlayer_calc_inner_values();

	if (st->vl_mode) {
		VLAYERPRINTK("(ERR) : Default values are already updated\n\r");
		return true;
	}

	/* Initialize Video Layer Parameters to Default Values */
	st->vl_src_x_fact_step = 0;
	st->field_id = VPROC_TOP_FIELD;
	st->vl_rate = VPROC_PIXEL_PER_RATE_1_1;
	st->vl_poly_filter_default = true;
	st->vl_bypass_post_process = false;
	st->vl_saturation = 0x80;
	st->vl_sharpness.th_noise = 0;
	st->vl_sharpness.sharpness = VPROC_SHARPNESS_NO;
	st->us_vl_brightness = 0x00;
	st->vl_contrast = 0x80;
	st->vl_bright_offset = 0x00;
	st->vl_csc_control.sub_y_offset_en = false;
	st->vl_csc_coef_default = true;
	st->vl_bc_control[0].eq_num = VProc_LINE_EQ_7 + 1;
	st->vl_bc_control[1].eq_num = VProc_LINE_EQ_7 + 1;
	st->vl_bc_control[2].eq_num = VProc_LINE_EQ_7 + 1;
	st->vl_bc_control[3].eq_num = VProc_LINE_EQ_7 + 1;
	st->vl_bc_control[4].eq_num = VProc_LINE_EQ_7 + 1;
	st->vl_bc_control[5].eq_num = VProc_LINE_EQ_7 + 1;
	st->vl_bc_control[6].eq_num = VProc_LINE_EQ_7 + 1;
	st->vl_bc_control[7].eq_num = VProc_LINE_EQ_7 + 1;
	st->vl_mode = true;

	return true;
}