From patchwork Fri Jun 9 21:35:31 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vittorio Giovara X-Patchwork-Id: 3893 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.10.195 with SMTP id 186csp170816vsk; Fri, 9 Jun 2017 14:35:44 -0700 (PDT) X-Received: by 10.28.151.207 with SMTP id z198mr1262291wmd.48.1497044144115; Fri, 09 Jun 2017 14:35:44 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1497044144; cv=none; d=google.com; s=arc-20160816; b=R4uLa2loG7ptctPaLlZSSu0gr37b131BWoa/6ACegnU6c4ZwabVwppbfrPy+qSiBMV NBy56CTSG5goqNwVpEjKcWcTuJEArohFCTrZGwfoyG619GrCjdPLI7WEnk/Gd34eUSNk AEka4EgrmFRl3yQo1AxjqdKNzyPxFX/eD385pHb/7d7zKAD0xraBi2cswlOk2wcCwPy8 1tzpmWcn7cj0agxwaDrzzij3mCw9NyzlwS2INGXNfaXR7SGnxkN+Ve3UwNOvMWEcifxt u0CKN/tj7eJsO+1VO39BDk2K0IZq1GQDtBnXd3EfyammrcuNuqen4DJMY8cV/5UQqnkI 2FvA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:message-id:date:to:from:dkim-signature :delivered-to:arc-authentication-results; bh=Syd6PCuEXdUxcbf4lrN9YsK6NBDUHyi4k3qYU85t8hk=; b=nyRB0rbNHGEDgL7CMpEMvCmHjwbPe8QmhprG2v6d4Jz+4x6PGlpxAEOxXy2eUowtXI T0xM8aU7BvqCPfN/N8r28oMrhpHMp6zsmJr7ATCpqEVks8UlUl8k1dY6ZfFMp+XLdzW3 8CZgm/xmJ5FhxlOgB0ElHjf7h3J+UQ7BlgRTlUHmf0mTCilPY5mefqtR7VFi1sdV/yVw BvgD89DvLLpl0V8C2LC46Oy4z5WGLse0+4D2FzMHVGDzOFmvH2B11n+Tn/KfFZuCc4XR Q84f0vgZG3jRdb1BmBDqyqruLxp+FDZsJU2DSDLyP1X0QVtMdn2WXGhRxqZIuST4Qr3j dDGQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id n52si2475862wrn.247.2017.06.09.14.35.43; Fri, 09 Jun 2017 14:35:44 -0700 (PDT) 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; dkim=neutral (body hash did not verify) header.i=@gmail.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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 7EC03689E72; Sat, 10 Jun 2017 00:35:39 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qt0-f194.google.com (mail-qt0-f194.google.com [209.85.216.194]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 12E38689D27 for ; Sat, 10 Jun 2017 00:35:33 +0300 (EEST) Received: by mail-qt0-f194.google.com with SMTP id s33so17866144qtg.3 for ; Fri, 09 Jun 2017 14:35:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id; bh=UUlL1TIJuiw2wD1dIzUviARfhBka3HaitY+v7J5o+p8=; b=aoIF+dMPZuc4posHjq7E9sKKHjsrW9LnOhNtIqu09/JiI+uVN0w3UxHyYAUvNLbaGi DXBBHbAPkJeDvxxnb2ilBYHVyM4fVwr8puNfT4QKRTHfvjwvt4P9MqQUCBsNj67xQi6c T+bGzRFUSy9fDO1m63RBRA8N6g4ChfvKhL02XIK9c63eem2sVDYEY2yUVp51h4x4apyg GXUd7s6z+39+O7k40SZnIz/3Slgqh/q9s2VzgfO1rcvK1OngcBRgUiwz9+AFqOhGPQL7 NSH5bvgGrTtqu+6XsGAW07N6XQW2NmauCXwJtIQxXfffchaJKrzEbpt0kZHPgjgP7Tzh KDdA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id; bh=UUlL1TIJuiw2wD1dIzUviARfhBka3HaitY+v7J5o+p8=; b=q7RQXdVkPxh/GMvO74YJMrFuICCR5FopI2V1MlFckArmp/4KcNrJfeuqocDfBP+Ia9 T1JlkjI0TI85s24kFYJyvY4qXPP4rY1jGkLG/oT9e2C6ZSwVzE1ImPwIqqm9LQtKcApd HoeVd8zMnAO7fvysr1+hlVcDMDLnha0uChKgExJtqERGzO13zcYtYrODEKSHGx9PEGE+ YS9wqoGdOABYvv68Qn69oukRd2okGZMc1NaWkQmtlLSkaRry5fwSQEEaKsgXH1iN5ZZZ rPYum/M5fCX8L6rFYXasw+rVOhAlxcu+CX/UD/BXLvYq9kBG/WYQA2Xi7nl7sNzuENke cVhQ== X-Gm-Message-State: AODbwcAr3GQN8ZO9uzS2rTeFCniOw64bX04XDnnlWq3RIE68Soq7ykiL KMgK4OWj1L6Kcf4E X-Received: by 10.200.47.97 with SMTP id k30mr34116177qta.11.1497044132363; Fri, 09 Jun 2017 14:35:32 -0700 (PDT) Received: from vimacbookpro.vimeows.com ([8.40.92.161]) by smtp.gmail.com with ESMTPSA id a70sm1530160qkj.47.2017.06.09.14.35.31 for (version=TLS1 cipher=AES128-SHA bits=128/128); Fri, 09 Jun 2017 14:35:31 -0700 (PDT) From: Vittorio Giovara To: ffmpeg-devel@ffmpeg.org Date: Fri, 9 Jun 2017 17:35:31 -0400 Message-Id: <20170609213531.58481-1-vittorio.giovara@gmail.com> X-Mailer: git-send-email 2.12.0 Subject: [FFmpeg-devel] [PATCH] hevc: Add support for alternative transfer characterics SEI 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 MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Signed-off-by: Vittorio Giovara --- libavcodec/hevc_sei.c | 9 +++++++++ libavcodec/hevc_sei.h | 7 +++++++ libavcodec/hevcdec.c | 5 +++++ 3 files changed, 21 insertions(+) diff --git a/libavcodec/hevc_sei.c b/libavcodec/hevc_sei.c index f0ad84f2f4..cd55d50212 100644 --- a/libavcodec/hevc_sei.c +++ b/libavcodec/hevc_sei.c @@ -265,6 +265,13 @@ static int decode_nal_sei_active_parameter_sets(HEVCSEIContext *s, GetBitContext return 0; } +static int decode_nal_sei_alternative_transfer(HEVCSEIAlternativeTransfer *s, GetBitContext *gb) +{ + s->present = 1; + s->preferred_transfer_characteristics = get_bits(gb, 8); + return 0; +} + static int decode_nal_sei_prefix(GetBitContext *gb, HEVCSEIContext *s, const HEVCParamSets *ps, int type, int size, void *logctx) { @@ -285,6 +292,8 @@ static int decode_nal_sei_prefix(GetBitContext *gb, HEVCSEIContext *s, const HEV return decode_nal_sei_active_parameter_sets(s, gb, logctx); case HEVC_SEI_TYPE_USER_DATA_REGISTERED_ITU_T_T35: return decode_nal_sei_user_data_registered_itu_t_t35(s, gb, size); + case HEVC_SEI_TYPE_ALTERNATIVE_TRANSFER_CHARACTERISTICS: + return decode_nal_sei_alternative_transfer(&s->alternative_transfer, gb); default: av_log(logctx, AV_LOG_DEBUG, "Skipped PREFIX SEI %d\n", type); skip_bits_long(gb, 8 * size); diff --git a/libavcodec/hevc_sei.h b/libavcodec/hevc_sei.h index 5645e4f5de..1b522227ec 100644 --- a/libavcodec/hevc_sei.h +++ b/libavcodec/hevc_sei.h @@ -56,6 +56,7 @@ typedef enum { HEVC_SEI_TYPE_REGION_REFRESH_INFO = 134, HEVC_SEI_TYPE_MASTERING_DISPLAY_INFO = 137, HEVC_SEI_TYPE_CONTENT_LIGHT_LEVEL_INFO = 144, + HEVC_SEI_TYPE_ALTERNATIVE_TRANSFER_CHARACTERISTICS = 147, } HEVC_SEI_Type; typedef struct HEVCSEIPictureHash { @@ -100,6 +101,11 @@ typedef struct HEVCSEIContentLight { uint16_t max_pic_average_light_level; } HEVCSEIContentLight; +typedef struct HEVCSEIAlternativeTransfer { + int present; + int preferred_transfer_characteristics; +} HEVCSEIAlternativeTransfer; + typedef struct HEVCSEIContext { HEVCSEIPictureHash picture_hash; HEVCSEIFramePacking frame_packing; @@ -109,6 +115,7 @@ typedef struct HEVCSEIContext { HEVCSEIMasteringDisplay mastering_display; HEVCSEIContentLight content_light; int active_seq_parameter_set_id; + HEVCSEIAlternativeTransfer alternative_transfer; } HEVCSEIContext; struct HEVCParamSets; diff --git a/libavcodec/hevcdec.c b/libavcodec/hevcdec.c index 23a89345a8..955cc703cf 100644 --- a/libavcodec/hevcdec.c +++ b/libavcodec/hevcdec.c @@ -2684,6 +2684,11 @@ static int set_side_data(HEVCContext *s) s->avctx->properties |= FF_CODEC_PROPERTY_CLOSED_CAPTIONS; } + if (s->sei.alternative_transfer.present && + s->sei.alternative_transfer.preferred_transfer_characteristics != AVCOL_SPC_UNSPECIFIED) { + s->avctx->color_trc = s->sei.alternative_transfer.preferred_transfer_characteristics; + } + return 0; }