From patchwork Tue Jun 20 14:40:42 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 42255 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:be15:b0:121:b37c:e101 with SMTP id ge21csp1442376pzb; Tue, 20 Jun 2023 07:42:06 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ6TvVEyNJB8xmlhbLAEXCLX6nwArMHWOIEi6VymK70MFtbJ/qUZ+SeCGxU8ZVKcdBGfN0rR X-Received: by 2002:a2e:9189:0:b0:2b4:75b7:edda with SMTP id f9-20020a2e9189000000b002b475b7eddamr3926825ljg.24.1687272126389; Tue, 20 Jun 2023 07:42:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1687272126; cv=none; d=google.com; s=arc-20160816; b=sysk03XGNqtU5cFlF+FFcOPEVHjjxe8ILHCo52HOTSR6B3VANztXXj/V8KMYQzRYs0 UXGWB+bcDJJhvDxT7DH1sHCPMbjqO87/WvnSaLSkN0o2RW9+Mrv8DiHUnUMTDJgayO1L MDb4ihi5/ntSL28DPr2FIhhaH20F4JurAHLXEO9ym8hGWnqSpjcIW5ttttb+/5xJPL86 R7VunQPdG5WM+PWdol2+GUmf1qj3Oj8m3NSe+KVwaibtLzIiqNpSf7rMqCm7j6lcvtgN +U4nmOpMuDVDWC6aH3DeOVt2RAFZNHNTg39RtkRf+g+fkT0C4JBVmjqrNV2XYg/xdVJi UpVg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=yS3dtfyc3q6BXZ2UhpaHjeyIrkfJsrhFH94OE/VrreU=; b=HtqDMK7D4ePraTiQ80v4+HT/usFA6b8IEhBcW2JZyMwhYctIXprWMFbjgDCXAaQzDv sVmRlg8lxm6TtllMUaOC2F74HxkCvjoGbM8ZaaF7h5qzOG/nso38P684N/fqtLSz9DgA aKCl0ouxneCWRgltf5LjuAjvgSZBNJQwpxkIVP8zz6h2DVSoUmGgV0VTan/kbAn4EUGO V4cBM1umHR+IJSvCSNec4Hzq4Z+crNzNkdud5GMH/kP+NPxSSD8X7JgJoUuJ2lySOHW8 A3I39hn0pV3ZfNINS5ZWe3XCftNqmXemZ3oag5w4F5+rmSfGCgdfSm5RQrIW4wsm1tYm 4rNg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20221208 header.b=mOkgZ3hr; 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=QUARANTINE 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 f2-20020a50ee82000000b0051a4b31542csi1243897edr.80.2023.06.20.07.42.05; Tue, 20 Jun 2023 07:42:06 -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 header.s=20221208 header.b=mOkgZ3hr; 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=QUARANTINE 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 4F9EE68C1D5; Tue, 20 Jun 2023 17:41:02 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-oa1-f44.google.com (mail-oa1-f44.google.com [209.85.160.44]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6DDE568C1D5 for ; Tue, 20 Jun 2023 17:40:55 +0300 (EEST) Received: by mail-oa1-f44.google.com with SMTP id 586e51a60fabf-1aa291b3fc9so2090490fac.0 for ; Tue, 20 Jun 2023 07:40:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1687272054; x=1689864054; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=P5wTNuJOiiwOXSYM9lGpBVCBpHLjeuYSyw3kORAISuI=; b=mOkgZ3hreDbqt3D90q0tlRxWXZ/8xiNJ013J57P8HGlm+piruquxqShdiqVZ2tx/Ut Kda2tu2ffgzRw0IJS5WyQBJxuetrY0bpMyhPvV9BaoaqK5K3HkLvAPvv16O/eZOMldbj eIUKrH2cmLK9a6nfGyCJI86GqccCHu40P1PzF5B80M2eG5KgA6S6nBDDzDANch41x405 PKLnEW3UIU9uaM1KEGOohjtHfILwbS45tIDkLKYuff1vfrCotIWZA6htslNUE/HooHix ieuJuJKL6ijxf6BfYKXQH5yNDF7QIfgLjORjwukMu+A4hlu64AKeMY9LIAWwCodvJMAd 22FA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1687272054; x=1689864054; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=P5wTNuJOiiwOXSYM9lGpBVCBpHLjeuYSyw3kORAISuI=; b=bM2xbGMZfLkVGCT3fYyxyhkRHS6xOZCMV7zVRG0io18601onFuB+ewX0xPLrWtHp7T Qa4Po/FLn4ImYKfGBj8da2VXXAWsT3z7YaNOJYp+MhfsW/QUQN7o/sZ1aL05Fn/j458y 2n4SQjNMwZJxn+vmIANA6e/ffFa6NRfzUT0IiucyU7ePsBIaVE051/LZykOa2nZpZ/X+ 9JOEMDSO/fP5kPUNsfacZctNpfvZ6w5YikU33vx7GQNmCbLpNGkU/2+6Xl/AmFbJ/34s IEMji/HJLvWHJ7NBI7Dqcq5a5f69mJRTnhXjLoJBAvGrEU4hHaZMMtAK+/bq+o1iDzOL bqiQ== X-Gm-Message-State: AC+VfDz6luw25dXNW0z2s7w8l4ptbuzPkITdGba2fhondoz2IqGH5IKE SYaHcl+DGBbY1H/Hllw0ouCSf5QEFWg= X-Received: by 2002:a05:6870:e292:b0:1a9:d5c9:4e58 with SMTP id v18-20020a056870e29200b001a9d5c94e58mr9624565oad.29.1687272053753; Tue, 20 Jun 2023 07:40:53 -0700 (PDT) Received: from localhost.localdomain (host197.190-225-105.telecom.net.ar. [190.225.105.197]) by smtp.gmail.com with ESMTPSA id nl13-20020a056871458d00b001a69e7efd13sm1417838oab.5.2023.06.20.07.40.52 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 20 Jun 2023 07:40:53 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Tue, 20 Jun 2023 11:40:42 -0300 Message-ID: <20230620144042.9629-9-jamrial@gmail.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230620144042.9629-1-jamrial@gmail.com> References: <20230620144042.9629-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 9/9] avformat/evc: move NALU length and type parsing functions to a header X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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" X-TUID: pDB1CWRz1yuM Signed-off-by: James Almer --- libavformat/evc.c | 5 ++--- libavformat/evc.h | 30 ++++++++++++++++++++++++++++++ libavformat/evcdec.c | 44 ++++---------------------------------------- 3 files changed, 36 insertions(+), 43 deletions(-) diff --git a/libavformat/evc.c b/libavformat/evc.c index 421ff84cb7..f6e53aa6cf 100644 --- a/libavformat/evc.c +++ b/libavformat/evc.c @@ -23,7 +23,6 @@ #include "libavcodec/get_bits.h" #include "libavcodec/golomb.h" #include "libavcodec/evc.h" -#include "libavcodec/evc_parse.h" #include "avformat.h" #include "avio.h" #include "evc.h" @@ -361,7 +360,7 @@ int ff_isom_write_evcc(AVIOContext *pb, const uint8_t *data, evcc_init(&evcc); while (bytes_to_read > EVC_NALU_LENGTH_PREFIX_SIZE) { - nalu_size = evc_read_nal_unit_length(data, EVC_NALU_LENGTH_PREFIX_SIZE, pb); + nalu_size = evc_read_nal_unit_length(data, EVC_NALU_LENGTH_PREFIX_SIZE); if (nalu_size == 0) break; data += EVC_NALU_LENGTH_PREFIX_SIZE; @@ -369,7 +368,7 @@ int ff_isom_write_evcc(AVIOContext *pb, const uint8_t *data, if (bytes_to_read < nalu_size) break; - nalu_type = evc_get_nalu_type(data, bytes_to_read, pb); + nalu_type = evc_get_nalu_type(data, bytes_to_read); if (nalu_type < EVC_NOIDR_NUT || nalu_type > EVC_UNSPEC_NUT62) { ret = AVERROR_INVALIDDATA; goto end; diff --git a/libavformat/evc.h b/libavformat/evc.h index db56275fd8..46b27f7df7 100644 --- a/libavformat/evc.h +++ b/libavformat/evc.h @@ -24,9 +24,39 @@ #include #include "libavutil/rational.h" +#include "libavcodec/evc.h" #include "avio.h" +static inline int evc_get_nalu_type(const uint8_t *bits, int bits_size) +{ + int unit_type_plus1 = 0; + if (bits_size >= EVC_NALU_HEADER_SIZE) { + unsigned char *p = (unsigned char *)bits; + // forbidden_zero_bit + if ((p[0] & 0x80) != 0) // Cannot get bitstream information. Malformed bitstream. + return -1; + + // nal_unit_type + unit_type_plus1 = (p[0] >> 1) & 0x3F; + } + + return unit_type_plus1 - 1; +} + +static inline uint32_t evc_read_nal_unit_length(const uint8_t *bits, int bits_size) +{ + uint32_t nalu_len = 0; + + if (bits_size >= EVC_NALU_LENGTH_PREFIX_SIZE) { + unsigned char *p = (unsigned char *)bits; + + for (int i = 0; i < EVC_NALU_LENGTH_PREFIX_SIZE; i++) + nalu_len = (nalu_len << 8) | p[i]; + } + + return nalu_len; +} /** * Writes EVC sample metadata to the provided AVIOContext. diff --git a/libavformat/evcdec.c b/libavformat/evcdec.c index ef743028ae..73aab6c52f 100644 --- a/libavformat/evcdec.c +++ b/libavformat/evcdec.c @@ -31,6 +31,7 @@ #include "rawdec.h" #include "avformat.h" #include "avio_internal.h" +#include "evc.h" #include "internal.h" @@ -59,43 +60,6 @@ static const AVClass evc_demuxer_class = { .version = LIBAVUTIL_VERSION_INT, }; -static int get_nalu_type(const uint8_t *bits, int bits_size) -{ - int unit_type_plus1 = 0; - - if (bits_size >= EVC_NALU_HEADER_SIZE) { - unsigned char *p = (unsigned char *)bits; - // forbidden_zero_bit - if ((p[0] & 0x80) != 0) // Cannot get bitstream information. Malformed bitstream. - return -1; - - // nal_unit_type - unit_type_plus1 = (p[0] >> 1) & 0x3F; - } - - return unit_type_plus1 - 1; -} - -static uint32_t read_nal_unit_length(const uint8_t *bits, int bits_size) -{ - uint32_t nalu_len = 0; - - if (bits_size >= EVC_NALU_LENGTH_PREFIX_SIZE) { - - int t = 0; - unsigned char *p = (unsigned char *)bits; - - for (int i = 0; i < EVC_NALU_LENGTH_PREFIX_SIZE; i++) - t = (t << 8) | p[i]; - - nalu_len = t; - if (nalu_len == 0) // Invalid bitstream size - return 0; - } - - return nalu_len; -} - static int annexb_probe(const AVProbeData *p) { int nalu_type; @@ -106,7 +70,7 @@ static int annexb_probe(const AVProbeData *p) while (bytes_to_read > EVC_NALU_LENGTH_PREFIX_SIZE) { - nalu_size = read_nal_unit_length(bits, EVC_NALU_LENGTH_PREFIX_SIZE); + nalu_size = evc_read_nal_unit_length(bits, EVC_NALU_LENGTH_PREFIX_SIZE); if (nalu_size == 0) break; bits += EVC_NALU_LENGTH_PREFIX_SIZE; @@ -114,7 +78,7 @@ static int annexb_probe(const AVProbeData *p) if(bytes_to_read < nalu_size) break; - nalu_type = get_nalu_type(bits, bytes_to_read); + nalu_type = evc_get_nalu_type(bits, bytes_to_read); if (nalu_type == EVC_SPS_NUT) got_sps++; @@ -199,7 +163,7 @@ static int evc_read_packet(AVFormatContext *s, AVPacket *pkt) if (ret < 0) return ret; - nalu_size = read_nal_unit_length((const uint8_t *)&buf, EVC_NALU_LENGTH_PREFIX_SIZE); + nalu_size = evc_read_nal_unit_length((const uint8_t *)&buf, EVC_NALU_LENGTH_PREFIX_SIZE); if (!nalu_size || nalu_size > INT_MAX) return AVERROR_INVALIDDATA;