From patchwork Wed Nov 27 07:48:58 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 16443 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 5216744ACB4 for ; Wed, 27 Nov 2019 09:49:37 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 371C368B0BF; Wed, 27 Nov 2019 09:49:37 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm1-f66.google.com (mail-wm1-f66.google.com [209.85.128.66]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id CE06468B0B2 for ; Wed, 27 Nov 2019 09:49:28 +0200 (EET) Received: by mail-wm1-f66.google.com with SMTP id g206so5953060wme.1 for ; Tue, 26 Nov 2019 23:49:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Ws8cQUxfbWGusMXHZ3whWPXyGa1QM36m07GJpIheHCM=; b=dpBeGazxwDx+y/Hyg2IFPbcGEn8yk8Rh7mNpmrYaPJZw7mM2Lgq9Srf0+zE5NUq7iQ mSeuysxgqNDF1DTC7UY7BUdnwxAU0Q/XG9WxL7omLrJ3MUIZkdSYELAtLNbovxipsNIj V8Jf3lloX0piRWCYMklCiuvG4c5olpMt2+7fb0Y0JgFbyfK41ZDsN7RUGU310DHvA+mf y/5UPHkE7qTg9fRnFJL66h4XXxiINEVLSep6pufrZecD2o0brksRlAe7dQSqOrDnmwdx ASvh1QxU8xQAEGUTwfzeKi45uNvE7AphkQErklSGvUNR2Rfn6Gxeqk+RP7hZVF3WAQn9 b//w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Ws8cQUxfbWGusMXHZ3whWPXyGa1QM36m07GJpIheHCM=; b=OjPuJd1qDdgDyOsErafHcYjym8tXLaNNBh3Cy+d+H7ehOYQ5r2LM4JpLJbS24pJ3Ox H/fUM9a1LAGWyhxNw18CgWb7AjlcYZkac53YpealS9TvSp1IIPM996fhT+/GhFP+DWmk SDgTN3C4qgF5b0yON3V4uF7ublC21EFd9rKVMh31/i6wvYaJLVwS1kLNrhRN/BJtcU6R +UCOfOPbuDi1x0aMaug+Y5/Cfy5tvNEfXiXkS/2Cay+odwHgKOgDnJ5CJ+HQ/oeHPI/8 9mcg9eAD2jAU3kwXy0mRvLNVTAgUaUC77dJLMs3X2pnAGn5DS7AEpHhq/8S79gsHeRFb Iq2w== X-Gm-Message-State: APjAAAXrycSaa4b1w5Dfi53Kg8WG+mDe/dxRV8Srek9oPNZ6SpJtvxpD pzNdQJiOm0O4gB/a1mwJ4CrhVcXA X-Google-Smtp-Source: APXvYqyTKes9ixhMWN6xUEm8YfMOaJdnkP3rWFpV3+Ks0kwpiFkSom8G6a8vMRWqOoFTTMQ43sSXEg== X-Received: by 2002:a1c:7d8b:: with SMTP id y133mr73338wmc.165.1574840967944; Tue, 26 Nov 2019 23:49:27 -0800 (PST) Received: from sblaptop.fritz.box (ipbcc08e23.dynamic.kabel-deutschland.de. [188.192.142.35]) by smtp.gmail.com with ESMTPSA id n16sm4230831wro.88.2019.11.26.23.49.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Nov 2019 23:49:27 -0800 (PST) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Wed, 27 Nov 2019 08:48:58 +0100 Message-Id: <20191127074858.32066-5-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20191106024922.19228-1-andreas.rheinhardt@gmail.com> References: <20191106024922.19228-1-andreas.rheinhardt@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 29/29] avformat/matroskaenc: Don't needlessly copy AVCodecParameters 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: Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" At the end of encoding, the flac encoder sends a packet whose side-data contains updated extradata (e.g. a correct md5 checksum). The Matroska muxer uses this to update the CodecPrivate. In doing so, the streams codecpar was copied. But given that writing a flac CodecPrivate does not modify the used AVCodecParameters at all, there is no need to do so and this commit changes this. Signed-off-by: Andreas Rheinhardt --- In this patch the old extradata is restored after writing (as it is now). I wonder whether this is really necessary or whether one should simply overwrite the old extradata? libavformat/matroskaenc.c | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c index 10599b11df..a3426bf926 100644 --- a/libavformat/matroskaenc.c +++ b/libavformat/matroskaenc.c @@ -2196,27 +2196,19 @@ static int mkv_check_new_extra_data(AVFormatContext *s, const AVPacket *pkt) break; case AV_CODEC_ID_FLAC: if (side_data_size && (s->pb->seekable & AVIO_SEEKABLE_NORMAL) && !mkv->is_live) { - AVCodecParameters *codecpriv_par; + uint8_t *old_extradata = par->extradata; int64_t curpos; if (side_data_size != par->extradata_size) { av_log(s, AV_LOG_ERROR, "Invalid FLAC STREAMINFO metadata for output stream %d\n", pkt->stream_index); return AVERROR(EINVAL); } - codecpriv_par = avcodec_parameters_alloc(); - if (!codecpriv_par) - return AVERROR(ENOMEM); - ret = avcodec_parameters_copy(codecpriv_par, par); - if (ret < 0) { - avcodec_parameters_free(&codecpriv_par); - return ret; - } - memcpy(codecpriv_par->extradata, side_data, side_data_size); + par->extradata = side_data; curpos = avio_tell(mkv->tracks_bc); avio_seek(mkv->tracks_bc, track->codecpriv_offset, SEEK_SET); - mkv_write_codecprivate(s, mkv->tracks_bc, codecpriv_par, 1, 0); + mkv_write_codecprivate(s, mkv->tracks_bc, par, 1, 0); avio_seek(mkv->tracks_bc, curpos, SEEK_SET); - avcodec_parameters_free(&codecpriv_par); + par->extradata = old_extradata; } break; // FIXME: Remove the following once libaom starts propagating extradata during init()