Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751688AbdLLDFP (ORCPT ); Mon, 11 Dec 2017 22:05:15 -0500 Received: from mailout4.samsung.com ([203.254.224.34]:31715 "EHLO mailout4.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751281AbdLLDFM (ORCPT ); Mon, 11 Dec 2017 22:05:12 -0500 DKIM-Filter: OpenDKIM Filter v2.11.0 mailout4.samsung.com 20171212030510epoutp04936cd09a006b35d30ff8b45e00d3a14a~-bQ7vN-Yi3098430984epoutp041 X-AuditID: b6c32a4b-cf7ff700000011c1-7d-5a2f4766d3cb Subject: Re: [Patch v6 10/12] [media] v4l2: Add v4l2 control IDs for HEVC encoder From: Smitha T Murthy To: Stanimir Varbanov Cc: linux-arm-kernel@lists.infradead.org, linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, kyungmin.park@samsung.com, kamil@wypas.org, jtp.park@samsung.com, a.hajda@samsung.com, mchehab@kernel.org, pankaj.dubey@samsung.com, krzk@kernel.org, m.szyprowski@samsung.com, s.nawrocki@samsung.com In-Reply-To: <5b96b332-71a9-083a-2242-8bdf5554f010@linaro.org> Date: Tue, 12 Dec 2017 08:04:46 +0530 Message-ID: <1513046086.22129.2.camel@smitha-fedora> Mime-Version: 1.0 X-Mailer: Evolution 2.28.3 (2.28.3-1.fc12) Content-Transfer-Encoding: 7bit X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFjrIKsWRmVeSWpSXmKPExsWy7bCmlm6au36UQdMXYYtb686xWhxZe5XJ YuaJdlaL8+c3sFucbXrDbrHp8TVWi8u75rBZ9GzYymqx9shddotlm/4wWSza+oXd4vAboOKW tiNMDrwem1Z1snncubaHzWPzknqPvi2rGD0+b5LzuHKkkT2ALYrLJiU1J7MstUjfLoEr4+k/ kYJ9QRVn/s5jaWA87tLFyMkhIWAi0XNyBxuILSSwm1HiwK70LkYuIPsTo8SyE5/ZIJxvjBIX e44wwXR8PHeEBSKxl1Hiwf9TTBDOW0aJroX7GUGqhAWCJfYefAk2l01AR+Lb+9NgtghQ9+1F u8G6mQW2MUlcvvYZbCyngJ1E75Uz7CA2i4CqxO2v11hAbF6ghhWtu4HiHEC2oMTfHcIQV2hL rGs4A1bCLCAvsf3tHGaQmRIC/9kk5n99CHWqi8TGjQ/ZIWxhiVfHt0DZUhIv+9ug7HKJPX9+ skA0NzBKzD3eyAiRsJc4cGUOC8hiZgFNifW79CHCthIHl71ih1jMJ9H7+wkTSImEAK9ER5sQ RImSxKIzJ6DGS0hcfbuVFcL2kHi6ewHUaY4S8xf1sk1gVJyF8NksJN/MQti7gJF5FaNkakFx bnpqsWmBcV5quV5xYm5xaV66XnJ+7iZGcMLS8t7BuOmczyFGAQ5GJR7eDV16UUKsiWXFlbmH GCU4mJVEeE39dKOEeFMSK6tSi/Lji0pzUosPMUpzsCiJ8x7bWRopJJCeWJKanZpakFoEk2Xi 4JRqYDTr71528Sb/8WNMfN23p7z2X1bH5PL12ueytKxLcamzpph5dLy59FRfb0+hxvGoG6wt Hq4n5Vm1RBJPvVvw6nHHu4R014NRslX2y7m9Ctb5Z7jr6j0xltSdu2bfj5Jrhr33Lm5gSHhc J6oWVdF8f52BjsA5q3SOJbn1l4V1uFd/ubyixLA0VYmlOCPRUIu5qDgRAK6TRk5UAwAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFuplkeLIzCtJLcpLzFFi42LZdlhJTjfVXT/K4NZNNotb686xWhxZe5XJ YuaJdlaL8+c3sFucbXrDbrHp8TVWi8u75rBZ9GzYymqx9shddotlm/4wWSza+oXd4vAboOKW tiNMDrwem1Z1snncubaHzWPzknqPvi2rGD0+b5LzuHKkkT2ALYrLJiU1J7MstUjfLoEr4+k/ kYJ9QRVn/s5jaWA87tLFyMkhIWAi8fHcEZYuRi4OIYHdjBL7zq1khEhISKz8PQnKFpZY+e85 O0TRa0aJPRNmsYIkhAWCJfYefMkGYrMJ6Eh8e38azBYBmnp70W6wqcwC65kkWq79YgdJcArY SfReOQM1qZNJYumURmaQBLOApkTr9t9gRSwCqhK3v15jAbF5gSataN0NFOcAsgUl/u4QhrhI W2JdwxkWiFZ5ie1v5zBPYBSchWTSLISOWUiqFjAyr2KUTC0ozk3PLTYsMMxLLdcrTswtLs1L 10vOz93ECI4kLc0djJeXxB9iFOBgVOLh3dClFyXEmlhWXJl7iFGCg1lJhNfUTzdKiDclsbIq tSg/vqg0J7X4EKM0B4uSOO/TvGORQgLpiSWp2ampBalFMFkmDk6pBkapW55nX690evL5vFr4 rvIEmRy7+M2XrLY/DRMP6hRZW6Wktt/ZRmDjryTtb7M+Z58Ve/U1zuwK60yvi4dZOA7/CDna +C5gdpUVe6W7bHpo8vKmHefcrl353to+Ybfj5qjEkuYPMUtcb3RJTTpYnN67etaJZbPefOVY NLVz1qf3n+cqfSubHrlKiaU4I9FQi7moOBEAyJ71wqACAAA= X-CMS-MailID: 20171212030509epcas5p24691c8d7e4f45531479da4f9936b7dea X-Msg-Generator: CA Content-Type: text/plain; charset="utf-8" X-MTR: 20171212030509epcas5p24691c8d7e4f45531479da4f9936b7dea CMS-TYPE: 105P X-CMS-RootMailID: 20171208093702epcas2p32a30a9f624e06fb543f7dd757c805077 X-RootMTR: 20171208093702epcas2p32a30a9f624e06fb543f7dd757c805077 References: <1512724105-1778-1-git-send-email-smitha.t@samsung.com> <1512724105-1778-11-git-send-email-smitha.t@samsung.com> <5b96b332-71a9-083a-2242-8bdf5554f010@linaro.org> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 10328 Lines: 228 On Sat, 2017-12-09 at 20:48 +0200, Stanimir Varbanov wrote: > Hi Smitha, > > Thanks for the patches! > > On 12/08/2017 11:08 AM, Smitha T Murthy wrote: > > Add v4l2 controls for HEVC encoder > > > > Signed-off-by: Smitha T Murthy > > Reviewed-by: Andrzej Hajda > > --- > > drivers/media/v4l2-core/v4l2-ctrls.c | 118 +++++++++++++++++++++++++++++++++++ > > include/uapi/linux/v4l2-controls.h | 92 ++++++++++++++++++++++++++- > > 2 files changed, 209 insertions(+), 1 deletion(-) > > > > diff --git a/drivers/media/v4l2-core/v4l2-ctrls.c b/drivers/media/v4l2-core/v4l2-ctrls.c > > index 4e53a86..3f98318 100644 > > --- a/drivers/media/v4l2-core/v4l2-ctrls.c > > +++ b/drivers/media/v4l2-core/v4l2-ctrls.c > > @@ -480,6 +480,56 @@ const char * const *v4l2_ctrl_get_menu(u32 id) > > NULL, > > }; > > > > + static const char * const hevc_profile[] = { > > + "Main", > > You forgot "Main 10" profile. > Sorry I forgot to update it, I will fix it in the next version. > > + "Main Still Picture", > > + NULL, > > + }; > > + static const char * const hevc_level[] = { > > + "1", > > + "2", > > + "2.1", > > + "3", > > + "3.1", > > + "4", > > + "4.1", > > + "5", > > + "5.1", > > + "5.2", > > + "6", > > + "6.1", > > + "6.2", > > + NULL, > > + }; > > + static const char * const hevc_hierarchial_coding_type[] = { > > + "B", > > + "P", > > + NULL, > > + }; > > + static const char * const hevc_refresh_type[] = { > > + "None", > > + "CRA", > > + "IDR", > > + NULL, > > + }; > > + static const char * const hevc_size_of_length_field[] = { > > + "0", > > + "1", > > + "2", > > + "4", > > + NULL, > > + }; > > + static const char * const hevc_tier_flag[] = { > > + "Main", > > + "High", > > + NULL, > > + }; > > + static const char * const hevc_loop_filter_mode[] = { > > + "Disabled", > > + "Enabled", > > + "Disabled at slice boundary", > > + "NULL", > > + }; > > > > switch (id) { > > case V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ: > > @@ -575,6 +625,20 @@ const char * const *v4l2_ctrl_get_menu(u32 id) > > return dv_it_content_type; > > case V4L2_CID_DETECT_MD_MODE: > > return detect_md_mode; > > + case V4L2_CID_MPEG_VIDEO_HEVC_PROFILE: > > + return hevc_profile; > > + case V4L2_CID_MPEG_VIDEO_HEVC_LEVEL: > > + return hevc_level; > > + case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_TYPE: > > + return hevc_hierarchial_coding_type; > > + case V4L2_CID_MPEG_VIDEO_HEVC_REFRESH_TYPE: > > + return hevc_refresh_type; > > + case V4L2_CID_MPEG_VIDEO_HEVC_SIZE_OF_LENGTH_FIELD: > > + return hevc_size_of_length_field; > > + case V4L2_CID_MPEG_VIDEO_HEVC_TIER_FLAG: > > Could you drop _FLAG suffix? Looking (briefly) into the spec they not > specify `tier flag` but just `tier`. > Yes I will remove it. > > + return hevc_tier_flag; > > + case V4L2_CID_MPEG_VIDEO_HEVC_LOOP_FILTER_MODE: > > + return hevc_loop_filter_mode; > > > > default: > > return NULL; > > @@ -776,6 +840,53 @@ const char *v4l2_ctrl_get_name(u32 id) > > case V4L2_CID_MPEG_VIDEO_VPX_P_FRAME_QP: return "VPX P-Frame QP Value"; > > case V4L2_CID_MPEG_VIDEO_VPX_PROFILE: return "VPX Profile"; > > > > + /* HEVC controls */ > > + case V4L2_CID_MPEG_VIDEO_HEVC_I_FRAME_QP: return "HEVC I-Frame QP Value"; > > + case V4L2_CID_MPEG_VIDEO_HEVC_P_FRAME_QP: return "HEVC P-Frame QP Value"; > > + case V4L2_CID_MPEG_VIDEO_HEVC_B_FRAME_QP: return "HEVC B-Frame QP Value"; > > + case V4L2_CID_MPEG_VIDEO_HEVC_MIN_QP: return "HEVC Minimum QP Value"; > > + case V4L2_CID_MPEG_VIDEO_HEVC_MAX_QP: return "HEVC Maximum QP Value"; > > + case V4L2_CID_MPEG_VIDEO_HEVC_PROFILE: return "HEVC Profile"; > > + case V4L2_CID_MPEG_VIDEO_HEVC_LEVEL: return "HEVC Level"; > > + case V4L2_CID_MPEG_VIDEO_HEVC_TIER_FLAG: return "HEVC Tier Flag"; > > + case V4L2_CID_MPEG_VIDEO_HEVC_FRAME_RATE_RESOLUTION: return "HEVC Frame Rate Resolution"; > > + case V4L2_CID_MPEG_VIDEO_HEVC_MAX_PARTITION_DEPTH: return "HEVC Maximum Coding Unit Depth"; > > + case V4L2_CID_MPEG_VIDEO_HEVC_REFRESH_TYPE: return "HEVC Refresh Type"; > > + case V4L2_CID_MPEG_VIDEO_HEVC_CONST_INTRA_PRED: return "HEVC Constant Intra Prediction"; > > + case V4L2_CID_MPEG_VIDEO_HEVC_LOSSLESS_CU: return "HEVC Lossless Encoding"; > > + case V4L2_CID_MPEG_VIDEO_HEVC_WAVEFRONT: return "HEVC Wavefront"; > > + case V4L2_CID_MPEG_VIDEO_HEVC_LOOP_FILTER_MODE: return "HEVC Loop Filter"; > > + case V4L2_CID_MPEG_VIDEO_HEVC_HIER_QP: return "HEVC QP Values"; > > + case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_TYPE: return "HEVC Hierarchical Coding Type"; > > + case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_LAYER: return "HEVC Hierarchical Coding Layer"; > > + case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L0_QP: return "HEVC Hierarchical Lay 0 QP"; > > s/Lay/Layer here and below > Ok I will change it. > > + case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L1_QP: return "HEVC Hierarchical Lay 1 QP"; > > + case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L2_QP: return "HEVC Hierarchical Lay 2 QP"; > > + case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L3_QP: return "HEVC Hierarchical Lay 3 QP"; > > + case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L4_QP: return "HEVC Hierarchical Lay 4 QP"; > > + case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L5_QP: return "HEVC Hierarchical Lay 5 QP"; > > + case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L6_QP: return "HEVC Hierarchical Lay 6 QP"; > > + case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L0_BR: return "HEVC Hierarchical Lay 0 Bit Rate"; > > + case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L1_BR: return "HEVC Hierarchical Lay 1 Bit Rate"; > > + case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L2_BR: return "HEVC Hierarchical Lay 2 Bit Rate"; > > + case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L3_BR: return "HEVC Hierarchical Lay 3 Bit Rate"; > > + case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L4_BR: return "HEVC Hierarchical Lay 4 Bit Rate"; > > + case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L5_BR: return "HEVC Hierarchical Lay 5 Bit Rate"; > > + case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L6_BR: return "HEVC Hierarchical Lay 6 Bit Rate"; > > + case V4L2_CID_MPEG_VIDEO_HEVC_GENERAL_PB: return "HEVC General PB"; > > + case V4L2_CID_MPEG_VIDEO_HEVC_TEMPORAL_ID: return "HEVC Temporal ID"; > > + case V4L2_CID_MPEG_VIDEO_HEVC_STRONG_SMOOTHING: return "HEVC Strong Intra Smoothing"; > > + case V4L2_CID_MPEG_VIDEO_HEVC_INTRA_PU_SPLIT: return "HEVC Intra PU Split"; > > + case V4L2_CID_MPEG_VIDEO_HEVC_TMV_PREDICTION: return "HEVC TMV Prediction"; > > + case V4L2_CID_MPEG_VIDEO_HEVC_MAX_NUM_MERGE_MV_MINUS1: return "HEVC Max Number of Candidate MVs"; > > + case V4L2_CID_MPEG_VIDEO_HEVC_WITHOUT_STARTCODE: return "HEVC ENC Without Startcode"; > > + case V4L2_CID_MPEG_VIDEO_HEVC_REFRESH_PERIOD: return "HEVC Num of I-Frame b/w 2 IDR"; > > + case V4L2_CID_MPEG_VIDEO_HEVC_LF_BETA_OFFSET_DIV2: return "HEVC Loop Filter Beta Offset"; > > + case V4L2_CID_MPEG_VIDEO_HEVC_LF_TC_OFFSET_DIV2: return "HEVC Loop Filter TC Offset"; > > + case V4L2_CID_MPEG_VIDEO_HEVC_SIZE_OF_LENGTH_FIELD: return "HEVC Size of Length Field"; > > + case V4L2_CID_MPEG_VIDEO_REF_NUMBER_FOR_PFRAMES: return "Reference Frames for a P-Frame"; > > + case V4L2_CID_MPEG_VIDEO_PREPEND_SPSPPS_TO_IDR: return "Prepend SPS and PPS to IDR"; > > + > > /* CAMERA controls */ > > /* Keep the order of the 'case's the same as in v4l2-controls.h! */ > > case V4L2_CID_CAMERA_CLASS: return "Camera Controls"; > > @@ -1069,6 +1180,13 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type, > > case V4L2_CID_TUNE_DEEMPHASIS: > > case V4L2_CID_MPEG_VIDEO_VPX_GOLDEN_FRAME_SEL: > > case V4L2_CID_DETECT_MD_MODE: > > + case V4L2_CID_MPEG_VIDEO_HEVC_PROFILE: > > + case V4L2_CID_MPEG_VIDEO_HEVC_LEVEL: > > + case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_TYPE: > > + case V4L2_CID_MPEG_VIDEO_HEVC_REFRESH_TYPE: > > + case V4L2_CID_MPEG_VIDEO_HEVC_SIZE_OF_LENGTH_FIELD: > > + case V4L2_CID_MPEG_VIDEO_HEVC_TIER_FLAG: > > + case V4L2_CID_MPEG_VIDEO_HEVC_LOOP_FILTER_MODE: > > *type = V4L2_CTRL_TYPE_MENU; > > break; > > case V4L2_CID_LINK_FREQ: > > diff --git a/include/uapi/linux/v4l2-controls.h b/include/uapi/linux/v4l2-controls.h > > index 31bfc68..a4b8489 100644 > > --- a/include/uapi/linux/v4l2-controls.h > > +++ b/include/uapi/linux/v4l2-controls.h > > @@ -588,6 +588,97 @@ enum v4l2_vp8_golden_frame_sel { > > #define V4L2_CID_MPEG_VIDEO_VPX_P_FRAME_QP (V4L2_CID_MPEG_BASE+510) > > #define V4L2_CID_MPEG_VIDEO_VPX_PROFILE (V4L2_CID_MPEG_BASE+511) > > > > +/* CIDs for HEVC encoding. Number gaps are for compatibility */ > > + > > +#define V4L2_CID_MPEG_VIDEO_HEVC_MIN_QP (V4L2_CID_MPEG_BASE + 512) > > +#define V4L2_CID_MPEG_VIDEO_HEVC_MAX_QP (V4L2_CID_MPEG_BASE + 513) > > +#define V4L2_CID_MPEG_VIDEO_HEVC_I_FRAME_QP (V4L2_CID_MPEG_BASE + 514) > > +#define V4L2_CID_MPEG_VIDEO_HEVC_P_FRAME_QP (V4L2_CID_MPEG_BASE + 515) > > +#define V4L2_CID_MPEG_VIDEO_HEVC_B_FRAME_QP (V4L2_CID_MPEG_BASE + 516) > > +#define V4L2_CID_MPEG_VIDEO_HEVC_HIER_QP (V4L2_CID_MPEG_BASE + 517) > > +#define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_TYPE (V4L2_CID_MPEG_BASE + 518) > > +enum v4l2_mpeg_video_hevc_hier_coding_type { > > + V4L2_MPEG_VIDEO_HEVC_HIERARCHICAL_CODING_B = 0, > > + V4L2_MPEG_VIDEO_HEVC_HIERARCHICAL_CODING_P = 1, > > +}; > > +#define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_LAYER (V4L2_CID_MPEG_BASE + 519) > > +#define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L0_QP (V4L2_CID_MPEG_BASE + 520) > > +#define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L1_QP (V4L2_CID_MPEG_BASE + 521) > > +#define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L2_QP (V4L2_CID_MPEG_BASE + 522) > > +#define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L3_QP (V4L2_CID_MPEG_BASE + 523) > > +#define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L4_QP (V4L2_CID_MPEG_BASE + 524) > > +#define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L5_QP (V4L2_CID_MPEG_BASE + 525) > > +#define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L6_QP (V4L2_CID_MPEG_BASE + 526) > > +#define V4L2_CID_MPEG_VIDEO_HEVC_PROFILE (V4L2_CID_MPEG_BASE + 527) > > +enum v4l2_mpeg_video_hevc_profile { > > + V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN = 0, > > you forgot V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN10 profile. > Sorry I will correct it in the next patch series. > > + V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_STILL_PICTURE = 1, > > +}; > > > Thank you for the review. Regards, Smitha