From patchwork Thu Nov 23 22:08:43 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 6299 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.161.94 with SMTP id m30csp1328459jah; Thu, 23 Nov 2017 14:09:21 -0800 (PST) X-Google-Smtp-Source: AGs4zMbMUboJ71jwAShHMGUvpF+bOn7ojv910BMmsTX23mmxFjsHXTR2JxL6jNvUzeRvMvRonsFm X-Received: by 10.223.157.138 with SMTP id p10mr23641576wre.28.1511474961778; Thu, 23 Nov 2017 14:09:21 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1511474961; cv=none; d=google.com; s=arc-20160816; b=p5FpJhZbXNm8+6+A0Orl1fBr2sBNjuG7zlytY0oX7j/ZNzIUKodtHx4LpTwN5W3UwX NusUqtaXQ9hKNpONCzs7GE1058VKO12S2zzQ2DoDewwD3MYySQUP8fkQdFGbhaLHhSVb jYfZGD2Bt8vbi+xpNwqxbHvR0QXDxMDFtr10Bfhqqpl8e01LcL9SXEU4tohsOJVInNNS MW6+1lOIEmxurRpRmCH4c9T1iohs7AnC0TeeijciSyxhNpKa5SyZrk/P8ks7niKIOE/j Jm0e78YMcCnqHrZNOAd67CYuyrA62dyfgDY7GWDY6K39K4n+O9C1WcbvBU1Ncue+ieFJ MJGA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:references:in-reply-to:message-id:date :to:from:dkim-signature:delivered-to:arc-authentication-results; bh=yVhATYi0Pq/10M2X6vKxgtl/sWThCYw5pHZCx5R2Cug=; b=BtdWoBV4SIQeACPbQuFvj+N/N5/6+0hDfMkJsBqo0hZ7lljHATrfelA1wx8vAeWSub yKKO5xUSkCAji16aGMVnIukN09FPcu0g6baEK1o7hTO2VH3c1XKtLIOAZznig9EvALLb 04nad0gjGCFmyhbtAHvxly7KeyshVCIhXGifFnIuHCah2OePujP4MDOqtfci1Ld8PSKh m0ZmOVPImOs0zsh5IRupkO44vbtxFXsRD4/wyAP9OtywrQSASL8U66ij6y89l+XRvkS4 lpNGW85MejDZwb4VdHoPRIMUWL3dTn/et1fwvxs9lmYd1IvEWCou2RXwZYIR+EF6x3zk SkEg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=XMz1xJRm; 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=NONE 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 d4si16228328wrg.511.2017.11.23.14.09.21; Thu, 23 Nov 2017 14:09:21 -0800 (PST) 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=20161025 header.b=XMz1xJRm; 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=NONE 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 6713068A20A; Fri, 24 Nov 2017 00:09:16 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk0-f195.google.com (mail-qk0-f195.google.com [209.85.220.195]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2582168A184 for ; Fri, 24 Nov 2017 00:09:07 +0200 (EET) Received: by mail-qk0-f195.google.com with SMTP id b85so22494731qkc.13 for ; Thu, 23 Nov 2017 14:09:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references; bh=miGnfKF1gxaFEOkYwvH7aHtY4/9pTm/RDOVwCsrWGdA=; b=XMz1xJRmfal6VL+1dnSSSdzq89ahaEyKYIBquBZhD9Jm/zykxvHyaWAjM/L6HPpPdQ BnMIDTm6RhkWBi3A92WkGGWPMA0K4ltoWJ7Q5rI8LUkhp+LQidKxD2NDAl+K3ubZNNtl 1n19XXYQ6pY4quJFpGo8Dt6EBUYBEX4tbe/tSPXj+YnlkxYn1rdllmXABHaEuWRZLSHr CW75JsCBwJsePt2ZvmyBvzwphta2e8bzrEF9mpxFm/X8E6qmDiOiH4UmHQxY/zkzLkRv 6eLY00BOCBREPsRWyOej7hYEO+B2iGC8uAIBztlx8tyUwd+SxivR1s5UEtFguj579u5K BK0A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=miGnfKF1gxaFEOkYwvH7aHtY4/9pTm/RDOVwCsrWGdA=; b=ex4yOMKYmgGwZplUzZ4Bg5qmR5/4TzlEMgeERiLBZnMzTh2ezZTUudCPOT6Y4CIyIt VdVX0AS22qg1b/lXKCzEyRxIsvIl92PgSBFWS2jotxjili2NmA0R9MVegk0G/VVYKKKO pRGqLR7esaKArIBM0FjsPgFxyQm3SswfEvnIcl+dhVKnvowY/vfCFtk354siJGTTVLT0 yhVfowSV5zKYsmGO8+LjcJwEo/IGBHgYsRpmj4q454LdkS3anctmvKGB2Msdj1lyFahw tCajlXcN1sx0noz1UXdH07+63t4EhUj9KNVpHOZVtHmrmUYwN2W2rPLYFReIpgNiBt55 wTYw== X-Gm-Message-State: AJaThX5w/ibz2YVq1v5xhd4iZ2D8ToakFd25jnJ07bTNlP1i+34xQch3 SnPzEPb40z+CVjP/0brpVRESNA== X-Received: by 10.55.178.68 with SMTP id b65mr12930146qkf.139.1511474946747; Thu, 23 Nov 2017 14:09:06 -0800 (PST) Received: from localhost.localdomain ([181.231.59.220]) by smtp.gmail.com with ESMTPSA id m5sm13893569qkh.90.2017.11.23.14.09.05 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 23 Nov 2017 14:09:06 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Thu, 23 Nov 2017 19:08:43 -0300 Message-Id: <20171123220843.804-2-jamrial@gmail.com> X-Mailer: git-send-email 2.15.0 In-Reply-To: <20171123220843.804-1-jamrial@gmail.com> References: <20171123220843.804-1-jamrial@gmail.com> Subject: [FFmpeg-devel] [PATCH 2/2] avformat/flacenc: add flac_init() and flac_deinit() 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 MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Signed-off-by: James Almer --- libavformat/flacenc.c | 58 +++++++++++++++++++++++++++++++++------------------ 1 file changed, 38 insertions(+), 20 deletions(-) diff --git a/libavformat/flacenc.c b/libavformat/flacenc.c index 84da54a1df..7c94670f1d 100644 --- a/libavformat/flacenc.c +++ b/libavformat/flacenc.c @@ -197,11 +197,11 @@ static int flac_finish_header(struct AVFormatContext *s) return 0; } -static int flac_write_header(struct AVFormatContext *s) +static int flac_init(struct AVFormatContext *s) { AVCodecParameters *par; FlacMuxerContext *c = s->priv_data; - int ret, i; + int i; c->audio_stream_idx = -1; for (i = 0; i < s->nb_streams; i++) { @@ -229,17 +229,6 @@ static int flac_write_header(struct AVFormatContext *s) av_log(s, AV_LOG_ERROR, "No audio stream present.\n"); return AVERROR(EINVAL); } - c->waiting_pics = c->nb_pics = s->nb_streams - 1; - if (c->nb_pics && !(c->pics = av_calloc(c->nb_pics, sizeof(AVPacket)))) - return AVERROR(ENOMEM); - - if (!c->write_header) - return 0; - - ret = ff_flac_write_header(s->pb, par->extradata, - par->extradata_size, 0); - if (ret) - return ret; /* add the channel layout tag */ if (par->channel_layout && @@ -258,6 +247,28 @@ static int flac_write_header(struct AVFormatContext *s) } } + c->waiting_pics = c->nb_pics = s->nb_streams - 1; + if (c->nb_pics && !(c->pics = av_calloc(c->nb_pics, sizeof(AVPacket)))) + return AVERROR(ENOMEM); + + + return 0; +} + +static int flac_write_header(struct AVFormatContext *s) +{ + FlacMuxerContext *c = s->priv_data; + AVCodecParameters *par = s->streams[c->audio_stream_idx]->codecpar; + int ret; + + if (!c->write_header) + return 0; + + ret = ff_flac_write_header(s->pb, par->extradata, + par->extradata_size, 0); + if (ret) + return ret; + if (!c->waiting_pics) ret = flac_finish_header(s); @@ -313,7 +324,6 @@ static int flac_write_trailer(struct AVFormatContext *s) FlacMuxerContext *c = s->priv_data; uint8_t *streaminfo = c->streaminfo ? c->streaminfo : s->streams[c->audio_stream_idx]->codecpar->extradata; - int i; if (c->waiting_pics) { av_log(s, AV_LOG_WARNING, "No packets were sent for some of the " @@ -321,10 +331,6 @@ static int flac_write_trailer(struct AVFormatContext *s) flac_queue_flush(s); } - for (i = 0; i < c->nb_pics; i++) - av_packet_unref(&c->pics[i]); - av_freep(&c->pics); - if (!c->write_header || !streaminfo) return 0; @@ -339,11 +345,21 @@ static int flac_write_trailer(struct AVFormatContext *s) av_log(s, AV_LOG_WARNING, "unable to rewrite FLAC header.\n"); } - av_freep(&c->streaminfo); - return 0; } +static void flac_deinit(struct AVFormatContext *s) +{ + FlacMuxerContext *c = s->priv_data; + int i; + + for (i = 0; i < c->nb_pics; i++) + av_packet_unref(&c->pics[i]); + av_freep(&c->pics); + + av_freep(&c->streaminfo); +} + static int flac_write_packet(struct AVFormatContext *s, AVPacket *pkt) { FlacMuxerContext *c = s->priv_data; @@ -420,9 +436,11 @@ AVOutputFormat ff_flac_muxer = { .extensions = "flac", .audio_codec = AV_CODEC_ID_FLAC, .video_codec = AV_CODEC_ID_PNG, + .init = flac_init, .write_header = flac_write_header, .write_packet = flac_write_packet, .write_trailer = flac_write_trailer, + .deinit = flac_deinit, .flags = AVFMT_NOTIMESTAMPS, .priv_class = &flac_muxer_class, };