Received: by 2002:ac0:a581:0:0:0:0:0 with SMTP id m1-v6csp6598634imm; Wed, 27 Jun 2018 10:04:17 -0700 (PDT) X-Google-Smtp-Source: ADUXVKJTa+owblYnnR0VBoL6ADNoZQkFe+qJNm+lNlE6xrlOYT3tLz1Q9rtyobk6nfgnVhKEyBQK X-Received: by 2002:a17:902:42c3:: with SMTP id h61-v6mr6954703pld.319.1530119057189; Wed, 27 Jun 2018 10:04:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1530119057; cv=none; d=google.com; s=arc-20160816; b=tQOpj8gE1Qn2lImUcpD6YdeJqecfzkPZwX3sloFh4x9d+8ep1QLk/JyXu87fZZxJ1S p5wls6UgKVU4772gM1U539rNtXdTsnPLmmBrgmPDuMFLDTMSiPiuTrHuP7rNS2Z8vT3T OdNa4a17x42gKEgommFZS9m0LW8tTNkm9T7wWBheO93Ge6laq3NX7yRnVt0U8Mkt1Vzv PPVc2eOGfXmO3TmIJaHgvbrAvob6b/Wo/5Td2g05i9GRu2gCil73ZexwBDpi7HzF6YXU w0Qf50O9HMhp6wNyC5MuP02+yjTsXQGdzW5MTSMaAy+oiPlHOZqggkHJeoGbEU5YUKWS pbWQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature:arc-authentication-results; bh=jaIrs4Hlkn8/hSfPKZPaW9B0la4YriBdsqxKyEKBPSU=; b=wVV1BEybwZFhIJwGDiM05yNDRjGIzGgkVNR84tDuMeTwgH042/0wy4UItUyGC2SquM yhx++qFVzD9gFYEZTw24d8grDT1T1Cf6kKOuXaIQXDZTLzZuKLSYZ5fpvBQZSm4xQLim 1KWn9B8Nyo5j9Tudxux2k5GRCtaSZCIrNg1h9znyK7LtxF3/S4aiJ13TomCMs/0zfybf 0zNZqNQ+n5tonXdSxbdsQ4JvpKt+rmWn8e99ynxPb5x9s4bU4OAXetoPv2CJIco3hkqh prNZaRSz2siBN+CPMFq3wA2/WiBuPTkRJK1GMDRwZs15UdhZ1LJW/62LKYsLrO0SxcPr HUsA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=DgrxZ77I; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id x8-v6si4462171plr.422.2018.06.27.10.04.02; Wed, 27 Jun 2018 10:04:17 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=DgrxZ77I; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S965419AbeF0P2y (ORCPT + 99 others); Wed, 27 Jun 2018 11:28:54 -0400 Received: from mail-wm0-f66.google.com ([74.125.82.66]:36549 "EHLO mail-wm0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S965326AbeF0P2b (ORCPT ); Wed, 27 Jun 2018 11:28:31 -0400 Received: by mail-wm0-f66.google.com with SMTP id u18-v6so5977160wmc.1 for ; Wed, 27 Jun 2018 08:28:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=jaIrs4Hlkn8/hSfPKZPaW9B0la4YriBdsqxKyEKBPSU=; b=DgrxZ77IVqs3iL0Cuy/YQIb6UI2ZfaJnGE7COJMvdk2u81TYk6fOlNeMm2g9S5PxZ/ wMYJ1LtsQ8eunD6OX4MhZPk4qhtH4aJ0hQ3ldkGxYqd0S5w9wNMiGV5Z2I5TMfRUusXM rnb1IEhhz778m7Ag3k1jQ7mUt6QBXx2a42Xvk= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=jaIrs4Hlkn8/hSfPKZPaW9B0la4YriBdsqxKyEKBPSU=; b=lcX2T9jc3Ynbs67goBpQ0MMnsnFUhyHFG16kwQbYPFlLjFD2bQV2yUz/4K5+9GG5Il 1zyPVjL8ykWRZ+Ca655aS9qVhKSHv2rkqnSu74Rvce/y6VaA1kzCX88O3A/PKbQgS8tY N6bM0cgjZ+U+FDRASuzrgh8DhF4vYyBGoZVoX9qxzcydJs4x9PPXsed8dNS5fKciwPSE w5aPdvWZOKo2xYQq+sA5FVJNl1agIiVoPTFXnthTHWL8Qo7zkfONdiB5dTYSKxUQQSIA Db0womtOvVD1BhlqzA/vFJEivIWSr5ZDk3Yb50o5E5cMp7Z/GJOVVgLsrD8FkHMqWlRg Wfmg== X-Gm-Message-State: APt69E2eiHoU8QJdLaUGS9tHxz3aQMprOtDwrKNi6GrC/9dB9FYpd8Wz Yl3I4Hy3R+y388G3zoDyUO4UgQ== X-Received: by 2002:a1c:f902:: with SMTP id x2-v6mr5152001wmh.116.1530113309811; Wed, 27 Jun 2018 08:28:29 -0700 (PDT) Received: from mms-0440.qualcomm.mm-sol.com ([37.157.136.206]) by smtp.gmail.com with ESMTPSA id o203-v6sm2916075wmd.30.2018.06.27.08.28.28 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 27 Jun 2018 08:28:29 -0700 (PDT) From: Stanimir Varbanov To: Mauro Carvalho Chehab , Hans Verkuil Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, Vikash Garodia , Tomasz Figa , Stanimir Varbanov Subject: [PATCH v4 27/27] venus: add HEVC codec support Date: Wed, 27 Jun 2018 18:27:25 +0300 Message-Id: <20180627152725.9783-28-stanimir.varbanov@linaro.org> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20180627152725.9783-1-stanimir.varbanov@linaro.org> References: <20180627152725.9783-1-stanimir.varbanov@linaro.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This add HEVC codec support for venus versions 3xx and 4xx. Signed-off-by: Stanimir Varbanov Reviewed-by: Tomasz Figa --- 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 8cc49f30a363..2f02365f4818 100644 --- a/drivers/media/platform/qcom/venus/core.h +++ b/drivers/media/platform/qcom/venus/core.h @@ -190,10 +190,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 a0c7ef5f9125..2da88aec5a21 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 9d509b3c1c7a..d079aebff550 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 be5dc3a2eb28..a2c6a4b7ac43 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