From patchwork Sat Oct 22 21:02:22 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 38913 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:4a86:b0:9d:28a3:170e with SMTP id fn6csp1439152pzb; Sat, 22 Oct 2022 14:03:35 -0700 (PDT) X-Google-Smtp-Source: AMsMyM7aHbhpkxs47/U8qdepvZlh/hTM/t3L0PhJT5ZmIrFwsYOkftSk5BnEhAsHDB/3kfwwg3AQ X-Received: by 2002:a17:907:7704:b0:780:da38:4480 with SMTP id kw4-20020a170907770400b00780da384480mr21465126ejc.64.1666472615143; Sat, 22 Oct 2022 14:03:35 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1666472615; cv=none; d=google.com; s=arc-20160816; b=pnyHtjNu/wwdKqKw0AFkSnCrwi6n+n6cAImcS7FpGvXligOGWBrZmQdeemlw9krsmD vnWJJkYR87d9/Ns3vxi45WPXdYIxhn8vAEVUQXgtb7Ykv8z1nQgHqowHs5yf5Qa6Z46i X0r/rUP4yh9WSwILxRLL3qiJ21ZbEIO9eDRN9gsqvlszSaZuWf76RF3GlzpdvwkH/zQV WgBHbV738b8d9nM0mV9OZgpw649XPzDXhDg1XyPWKtVCAHW2BfOYtetbwJE5l9s0u2ol YBNhenCGWFxLti5wGAgxImWP9TUESKQMZW0TEoVVrjCEVbGVHzDuWV/DvvgkFq0SQPcC Mm3w== 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:message-id:date:to:from :dkim-signature:delivered-to; bh=KtrD/lCP/5+Kc1FK4yNR89KdfrsolQO3Yu93PkkN6f0=; b=YLw1FB7p/4RQVqVWOkyYpX+zBi5hEfaeIRFDORxZtzfzPC2+sldTW5gA1sAvq6KKaQ 5YsO8FM9JjDqJUunj8kuuUsFlPdmVlWE4AeAU1JibFoMXqxJ7wVUlG95r6Ax9bgQSUA7 pVX/UTqCffhbak4yKvlCjrJD0XY3IKaWVtEeYFK4Va/LKV+wPSD9XoOc0rdrJB/eVcEZ AT2l9ufXwzBkqKHFTljAi1mc5TOWsP3vIzsZSbIV73ZFRqVLVfAFtsfgiWaBdYoPlX4m ps7LJIFEoYXd2iSxyGP0KZ3G6HvGIuXhRuWuMUb1idY3Qag6S8VpZzpEUsIGsQNJOgTq nsAQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=paWmyUQx; 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 ji11-20020a170907980b00b0077f4fcfe49csi25542382ejc.905.2022.10.22.14.03.33; Sat, 22 Oct 2022 14:03:35 -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=20210112 header.b=paWmyUQx; 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 A7F6168BD39; Sun, 23 Oct 2022 00:03:29 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-oi1-f180.google.com (mail-oi1-f180.google.com [209.85.167.180]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0EAE668BCB2 for ; Sun, 23 Oct 2022 00:03:23 +0300 (EEST) Received: by mail-oi1-f180.google.com with SMTP id j188so7067562oih.4 for ; Sat, 22 Oct 2022 14:03:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:from:to:cc:subject:date:message-id:reply-to; bh=4h67FiiQr3/D3RB+hvd/St1ay5IB7h39azYl7ihl8Ow=; b=paWmyUQx4McYhPOgfq05w9V2emO71boPXory8mj5KTJSKcEdlt50TuXRIXhBvwruF+ GKZCE6j6sfFPenovrX3CXhg4tub6rHu1X3V1IGWcR4C8SuY/PcyN2WPmkl+X+E5Kmw4s I8RZTAEf2tTefw4U20ooTLyoyWlOH4uu5kgv4e3me/3QoE16l7wb3NrbwJaN7YQx9gux UIyL47TeL441jgFU0NWLOqfpX4hLpibFIH1qW39G9frK3/SgbfV7Zbi/9u8TI4MtIZZP jGta95KSGtr4vnJ76QCmiLCLmpq9Ig0ohQyHH8ydvoTFw2yRTUsObqC5Fkg2V7gi41sB /+Bg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=4h67FiiQr3/D3RB+hvd/St1ay5IB7h39azYl7ihl8Ow=; b=D+dqB7cJnrgOLNll36uKmi1J686uDj+UsfQkRY/UxoKQU5FSKBK9pKeKGFhYlRxMn1 OKbY/AarAbuuCxN30kSDM9RQ/6tLtbCwpiGfEq5RNqPU2tOvAfeKfQQ/V0Y5w3eyRaDC Y9lexRu3I4Hu2bunuBo6+HOJv/ofKVL1nWdx+hemR0k1jqmW8r0h7r3VIB20al4bmD1R ZDODHxC2pf4YjoSr8Mt0CRJ/9p3Xmc6ywMlPjWhkP5hysek/4y8+Lha5TTH5UEOgD0nS fWb3jCvS0fU15b5N/4kKzVgD38zH6PIwNhwWRMKVp6tp3WiAT5kw98xaR8kzEwC8Y1p5 OQzw== X-Gm-Message-State: ACrzQf1LEfj+GXrrlaWGQ9YC03gVgpcQCfYFR698Wv4tQygPtGtSt/jI zrL6Co3MRlCLCvpv4cB7UoWYuPuPsv4= X-Received: by 2002:a05:6808:15a0:b0:354:eb66:b7ba with SMTP id t32-20020a05680815a000b00354eb66b7bamr13865990oiw.102.1666472600896; Sat, 22 Oct 2022 14:03:20 -0700 (PDT) Received: from localhost.localdomain ([191.97.187.183]) by smtp.gmail.com with ESMTPSA id q9-20020a05683033c900b006622d085a7fsm1850663ott.50.2022.10.22.14.03.19 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 22 Oct 2022 14:03:20 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Sat, 22 Oct 2022 18:02:22 -0300 Message-Id: <20221022210226.2200-1-jamrial@gmail.com> X-Mailer: git-send-email 2.37.3 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/5 v2] avcodec/ac3dec: split off code discarding garbage at the beginning of a packet 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: 7a2FsYL9KAgL Signed-off-by: James Almer --- No changes since v1. libavcodec/ac3_parser.c | 19 +++++++++++++++++++ libavcodec/ac3_parser_internal.h | 2 ++ libavcodec/ac3dec.c | 15 ++------------- 3 files changed, 23 insertions(+), 13 deletions(-) diff --git a/libavcodec/ac3_parser.c b/libavcodec/ac3_parser.c index 4f154bb7c4..425e1b4742 100644 --- a/libavcodec/ac3_parser.c +++ b/libavcodec/ac3_parser.c @@ -53,6 +53,25 @@ static const uint8_t center_levels[4] = { 4, 5, 6, 5 }; */ static const uint8_t surround_levels[4] = { 4, 6, 7, 6 }; +int ff_ac3_find_syncword(const uint8_t *buf, int buf_size) +{ + int i; + + for (i = 1; i < buf_size; i += 2) { + if (buf[i] == 0x77 || buf[i] == 0x0B) { + if ((buf[i] ^ buf[i-1]) == (0x77 ^ 0x0B)) { + i--; + break; + } else if ((buf[i] ^ buf[i+1]) == (0x77 ^ 0x0B)) { + break; + } + } + } + if (i >= buf_size) + return AVERROR_INVALIDDATA; + + return i; +} int ff_ac3_parse_header(GetBitContext *gbc, AC3HeaderInfo *hdr) { diff --git a/libavcodec/ac3_parser_internal.h b/libavcodec/ac3_parser_internal.h index bd4e1bbffb..2ac0e67ec2 100644 --- a/libavcodec/ac3_parser_internal.h +++ b/libavcodec/ac3_parser_internal.h @@ -79,4 +79,6 @@ int ff_ac3_parse_header(GetBitContext *gbc, AC3HeaderInfo *hdr); int avpriv_ac3_parse_header(AC3HeaderInfo **hdr, const uint8_t *buf, size_t size); +int ff_ac3_find_syncword(const uint8_t *buf, int buf_size); + #endif /* AVCODEC_AC3_PARSER_INTERNAL_H */ diff --git a/libavcodec/ac3dec.c b/libavcodec/ac3dec.c index 340f6e1e37..8e40587ff1 100644 --- a/libavcodec/ac3dec.c +++ b/libavcodec/ac3dec.c @@ -1508,19 +1508,8 @@ static int ac3_decode_frame(AVCodecContext *avctx, AVFrame *frame, s->superframe_size = 0; buf_size = full_buf_size; - for (i = 1; i < buf_size; i += 2) { - if (buf[i] == 0x77 || buf[i] == 0x0B) { - if ((buf[i] ^ buf[i-1]) == (0x77 ^ 0x0B)) { - i--; - break; - } else if ((buf[i] ^ buf[i+1]) == (0x77 ^ 0x0B)) { - break; - } - } - } - if (i >= buf_size) - return AVERROR_INVALIDDATA; - if (i > 10) + i = ff_ac3_find_syncword(buf, buf_size); + if (i < 0 || i > 10) return i; buf += i; buf_size -= i; From patchwork Sat Oct 22 21:02:23 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 38914 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:4a86:b0:9d:28a3:170e with SMTP id fn6csp1439186pzb; Sat, 22 Oct 2022 14:03:45 -0700 (PDT) X-Google-Smtp-Source: AMsMyM48XHM2ntRALXXBbDoqw/fp2mrmDo6Ucg6YPHg5gyGga+R8PWKiHO+YUTFWRDhKuvIesCqk X-Received: by 2002:aa7:c78e:0:b0:456:c524:90ec with SMTP id n14-20020aa7c78e000000b00456c52490ecmr23709024eds.192.1666472624640; Sat, 22 Oct 2022 14:03:44 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1666472624; cv=none; d=google.com; s=arc-20160816; b=SYtKBAFBdw0762G0xcPC9+MvdnQcd2mOrP5ZrLLj8FWmGgi48wQB0ouC3wNCHuMt3c orP/XzwNxhpDVpM3aT8jakhavrIQe/njCxjLDTiKtH5VMZA6l06TGX2BtqRVA8rbNFHz j1FpoNC5tmHJBpQmEiN0zXEGpAuyZA/6MmmKwDq4lQurwgHvchULljdEslL5jl51Senz Thj4pyyWF+7F6u4e0RxUtC8m28wLwYNErDbMZepSw+BUFY3IPC29tsGU9HbO7Isdwf4h aaa8VMCRIZ5tEeYU4lYA+8QFeWw+uy9LYCtNpny4U/fvcUnePptNiwsHIMxQ314rWOsl Bunw== 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=to3IiGiV0jCMUFGJN+K4c7nj3pZdAKLGO34QJuY7KI4=; b=iyzu7YlcCqRV08y/jFNCu+wz0625UJtW7EWXt4N3HKxuzkC/kVk3ELjVLil6GGBMvv 1eBdSxgO0ZXFhkNqD5Y4xStHcbTXNMy2h+IblLtGicOejkq86p4LCBZZ3lNBEarT4P6t MfctZkPq9nsXMn/0NwAanbp2h2ObQS0uY4Js0cXtLjoWMDr5Hf5rJmwlP1YRT0+TcnUO Tc1ONVWnYN+qDoWBM5blHmq1EZEr8c6kHQzMkMX2vsQhjmUKnGSSnDSpZi/T7bIgMwUN hUnlrDDH2b8089kbtFOeRiTzvwKrKtv2nNTGMguiAKip4NMC7BxASb4doi2KLDJfZMN7 UrOA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=hg+Fa77j; 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 l15-20020a170906794f00b0078333d9f17bsi25627270ejo.819.2022.10.22.14.03.44; Sat, 22 Oct 2022 14:03: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 header.s=20210112 header.b=hg+Fa77j; 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 BE14F68BCC2; Sun, 23 Oct 2022 00:03:31 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ot1-f47.google.com (mail-ot1-f47.google.com [209.85.210.47]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 188F968BCB8 for ; Sun, 23 Oct 2022 00:03:24 +0300 (EEST) Received: by mail-ot1-f47.google.com with SMTP id z11-20020a05683020cb00b00661a95cf920so3865309otq.5 for ; Sat, 22 Oct 2022 14:03:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; 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=SaPk2v3HhgvjzH9t54f8MukptjxWysbGcLhP4WKN4w0=; b=hg+Fa77jdyZhWSpD0gOlfxgmS0nYaWaPPGadVI0PH1qQRg5gPcPNCLTCiwnmM+Qnrj w+T55jG8z0Tnn3x6ZJQyB1VqU9HW2lcnsRgM7s/sPj59Sb9WwhXK9Bi455l0bJ5ThzO4 eVzhL9ojATPyrUx3qFDDpSofWD7Ts1bwmEnjf1D3zFQuXFkAez3NklxXQ4whdmh2j6uE rAcYPBzd8ZELUyEn2SCL+mSLIjOAl88UPYPC20tXtZssDfKLHl+6j6xQki+DSrnAEhZc yYjOMQGJPpI+Q8TLQFYfoiSW3YhKvGGnHN7/MvIPNQ7vH51NeM75daNkenVkTZBSBcXs /pJA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; 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=SaPk2v3HhgvjzH9t54f8MukptjxWysbGcLhP4WKN4w0=; b=l3rKYnko62qbrt7Lmkx0RPZFkCBECXS0fKqQkHr43DL1ZX0FfN9R7adXv8U+SpZZiG jn3jBCtNfXMRWmbddG03IdAtqbeoXf505fnZjS/jDha5wfUN5H20gdIf7Lu0x7vyfY/l P7wboy3lmj4EkiZL6DOngZLnvHaMYB15XjjPy+j5WgBEX5b8Pr+NaUFCOHllAiArsUjf cWK4tvcVR1scfGi31SSGRzd/sn/wt4mruCNDeBUgthdNU9aSkzX4wq647nP5/gEcTnmV mtbkyNwgtjpZsqoUchnD4KMm6tpS3lYQbEol8HjEv4pEdsw4WP3NQ9hldtMbA5AxLlM5 tIag== X-Gm-Message-State: ACrzQf3DzCnS64We66Fc4Bh6kWl4Yo30m5KefHDrmzWUgTnOq5JpkXWd burlbXYO9wIUaPRK7a5tvUgYf6A3z+E= X-Received: by 2002:a9d:5e04:0:b0:661:b01c:9817 with SMTP id d4-20020a9d5e04000000b00661b01c9817mr13101483oti.52.1666472602108; Sat, 22 Oct 2022 14:03:22 -0700 (PDT) Received: from localhost.localdomain ([191.97.187.183]) by smtp.gmail.com with ESMTPSA id q9-20020a05683033c900b006622d085a7fsm1850663ott.50.2022.10.22.14.03.21 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 22 Oct 2022 14:03:21 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Sat, 22 Oct 2022 18:02:23 -0300 Message-Id: <20221022210226.2200-2-jamrial@gmail.com> X-Mailer: git-send-email 2.37.3 In-Reply-To: <20221022210226.2200-1-jamrial@gmail.com> References: <20221022210226.2200-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/5] avcodec/aac_ac3_parser: don't fill stream info in the sync function 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: 52HBxSqxzXgv Have it only find frame boundaries. The stream props will then be filled once we have an assembled frame. Signed-off-by: James Almer --- libavcodec/aac_ac3_parser.c | 63 +++++++++++++++++++++++++++++-------- libavcodec/aac_ac3_parser.h | 12 +------ libavcodec/aac_parser.c | 7 +---- libavcodec/ac3_parser.c | 16 +--------- 4 files changed, 53 insertions(+), 45 deletions(-) diff --git a/libavcodec/aac_ac3_parser.c b/libavcodec/aac_ac3_parser.c index b14b1e31f9..6df064e28d 100644 --- a/libavcodec/aac_ac3_parser.c +++ b/libavcodec/aac_ac3_parser.c @@ -26,6 +26,8 @@ #include "libavutil/common.h" #include "parser.h" #include "aac_ac3_parser.h" +#include "ac3_parser_internal.h" +#include "adts_header.h" int ff_aac_ac3_parse(AVCodecParserContext *s1, AVCodecContext *avctx, @@ -48,7 +50,7 @@ get_next: len=0; for(i=s->remaining_size; istate = (s->state<<8) + buf[i]; - if((len=s->sync(s->state, s, &s->need_next_header, &new_frame_start))) + if((len=s->sync(s->state, &s->need_next_header, &new_frame_start))) break; } if(len<=0){ @@ -79,42 +81,77 @@ get_next: *poutbuf = buf; *poutbuf_size = buf_size; - /* update codec info */ - if(s->codec_id) - avctx->codec_id = s->codec_id; - if (got_frame) { + int bit_rate; + /* Due to backwards compatible HE-AAC the sample rate, channel count, and total number of samples found in an AAC ADTS header are not reliable. Bit rate is still accurate because the total frame duration in seconds is still correct (as is the number of bits in the frame). */ if (avctx->codec_id != AV_CODEC_ID_AAC) { - avctx->sample_rate = s->sample_rate; + AC3HeaderInfo hdr, *phrd = &hdr; + int offset = ff_ac3_find_syncword(buf, buf_size); + + if (offset < 0) + return i; + + buf += offset; + buf_size -= offset; + while (buf_size > 0) { + int ret = avpriv_ac3_parse_header(&phrd, buf, buf_size); + + if (ret < 0 || hdr.frame_size > buf_size) + return i; + + if (buf_size > hdr.frame_size) { + buf += hdr.frame_size; + buf_size -= hdr.frame_size; + continue; + } + break; + } + + avctx->sample_rate = hdr.sample_rate; + + if (hdr.bitstream_id > 10) + avctx->codec_id = AV_CODEC_ID_EAC3; + if (!CONFIG_EAC3_DECODER || avctx->codec_id != AV_CODEC_ID_EAC3) { av_channel_layout_uninit(&avctx->ch_layout); - if (s->channel_layout) { - av_channel_layout_from_mask(&avctx->ch_layout, s->channel_layout); + if (hdr.channel_layout) { + av_channel_layout_from_mask(&avctx->ch_layout, hdr.channel_layout); } else { avctx->ch_layout.order = AV_CHANNEL_ORDER_UNSPEC; - avctx->ch_layout.nb_channels = s->channels; + avctx->ch_layout.nb_channels = hdr.channels; } #if FF_API_OLD_CHANNEL_LAYOUT FF_DISABLE_DEPRECATION_WARNINGS avctx->channels = avctx->ch_layout.nb_channels; - avctx->channel_layout = s->channel_layout; + avctx->channel_layout = hdr.channel_layout; FF_ENABLE_DEPRECATION_WARNINGS #endif } - s1->duration = s->samples; - avctx->audio_service_type = s->service_type; + s1->duration = hdr.num_blocks * 256; + avctx->audio_service_type = hdr.bitstream_mode; + if (hdr.bitstream_mode == 0x7 && hdr.channels > 1) + avctx->audio_service_type = AV_AUDIO_SERVICE_TYPE_KARAOKE; + bit_rate = hdr.bit_rate; + } else { + AACADTSHeaderInfo hdr, *phrd = &hdr; + int ret = avpriv_adts_header_parse(&phrd, buf, buf_size); + + if (ret < 0) + return i; + + bit_rate = hdr.bit_rate; } /* Calculate the average bit rate */ s->frame_number++; if (!CONFIG_EAC3_DECODER || avctx->codec_id != AV_CODEC_ID_EAC3) { avctx->bit_rate += - (s->bit_rate - avctx->bit_rate) / s->frame_number; + (bit_rate - avctx->bit_rate) / s->frame_number; } } diff --git a/libavcodec/aac_ac3_parser.h b/libavcodec/aac_ac3_parser.h index 8b93cbf84f..560bba54f5 100644 --- a/libavcodec/aac_ac3_parser.h +++ b/libavcodec/aac_ac3_parser.h @@ -39,24 +39,14 @@ typedef enum { typedef struct AACAC3ParseContext { ParseContext pc; - int frame_size; int header_size; - int (*sync)(uint64_t state, struct AACAC3ParseContext *hdr_info, - int *need_next_header, int *new_frame_start); - - int channels; - int sample_rate; - int bit_rate; - int samples; - uint64_t channel_layout; - int service_type; + int (*sync)(uint64_t state, int *need_next_header, int *new_frame_start); int remaining_size; uint64_t state; int need_next_header; int frame_number; - enum AVCodecID codec_id; } AACAC3ParseContext; int ff_aac_ac3_parse(AVCodecParserContext *s1, diff --git a/libavcodec/aac_parser.c b/libavcodec/aac_parser.c index f3baf7cde3..f295dfccdd 100644 --- a/libavcodec/aac_parser.c +++ b/libavcodec/aac_parser.c @@ -27,8 +27,7 @@ #include "get_bits.h" #include "mpeg4audio.h" -static int aac_sync(uint64_t state, AACAC3ParseContext *hdr_info, - int *need_next_header, int *new_frame_start) +static int aac_sync(uint64_t state, int *need_next_header, int *new_frame_start) { GetBitContext bits; AACADTSHeaderInfo hdr; @@ -46,10 +45,6 @@ static int aac_sync(uint64_t state, AACAC3ParseContext *hdr_info, return 0; *need_next_header = 0; *new_frame_start = 1; - hdr_info->sample_rate = hdr.sample_rate; - hdr_info->channels = ff_mpeg4audio_channels[hdr.chan_config]; - hdr_info->samples = hdr.samples; - hdr_info->bit_rate = hdr.bit_rate; return size; } diff --git a/libavcodec/ac3_parser.c b/libavcodec/ac3_parser.c index 425e1b4742..8885e1c72e 100644 --- a/libavcodec/ac3_parser.c +++ b/libavcodec/ac3_parser.c @@ -215,8 +215,7 @@ int av_ac3_parse_header(const uint8_t *buf, size_t size, return 0; } -static int ac3_sync(uint64_t state, AACAC3ParseContext *hdr_info, - int *need_next_header, int *new_frame_start) +static int ac3_sync(uint64_t state, int *need_next_header, int *new_frame_start) { int err; union { @@ -238,19 +237,6 @@ static int ac3_sync(uint64_t state, AACAC3ParseContext *hdr_info, if(err < 0) return 0; - hdr_info->sample_rate = hdr.sample_rate; - hdr_info->bit_rate = hdr.bit_rate; - hdr_info->channels = hdr.channels; - hdr_info->channel_layout = hdr.channel_layout; - hdr_info->samples = hdr.num_blocks * 256; - hdr_info->service_type = hdr.bitstream_mode; - if (hdr.bitstream_mode == 0x7 && hdr.channels > 1) - hdr_info->service_type = AV_AUDIO_SERVICE_TYPE_KARAOKE; - if(hdr.bitstream_id>10) - hdr_info->codec_id = AV_CODEC_ID_EAC3; - else if (hdr_info->codec_id == AV_CODEC_ID_NONE) - hdr_info->codec_id = AV_CODEC_ID_AC3; - *new_frame_start = (hdr.frame_type != EAC3_FRAME_TYPE_DEPENDENT); *need_next_header = *new_frame_start || (hdr.frame_type != EAC3_FRAME_TYPE_AC3_CONVERT); return hdr.frame_size; From patchwork Sat Oct 22 21:02:24 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 38915 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:4a86:b0:9d:28a3:170e with SMTP id fn6csp1439280pzb; Sat, 22 Oct 2022 14:04:02 -0700 (PDT) X-Google-Smtp-Source: AMsMyM4XRjfpkQw0krOCal3jFrRMUbZ/MCLX7agLPfJ67f70Qa4M3SjCJBbSC82eSwNhLFL8PhmD X-Received: by 2002:a05:6402:274c:b0:461:9cbd:8ad5 with SMTP id z12-20020a056402274c00b004619cbd8ad5mr1130498edd.349.1666472642466; Sat, 22 Oct 2022 14:04:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1666472642; cv=none; d=google.com; s=arc-20160816; b=cIFP8CqzJ2wikOpk9AttgvPmlZI+k50C98PhigC21UTH5N6tZex7T8E1aWYZuNllgh UR/BewjyD3nJFbIFDGar0E8/wHOzf0vkipXGK8b63a8971FwOM+DqME9xpe1km3JvP3d RS8FBBu5O28TvpvqBhc6p6GFSCmvg0jSpB4atP/ipMjjhPYKHpxJ2/JLeCJrIAoaKhlj qA6FFInobFfM8TW2kscI2pGREO2S1XxtFm7c47NkvtqDjHqT0AhUbb8OiZxca4cJ5MVy j/nBPUEB9rnXLCvM0nyX8lvBB1lv97tQeyGjmLRFq76C6S5snzSvtYKhAoksywDjh3sO x+DA== 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=y7dgxE4gwqqMGe57qOOrDsvQfsC8QvCL2a6Poj8cIUg=; b=w1TTKjAoinWH9L6mDHRvV3D1OxrFX9SqecvO7tnvrcH8+PU88gQG3tLiO4HnavqsWU jvGOGfTSgRA6Ri5pW6O55R/7iw0foph5ValW33fuplyRIoGu47DEx9XAZe6PesqkeTnS U2cQKdaPLNntQwAzO5X+2bdr3zAjAyuMG2parDf2mNYKd19wZgVb4hM7cv7sqV6H+S0v aXZbzQg1vz+Bi68Qs8N4wJHtyr52yLhudH7813uguuv4NcD4vjN7aCj13Lo7aYLBl+go L8cBidA4okdx6/r9per8aLASIsxfqSETdgiZTEB+ZewqOGAQtGznaAgylesD1oXsK7Li lWeg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=jrGQdikL; 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 q13-20020a056402518d00b0045e00384e8asi14442893edd.380.2022.10.22.14.04.01; Sat, 22 Oct 2022 14:04:02 -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=20210112 header.b=jrGQdikL; 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 E249468BD7B; Sun, 23 Oct 2022 00:03:33 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-oa1-f53.google.com (mail-oa1-f53.google.com [209.85.160.53]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E555368BCFB for ; Sun, 23 Oct 2022 00:03:25 +0300 (EEST) Received: by mail-oa1-f53.google.com with SMTP id 586e51a60fabf-13aeccf12fbso7696561fac.11 for ; Sat, 22 Oct 2022 14:03:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; 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=wFS2AGy8pHijwIXaNY5DVZ0xvI7r5kwV6fyTF7t9K40=; b=jrGQdikLSysJ3SgIG6+rgK54xF/Xjc1hMwyPqfZ6b8GC/tLWcU9JjG4zLBvVI41GMN GMWO1whdGFuZTGdoBsFuLDOrZhVlzelt4FibjUjiGvFuNYrVLhxINlh4oIffUsc/qQp1 ZQv3MmepLGzCE2rQxeVuCIAefFozbTuxml9eecrtWmC6EgkMb9gMKWATWoIHgN809NeU eqpZCqX3WtcjbI8TwlKjlonCA8mVABDZXw0ed7qYn9JJlpeUrv/3FnPcrtR3R+2Dhnd+ ST3qRzrqdhYgPpLVmhNTDhwMWr1VonajmTdjqrPoFAf1+swPHbwqNPOeuGw+UfJjxw45 iefg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; 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=wFS2AGy8pHijwIXaNY5DVZ0xvI7r5kwV6fyTF7t9K40=; b=q/eypuywoZ3/5X7sk344GTLqHWHLBbhwUNDVx8Ko4LOpm06/nqzz5Kb2K8tfnIZJgH wjlq/D8hhXGrtb2PGkSdlEEOi/yhsyJC3vHsBYgTpBggIBlzRe8YGYHRhIlGgHzGVWxu ANvtdueUkCSPAO2m+eFCs/IqpKZI9klM2jwgTx9CQMc83oIuhYJf48VK/QeInzN4Zaiq GzOPtlI8CUKVpPdGKwif9zESFOg33i8o8knI914LPV4fVppQaOfGwyMsn25CXpyVReV3 zUV85c8WNxCukL9zLfMMJMovVF/ceO9VJgBShjEfBrJF3AQ2EEKIDy/kCnE+icSeElEU dK/g== X-Gm-Message-State: ACrzQf0uhv3WDKGy1cWPmtSEfdtZ1NFHFoiV4ArNBNcZDRuk2MEvd1sH iE5RQNg22+wE2vrJ+vlzkWYz7vPQOz8= X-Received: by 2002:a05:6870:47a8:b0:136:db1c:57b7 with SMTP id c40-20020a05687047a800b00136db1c57b7mr31934794oaq.52.1666472603249; Sat, 22 Oct 2022 14:03:23 -0700 (PDT) Received: from localhost.localdomain ([191.97.187.183]) by smtp.gmail.com with ESMTPSA id q9-20020a05683033c900b006622d085a7fsm1850663ott.50.2022.10.22.14.03.22 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 22 Oct 2022 14:03:22 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Sat, 22 Oct 2022 18:02:24 -0300 Message-Id: <20221022210226.2200-3-jamrial@gmail.com> X-Mailer: git-send-email 2.37.3 In-Reply-To: <20221022210226.2200-1-jamrial@gmail.com> References: <20221022210226.2200-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 3/5] avcodec/aac_ac3_parser: don't try to sync when the parser is configured to handle complete frames 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: LI4TMwFHDHch Should speed up parsing when the frames come from non raw containers. Signed-off-by: James Almer --- libavcodec/aac_ac3_parser.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/libavcodec/aac_ac3_parser.c b/libavcodec/aac_ac3_parser.c index 6df064e28d..bfbb55d68e 100644 --- a/libavcodec/aac_ac3_parser.c +++ b/libavcodec/aac_ac3_parser.c @@ -40,6 +40,9 @@ int ff_aac_ac3_parse(AVCodecParserContext *s1, int new_frame_start; int got_frame = 0; + if (s1->flags & PARSER_FLAG_COMPLETE_FRAMES) { + i = buf_size; + } else { get_next: i=END_NOT_FOUND; if(s->remaining_size <= buf_size){ @@ -77,6 +80,7 @@ get_next: *poutbuf_size = 0; return buf_size; } + } *poutbuf = buf; *poutbuf_size = buf_size; From patchwork Sat Oct 22 21:02:25 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 38916 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:4a86:b0:9d:28a3:170e with SMTP id fn6csp1439285pzb; Sat, 22 Oct 2022 14:04:04 -0700 (PDT) X-Google-Smtp-Source: AMsMyM7+YZKLXalEVRkLlxfsUXVJshCWfL+xqyeJ3OhhflYlNkU1Qv4rMw/ET84rq1jec+pS+/5s X-Received: by 2002:a17:907:75d4:b0:78d:efa7:f78c with SMTP id jl20-20020a17090775d400b0078defa7f78cmr20762228ejc.454.1666472633438; Sat, 22 Oct 2022 14:03:53 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1666472633; cv=none; d=google.com; s=arc-20160816; b=MAFponZVtGG9SlvXBa65CYejO0q1wrTWeszPiMXC/gvJh1DyzbahY6pim/zIdHOohg sS+tbeqF0AXvY9WALCu6UdV4uhFD1Ua6AtQ+y5W1UH7r9Lw5/OR8k1trsbVsjC5anLoE BXpxQSHUK5ET8JOHz0b9bz/6fvtuSyR43ESJ1Sej5CWtlH8RT03mB8mJohGR0OoFMQh1 gXa9z5Pue04BNjQ7fMo4biWvGVI2srCgDxLaGnu9LgaiItgzO0VQfaPU6+ktLWmVYVVp GkGSyRO/ZiYnY014a1XfOrfiha903YJ0kvryCxoTGls0ePMp3/VUPiRiTQi9vZUMzBdr fa+w== 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=YRt7zLSnR5uEGQ15/qtQf/58RAbNeIHnd0eHmq0pyxw=; b=Ri1telnk1VWeKPVDRBvNrEFFBZ5VrKzlTb4GjSSJhZHj++jzu+VGs3+7+InUR3ex/J iJCI7vD3xOYRRg6nuUCOu2CU+zJHXqbWx2QcRCG9r10PYrapqg7HJ9Z8dhoJm8P+MhrW KiUTGBnJqrf5UFIHWGIFgCu2BWkaiVugS1kO/5IA3ZR5ERNrQUJL2dpNduobR/ihKpmV FNo7M1ehqizumH14X3Q4SjbTJtE//Uwc7pkHTjQU3KkjJcgXJjss8L1CNRV3UxQ+DUE9 sm3Fe2z23TGC50X49Zmxl4smOxMHQRg5gfuVcc5BJ2xN1MgFIPlITBiAdX5bKyDJQyoq egfw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=lJLZ0wNl; 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 i20-20020a05640242d400b0045c93142111si30642093edc.70.2022.10.22.14.03.52; Sat, 22 Oct 2022 14:03:53 -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=20210112 header.b=lJLZ0wNl; 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 E853D68BD4B; Sun, 23 Oct 2022 00:03:32 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ot1-f41.google.com (mail-ot1-f41.google.com [209.85.210.41]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id DD25268BCC2 for ; Sun, 23 Oct 2022 00:03:25 +0300 (EEST) Received: by mail-ot1-f41.google.com with SMTP id 101-20020a9d0bee000000b00661b54d945fso3834576oth.13 for ; Sat, 22 Oct 2022 14:03:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; 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=r67uNXhTftEiOiqngQZI1KgUyTLUV6KSjFsEF/Mcs1A=; b=lJLZ0wNlGEeHU8PbrfnGSs3cXIb4ejy2ANDUjV04x1E7mk+AJukFaWZQF6w5esFehT SphKzyh4HcBizQmw9h5v/H1TEoEpWylp926CIluF+5gZZNzKf3sXjGDxZov3bWz9UCi5 H2UzdiLp6bCY6Qk8QLPkLHB08P1GrJlJwnO2uQ5nNU+7HHEdDvTiZis7IYM1DBeADIVV wwfPHiCCnSOs1x+e/FW+42NK5tpAfVZvILBlXLRQRsymkTCj5cfSU0hTITLHj0sK00Dw BGSsJYCOlkw3N+RYuIundhikfOWwYOtmGcKeMfZZtRkXFC4R1Ka/MOX0S2LGOb8l969v ORdg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; 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=r67uNXhTftEiOiqngQZI1KgUyTLUV6KSjFsEF/Mcs1A=; b=4OiGusaudOwIswL42HXNHybS8KGtl5LBY6nfSUBlOA4SyA+h+9Jtp3BCSI6QgdVoCo 9kmUHwIS8srjHXUOrG5c6oHmk8/8W5NOQ5ivH7t737GIsef1l/5D3cC2dGKszVGSqm8G oCIRIyFck3nPV4yOQAgyzFfqOPh3GvybTZpikKTabfrRqT+Wq3JdQZZqs6E51NRZdDaL SDE/JjWK3kiDgsGFvw2GL+Bk7DcjD7Amu5s9lKw1gupwuR7Di3chmuAstBR57r407F0y NGbAjr6YtWS0wPOKCn+Xg6vsKSqFndOlrDdsjI9gDSc1is39uiejHn+jcwcW01a5LdAe jSfQ== X-Gm-Message-State: ACrzQf3xuX3UrOm3xL22HipNtJTnXgsZGJBrEsE8cftcPqHnMz8BLKZc gTx/z3MH95/N+E+qusl0Wd0WYfVkvi4= X-Received: by 2002:a05:6830:25c3:b0:661:c7e4:e785 with SMTP id d3-20020a05683025c300b00661c7e4e785mr13070291otu.134.1666472604297; Sat, 22 Oct 2022 14:03:24 -0700 (PDT) Received: from localhost.localdomain ([191.97.187.183]) by smtp.gmail.com with ESMTPSA id q9-20020a05683033c900b006622d085a7fsm1850663ott.50.2022.10.22.14.03.23 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 22 Oct 2022 14:03:24 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Sat, 22 Oct 2022 18:02:25 -0300 Message-Id: <20221022210226.2200-4-jamrial@gmail.com> X-Mailer: git-send-email 2.37.3 In-Reply-To: <20221022210226.2200-1-jamrial@gmail.com> References: <20221022210226.2200-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 4/5] avcodec/aac_ac3_parser: reindent after previous commit 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: mFrNOrPtIHnb Signed-off-by: James Almer --- libavcodec/aac_ac3_parser.c | 62 ++++++++++++++++++------------------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/libavcodec/aac_ac3_parser.c b/libavcodec/aac_ac3_parser.c index bfbb55d68e..e89b12baf9 100644 --- a/libavcodec/aac_ac3_parser.c +++ b/libavcodec/aac_ac3_parser.c @@ -44,42 +44,42 @@ int ff_aac_ac3_parse(AVCodecParserContext *s1, i = buf_size; } else { get_next: - i=END_NOT_FOUND; - if(s->remaining_size <= buf_size){ - if(s->remaining_size && !s->need_next_header){ - i= s->remaining_size; - s->remaining_size = 0; - }else{ //we need a header first - len=0; - for(i=s->remaining_size; istate = (s->state<<8) + buf[i]; - if((len=s->sync(s->state, &s->need_next_header, &new_frame_start))) - break; - } - if(len<=0){ - i=END_NOT_FOUND; - }else{ - got_frame = 1; - s->state=0; - i-= s->header_size -1; - s->remaining_size = len; - if(!new_frame_start || pc->index+i<=0){ - s->remaining_size += i; - goto get_next; + i=END_NOT_FOUND; + if(s->remaining_size <= buf_size){ + if(s->remaining_size && !s->need_next_header){ + i= s->remaining_size; + s->remaining_size = 0; + }else{ //we need a header first + len=0; + for(i=s->remaining_size; istate = (s->state<<8) + buf[i]; + if((len=s->sync(s->state, &s->need_next_header, &new_frame_start))) + break; } - else if (i < 0) { - s->remaining_size += i; + if(len<=0){ + i=END_NOT_FOUND; + }else{ + got_frame = 1; + s->state=0; + i-= s->header_size -1; + s->remaining_size = len; + if(!new_frame_start || pc->index+i<=0){ + s->remaining_size += i; + goto get_next; + } + else if (i < 0) { + s->remaining_size += i; + } } } } - } - if(ff_combine_frame(pc, i, &buf, &buf_size)<0){ - s->remaining_size -= FFMIN(s->remaining_size, buf_size); - *poutbuf = NULL; - *poutbuf_size = 0; - return buf_size; - } + if(ff_combine_frame(pc, i, &buf, &buf_size)<0){ + s->remaining_size -= FFMIN(s->remaining_size, buf_size); + *poutbuf = NULL; + *poutbuf_size = 0; + return buf_size; + } } *poutbuf = buf; From patchwork Sat Oct 22 21:02:26 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 38917 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:4a86:b0:9d:28a3:170e with SMTP id fn6csp1439313pzb; Sat, 22 Oct 2022 14:04:11 -0700 (PDT) X-Google-Smtp-Source: AMsMyM4IJZtOwzfHHAAdSNEhdu7p6Ps2uk+LQLKq6y8S17ZJ4AK2b2Q8f8LXtCO7Cx9hU2+DRenO X-Received: by 2002:a05:6402:3551:b0:45d:a52f:2d77 with SMTP id f17-20020a056402355100b0045da52f2d77mr24440826edd.67.1666472651538; Sat, 22 Oct 2022 14:04:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1666472651; cv=none; d=google.com; s=arc-20160816; b=HmM6ze71mFg2khqrLTeMMB30JlX6Zdi2c+/6BFlQXiCRgZQuMd3TB7v4Y1BnwQt96y UdoQ2eDDwfkOkvbWfz/PALE2kPYfo8my4iD0YVSmukMRzZtUKlGhQBpy2xzmGl203hGL WtdmDqpOGyQuuvlgt0AlOLCeNKL2APnVaDdU/sBalzs3GhoGHv9ykfPRJVpXlobEdnJf a8/3uiHjdQlU50gbJopBWQePYf1eJWFeScLkLIEOca6KcTqgLr4VQC5+8R0p67E7bQBe F9Nb/4Y+JUjGNNIbQrfx9QLkm6m77KU9XGnk0EpOB3uK64eYMA35PhEcFSUUDtNyhBV3 Wffw== 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=Ypd47o2IeZRgyTY8fpvPNAFIS02Ykv5uENOMPsQae14=; b=R5grZT1+607RnQXMlDQ4L0GRFpn61zNxYuQ+FBIk/Qh25iGQvHs5atiyBXXJR2yrQi nYuTADR5E/B7/DJJ294dRin74zrTcT406QSpPXdq7j7JaiNAOQR+krrarFNazjdzLzb5 b9mraOUsBe10Z3QuTz+mVeNXI4ogfGshscAmA4vzoSkBnKvmod6kRiR46VqGu8Y5ccfm kN6MQgmjxYUY/p/O8E++KOGVd9D99UDGYLM8BcxwpWrx/qCD/RpwACLPydaQnSqF0iPv 9ULq9YgRFBR0i223lNRu13qWuEyUdpMiFWlqpyOO5jPv+qDyv9WEKM4hLY64bModjlLd 61qQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=JvRubsU7; 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 xc9-20020a170907074900b00730aa841c5bsi23322599ejb.964.2022.10.22.14.04.11; Sat, 22 Oct 2022 14:04:11 -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=20210112 header.b=JvRubsU7; 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 ECA8968BD7D; Sun, 23 Oct 2022 00:03:34 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ot1-f54.google.com (mail-ot1-f54.google.com [209.85.210.54]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 28FFD68BD64 for ; Sun, 23 Oct 2022 00:03:27 +0300 (EEST) Received: by mail-ot1-f54.google.com with SMTP id d18-20020a05683025d200b00661c6f1b6a4so3867962otu.1 for ; Sat, 22 Oct 2022 14:03:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; 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=JJVvoVydZE4O8idKBd24jrjHrRDFfOoh0t93s0/0Npo=; b=JvRubsU7ot51AD+ZbMnIVtPF8XCL74/sYNCjZTwAjfhaYULznKCY5Jk0mVx0rkuBMn GoDVEhA/K2oa5G0Kie93lFPJNUZlb+U3fRm3WDrgJgVPXx6NRoH53H85yZjceBec5WJ4 ZaKkbgzo+RW8RzzE6/fp4eZGzcG0jH6Z8VHXZ7YVNS9SjWXFKcShRduNTOCKeKb4V5Ci 7WLoqi97X/2JLnK5z5uPC6DP3n4RsipJXLi/p5QvcJrwiwa5MkDDmY3rtO9NLx45760Z zz/P+yZy+fPrW7DLu6YCwyjLGEtMA6groGZ/bGDI0lX4wxqT3mKOkJhKhqyCM50MnF7F b6ZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; 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=JJVvoVydZE4O8idKBd24jrjHrRDFfOoh0t93s0/0Npo=; b=Uc5Uqm4vANS0gbw0ZqCoQn55EXXR7zev/GaBBcnTcrSwPo64xo/KbnJKIEjumeG8DR 4qw7L3crFKa8Fq7Jd35OkhQLHBhvaPT2OggpobR7sNghlEjsJQmPwGUbVo/afkFGx28j SeeMX1QoNMR9OuCP1Z9EULeatkaNlp3gJUQ0xn4RJXJvXkFUZnxZahDpZrAAoiedsVI8 EV6IjJ1kd1sQTnEfORFEvDBN1P7IHL0CVgmCIApUJ66v+FjqolavNX5eopY7L23ZfhLw Wfpqg+17fR+Q2Q3trBK1sWflqFa47SGLG27hOO2V5Dt1jzIf0j2ZC+EP0+W+9JZIAm93 LnuA== X-Gm-Message-State: ACrzQf3PhXxqV0khi1eyC96VY57BohE+MAuhMGXMaJmP7yskS9rK0DET C6oWu8N1aNWXfn/QLIDd78XsPdLoN8c= X-Received: by 2002:a9d:4d19:0:b0:661:bcef:4683 with SMTP id n25-20020a9d4d19000000b00661bcef4683mr13056866otf.37.1666472605466; Sat, 22 Oct 2022 14:03:25 -0700 (PDT) Received: from localhost.localdomain ([191.97.187.183]) by smtp.gmail.com with ESMTPSA id q9-20020a05683033c900b006622d085a7fsm1850663ott.50.2022.10.22.14.03.24 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 22 Oct 2022 14:03:25 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Sat, 22 Oct 2022 18:02:26 -0300 Message-Id: <20221022210226.2200-5-jamrial@gmail.com> X-Mailer: git-send-email 2.37.3 In-Reply-To: <20221022210226.2200-1-jamrial@gmail.com> References: <20221022210226.2200-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 5/5 v2] avcodec/ac3_parser: improve false positive detection when parsing sync frames 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: 1eBpFkBd1a85 A two byte sync word is not enough to ensure we got a real syncframe, nor are all the range checks we do in the first seven bytes. Do therefore an integrity check for the sync frame in order to prevent the parser from filling avctx with bogus information. Signed-off-by: James Almer --- libavcodec/aac_ac3_parser.c | 4 ++++ libavcodec/aac_ac3_parser.h | 2 ++ libavcodec/ac3_parser.c | 1 + 3 files changed, 7 insertions(+) diff --git a/libavcodec/aac_ac3_parser.c b/libavcodec/aac_ac3_parser.c index e89b12baf9..2b0ee61b6d 100644 --- a/libavcodec/aac_ac3_parser.c +++ b/libavcodec/aac_ac3_parser.c @@ -113,6 +113,10 @@ get_next: buf_size -= hdr.frame_size; continue; } + /* Check for false positives since the syncword is not enough. + See section 6.1.2 of A/52. */ + if (av_crc(s->crc_ctx, 0, buf + 2, hdr.frame_size - 2)) + return i; break; } diff --git a/libavcodec/aac_ac3_parser.h b/libavcodec/aac_ac3_parser.h index 560bba54f5..bc16181a19 100644 --- a/libavcodec/aac_ac3_parser.h +++ b/libavcodec/aac_ac3_parser.h @@ -24,6 +24,7 @@ #define AVCODEC_AAC_AC3_PARSER_H #include +#include "libavutil/crc.h" #include "avcodec.h" #include "parser.h" @@ -42,6 +43,7 @@ typedef struct AACAC3ParseContext { int header_size; int (*sync)(uint64_t state, int *need_next_header, int *new_frame_start); + const AVCRC *crc_ctx; int remaining_size; uint64_t state; diff --git a/libavcodec/ac3_parser.c b/libavcodec/ac3_parser.c index 8885e1c72e..13b8d3b7d8 100644 --- a/libavcodec/ac3_parser.c +++ b/libavcodec/ac3_parser.c @@ -246,6 +246,7 @@ static av_cold int ac3_parse_init(AVCodecParserContext *s1) { AACAC3ParseContext *s = s1->priv_data; s->header_size = AC3_HEADER_SIZE; + s->crc_ctx = av_crc_get_table(AV_CRC_16_ANSI); s->sync = ac3_sync; return 0; }