From patchwork Wed Jul 17 01:49:24 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 50608 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:612c:40f5:b0:482:c625:d099 with SMTP id lb53csp643695vqb; Tue, 16 Jul 2024 18:50:06 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCWY1rzQcbqjy3QSwuSMjfbOZoLs+VKczZYkN2al4wVApY1KaS3vtMvYbjX1QgjGhjj7Jsmii80rKcScRhIGdO6KJSn1AoVbgSBJ1A== X-Google-Smtp-Source: AGHT+IF+qVKqjPnKB6D5gbsVVcOmBEnitLTpEeg+7M19rOLABkzuR8XLWDklLktCriRJvoItQILM X-Received: by 2002:a05:6512:b9a:b0:52e:7f23:5d8d with SMTP id 2adb3069b0e04-52ee53db883mr137743e87.30.1721181006224; Tue, 16 Jul 2024 18:50:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1721181006; cv=none; d=google.com; s=arc-20160816; b=KLAmJTgpDd9beP2te00mTgcBELH1RBu3irJDFs7dE2P8I4yONnIrLhTKi19LhvjJ9K p3v/S3en52fb69JJhBwyNn1kfT+LpAeTKqRhYhqm1nNqdgeO/9Xg3NSIFVneV3e5ww9G Nn1PkDV0vWqfp37X1wjTBERsqFIJfri7h1baXhFlQEUKIw79HF6sEiLrRdl/6lx0t/YM N78vrZuXrH8HViBQ7ucykkEHnWNiUljOTbs4DpC8iQ/VOUL41MCMnlohJ8ZlFoZvTJ9e kMCq7Fhuo6U0PyyJw9+zvFy0pGXWlHKuNR+lXWR5i8OeM8JSms5qjFGmwT9MRhmSw2g1 zmXQ== 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=/1dPcgXpJ7besUK0CUJWCoZ0/KvqCQbYE93w4mhESdg=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=eD65BqWXfJCrq865J9n8s2VVqeMx6P9G1K+cOxs5SKiFXw3ikbeJ0uRBcUyil7Bfcy ERNoY7l4mbE+Snj4ShjF9jCFMquhHUFXTVZXbDrcWHK9yQIdZK4PNx/RtAt9WjO+RqPi pIJY3QbjfHNYcU4j4YpdUUAh5pfyNJYOOfFtfOZg38nnwRA1xDHoKpWes0u4HvEqRoHZ nB1PfCXNjmwKGelX4Hpx7n0vQh/NMI9stxDaSqAAUslXJUn7Im5dGAqeRzZBJ1d19+3z rWZTCXzFY+wwvoX+NFrNJ7PPJtiEiGDiVGZCwttmhcuQH50MEwIYTD5c5oBRn57+jBFl CKjQ==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b="II/0+onK"; 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; dara=fail header.i=@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 a640c23a62f3a-a79c2bff84dsi394363666b.363.2024.07.16.18.50.05; Tue, 16 Jul 2024 18:50: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=20230601 header.b="II/0+onK"; 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; dara=fail header.i=@gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 43E4468DAB7; Wed, 17 Jul 2024 04:49:48 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pf1-f182.google.com (mail-pf1-f182.google.com [209.85.210.182]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 76B7968D7D2 for ; Wed, 17 Jul 2024 04:49:39 +0300 (EEST) Received: by mail-pf1-f182.google.com with SMTP id d2e1a72fcca58-70b07bdbfbcso259823b3a.0 for ; Tue, 16 Jul 2024 18:49:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1721180977; x=1721785777; darn=ffmpeg.org; 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=MllPA9i0vqvVuvvpG5D4UlFzPXlwZPfkAlh5WHYG0CM=; b=II/0+onKtc9keNTpqwQQ69bF4ZjtWbPn0Vm8S8jJ+5v+mz5ILfmMjVsZ79QMrY2kNE EA1EdLi5U7Cb7P/k3NX+fLBU0b/RBQO+OxMOGerKMByzGVjVN3DZHBiQOZaYP3hvJKAu SoSjcukBKu9h2j+VeFesRVCpqMpcfElBSfPVLablWraB/AMpkB/A4ktbycX6oDktL3L7 CsZmhExEjF87ykYKs/YxHUnB2iXetNkYw3ge7vu6tH8+tDgwTgO+YOsNREQ4YN6M+wo0 pbV9w0QtE09fV/1AAPmpa1nKBtffO4isBrUwMJ69rcs+HIKUcDD66kCQHNTPe6akY5f0 DIXw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1721180977; x=1721785777; 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=MllPA9i0vqvVuvvpG5D4UlFzPXlwZPfkAlh5WHYG0CM=; b=kwRW6UwuiCrXoqEWeLHMBGW/Xdi8ufX4xPXG6L+63/ghESiIwxiom4gDwl2ihQZRYS xW80yO5RRMJLdli5Gq8lf1Rd4alkMhsqE32k5oQwgVY/mEkujx0LQ/xu9cx2aZZNxnPj gIeYpY3TxDNx9C1HaasxqiuPu5TcwbbrsbXn1IHXzRuohbX7CawrS6VIqZwp3T1Im6KG y07peWL0sojtFZ+wZ6lEhw4WYGR/OCWr+LED7POm5sgT/CyJEdqacVFppD7O94iUAVXv 9eC3Zur4Ou3o9LzIudLp/Gw2oL8Gx0uhNdQXp2hoAjNfp0pkUPoo7A4Nd3iuIrYQYoZ1 Lepg== X-Gm-Message-State: AOJu0YxJpA21RQcu0EKvmszHngocER6Cpg2zegpFG/J3bPejp+XLeD/c yckPp03GmenjZlqiyDEbCbBVwGmkxCEi5DI4L7IQcNLukKDgz8sKGwVcNA== X-Received: by 2002:a05:6a20:729b:b0:1c2:8a69:338f with SMTP id adf61e73a8af0-1c3fdfda0dfmr579303637.12.1721180977230; Tue, 16 Jul 2024 18:49:37 -0700 (PDT) Received: from localhost.localdomain ([190.194.167.233]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-70b7eca7545sm7025815b3a.153.2024.07.16.18.49.36 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 16 Jul 2024 18:49:36 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Tue, 16 Jul 2024 22:49:24 -0300 Message-ID: <20240717014925.16517-3-jamrial@gmail.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240717014925.16517-1-jamrial@gmail.com> References: <20240717014925.16517-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 3/4] avformat/iamf_writer: fix coded audio_roll_distance values 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: fVyZmg20fPdY From: Felicia Lim 'seek_preroll' corresponds to 'audio_roll_distance' in IAMF[]1 [1]https://aomediacodec.github.io/iamf/v1.0.0-errata.html#audio_roll_distance --- libavformat/iamf_parse.c | 2 +- libavformat/iamf_writer.c | 30 +++++++++++++++++++++++++++++- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/libavformat/iamf_parse.c b/libavformat/iamf_parse.c index a69d4a2f3a..2674a5186d 100644 --- a/libavformat/iamf_parse.c +++ b/libavformat/iamf_parse.c @@ -683,7 +683,7 @@ static int audio_element_obu(void *s, IAMFContext *c, AVIOContext *pb, int len) substream->codecpar->codec_id = codec_config->codec_id; substream->codecpar->frame_size = codec_config->nb_samples; substream->codecpar->sample_rate = codec_config->sample_rate; - substream->codecpar->seek_preroll = codec_config->seek_preroll; + substream->codecpar->seek_preroll = -codec_config->seek_preroll * codec_config->nb_samples; switch(substream->codecpar->codec_id) { case AV_CODEC_ID_AAC: diff --git a/libavformat/iamf_writer.c b/libavformat/iamf_writer.c index 35db078147..af837ccb1f 100644 --- a/libavformat/iamf_writer.c +++ b/libavformat/iamf_writer.c @@ -72,6 +72,34 @@ static int update_extradata(IAMFCodecConfig *codec_config) return 0; } +static int populate_default_seek_preroll(IAMFCodecConfig *codec_config) +{ + switch (codec_config->codec_id) { + case AV_CODEC_ID_OPUS: + if (!codec_config->nb_samples) + return AVERROR(EINVAL); + // ceil(3840 / nb_samples) + codec_config->seek_preroll = -(1 + ((3840 - 1) / codec_config->nb_samples)); + break; + case AV_CODEC_ID_AAC: + codec_config->seek_preroll = -1; + break; + case AV_CODEC_ID_FLAC: + case AV_CODEC_ID_PCM_S16BE: + case AV_CODEC_ID_PCM_S24BE: + case AV_CODEC_ID_PCM_S32BE: + case AV_CODEC_ID_PCM_S16LE: + case AV_CODEC_ID_PCM_S24LE: + case AV_CODEC_ID_PCM_S32LE: + codec_config->seek_preroll = 0; + break; + default: + return AVERROR(EINVAL); + } + + return 0; +} + static int fill_codec_config(IAMFContext *iamf, const AVStreamGroup *stg, IAMFCodecConfig *codec_config) { @@ -83,7 +111,7 @@ static int fill_codec_config(IAMFContext *iamf, const AVStreamGroup *stg, codec_config->sample_rate = st->codecpar->sample_rate; codec_config->codec_tag = st->codecpar->codec_tag; codec_config->nb_samples = st->codecpar->frame_size; - codec_config->seek_preroll = st->codecpar->seek_preroll; + populate_default_seek_preroll(codec_config); if (st->codecpar->extradata_size) { codec_config->extradata = av_memdup(st->codecpar->extradata, st->codecpar->extradata_size); if (!codec_config->extradata)