コード例 #1
0
int jpeg_set_enc_param(struct jpeg_control *ctrl)
{
	if (ctrl) {
		jpeg_sw_reset(ctrl->reg_base);
	} else {
		jpeg_err("jpeg ctrl is NULL\n");
		return -1;
	}

	jpeg_set_clk_power_on(ctrl->reg_base);
	jpeg_set_mode(ctrl->reg_base, 0);
	jpeg_set_enc_in_fmt(ctrl->reg_base, ctrl->enc_param.in_fmt);
	jpeg_set_enc_out_fmt(ctrl->reg_base, ctrl->enc_param.out_fmt);
	jpeg_set_enc_dri(ctrl->reg_base, 2);
	jpeg_set_frame_size(ctrl->reg_base,
		ctrl->enc_param.width, ctrl->enc_param.height);
	jpeg_set_stream_buf(&ctrl->mem.stream_data_addr, ctrl->mem.base);
	jpeg_set_stream_addr(ctrl->reg_base, ctrl->mem.stream_data_addr);
	jpeg_set_frame_buf(&ctrl->mem.frame_data_addr, ctrl->mem.base);
	jpeg_set_frame_addr(ctrl->reg_base, ctrl->mem.frame_data_addr);
	jpeg_set_enc_coef(ctrl->reg_base);
	jpeg_set_enc_qtbl(ctrl->reg_base, ctrl->enc_param.quality);
	jpeg_set_enc_htbl(ctrl->reg_base);

	return 0;
}
コード例 #2
0
ファイル: jpeg_dev.c プロジェクト: Ante0/xxICSKernel
static void jpeg_device_enc_run(void *priv)
{
	struct jpeg_ctx *ctx = priv;
	struct jpeg_dev *dev = ctx->dev;
	struct jpeg_enc_param enc_param;
	struct vb2_buffer *vb = NULL;
	unsigned long flags;

	dev = ctx->dev;
	spin_lock_irqsave(&ctx->dev->slock, flags);

	dev->mode = ENCODING;
	enc_param = ctx->param.enc_param;

	jpeg_sw_reset(dev->reg_base);
	jpeg_set_interrupt(dev->reg_base);
	jpeg_set_huf_table_enable(dev->reg_base, 1);
	jpeg_set_enc_tbl(dev->reg_base);
	jpeg_set_encode_tbl_select(dev->reg_base, enc_param.quality);
	jpeg_set_stream_size(dev->reg_base,
		enc_param.in_width, enc_param.in_height);
	jpeg_set_enc_out_fmt(dev->reg_base, enc_param.out_fmt);
	jpeg_set_enc_in_fmt(dev->reg_base, enc_param.in_fmt);
	vb = v4l2_m2m_next_dst_buf(ctx->m2m_ctx);
	jpeg_set_stream_buf_address(dev->reg_base, dev->vb2->plane_addr(vb, 0));

	vb = v4l2_m2m_next_src_buf(ctx->m2m_ctx);
	if (enc_param.in_plane == 1)
		jpeg_set_frame_buf_address(dev->reg_base,
			enc_param.in_fmt, dev->vb2->plane_addr(vb, 0), 0, 0);
	if (enc_param.in_plane == 2)
		jpeg_set_frame_buf_address(dev->reg_base,
			enc_param.in_fmt, dev->vb2->plane_addr(vb, 0),
			dev->vb2->plane_addr(vb, 1), 0);
	if (enc_param.in_plane == 3)
		jpeg_set_frame_buf_address(dev->reg_base,
			enc_param.in_fmt, dev->vb2->plane_addr(vb, 0),
			dev->vb2->plane_addr(vb, 1), dev->vb2->plane_addr(vb, 2));

	jpeg_set_encode_hoff_cnt(dev->reg_base, enc_param.out_fmt);

	jpeg_set_enc_dec_mode(dev->reg_base, ENCODING);

	spin_unlock_irqrestore(&ctx->dev->slock, flags);
}