From 98d2152982d2f7b84b81a811702f2926c2a20887 Mon Sep 17 00:00:00 2001 From: Sowmya Pandiri Date: Wed, 18 Feb 2015 00:50:47 -0800 Subject: [PATCH] msm: vidc: Add support for Vp9 decode in vidc driver This change adds support for VP9 codec type in vidc driver and sets the compression format to venus HFI. Change-Id: I2499f39c7adc1064d7f1a6ff4f1f8e639fb3f667 Signed-off-by: Sowmya Pandiri Signed-off-by: Deepak Kushwah --- Documentation/DocBook/media/v4l/pixfmt.xml | 5 +++++ drivers/media/platform/msm/vidc/hfi_packetization.c | 3 +++ drivers/media/platform/msm/vidc/msm_vdec.c | 8 ++++++++ drivers/media/platform/msm/vidc/msm_vidc_common.c | 3 +++ drivers/media/platform/msm/vidc/vidc_hfi_api.h | 3 ++- drivers/media/platform/msm/vidc/vidc_hfi_helper.h | 5 +++-- include/uapi/linux/videodev2.h | 3 ++- 7 files changed, 26 insertions(+), 4 deletions(-) diff --git a/Documentation/DocBook/media/v4l/pixfmt.xml b/Documentation/DocBook/media/v4l/pixfmt.xml index 99b8d2ad6e4f..995b8638a22d 100644 --- a/Documentation/DocBook/media/v4l/pixfmt.xml +++ b/Documentation/DocBook/media/v4l/pixfmt.xml @@ -805,6 +805,11 @@ extended control V4L2_CID_MPEG_STREAM_TYPE, see 'VP8' VP8 video elementary stream. + + V4L2_PIX_FMT_VP9 + 'VP9' + VP9 video elementary stream. + diff --git a/drivers/media/platform/msm/vidc/hfi_packetization.c b/drivers/media/platform/msm/vidc/hfi_packetization.c index 0aefca7d354e..67b0b4131d0d 100644 --- a/drivers/media/platform/msm/vidc/hfi_packetization.c +++ b/drivers/media/platform/msm/vidc/hfi_packetization.c @@ -165,6 +165,9 @@ static inline u32 get_hfi_codec(enum hal_video_codec hal_codec) case HAL_VIDEO_CODEC_HEVC: hfi_codec = HFI_VIDEO_CODEC_HEVC; break; + case HAL_VIDEO_CODEC_VP9: + hfi_codec = HFI_VIDEO_CODEC_VP9; + break; case HAL_VIDEO_CODEC_HEVC_HYBRID: hfi_codec = HFI_VIDEO_CODEC_HEVC_HYBRID; break; diff --git a/drivers/media/platform/msm/vidc/msm_vdec.c b/drivers/media/platform/msm/vidc/msm_vdec.c index d77903e6f880..102898b937c9 100644 --- a/drivers/media/platform/msm/vidc/msm_vdec.c +++ b/drivers/media/platform/msm/vidc/msm_vdec.c @@ -726,6 +726,14 @@ struct msm_vidc_format vdec_formats[] = { .get_frame_size = get_frame_size_compressed, .type = OUTPUT_PORT, }, + { + .name = "VP9", + .description = "VP9 compressed format", + .fourcc = V4L2_PIX_FMT_VP9, + .num_planes = 1, + .get_frame_size = get_frame_size_compressed, + .type = OUTPUT_PORT, + }, { .name = "DIVX 311", .description = "DIVX 311 compressed format", diff --git a/drivers/media/platform/msm/vidc/msm_vidc_common.c b/drivers/media/platform/msm/vidc/msm_vidc_common.c index 734b934dc5e3..e202a690c07f 100644 --- a/drivers/media/platform/msm/vidc/msm_vidc_common.c +++ b/drivers/media/platform/msm/vidc/msm_vidc_common.c @@ -207,6 +207,9 @@ enum hal_video_codec get_hal_codec_type(int fourcc) case V4L2_PIX_FMT_VP8: codec = HAL_VIDEO_CODEC_VP8; break; + case V4L2_PIX_FMT_VP9: + codec = HAL_VIDEO_CODEC_VP9; + break; case V4L2_PIX_FMT_DIVX_311: codec = HAL_VIDEO_CODEC_DIVX_311; break; diff --git a/drivers/media/platform/msm/vidc/vidc_hfi_api.h b/drivers/media/platform/msm/vidc/vidc_hfi_api.h index e77fa2e94c06..f8464cc3e4c1 100644 --- a/drivers/media/platform/msm/vidc/vidc_hfi_api.h +++ b/drivers/media/platform/msm/vidc/vidc_hfi_api.h @@ -261,7 +261,8 @@ enum hal_video_codec { HAL_VIDEO_CODEC_VP7 = 0x00000800, HAL_VIDEO_CODEC_VP8 = 0x00001000, HAL_VIDEO_CODEC_HEVC = 0x00002000, - HAL_VIDEO_CODEC_HEVC_HYBRID = 0x00004000, + HAL_VIDEO_CODEC_VP9 = 0x00004000, + HAL_VIDEO_CODEC_HEVC_HYBRID = 0x80000000, HAL_UNUSED_CODEC = 0x10000000, }; diff --git a/drivers/media/platform/msm/vidc/vidc_hfi_helper.h b/drivers/media/platform/msm/vidc/vidc_hfi_helper.h index e6b58a098673..e4b9a8293f24 100644 --- a/drivers/media/platform/msm/vidc/vidc_hfi_helper.h +++ b/drivers/media/platform/msm/vidc/vidc_hfi_helper.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2012-2014, The Linux Foundation. All rights reserved. +/* Copyright (c) 2012-2015, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and @@ -86,7 +86,8 @@ #define HFI_VIDEO_CODEC_SPARK 0x00000200 #define HFI_VIDEO_CODEC_VP8 0x00001000 #define HFI_VIDEO_CODEC_HEVC 0x00002000 -#define HFI_VIDEO_CODEC_HEVC_HYBRID 0x00004000 +#define HFI_VIDEO_CODEC_VP9 0x00004000 +#define HFI_VIDEO_CODEC_HEVC_HYBRID 0x80000000 #define HFI_H264_PROFILE_BASELINE 0x00000001 #define HFI_H264_PROFILE_MAIN 0x00000002 diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h index 324230584183..c2b9bbf2087d 100644 --- a/include/uapi/linux/videodev2.h +++ b/include/uapi/linux/videodev2.h @@ -402,9 +402,10 @@ struct v4l2_pix_format { #define V4L2_PIX_FMT_XVID v4l2_fourcc('X', 'V', 'I', 'D') /* Xvid */ #define V4L2_PIX_FMT_VC1_ANNEX_G v4l2_fourcc('V', 'C', '1', 'G') /* SMPTE 421M Annex G compliant stream */ #define V4L2_PIX_FMT_VC1_ANNEX_L v4l2_fourcc('V', 'C', '1', 'L') /* SMPTE 421M Annex L compliant stream */ +#define V4L2_PIX_FMT_VP8 v4l2_fourcc('V', 'P', '8', '0') /* VP8 */ +#define V4L2_PIX_FMT_VP9 v4l2_fourcc('V', 'P', '9', '0') /* VP9 */ #define V4L2_PIX_FMT_DIVX_311 v4l2_fourcc('D', 'I', 'V', '3') /* DIVX311 */ #define V4L2_PIX_FMT_DIVX v4l2_fourcc('D', 'I', 'V', 'X') /* DIVX */ -#define V4L2_PIX_FMT_VP8 v4l2_fourcc('V', 'P', '8', '0') /* VP8 */ #define V4L2_PIX_FMT_HEVC v4l2_fourcc('H', 'E', 'V', 'C') /* for HEVC stream */ #define V4L2_PIX_FMT_HEVC_HYBRID v4l2_fourcc('H', 'V', 'C', 'H')