Commit 9593126d authored by Stanimir Varbanov's avatar Stanimir Varbanov Committed by Mauro Carvalho Chehab
Browse files

media: venus: Add a handling of QC08C compressed format



This adds QC08C compressed pixel format in the Venus driver, and
make it possible to discover from v4l2 clients.

Signed-off-by: default avatarStanimir Varbanov <stanimir.varbanov@linaro.org>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@kernel.org>
parent fc00086e
Loading
Loading
Loading
Loading
+2 −0
Original line number Original line Diff line number Diff line
@@ -608,6 +608,8 @@ static u32 to_hfi_raw_fmt(u32 v4l2_fmt)
		return HFI_COLOR_FORMAT_NV12;
		return HFI_COLOR_FORMAT_NV12;
	case V4L2_PIX_FMT_NV21:
	case V4L2_PIX_FMT_NV21:
		return HFI_COLOR_FORMAT_NV21;
		return HFI_COLOR_FORMAT_NV21;
	case V4L2_PIX_FMT_QC08C:
		return HFI_COLOR_FORMAT_NV12_UBWC;
	default:
	default:
		break;
		break;
	}
	}
+15 −3
Original line number Original line Diff line number Diff line
@@ -31,6 +31,10 @@
 */
 */
static const struct venus_format vdec_formats[] = {
static const struct venus_format vdec_formats[] = {
	{
	{
		.pixfmt = V4L2_PIX_FMT_QC08C,
		.num_planes = 1,
		.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE,
	}, {
		.pixfmt = V4L2_PIX_FMT_NV12,
		.pixfmt = V4L2_PIX_FMT_NV12,
		.num_planes = 1,
		.num_planes = 1,
		.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE,
		.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE,
@@ -106,6 +110,10 @@ find_format(struct venus_inst *inst, u32 pixfmt, u32 type)
	    !venus_helper_check_codec(inst, fmt[i].pixfmt))
	    !venus_helper_check_codec(inst, fmt[i].pixfmt))
		return NULL;
		return NULL;


	if (V4L2_TYPE_IS_CAPTURE(type) &&
	    !venus_helper_check_format(inst, fmt[i].pixfmt))
		return NULL;

	return &fmt[i];
	return &fmt[i];
}
}


@@ -124,8 +132,12 @@ find_format_by_index(struct venus_inst *inst, unsigned int index, u32 type)


		if (fmt[i].type != type)
		if (fmt[i].type != type)
			continue;
			continue;
		valid = type != V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE ||

			venus_helper_check_codec(inst, fmt[i].pixfmt);
		if (V4L2_TYPE_IS_OUTPUT(type))
			valid = venus_helper_check_codec(inst, fmt[i].pixfmt);
		else if (V4L2_TYPE_IS_CAPTURE(type))
			valid = venus_helper_check_format(inst, fmt[i].pixfmt);

		if (k == index && valid)
		if (k == index && valid)
			break;
			break;
		if (valid)
		if (valid)
@@ -1527,7 +1539,7 @@ static const struct hfi_inst_ops vdec_hfi_ops = {
static void vdec_inst_init(struct venus_inst *inst)
static void vdec_inst_init(struct venus_inst *inst)
{
{
	inst->hfi_codec = HFI_VIDEO_CODEC_H264;
	inst->hfi_codec = HFI_VIDEO_CODEC_H264;
	inst->fmt_out = &vdec_formats[6];
	inst->fmt_out = &vdec_formats[7];
	inst->fmt_cap = &vdec_formats[0];
	inst->fmt_cap = &vdec_formats[0];
	inst->width = frame_width_min(inst);
	inst->width = frame_width_min(inst);
	inst->height = ALIGN(frame_height_min(inst), 32);
	inst->height = ALIGN(frame_height_min(inst), 32);