All of lore.kernel.org
 help / color / mirror / Atom feed
From: Stanimir Varbanov <stanimir.varbanov@linaro.org>
To: Mauro Carvalho Chehab <mchehab@kernel.org>,
	Hans Verkuil <hverkuil@xs4all.nl>
Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-arm-msm@vger.kernel.org,
	Vikash Garodia <vgarodia@codeaurora.org>,
	Stanimir Varbanov <stanimir.varbanov@linaro.org>
Subject: [PATCH v2 29/29] venus: add HEVC codec support
Date: Tue, 15 May 2018 10:58:59 +0300	[thread overview]
Message-ID: <20180515075859.17217-30-stanimir.varbanov@linaro.org> (raw)
In-Reply-To: <20180515075859.17217-1-stanimir.varbanov@linaro.org>

This add HEVC codec support for venus versions 3xx and 4xx.

Signed-off-by: Stanimir Varbanov <stanimir.varbanov@linaro.org>
---
 drivers/media/platform/qcom/venus/core.h    |  2 ++
 drivers/media/platform/qcom/venus/helpers.c |  3 ++
 drivers/media/platform/qcom/venus/hfi.c     |  2 ++
 drivers/media/platform/qcom/venus/vdec.c    |  4 +++
 drivers/media/platform/qcom/venus/venc.c    | 49 +++++++++++++++++++++++++++++
 5 files changed, 60 insertions(+)

diff --git a/drivers/media/platform/qcom/venus/core.h b/drivers/media/platform/qcom/venus/core.h
index 85e66e2dd672..2a956d1b9bd1 100644
--- a/drivers/media/platform/qcom/venus/core.h
+++ b/drivers/media/platform/qcom/venus/core.h
@@ -185,10 +185,12 @@ struct venc_controls {
 		u32 mpeg4;
 		u32 h264;
 		u32 vpx;
+		u32 hevc;
 	} profile;
 	struct {
 		u32 mpeg4;
 		u32 h264;
+		u32 hevc;
 	} level;
 };
 
diff --git a/drivers/media/platform/qcom/venus/helpers.c b/drivers/media/platform/qcom/venus/helpers.c
index 87dcf9973e6f..fecadba039cf 100644
--- a/drivers/media/platform/qcom/venus/helpers.c
+++ b/drivers/media/platform/qcom/venus/helpers.c
@@ -71,6 +71,9 @@ bool venus_helper_check_codec(struct venus_inst *inst, u32 v4l2_pixfmt)
 	case V4L2_PIX_FMT_XVID:
 		codec = HFI_VIDEO_CODEC_DIVX;
 		break;
+	case V4L2_PIX_FMT_HEVC:
+		codec = HFI_VIDEO_CODEC_HEVC;
+		break;
 	default:
 		return false;
 	}
diff --git a/drivers/media/platform/qcom/venus/hfi.c b/drivers/media/platform/qcom/venus/hfi.c
index 94ca27b0bb99..24207829982f 100644
--- a/drivers/media/platform/qcom/venus/hfi.c
+++ b/drivers/media/platform/qcom/venus/hfi.c
@@ -49,6 +49,8 @@ static u32 to_codec_type(u32 pixfmt)
 		return HFI_VIDEO_CODEC_VP9;
 	case V4L2_PIX_FMT_XVID:
 		return HFI_VIDEO_CODEC_DIVX;
+	case V4L2_PIX_FMT_HEVC:
+		return HFI_VIDEO_CODEC_HEVC;
 	default:
 		return 0;
 	}
diff --git a/drivers/media/platform/qcom/venus/vdec.c b/drivers/media/platform/qcom/venus/vdec.c
index d2d082009686..d2ffd9bd44de 100644
--- a/drivers/media/platform/qcom/venus/vdec.c
+++ b/drivers/media/platform/qcom/venus/vdec.c
@@ -77,6 +77,10 @@ static const struct venus_format vdec_formats[] = {
 		.pixfmt = V4L2_PIX_FMT_XVID,
 		.num_planes = 1,
 		.type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE,
+	}, {
+		.pixfmt = V4L2_PIX_FMT_HEVC,
+		.num_planes = 1,
+		.type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE,
 	},
 };
 
diff --git a/drivers/media/platform/qcom/venus/venc.c b/drivers/media/platform/qcom/venus/venc.c
index a703bce78abc..50a04cb1cc22 100644
--- a/drivers/media/platform/qcom/venus/venc.c
+++ b/drivers/media/platform/qcom/venus/venc.c
@@ -59,6 +59,10 @@ static const struct venus_format venc_formats[] = {
 		.pixfmt = V4L2_PIX_FMT_VP8,
 		.num_planes = 1,
 		.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE,
+	}, {
+		.pixfmt = V4L2_PIX_FMT_HEVC,
+		.num_planes = 1,
+		.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE,
 	},
 };
 
@@ -220,6 +224,46 @@ static int venc_v4l2_to_hfi(int id, int value)
 		case V4L2_MPEG_VIDEO_H264_LOOP_FILTER_MODE_DISABLED_AT_SLICE_BOUNDARY:
 			return HFI_H264_DB_MODE_SKIP_SLICE_BOUNDARY;
 		}
+	case V4L2_CID_MPEG_VIDEO_HEVC_PROFILE:
+		switch (value) {
+		case V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN:
+		default:
+			return HFI_HEVC_PROFILE_MAIN;
+		case V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_STILL_PICTURE:
+			return HFI_HEVC_PROFILE_MAIN_STILL_PIC;
+		case V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_10:
+			return HFI_HEVC_PROFILE_MAIN10;
+		}
+	case V4L2_CID_MPEG_VIDEO_HEVC_LEVEL:
+		switch (value) {
+		case V4L2_MPEG_VIDEO_HEVC_LEVEL_1:
+		default:
+			return HFI_HEVC_LEVEL_1;
+		case V4L2_MPEG_VIDEO_HEVC_LEVEL_2:
+			return HFI_HEVC_LEVEL_2;
+		case V4L2_MPEG_VIDEO_HEVC_LEVEL_2_1:
+			return HFI_HEVC_LEVEL_21;
+		case V4L2_MPEG_VIDEO_HEVC_LEVEL_3:
+			return HFI_HEVC_LEVEL_3;
+		case V4L2_MPEG_VIDEO_HEVC_LEVEL_3_1:
+			return HFI_HEVC_LEVEL_31;
+		case V4L2_MPEG_VIDEO_HEVC_LEVEL_4:
+			return HFI_HEVC_LEVEL_4;
+		case V4L2_MPEG_VIDEO_HEVC_LEVEL_4_1:
+			return HFI_HEVC_LEVEL_41;
+		case V4L2_MPEG_VIDEO_HEVC_LEVEL_5:
+			return HFI_HEVC_LEVEL_5;
+		case V4L2_MPEG_VIDEO_HEVC_LEVEL_5_1:
+			return HFI_HEVC_LEVEL_51;
+		case V4L2_MPEG_VIDEO_HEVC_LEVEL_5_2:
+			return HFI_HEVC_LEVEL_52;
+		case V4L2_MPEG_VIDEO_HEVC_LEVEL_6:
+			return HFI_HEVC_LEVEL_6;
+		case V4L2_MPEG_VIDEO_HEVC_LEVEL_6_1:
+			return HFI_HEVC_LEVEL_61;
+		case V4L2_MPEG_VIDEO_HEVC_LEVEL_6_2:
+			return HFI_HEVC_LEVEL_62;
+		}
 	}
 
 	return 0;
@@ -744,6 +788,11 @@ static int venc_set_properties(struct venus_inst *inst)
 	} else if (inst->fmt_cap->pixfmt == V4L2_PIX_FMT_H263) {
 		profile = 0;
 		level = 0;
+	} else if (inst->fmt_cap->pixfmt == V4L2_PIX_FMT_HEVC) {
+		profile = venc_v4l2_to_hfi(V4L2_CID_MPEG_VIDEO_HEVC_PROFILE,
+					   ctr->profile.hevc);
+		level = venc_v4l2_to_hfi(V4L2_CID_MPEG_VIDEO_HEVC_LEVEL,
+					 ctr->level.hevc);
 	}
 
 	ptype = HFI_PROPERTY_PARAM_PROFILE_LEVEL_CURRENT;
-- 
2.14.1

  parent reply	other threads:[~2018-05-15  7:58 UTC|newest]

Thread overview: 68+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-05-15  7:58 [PATCH v2 00/29] Venus updates Stanimir Varbanov
2018-05-15  7:58 ` [PATCH v2 01/29] venus: hfi_msgs: correct pointer increment Stanimir Varbanov
2018-05-18  8:57   ` Tomasz Figa
2018-05-15  7:58 ` [PATCH v2 02/29] venus: hfi: preparation to support venus 4xx Stanimir Varbanov
2018-05-18  9:44   ` Tomasz Figa
2018-05-21 14:25     ` Stanimir Varbanov
2018-05-15  7:58 ` [PATCH v2 03/29] venus: hfi: update sequence event to handle more properties Stanimir Varbanov
2018-05-18 13:53   ` Tomasz Figa
2018-05-21 14:31     ` Stanimir Varbanov
2018-05-15  7:58 ` [PATCH v2 04/29] venus: hfi_cmds: add set_properties for 4xx version Stanimir Varbanov
2018-05-18 14:16   ` Tomasz Figa
2018-05-21 14:53     ` Stanimir Varbanov
2018-05-15  7:58 ` [PATCH v2 05/29] venus: hfi: support session continue " Stanimir Varbanov
2018-05-15  7:58 ` [PATCH v2 06/29] venus: hfi: handle buffer output2 type as well Stanimir Varbanov
2018-05-15  7:58 ` [PATCH v2 07/29] venus: hfi_venus: add halt AXI support for Venus 4xx Stanimir Varbanov
2018-05-18 14:23   ` Tomasz Figa
2018-05-21 12:17     ` Stanimir Varbanov
2018-05-15  7:58 ` [PATCH v2 08/29] venus: hfi_venus: fix suspend function for venus 3xx versions Stanimir Varbanov
2018-05-18 15:14   ` Tomasz Figa
2018-05-21 12:18     ` Stanimir Varbanov
2018-05-15  7:58 ` [PATCH v2 09/29] venus: hfi_venus: move set of default properties to core init Stanimir Varbanov
2018-05-15  7:58 ` [PATCH v2 10/29] venus: hfi_venus: add suspend functionality for Venus 4xx Stanimir Varbanov
2018-05-15  7:58 ` [PATCH v2 11/29] venus: venc,vdec: adds clocks needed for venus 4xx Stanimir Varbanov
2018-05-24  6:11   ` Tomasz Figa
2018-05-28  8:47     ` Stanimir Varbanov
2018-05-31  6:50       ` Tomasz Figa
2018-05-15  7:58 ` [PATCH v2 12/29] venus: add common capability parser Stanimir Varbanov
2018-05-24 14:16   ` Tomasz Figa
2018-05-30 16:21     ` Stanimir Varbanov
2018-05-31  7:06       ` Tomasz Figa
2018-07-02  9:23         ` Tomasz Figa
2018-07-02  9:59           ` Stanimir Varbanov
2018-07-02 10:05             ` Tomasz Figa
2018-07-02 11:00               ` Stanimir Varbanov
2018-07-05  9:45               ` Stanimir Varbanov
2018-07-05 10:14                 ` Tomasz Figa
2018-05-15  7:58 ` [PATCH v2 13/29] venus: helpers: make a commmon function for power_enable Stanimir Varbanov
2018-05-31  7:34   ` Tomasz Figa
2018-05-15  7:58 ` [PATCH v2 14/29] venus: core: delete not used flag for buffer mode Stanimir Varbanov
2018-05-15  7:58 ` [PATCH v2 15/29] venus: helpers: rename a helper function and use buffer mode from caps Stanimir Varbanov
2018-05-31  7:59   ` Tomasz Figa
2018-05-31  8:23     ` Stanimir Varbanov
2018-05-15  7:58 ` [PATCH v2 16/29] venus: add a helper function to set dynamic buffer mode Stanimir Varbanov
2018-05-31  8:56   ` Tomasz Figa
2018-05-15  7:58 ` [PATCH v2 17/29] venus: add helper function to set actual buffer size Stanimir Varbanov
2018-05-15  7:58 ` [PATCH v2 18/29] venus: delete no longer used bufmode flag from instance Stanimir Varbanov
2018-05-15  7:58 ` [PATCH v2 19/29] venus: helpers: add buffer type argument to a helper Stanimir Varbanov
2018-05-15  7:58 ` [PATCH v2 20/29] venus: helpers: add a new helper to set raw format Stanimir Varbanov
2018-05-15  7:58 ` [PATCH v2 21/29] venus: helpers,vdec,venc: add helpers to set work mode and core usage Stanimir Varbanov
2018-05-15  7:58 ` [PATCH v2 22/29] venus: helpers: extend set_num_bufs helper with one more argument Stanimir Varbanov
2018-05-15  7:58 ` [PATCH v2 23/29] venus: helpers: add a helper to return opb buffer sizes Stanimir Varbanov
2018-05-31  9:20   ` Tomasz Figa
2018-05-15  7:58 ` [PATCH v2 24/29] venus: vdec: get required input buffers as well Stanimir Varbanov
2018-05-15  7:58 ` [PATCH v2 25/29] venus: vdec: new function for output configuration Stanimir Varbanov
2018-05-31  9:27   ` Tomasz Figa
2018-05-15  7:58 ` [PATCH v2 26/29] venus: move frame size calculations in common place Stanimir Varbanov
2018-05-15  7:58 ` [PATCH v2 27/29] venus: implementing multi-stream support Stanimir Varbanov
2018-05-15  8:17   ` Hans Verkuil
2018-05-15  9:40     ` Stanimir Varbanov
2018-05-18 10:00   ` [PATCH v3 " Stanimir Varbanov
2018-05-31  9:51   ` [PATCH v2 " Tomasz Figa
2018-07-02  9:30     ` Tomasz Figa
2018-07-02 12:43     ` Stanimir Varbanov
2018-07-02 12:52       ` Tomasz Figa
2018-05-15  7:58 ` [PATCH v2 28/29] venus: add sdm845 compatible and resource data Stanimir Varbanov
2018-05-15  7:58 ` Stanimir Varbanov [this message]
2018-05-15  8:19 ` [PATCH v2 00/29] Venus updates Hans Verkuil
2018-05-31  9:55 ` Tomasz Figa

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180515075859.17217-30-stanimir.varbanov@linaro.org \
    --to=stanimir.varbanov@linaro.org \
    --cc=hverkuil@xs4all.nl \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=mchehab@kernel.org \
    --cc=vgarodia@codeaurora.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.