コード例 #1
0
/* This can be moved to graphic layer's callback function */
static void mxr_set_layer_src_fmt(struct sub_mxr_device *sub_mxr, u32 pad)
{
	/* sink pad number and array index of layer are same */
	struct mxr_layer *layer = sub_mxr->layer[pad];
	struct v4l2_mbus_framefmt *fmt = &sub_mxr->mbus_fmt[pad];
	u32 fourcc;

	switch (fmt->code) {
	case V4L2_MBUS_FMT_RGB444_2X8_PADHI_BE:
	case V4L2_MBUS_FMT_RGB444_2X8_PADHI_LE:
		fourcc = V4L2_PIX_FMT_RGB444;
		break;
	case V4L2_MBUS_FMT_RGB555_2X8_PADHI_BE:
	case V4L2_MBUS_FMT_RGB555_2X8_PADHI_LE:
		fourcc = V4L2_PIX_FMT_RGB555;
		break;
	case V4L2_MBUS_FMT_RGB565_2X8_BE:
	case V4L2_MBUS_FMT_RGB565_2X8_LE:
		fourcc = V4L2_PIX_FMT_RGB565;
		break;
	case V4L2_MBUS_FMT_XRGB8888_4X8_LE:
		fourcc = V4L2_PIX_FMT_BGR32;
		break;
	}
	/* This will be applied to hardware right after streamon */
	layer->fmt = find_format_by_fourcc(layer, fourcc);
}
コード例 #2
0
static int mxr_s_fmt(struct file *file, void *priv,
	struct v4l2_format *f)
{
	struct mxr_layer *layer = video_drvdata(file);
	const struct mxr_format *fmt;
	struct v4l2_pix_format_mplane *pix;
	struct mxr_device *mdev = layer->mdev;
	struct mxr_geometry *geo = &layer->geo;

	mxr_dbg(mdev, "%s:%d\n", __func__, __LINE__);

	pix = &f->fmt.pix_mp;
	fmt = find_format_by_fourcc(layer, pix->pixelformat);
	if (fmt == NULL) {
		mxr_warn(mdev, "not recognized fourcc: %08x\n",
			pix->pixelformat);
		return -EINVAL;
	}
	layer->fmt = fmt;
	geo->src.full_width = pix->width;
	geo->src.width = pix->width;
	geo->src.full_height = pix->height;
	geo->src.height = pix->height;
	/* assure consistency of geometry */
	mxr_layer_geo_fix(layer);
	mxr_dbg(mdev, "width=%u height=%u span=%u\n",
		geo->src.width, geo->src.height, geo->src.full_width);

	return 0;
}