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

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
...@@ -608,6 +608,8 @@ static u32 to_hfi_raw_fmt(u32 v4l2_fmt) ...@@ -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;
} }
......
...@@ -31,6 +31,10 @@ ...@@ -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) ...@@ -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) ...@@ -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 = { ...@@ -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);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment