From patchwork Fri Jun 3 12:46:17 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Jan_Ekstr=C3=B6m?= X-Patchwork-Id: 36063 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:6914:b0:82:6b11:2509 with SMTP id q20csp4604543pzj; Fri, 3 Jun 2022 05:47:09 -0700 (PDT) X-Google-Smtp-Source: ABdhPJz6Snw3QSwlnTODg9URp7vDU7GGIzjOEzzXEgaLQHXJMOum7FMchsgBw6sKYPcP2zJ0WrhZ X-Received: by 2002:a17:907:1b0c:b0:6fe:25bf:b3e5 with SMTP id mp12-20020a1709071b0c00b006fe25bfb3e5mr8643204ejc.689.1654260429141; Fri, 03 Jun 2022 05:47:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654260429; cv=none; d=google.com; s=arc-20160816; b=M3T/RbnDfRn9CJZ+XSnGuluI4iAntbs2YUENdwhtGgc9hvMUyOHce58lvJlvOwGZFB lpiv/eHCVVBA7202uaaiiScC14lWKPXdFEVj3grmDpW7ARf21ynUpjqlmwvbWCh9k/wy bMPHrCOCWJf5Ky//CNzrf/baX79LZk+/e5u+yF6PzPRhvfOys67bXV+iWlowUWCWHHkT s5COiLpK7kmQW5Zl+Viipqj0Nz38vDerdHRjydxy6u5Wk15OG3oduKfXeXvaozBqQ+6Z q4is6pFQ7wvqVugYq/PvFax+xXdIWQjN3QBqGd2TSFwOcnNsbixTSvc18C+Xwu5OP6h8 Xyzg== 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=zpuVOflN8O+RzCuYLvS7u3xgSxgQoOdvtl3tLGluvXU=; b=Jb6VDhvmFPz74jxiaTPxGpuTtIPBBFzdrLusbiCTTbKsyCbUnytqa6U+4FJFUmmayN IeutMrbS6Cds9iC9Psd4ldFvmIKM04ZBkmS8KO6xq9/9RQ5YtOwzK5mga3tCFSpGFVkz DgTY+4hUrt+lU8XwBh4cQJ3oUqbtwyzIa+fKYS+qkOvYg2SDpU+WxlfM63nWsy0S03g7 44xUWRbGl+S+/o+JlpLIRBwX5kLcg5T3kwf2xq3SXQDn7XAQ9Y5GSiuU5ku/yHVQ9kEU TiXbd76E1/jq5uqcv8vx8DD87yeP6Dqzk57lhF3XpQCDQQSWov2EbFn/WezF0lQHzXmI XZAQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=gqjEEXlF; 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 p21-20020a170906229500b006fef85cfcd4si1381448eja.384.2022.06.03.05.47.08; Fri, 03 Jun 2022 05:47:09 -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=gqjEEXlF; 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 E067568B837; Fri, 3 Jun 2022 15:46:37 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-lj1-f171.google.com (mail-lj1-f171.google.com [209.85.208.171]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id DBEA868B722 for ; Fri, 3 Jun 2022 15:46:28 +0300 (EEST) Received: by mail-lj1-f171.google.com with SMTP id l18so982548lje.13 for ; Fri, 03 Jun 2022 05:46:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=BiZ9ClQv27brCRHEs+QhQ/vNu0Gg8Jztb8DM+VctURU=; b=gqjEEXlFI249HPjWernPOWArKwAUVjFrH29LeRQQkJ9oabLPE8atNa74SbYWxJo9Sn CT7tLEbGo8idLv0eP9INyj4fd3w3emYvRdoULHpLQy3ElQ6hIsVZZ9TKf4ZjNBT2AepN qgDq8bD9tdMT9qvoDDLgmwQ2EYsUFXmuxiesV1tyMBWRJBLMERb36I1uEVLleIct4skq kTHRMdUpDN37jSjPHoRLodeY0Z3Uhzbv1SJu8G1sYr46DPKBHz1RnZFnzkUBaA/ZV1RO cHo+3yU8fX5CiL16J2KPqbvXIqjcL44dHqSEHetpNuXexgnAZMmMNHp/Xsopj2GU72vk 0F6w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=BiZ9ClQv27brCRHEs+QhQ/vNu0Gg8Jztb8DM+VctURU=; b=slsW5twKz3QgR38NiUwI5lNqXwkdA+aIQcIBGNCgEJs2nfbuZY6c1RHB5jmO9vYcIF fbmN+CIJDTrltLJZS7iG8rwAUj+dn4wpkvDB5QucHOj0LLk7uTqpvjkt+0ropE/Da9Sr GAG1NwT1w/sBK+qmPCu9OJ6xPXvXIGLJ3iE/sAeCSq8P9idcFkDSdiIJn/kI7DgnJ0Ph dU/Px5SY0oP3+O5lq6WRZMvAGBFuRdQUF1jZS/+zB+4/sVS9ys2qYXTXZIW6F2l55k2m cvU9oIZYIVkHNxF7GoasQrhCg8lE12omnMMuF9Z0ODPDIWsdP2TtpBH4KE+GjosEcMaE hSmQ== X-Gm-Message-State: AOAM531Gnes6bL2T9BiwZov73SqfOrlVlejRGcuPWESXJmni49msLeRW +75mQXbfI0XzbTucWe2M0X8HJUrxyrk= X-Received: by 2002:a2e:82c5:0:b0:247:e81f:8b02 with SMTP id n5-20020a2e82c5000000b00247e81f8b02mr44436817ljh.90.1654260388212; Fri, 03 Jun 2022 05:46:28 -0700 (PDT) Received: from localhost.localdomain (91-153-198-187.elisa-laajakaista.fi. [91.153.198.187]) by smtp.gmail.com with ESMTPSA id m4-20020a0565120a8400b00477b624c0a8sm1561081lfu.180.2022.06.03.05.46.27 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 03 Jun 2022 05:46:27 -0700 (PDT) From: =?utf-8?q?Jan_Ekstr=C3=B6m?= To: ffmpeg-devel@ffmpeg.org Date: Fri, 3 Jun 2022 15:46:17 +0300 Message-Id: <20220603124620.15099-4-jeebjp@gmail.com> X-Mailer: git-send-email 2.36.1 In-Reply-To: <20220603124620.15099-1-jeebjp@gmail.com> References: <20220603124620.15099-1-jeebjp@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 3/6] avformat/movenc: enable handle_eac3 to handle AC-3 tracks 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: /nLBkxZYwIns From: Jan Ekström Add the AC-3 frame type, as well as early exit from additional packet parsing in case of AC-3, as only a single packet is required to get the required information. Additionally, expose ac3_bit_rate_code via the eac3_info struct as it is required for AC3SpecificBox. Signed-off-by: Jan Ekström --- libavformat/movenc.c | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/libavformat/movenc.c b/libavformat/movenc.c index 63713e5640..2589f2f4bb 100644 --- a/libavformat/movenc.c +++ b/libavformat/movenc.c @@ -383,6 +383,7 @@ struct eac3_info { /* Layout of the EC3SpecificBox */ /* maximum bitrate */ uint16_t data_rate; + int8_t ac3_bit_rate_code; /* number of independent substreams */ uint8_t num_ind_sub; struct { @@ -413,8 +414,12 @@ static int handle_eac3(MOVMuxContext *mov, AVPacket *pkt, MOVTrack *track) struct eac3_info *info; int num_blocks, ret; - if (!track->eac3_priv && !(track->eac3_priv = av_mallocz(sizeof(*info)))) - return AVERROR(ENOMEM); + if (!track->eac3_priv) { + if (!(track->eac3_priv = av_mallocz(sizeof(*info)))) + return AVERROR(ENOMEM); + + ((struct eac3_info *)track->eac3_priv)->ac3_bit_rate_code = -1; + } info = track->eac3_priv; if (!info->pkt && !(info->pkt = av_packet_alloc())) @@ -431,6 +436,8 @@ static int handle_eac3(MOVMuxContext *mov, AVPacket *pkt, MOVTrack *track) } info->data_rate = FFMAX(info->data_rate, hdr->bit_rate / 1000); + info->ac3_bit_rate_code = FFMAX(info->ac3_bit_rate_code, + hdr->ac3_bit_rate_code); num_blocks = hdr->num_blocks; if (!info->ec3_done) { @@ -442,7 +449,8 @@ static int handle_eac3(MOVMuxContext *mov, AVPacket *pkt, MOVTrack *track) /* this should always be the case, given that our AC-3 parser * concatenates dependent frames to their independent parent */ - if (hdr->frame_type == EAC3_FRAME_TYPE_INDEPENDENT) { + if (hdr->frame_type == EAC3_FRAME_TYPE_INDEPENDENT || + hdr->frame_type == EAC3_FRAME_TYPE_AC3_CONVERT) { /* substream ids must be incremental */ if (hdr->substreamid > info->num_ind_sub + 1) { ret = AVERROR(EINVAL); @@ -474,6 +482,14 @@ static int handle_eac3(MOVMuxContext *mov, AVPacket *pkt, MOVTrack *track) info->substream[hdr->substreamid].acmod = hdr->channel_mode; info->substream[hdr->substreamid].lfeon = hdr->lfe_on; + if (track->par->codec_id == AV_CODEC_ID_AC3) { + // with AC-3 we only require the information of a single packet, + // so we can finish as soon as the basic values of the bit stream + // have been set to the track's informational structure. + info->ec3_done = 1; + goto concatenate; + } + /* Parse dependent substream(s), if any */ if (pkt->size != hdr->frame_size) { int cumul_size = hdr->frame_size;