From patchwork Tue Jul 9 21:27:07 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 13882 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 76FA4448067 for ; Wed, 10 Jul 2019 00:27:36 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 4D47E68A4A3; Wed, 10 Jul 2019 00:27:36 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qt1-f194.google.com (mail-qt1-f194.google.com [209.85.160.194]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5573F68A728 for ; Wed, 10 Jul 2019 00:27:29 +0300 (EEST) Received: by mail-qt1-f194.google.com with SMTP id a15so163667qtn.7 for ; Tue, 09 Jul 2019 14:27:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=XdSM9mQ59AQl5cvDYxvp23JhjbOQTKAgS8oX+vH8XzI=; b=eB9P/erWDzWhYsgbhZsIL+iiiLOl63QZbNbM63QSBE2XQz58vn+TeC93GjfMs4P33t oPwQggeQMWxzddSMhEkZC/MEPoS6eyeLpBPcc2LbR7UE4tEy+FnycFkYEss1mSr1aOcb k75UVwZY5TAV1pDYQbQ2T6z7MzQOtaXmpT5QDs951xn3CD3/0yp2dFaoVWj1n7KJ6tY4 3b8YOb3aiRRx2zGd6aB22ZXXC14qKrmBSSJhJANVDV++eMWADLJ+WeYMf2s4WiNM68lc 4JiRdj1fzbGhqHHK9kaQh4yXkBo1ewxvatOUeu0ctvTX7RvZJ/shNhWUtYws0ApDUbAm T9zQ== 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:mime-version :content-transfer-encoding; bh=XdSM9mQ59AQl5cvDYxvp23JhjbOQTKAgS8oX+vH8XzI=; b=tJdPoe06Dx8SCTBb0tU+h40Qh08FoTTBzCQjPrdnbG1jCtTxYHvyiXNoKIbrhcku2H 0Wv43ujCHskIcFjZod8qd7XL53djpHhZLMuNivjUoEPJdI+v5CA5yu3oyQHp+mNG9xsb lUuWZCOXRUEV+CC3418kwv/rBDR+nt83WWZqhbqLFQ18s0u0hn3m7CVjAJZAo+ZQjBBS pGPmRU+7ayRW9pyc/S54wkM8ZDdSsKLBJdbufwk6JdTw8rDbxwo7kqVS2Kt6mgjGzTI9 mM1Tr8ODP0dME6VDbzyU2jurDEZQc8A7V3O7zEMLeDpCAMptwinvlUL/PMqF0qlJXL8W idHA== X-Gm-Message-State: APjAAAWW4Y+uNMFPR3/T4/BMj655SPcPdmd4v2Af5bW6Kmfv64PNnGzK dCsnR9hI5k3GUM/h0F+UBxI9QiLp X-Google-Smtp-Source: APXvYqwwDGfb9Gx6F35Srm5+iUQjTlnjQpUjrl2GaEZfaJhTSNkh9szE52KxkLjMjPytNKuXzBs9oQ== X-Received: by 2002:ad4:490c:: with SMTP id bh12mr15909811qvb.59.1562707646824; Tue, 09 Jul 2019 14:27:26 -0700 (PDT) Received: from localhost.localdomain ([181.23.69.123]) by smtp.gmail.com with ESMTPSA id x1sm108067qkj.22.2019.07.09.14.27.25 for (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Tue, 09 Jul 2019 14:27:26 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Tue, 9 Jul 2019 18:27:07 -0300 Message-Id: <20190709212707.1016-1-jamrial@gmail.com> X-Mailer: git-send-email 2.22.0 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2] avcodec/cbs_h265: add support for Alpha Channel Info SEI messages 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" As defined in sections F.14.2.8 and F.14.3.8 Signed-off-by: James Almer --- libavcodec/cbs_h2645.c | 1 + libavcodec/cbs_h265.h | 12 +++++++++++ libavcodec/cbs_h265_syntax_template.c | 29 +++++++++++++++++++++++++++ libavcodec/hevc_sei.h | 1 + 4 files changed, 43 insertions(+) diff --git a/libavcodec/cbs_h2645.c b/libavcodec/cbs_h2645.c index da4927ca8e..5bd03805be 100644 --- a/libavcodec/cbs_h2645.c +++ b/libavcodec/cbs_h2645.c @@ -529,6 +529,7 @@ static void cbs_h265_free_sei_payload(H265RawSEIPayload *payload) case HEVC_SEI_TYPE_MASTERING_DISPLAY_INFO: case HEVC_SEI_TYPE_CONTENT_LIGHT_LEVEL_INFO: case HEVC_SEI_TYPE_ALTERNATIVE_TRANSFER_CHARACTERISTICS: + case HEVC_SEI_TYPE_ALPHA_CHANNEL_INFO: break; case HEVC_SEI_TYPE_USER_DATA_REGISTERED_ITU_T_T35: av_buffer_unref(&payload->payload.user_data_registered.data_ref); diff --git a/libavcodec/cbs_h265.h b/libavcodec/cbs_h265.h index c9bc90187b..ad746bf35f 100644 --- a/libavcodec/cbs_h265.h +++ b/libavcodec/cbs_h265.h @@ -679,6 +679,17 @@ typedef struct H265RawSEIAlternativeTransferCharacteristics { uint8_t preferred_transfer_characteristics; } H265RawSEIAlternativeTransferCharacteristics; +typedef struct H265RawSEIAlphaChannelInfo { + uint8_t alpha_channel_cancel_flag; + uint8_t alpha_channel_use_idc; + uint8_t alpha_channel_bit_depth_minus8; + uint16_t alpha_transparent_value; + uint16_t alpha_opaque_value; + uint8_t alpha_channel_incr_flag; + uint8_t alpha_channel_clip_flag; + uint8_t alpha_channel_clip_type_flag; +} H265RawSEIAlphaChannelInfo; + typedef struct H265RawSEIPayload { uint32_t payload_type; uint32_t payload_size; @@ -697,6 +708,7 @@ typedef struct H265RawSEIPayload { H265RawSEIContentLightLevelInfo content_light_level; H265RawSEIAlternativeTransferCharacteristics alternative_transfer_characteristics; + H265RawSEIAlphaChannelInfo alpha_channel_info; struct { uint8_t *data; size_t data_length; diff --git a/libavcodec/cbs_h265_syntax_template.c b/libavcodec/cbs_h265_syntax_template.c index f279d283d9..54570929ec 100644 --- a/libavcodec/cbs_h265_syntax_template.c +++ b/libavcodec/cbs_h265_syntax_template.c @@ -2028,6 +2028,34 @@ static int FUNC(sei_alternative_transfer_characteristics)(CodedBitstreamContext return 0; } +static int FUNC(sei_alpha_channel_info)(CodedBitstreamContext *ctx, + RWContext *rw, + H265RawSEIAlphaChannelInfo *current) +{ + int err, length; + + HEADER("Alpha Channel Information"); + + flag(alpha_channel_cancel_flag); + if (!current->alpha_channel_cancel_flag) { + ub(3, alpha_channel_use_idc); + ub(3, alpha_channel_bit_depth_minus8); + length = current->alpha_channel_bit_depth_minus8 + 9; + ub(length, alpha_transparent_value); + ub(length, alpha_opaque_value); + flag(alpha_channel_incr_flag); + flag(alpha_channel_clip_flag); + if (current->alpha_channel_clip_flag) + flag(alpha_channel_clip_type_flag); + } else { + infer(alpha_channel_use_idc, 2); + infer(alpha_channel_incr_flag, 0); + infer(alpha_channel_clip_flag, 0); + } + + return 0; +} + static int FUNC(sei_payload)(CodedBitstreamContext *ctx, RWContext *rw, H265RawSEIPayload *current, int prefix) { @@ -2080,6 +2108,7 @@ static int FUNC(sei_payload)(CodedBitstreamContext *ctx, RWContext *rw, SEI_TYPE_N(CONTENT_LIGHT_LEVEL_INFO, 1, 0, content_light_level); SEI_TYPE_N(ALTERNATIVE_TRANSFER_CHARACTERISTICS, 1, 0, alternative_transfer_characteristics); + SEI_TYPE_N(ALPHA_CHANNEL_INFO, 1, 0, alpha_channel_info); #undef SEI_TYPE default: diff --git a/libavcodec/hevc_sei.h b/libavcodec/hevc_sei.h index 2fec00ace0..f6516ae982 100644 --- a/libavcodec/hevc_sei.h +++ b/libavcodec/hevc_sei.h @@ -56,6 +56,7 @@ typedef enum { 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_ALPHA_CHANNEL_INFO = 165, } HEVC_SEI_Type; typedef struct HEVCSEIPictureHash {