From patchwork Wed Dec 28 06:48:05 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Nikola_Kolarovi=C4=87?= X-Patchwork-Id: 1985 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.89.21 with SMTP id n21csp2532663vsb; Thu, 29 Dec 2016 10:44:19 -0800 (PST) X-Received: by 10.194.136.166 with SMTP id qb6mr36219516wjb.42.1483037059360; Thu, 29 Dec 2016 10:44:19 -0800 (PST) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id 79si55308560wmy.132.2016.12.29.10.44.18; Thu, 29 Dec 2016 10:44:19 -0800 (PST) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 2F960689B17; Thu, 29 Dec 2016 20:44:12 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail.rt-rk.com (mx2.rt-rk.com [89.216.37.149]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4E2D4689A81 for ; Wed, 28 Dec 2016 08:49:09 +0200 (EET) Received: from localhost (localhost [127.0.0.1]) by mail.rt-rk.com (Postfix) with ESMTP id DE3D71A1CEA; Wed, 28 Dec 2016 07:49:08 +0100 (CET) X-Virus-Scanned: amavisd-new at rt-rk.com Received: from rtrkn087-lin.domain.local (rtrkn087-lin.domain.local [192.168.236.91]) by mail.rt-rk.com (Postfix) with ESMTPSA id C7EF21A1CE4; Wed, 28 Dec 2016 07:49:08 +0100 (CET) From: =?UTF-8?q?Nikola=20Kolarovi=C4=87?= To: ffmpeg-devel@ffmpeg.org Date: Wed, 28 Dec 2016 07:48:05 +0100 Message-Id: <20161228064805.31028-1-nikola.kolarovic@rt-rk.com> X-Mailer: git-send-email 2.11.0 MIME-Version: 1.0 X-Mailman-Approved-At: Thu, 29 Dec 2016 20:44:10 +0200 Subject: [FFmpeg-devel] [PATCH] avcodec/hevc: Extract Content light level from HEVC SEI prefix message X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: =?UTF-8?q?Nikola=20Kolarovi=C4=87?= Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" From: Nikola Kolarović Extract max_content_light_level and max_frame_average_light_level which are used in HEVC Main 10 (HDR10) for luminosity adjustment. Based on ISO/IEC 23008-2:2015 section D.2.35. --- libavcodec/hevc.h | 4 ++++ libavcodec/hevc_sei.c | 12 ++++++++++++ 2 files changed, 16 insertions(+) diff --git a/libavcodec/hevc.h b/libavcodec/hevc.h index 6a3c7506c2..d5970b61b6 100644 --- a/libavcodec/hevc.h +++ b/libavcodec/hevc.h @@ -931,6 +931,10 @@ typedef struct HEVCContext { uint32_t max_mastering_luminance; uint32_t min_mastering_luminance; + /** content light level */ + uint16_t max_content_light_level; + uint16_t max_frame_average_light_level; + } HEVCContext; int ff_hevc_decode_short_term_rps(GetBitContext *gb, AVCodecContext *avctx, diff --git a/libavcodec/hevc_sei.c b/libavcodec/hevc_sei.c index 148f246df1..13ecc67173 100644 --- a/libavcodec/hevc_sei.c +++ b/libavcodec/hevc_sei.c @@ -102,6 +102,16 @@ static int decode_nal_sei_mastering_display_info(HEVCContext *s) return 0; } +static int decode_nal_sei_content_light_level_info(HEVCContext *s) +{ + GetBitContext *gb = &s->HEVClc->gb; + + s->max_content_light_level = get_bits(gb, 16); + s->max_frame_average_light_level = get_bits(gb, 16); + + return 0; +} + static int decode_nal_sei_frame_packing_arrangement(HEVCContext *s) { GetBitContext *gb = &s->HEVClc->gb; @@ -304,6 +314,8 @@ static int decode_nal_sei_prefix(HEVCContext *s, int type, int size) } case SEI_TYPE_MASTERING_DISPLAY_INFO: return decode_nal_sei_mastering_display_info(s); + case SEI_TYPE_CONTENT_LIGHT_LEVEL_INFO: + return decode_nal_sei_content_light_level_info(s); case SEI_TYPE_ACTIVE_PARAMETER_SETS: active_parameter_sets(s); av_log(s->avctx, AV_LOG_DEBUG, "Skipped PREFIX SEI %d\n", type);