From patchwork Sun Apr 12 16:44:26 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 18895 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 5961744ABC1 for ; Sun, 12 Apr 2020 19:44:42 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 3143B68B7D6; Sun, 12 Apr 2020 19:44:42 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f65.google.com (mail-wr1-f65.google.com [209.85.221.65]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 7AAE368ABF7 for ; Sun, 12 Apr 2020 19:44:35 +0300 (EEST) Received: by mail-wr1-f65.google.com with SMTP id 65so7970684wrl.1 for ; Sun, 12 Apr 2020 09:44:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=xAVAbUnlAwFsXt4iUPknDeRN95F6JICekWyleTTPNJg=; b=bArG8ELthEqpjG8iEEeXBZ7o3+HuRTIuCJyxF/ABFGd1tVsriAGDu3XlTM7DGs7J1d 62M6X8LMfRk18BoclF2SKpkb9HlSyrQpf/6FB4Paj0kSiK36Qd6NsoJ+q9LPStFKfMND S4WwSB0U8jTvhiKecWi1XtSjX28ZGvVrPunH7EQnahTb4JyTLGGFPg8XrasioAYWqjWF 4Dox2Wk2NgwHhm2JCBc3T1FcfvsSR0jA6J3ZPFPD7ljQAzRmOY+7pRHTbYDF++Jpo7YM aZHEfkZ6noUYfgLHXi4pxPgX78u2Rm9tF8W81N4h21nPNCskpWdVXZP9248pFTg5QFvu FM8A== 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:mime-version :content-transfer-encoding; bh=xAVAbUnlAwFsXt4iUPknDeRN95F6JICekWyleTTPNJg=; b=Qfe1fcsnNSR2ccUYUyPnwDZOLRT4wl8EweIshyh8YMHB9ypRiWSrgHu5+dnBw5OEK6 FmKGWyF7ei3aXSB8TUAxk5DY/s8Rg0kB+TloS0Dry27VcD++660cRZ6eosu4L9RgOL5t IadFVMLLy9oT1GilD7irNp1hBt7v/zEJ2D/2DvbJYXRmTw8mFSliedzFjCWA5HzEObBl qHKcYHmY6Cep417R+tvyU16JHvqPZJYPxEcqAVjmaio1O2+jhsCofSo+un0K3q4DxwUQ vXKDJPjxcS0vgm38dkx1b30slMrCI0qj6U3tJoxdqxhyVsR7jY5t51UaZY+n8JBUSZDR VAxA== X-Gm-Message-State: AGi0PuZx8NfhWSplJtObQEtLyb3esrT1RXiten2QJZ7OtWB7vGTBqP5p ND3Q+xaepDsnQFrXPyP4RtYgrThg X-Google-Smtp-Source: APiQypJfuIbOD6gmq5psOuj23yT9x8ygVeYYfUrtIwUviKbTIB3zqVS5EBtFgCCRz0bhvHwU7ix0Ew== X-Received: by 2002:a5d:404f:: with SMTP id w15mr13957336wrp.38.1586709874542; Sun, 12 Apr 2020 09:44:34 -0700 (PDT) Received: from sblaptop.fritz.box (ipbcc1ab57.dynamic.kabel-deutschland.de. [188.193.171.87]) by smtp.gmail.com with ESMTPSA id f141sm11191606wmf.3.2020.04.12.09.44.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 12 Apr 2020 09:44:33 -0700 (PDT) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sun, 12 Apr 2020 18:44:26 +0200 Message-Id: <20200412164427.31811-1-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/2] avformat/flacenc: Only update streaminfo if it has changed 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" An AVStream's codecpar is supposed to be filled by the caller before avformat_write_header(); if the CodecParameters change, the caller should signal this via packet side data, but not touch the AVStream's codecpar. The FLAC muxer checks for packet side data containing updated extradata, yet if nothing has arrived by the time the trailer is written, the already written extradata is overwritten by the very same extradata again, unless the output is unseekable, in which case a warning that the FLAC header can't be rewritten is emitted. This commit changes this by only trying to rewrite the extradata if a new streaminfo arrived via packet side data. Only then is a warning emitted in case the output is unseekable. Signed-off-by: Andreas Rheinhardt --- libavformat/flacenc.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/libavformat/flacenc.c b/libavformat/flacenc.c index 1aae0c97e0..42c1efec54 100644 --- a/libavformat/flacenc.c +++ b/libavformat/flacenc.c @@ -331,8 +331,6 @@ static int flac_write_trailer(struct AVFormatContext *s) AVIOContext *pb = s->pb; int64_t file_size; FlacMuxerContext *c = s->priv_data; - uint8_t *streaminfo = c->streaminfo ? c->streaminfo : - s->streams[c->audio_stream_idx]->codecpar->extradata; if (c->waiting_pics) { av_log(s, AV_LOG_WARNING, "No packets were sent for some of the " @@ -340,14 +338,14 @@ static int flac_write_trailer(struct AVFormatContext *s) flac_queue_flush(s); } - if (!c->write_header || !streaminfo) + if (!c->write_header || !c->streaminfo) return 0; if (pb->seekable & AVIO_SEEKABLE_NORMAL) { /* rewrite the STREAMINFO header block data */ file_size = avio_tell(pb); avio_seek(pb, 8, SEEK_SET); - avio_write(pb, streaminfo, FLAC_STREAMINFO_SIZE); + avio_write(pb, c->streaminfo, FLAC_STREAMINFO_SIZE); avio_seek(pb, file_size, SEEK_SET); } else { av_log(s, AV_LOG_WARNING, "unable to rewrite FLAC header.\n"); From patchwork Sun Apr 12 16:44:27 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 18896 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 8F96F44AC9F for ; Sun, 12 Apr 2020 19:45:07 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 76D9768B8A4; Sun, 12 Apr 2020 19:45:07 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f66.google.com (mail-wr1-f66.google.com [209.85.221.66]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 83B9268B716 for ; Sun, 12 Apr 2020 19:45:00 +0300 (EEST) Received: by mail-wr1-f66.google.com with SMTP id d17so1039442wrg.11 for ; Sun, 12 Apr 2020 09:45:00 -0700 (PDT) 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=/XAsY3S/juXbv33hB54SnoO3cPa9B0KGBwyjFegsmNo=; b=aXZiaxxRtp5vW7UB5VLONxd3MB/xCpslPlUXmUtUVgmF+mv9f/qD4H36WVDeg1WDW5 2ofzHQViujY7+CDQsfxZZSEK4/kF7Oy2bdk9A+1/v6wpRZs71H3X5lNyKte0QWBc546A UCJaNCxYZnaVqd1rWEDQBj8cwu+IeBjtzkPH5xTVq2YKKx6VDAZydBK7xX+otnL07NWW Kt6SCNSIANbHikzBi/iglgxd7yyVu8DAPXPUstzJ637S361eoAgRYfFfHVhc74x9mnbz ehFsKqjwHzdX+pdRly0gBqAmpKAuXZ1c0M5LU3SxEpNuWlzJbmuljRoQJF4fDnDd1c4Y n5qQ== 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=/XAsY3S/juXbv33hB54SnoO3cPa9B0KGBwyjFegsmNo=; b=mI38Q3xsIObcEcRU3l9T4dt1Ot+rgIj5oJewaOetqJ8PXF88gVWLhtjr06w9g+7H35 W7TnVw5V9SXmk51O1YejzELknSsEZjOrIkDGuDk9acoB6+wkPhFjtPfXFsqDKhR/q+Dw QyQrtjU2P+j0PHqkKvnsgeUk7jkTjIXRbT3Y4v9DSBR98fIjUdc/ugLsOrIwN/v1Up22 aLKIR/AdhSgLNav/v0UQ/F8cQCGkgKJimDFMgC8QKA4dwGGisr3pxz1pxzJp4W/Efm1F kBXVCHI+svDa8oy+68URHuhsEzy67nBY5uSacXHEOz/SD61jRUSN1qXJcTvs1YfcWkag zRKQ== X-Gm-Message-State: AGi0PuYUueeB7eZsJLKHtG3I1okQOQ4tKANYP0RSiYrMV7xD1sJ697Wh KkXZaHFR1fs98HXzQPEPHlHZRwGj X-Google-Smtp-Source: APiQypKaZDxC9FyWsFJCnok8QrR81w2EzWdLkkcyg5KyqaZT0cMSC4NyoVn7PbWuM4PHh5gxzuZtDw== X-Received: by 2002:adf:dd0c:: with SMTP id a12mr15394171wrm.144.1586709899630; Sun, 12 Apr 2020 09:44:59 -0700 (PDT) Received: from sblaptop.fritz.box (ipbcc1ab57.dynamic.kabel-deutschland.de. [188.193.171.87]) by smtp.gmail.com with ESMTPSA id f141sm11191606wmf.3.2020.04.12.09.44.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 12 Apr 2020 09:44:59 -0700 (PDT) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sun, 12 Apr 2020 18:44:27 +0200 Message-Id: <20200412164427.31811-2-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200412164427.31811-1-andreas.rheinhardt@gmail.com> References: <20200412164427.31811-1-andreas.rheinhardt@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/2] avformat/flacenc: Don't allocate updated streaminfo separately 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" It is a small buffer of a known, fixed size and so it should simply be put into the muxer's context. Signed-off-by: Andreas Rheinhardt --- libavformat/flacenc.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/libavformat/flacenc.c b/libavformat/flacenc.c index 42c1efec54..a043274df6 100644 --- a/libavformat/flacenc.c +++ b/libavformat/flacenc.c @@ -42,7 +42,8 @@ typedef struct FlacMuxerContext { AVPacketList *queue, *queue_end; /* updated streaminfo sent by the encoder at the end */ - uint8_t *streaminfo; + uint8_t streaminfo[FLAC_STREAMINFO_SIZE]; + int updated_streaminfo; unsigned attached_types; } FlacMuxerContext; @@ -294,12 +295,8 @@ static int flac_write_audio_packet(struct AVFormatContext *s, AVPacket *pkt) streaminfo = av_packet_get_side_data(pkt, AV_PKT_DATA_NEW_EXTRADATA, &streaminfo_size); if (streaminfo && streaminfo_size == FLAC_STREAMINFO_SIZE) { - av_freep(&c->streaminfo); - - c->streaminfo = av_malloc(FLAC_STREAMINFO_SIZE); - if (!c->streaminfo) - return AVERROR(ENOMEM); memcpy(c->streaminfo, streaminfo, FLAC_STREAMINFO_SIZE); + c->updated_streaminfo = 1; } if (pkt->size) @@ -338,7 +335,7 @@ static int flac_write_trailer(struct AVFormatContext *s) flac_queue_flush(s); } - if (!c->write_header || !c->streaminfo) + if (!c->write_header || !c->updated_streaminfo) return 0; if (pb->seekable & AVIO_SEEKABLE_NORMAL) { @@ -359,7 +356,6 @@ static void flac_deinit(struct AVFormatContext *s) FlacMuxerContext *c = s->priv_data; ff_packet_list_free(&c->queue, &c->queue_end); - av_freep(&c->streaminfo); } static int flac_write_packet(struct AVFormatContext *s, AVPacket *pkt)