From patchwork Tue Oct 4 00:45:07 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jon Toohill X-Patchwork-Id: 863 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.140.66 with SMTP id o63csp1880471vsd; Mon, 3 Oct 2016 17:45:44 -0700 (PDT) X-Received: by 10.28.24.197 with SMTP id 188mr12578118wmy.77.1475541944384; Mon, 03 Oct 2016 17:45:44 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id s6si1128040wjc.278.2016.10.03.17.45.43; Mon, 03 Oct 2016 17:45: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=@google.com; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 0797D689C91; Tue, 4 Oct 2016 03:45:14 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pa0-f54.google.com (mail-pa0-f54.google.com [209.85.220.54]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 7713F689A7B for ; Tue, 4 Oct 2016 03:45:07 +0300 (EEST) Received: by mail-pa0-f54.google.com with SMTP id ik13so13512940pac.2 for ; Mon, 03 Oct 2016 17:45:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=JjlRZve9D+wLpOSbmUMJCpY0uuhLGwmrTlB/o9eHPPg=; b=QrCnIPvIWu4KmjHoUGNQELa2FfYXatp7/xBSrN4Ph5mPn/0GPy4zC/KrdXb9TRY6Ry +rzo963U5wbZ9bXwLv5A8aXyxSiY4E8GFDN9MFNsY/tMmdCDyVrDJWx0WLhL+NU14Yxv nMaTBETsZfxd6qyBsUcZKoG3zI4sPdadDrkHOdvfhjEejBspQkASWsvDA7de1FaoldbK LBMFIO5+qw3a3ICT/Xp+nSbWhvhDuaP3zYTfx6phj7cYJSBhVH94ITbJDpk2FYcT5yht oQj3vZSk1xHh04r69dIOrZ6mLW/AMphqEHbZrE4XAm19ArP4vjoCYsDeekEvKPB+/u96 1/4Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=JjlRZve9D+wLpOSbmUMJCpY0uuhLGwmrTlB/o9eHPPg=; b=gYi2bsthuXqWccm7fr0+lmYAYq9r/PuRhjDpL9DsJkR+oNj60hFo6S7QaTSisiXrXx ezbIRDXME7mUcSWeIPMhvfTOdHtkRHze52h9rSJ6vKM3sdkObfEZiaPzkaL5IdRe5v6k 1EytxlPRapXK5zZJCMb3ewOv4eUjqI2pSjUrLzB9siOZJRTY5A2cbPcbQ0UNxtYSyWsz WNXkIV159CB+lvPIGtyS1P+uZU+MdVfOBvM7S3rhFdlkaQVT0wsy6egpP8LdqAUMbpI4 F3nuU0gsPBq8wjHss/OiJ/P5QqnRVKX+9cmdfMFpvhS8kLy7rlkhFW9vRo+wFZcdswxW NLDg== X-Gm-Message-State: AA6/9Rk1IK/crDC6hHKGzxleao7dyJ5/2randvriP1SInls9S4hRROswL37+8siiz8hrMqA0 X-Received: by 10.66.65.138 with SMTP id x10mr1253246pas.28.1475541920319; Mon, 03 Oct 2016 17:45:20 -0700 (PDT) Received: from mungolini.mtv.corp.google.com ([100.96.2.73]) by smtp.gmail.com with ESMTPSA id i62sm49813834pfg.89.2016.10.03.17.45.19 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 03 Oct 2016 17:45:19 -0700 (PDT) From: Jon Toohill To: ffmpeg-devel@ffmpeg.org Date: Mon, 3 Oct 2016 17:45:07 -0700 Message-Id: <1475541908-21260-3-git-send-email-jtoohill@google.com> X-Mailer: git-send-email 2.8.0.rc3.226.g39d4020 In-Reply-To: <1475541908-21260-1-git-send-email-jtoohill@google.com> References: <1475087343-29745-1-git-send-email-jtoohill@google.com> <1475541908-21260-1-git-send-email-jtoohill@google.com> Subject: [FFmpeg-devel] [PATCH 2/3] lavf/mp3enc: write encoder delay/padding upon closing 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 Cc: Jon Toohill MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" --- libavformat/mp3enc.c | 32 +++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/libavformat/mp3enc.c b/libavformat/mp3enc.c index de63401..48cb0b4 100644 --- a/libavformat/mp3enc.c +++ b/libavformat/mp3enc.c @@ -111,6 +111,7 @@ typedef struct MP3Context { uint64_t bag[XING_NUM_BAGS]; int initial_bitrate; int has_variable_bitrate; + int trailing_padding; /* index of the audio stream */ int audio_stream_idx; @@ -247,12 +248,7 @@ static int mp3_write_xing(AVFormatContext *s) ffio_fill(dyn_ctx, 0, 8); // empty replaygain fields avio_w8(dyn_ctx, 0); // unknown encoding flags avio_w8(dyn_ctx, 0); // unknown abr/minimal bitrate - - // encoder delay - if (par->initial_padding - 528 - 1 >= 1 << 12) { - av_log(s, AV_LOG_WARNING, "Too many samples of initial padding.\n"); - } - avio_wb24(dyn_ctx, FFMAX(par->initial_padding - 528 - 1, 0)<<12); + avio_wb24(dyn_ctx, 0); // empty encoder delay/padding avio_w8(dyn_ctx, 0); // misc avio_w8(dyn_ctx, 0); // mp3gain @@ -345,10 +341,22 @@ static int mp3_write_audio_packet(AVFormatContext *s, AVPacket *pkt) #endif if (mp3->xing_offset) { + uint8_t *side_data = NULL; + int side_data_size = 0; + mp3_xing_add_frame(mp3, pkt); mp3->audio_size += pkt->size; mp3->audio_crc = av_crc(av_crc_get_table(AV_CRC_16_ANSI_LE), mp3->audio_crc, pkt->data, pkt->size); + + side_data = av_packet_get_side_data(pkt, + AV_PKT_DATA_SKIP_SAMPLES, + &side_data_size); + if (side_data && side_data_size >= 10) { + mp3->trailing_padding = AV_RL32(side_data + 4); + } else { + mp3->trailing_padding = 0; + } } } @@ -381,7 +389,7 @@ static void mp3_update_xing(AVFormatContext *s) AVReplayGain *rg; uint16_t tag_crc; uint8_t *toc; - int i, rg_size; + int i, rg_size, delay; /* replace "Xing" identification string with "Info" for CBR files. */ if (!mp3->has_variable_bitrate) @@ -422,6 +430,16 @@ static void mp3_update_xing(AVFormatContext *s) } } + /* write encoder delay/padding */ + delay = FFMAX(s->streams[0]->codecpar->initial_padding - 528 - 1, 0); + if (delay >= 1 << 12) { + av_log(s, AV_LOG_WARNING, "Too many samples of initial padding.\n"); + } + if (mp3->trailing_padding >= 1 << 12) { + av_log(s, AV_LOG_WARNING, "Too many samples of trailing padding.\n"); + } + AV_WB24(mp3->xing_frame + mp3->xing_offset + 141, (delay << 12) + mp3->trailing_padding); + AV_WB32(mp3->xing_frame + mp3->xing_offset + XING_SIZE - 8, mp3->audio_size); AV_WB16(mp3->xing_frame + mp3->xing_offset + XING_SIZE - 4, mp3->audio_crc);