From patchwork Sun Dec 6 15:36:03 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 24368 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 D16D644B937 for ; Sun, 6 Dec 2020 17:43:57 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id B9E1368A8F1; Sun, 6 Dec 2020 17:43:57 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk1-f194.google.com (mail-qk1-f194.google.com [209.85.222.194]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 7B37E68A8F0 for ; Sun, 6 Dec 2020 17:43:51 +0200 (EET) Received: by mail-qk1-f194.google.com with SMTP id x25so10346756qkj.3 for ; Sun, 06 Dec 2020 07:43:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=4xLKRQGBWby0NuBuB/33p5OsndHXbj0cp2N1/chDV7A=; b=j3xb1eJoFCiTcUcO4u9Vgmjm5xU3w70jGZd2GA5eDHgB+1wMS9eE4AsMGd0k0dz7gG qyjZj46AbFHrNcRj6hjFu0ZxNy/jQ5cSsiosELYT5KdW9Et4AsKXDzicktA5a/vDrrBi RAEdsJAePoRxnheedSEmyM3fI/uCVri5qiRYDr8gbFdYgRP0xakezTtUMvVxEFKqWrOG Yf2LX2TNxuaKwxysEIOrUNEyBhYH0S8DjH8uWkAYxQ1Ih4Tbasx34s5LhimD+kTHzCzD ufIYB4NUuo+rty8qsRfGKO47rAog0E/CEcmIUrtcCIMAEpRPHqs1L1iKo6+g1QR3WkJx 9ZHg== 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:in-reply-to :references:mime-version:content-transfer-encoding; bh=4xLKRQGBWby0NuBuB/33p5OsndHXbj0cp2N1/chDV7A=; b=CjPQN5ZVYQUC6FoYnfRFkBkPLTD30J4FmJqWFGFQp6PE/M6YtraBuCsYbTHbQUeFPG Q8dnvURQDOLdsClvx/rX14DlQ/rLKQyC+BIJ0k/MX++r9QFiC3URNNQAfcdrlk2PMoNA s2584WVPskwB45RjwxZC8XN9VlYJ3lK/XnbWxQkNMGPTytfjsH34GAExpYgDNwMWRdq3 uR7pDiyjbGvRcKjkGAQ2k71SUxfJp2ESuIxzrnXwwISC2BTJLtzlFCz02SEa2A0+QxY7 0DIdixI7+/EBZJVOEWcRWinxetYKUj4HMi+ga4K3AelUfM0WMYehXkBxy90U6CXMcfna 1rXQ== X-Gm-Message-State: AOAM530/p6KtPkH++7q2czWUIg6IM9ggT0YqlFy8trpIgnymlpdU6AVn 2PK9TPxbPnj58Ye6DfARvQZvW4H5LTY= X-Google-Smtp-Source: ABdhPJxECzu5nYaUY8ETSwkeDDmnpPLSpGha2CsGK13uzBCLT7xcalJKZl0cmmYk0cfeP0M2vegLZg== X-Received: by 2002:a05:622a:d1:: with SMTP id p17mr19855360qtw.233.1607269005381; Sun, 06 Dec 2020 07:36:45 -0800 (PST) Received: from localhost.localdomain ([181.23.80.53]) by smtp.gmail.com with ESMTPSA id u7sm299578qke.116.2020.12.06.07.36.44 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 06 Dec 2020 07:36:44 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Sun, 6 Dec 2020 12:36:03 -0300 Message-Id: <20201206153603.6257-2-jamrial@gmail.com> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20201206153603.6257-1-jamrial@gmail.com> References: <20201206153603.6257-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/2] avcodec/dynamic_hdr10_plus: don't take a GetBitContext as input argument 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" Create a local one instead from a byte buffer input argument. Signed-off-by: James Almer --- libavcodec/dynamic_hdr10_plus.c | 13 ++++++++++--- libavcodec/dynamic_hdr10_plus.h | 7 ++++--- libavcodec/hevc_sei.c | 26 ++++++++++++++++++++------ 3 files changed, 34 insertions(+), 12 deletions(-) diff --git a/libavcodec/dynamic_hdr10_plus.c b/libavcodec/dynamic_hdr10_plus.c index 5684bfb2ef..432ef8f6a1 100644 --- a/libavcodec/dynamic_hdr10_plus.c +++ b/libavcodec/dynamic_hdr10_plus.c @@ -17,6 +17,7 @@ */ #include "dynamic_hdr10_plus.h" +#include "get_bits.h" static const uint8_t usa_country_code = 0xB5; static const uint16_t smpte_provider_code = 0x003C; @@ -30,11 +31,19 @@ static const int32_t knee_point_den = 4095; static const int32_t bezier_anchor_den = 1023; static const int32_t saturation_weight_den = 8; -int ff_parse_itu_t_t35_to_dynamic_hdr10_plus(GetBitContext *gb, AVDynamicHDRPlus *s) +int ff_parse_itu_t_t35_to_dynamic_hdr10_plus(AVDynamicHDRPlus *s, const uint8_t *data, + int size) { + GetBitContext gbc, *gb = &gbc; + int ret; + if (!s) return AVERROR(ENOMEM); + ret = init_get_bits8(gb, data, size); + if (ret < 0) + return ret; + s->application_version = get_bits(gb, 8); if (get_bits_left(gb) < 2) @@ -189,7 +198,5 @@ int ff_parse_itu_t_t35_to_dynamic_hdr10_plus(GetBitContext *gb, AVDynamicHDRPlus } } - skip_bits(gb, get_bits_left(gb)); - return 0; } diff --git a/libavcodec/dynamic_hdr10_plus.h b/libavcodec/dynamic_hdr10_plus.h index 06053f88e7..cd7acf0432 100644 --- a/libavcodec/dynamic_hdr10_plus.h +++ b/libavcodec/dynamic_hdr10_plus.h @@ -20,15 +20,16 @@ #define AVCODEC_DYNAMIC_HDR10_PLUS_H #include "libavutil/hdr_dynamic_metadata.h" -#include "get_bits.h" /** * Parse the user data registered ITU-T T.35 to AVbuffer (AVDynamicHDRPlus). - * @param gb The bit content to be decoded. * @param s A pointer containing the decoded AVDynamicHDRPlus structure. + * @param data The byte array containing the raw ITU-T T.35 data. + * @param size Size of the data array in bytes. * * @return 0 if succeed. Otherwise, returns the appropriate AVERROR. */ -int ff_parse_itu_t_t35_to_dynamic_hdr10_plus(GetBitContext *gb, AVDynamicHDRPlus *s); +int ff_parse_itu_t_t35_to_dynamic_hdr10_plus(AVDynamicHDRPlus *s, const uint8_t *data, + int size); #endif /* AVCODEC_DYNAMIC_HDR10_PLUS_H */ diff --git a/libavcodec/hevc_sei.c b/libavcodec/hevc_sei.c index 8af9f9b29d..3b0fa43439 100644 --- a/libavcodec/hevc_sei.c +++ b/libavcodec/hevc_sei.c @@ -216,7 +216,8 @@ static int decode_registered_user_data_dynamic_hdr_plus(HEVCSEIDynamicHDRPlus *s if (!metadata) return AVERROR(ENOMEM); - err = ff_parse_itu_t_t35_to_dynamic_hdr10_plus(gb, metadata); + err = ff_parse_itu_t_t35_to_dynamic_hdr10_plus(metadata, + gb->buffer + get_bits_count(gb) / 8, size); if (err < 0) { av_free(metadata); return err; @@ -229,6 +230,8 @@ static int decode_registered_user_data_dynamic_hdr_plus(HEVCSEIDynamicHDRPlus *s return AVERROR(ENOMEM); } + skip_bits_long(gb, size * 8); + return 0; } @@ -241,9 +244,9 @@ static int decode_nal_sei_user_data_registered_itu_t_t35(HEVCSEI *s, GetBitConte uint8_t country_code = 0; uint16_t provider_code = 0; - if (size < 7) + if (size < 3) return AVERROR(EINVAL); - size -= 7; + size -= 3; country_code = get_bits(gb, 8); if (country_code == 0xFF) { @@ -258,16 +261,27 @@ static int decode_nal_sei_user_data_registered_itu_t_t35(HEVCSEI *s, GetBitConte // A/341 Amendment - 2094-40 const uint16_t smpte2094_40_provider_oriented_code = 0x0001; const uint8_t smpte2094_40_application_identifier = 0x04; + uint16_t provider_oriented_code; + uint8_t application_identifier; - uint16_t provider_oriented_code = get_bits(gb, 16); - uint8_t application_identifier = get_bits(gb, 8); + if (size < 3) + return AVERROR(EINVAL); + size -= 3; + provider_oriented_code = get_bits(gb, 16); + application_identifier = get_bits(gb, 8); if (provider_oriented_code == smpte2094_40_provider_oriented_code && application_identifier == smpte2094_40_application_identifier) { return decode_registered_user_data_dynamic_hdr_plus(&s->dynamic_hdr_plus, gb, size); } } else { - uint32_t user_identifier = get_bits_long(gb, 32); + uint32_t user_identifier; + + if (size < 4) + return AVERROR(EINVAL); + size -= 4; + + user_identifier = get_bits_long(gb, 32); switch (user_identifier) { case MKBETAG('G', 'A', '9', '4'): return decode_registered_user_data_closed_caption(&s->a53_caption, gb, size);