From patchwork Mon Nov 14 16:45:24 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 1422 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.90.1 with SMTP id o1csp1142144vsb; Mon, 14 Nov 2016 09:04:34 -0800 (PST) X-Received: by 10.28.9.80 with SMTP id 77mr11855950wmj.68.1479143074063; Mon, 14 Nov 2016 09:04:34 -0800 (PST) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id dw13si24484558wjb.44.2016.11.14.09.04.33; Mon, 14 Nov 2016 09:04:34 -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; 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 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 A48EE689CFF; Mon, 14 Nov 2016 19:04:30 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qt0-f193.google.com (mail-qt0-f193.google.com [209.85.216.193]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 87D3F689CE3 for ; Mon, 14 Nov 2016 19:04:24 +0200 (EET) Received: by mail-qt0-f193.google.com with SMTP id n6so6066670qtd.0 for ; Mon, 14 Nov 2016 09:04:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:subject:date:message-id; bh=OLhwu1w1D4R0/AdBd64TPRwE8RKiKCqC9imWNnN80QU=; b=kJMR42zbgBlhs3woIz8dXn47PdXX2ueovKecjp9EgcH96lHd/BGdXo+MJK6MiO4g3l pB5iv9QOXrPVqkipPfWsY1jP1HD3EO0xZJpOvHtv5ugT0rv8nxVb0K9d3MnA65CwuxMV V9p64vzZDhworMvBNnIJVoMCKUZaxZxyiRsVXhy08aaNGw7nWo/TC0+sOuiLOUhy1sDu T1lXKDuDjLiQd/u0ll9IrucDWzV+kqTpBEvCpIgvZ/OOdj17WsnDWHjQ6tk0Wj8LKS4Z SxIu2TXv/DdRnZn9BjT7dU8RAvuuU0wCNCw2Vr860hRU20aguatBrGZAaeISU1F+mGlq gzow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:subject:date:message-id; bh=OLhwu1w1D4R0/AdBd64TPRwE8RKiKCqC9imWNnN80QU=; b=MORJsj0Uh6SlMvj1UDwcIkTl5Jr8PVTo3PbipDr0abE1haJse5RPBNZ1HPDBTugRIb OQyIGnciIdEGs/N7pGPiVX2k+dndB7w2+jz/qQJZlEk/5fkyZj4gqr/mXX+OC7WaGpmy 9FG3Spbxj7NhPb4Nig1p7rGeBOI8wV1MHfzcu+B4RxMeZXOJCGQoZrQb5Hv/gMciiZRt OHD8EMyn9/RVLDR2xCf854h4O1zNQmTHFIaLlyFddIf8mTzCBTxnyLR8q5YC3n6NDZiI DaOsHgiO/0rKgt+njxSMdB9wroiiuvma/AgUyOrY4SfShWw1vLeyv6PwBTSwNSEMrxDn 0FCQ== X-Gm-Message-State: ABUngvfaAvToSVyqu2b/0MH0+RI3aJS/TjevK3caOPBEXYHgMQOaziuwAORB39CNJfES/Q== X-Received: by 10.237.58.138 with SMTP id o10mr11310455qte.76.1479141970166; Mon, 14 Nov 2016 08:46:10 -0800 (PST) Received: from localhost.localdomain ([181.22.0.33]) by smtp.gmail.com with ESMTPSA id p196sm12817475qke.47.2016.11.14.08.46.09 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 14 Nov 2016 08:46:09 -0800 (PST) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Mon, 14 Nov 2016 13:45:24 -0300 Message-Id: <20161114164524.4536-1-jamrial@gmail.com> X-Mailer: git-send-email 2.10.1 Subject: [FFmpeg-devel] [PATCH] ffmpeg: simplify init_output_stream_streamcopy() 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" Skip the intermediary codecpar struct and instead copy everything to the destination codecpar struct directly. Signed-off-by: James Almer --- ffmpeg.c | 17 +++++++---------- ffmpeg.h | 1 - ffmpeg_opt.c | 6 ------ 3 files changed, 7 insertions(+), 17 deletions(-) diff --git a/ffmpeg.c b/ffmpeg.c index a6e9476..8a6978d 100644 --- a/ffmpeg.c +++ b/ffmpeg.c @@ -536,7 +536,6 @@ static void ffmpeg_cleanup(int ret) av_dict_free(&ost->sws_dict); avcodec_free_context(&ost->enc_ctx); - avcodec_parameters_free(&ost->ref_par); while (ost->muxing_queue && av_fifo_size(ost->muxing_queue)) { AVPacket pkt; @@ -2878,31 +2877,29 @@ static int init_output_stream_streamcopy(OutputStream *ost) OutputFile *of = output_files[ost->file_index]; InputStream *ist = get_input_stream(ost); AVCodecParameters *par_dst = ost->st->codecpar; - AVCodecParameters *par_src = ost->ref_par; + AVCodecParameters *par_src = ist->st->codecpar; AVRational sar; int i, ret; uint32_t codec_tag = par_dst->codec_tag; av_assert0(ist && !ost->filter); - avcodec_parameters_to_context(ost->enc_ctx, ist->st->codecpar); + avcodec_parameters_to_context(ost->enc_ctx, par_src); ret = av_opt_set_dict(ost->enc_ctx, &ost->encoder_opts); if (ret < 0) { av_log(NULL, AV_LOG_FATAL, "Error setting up codec context options.\n"); return ret; } - avcodec_parameters_from_context(par_src, ost->enc_ctx); if (!codec_tag) { - unsigned int codec_tag_tmp; if (!of->ctx->oformat->codec_tag || - av_codec_get_id (of->ctx->oformat->codec_tag, par_src->codec_tag) == par_src->codec_id || - !av_codec_get_tag2(of->ctx->oformat->codec_tag, par_src->codec_id, &codec_tag_tmp)) - codec_tag = par_src->codec_tag; + av_codec_get_id (of->ctx->oformat->codec_tag, ost->enc_ctx->codec_tag) == ost->enc_ctx->codec_id || + av_codec_get_tag(of->ctx->oformat->codec_tag, ost->enc_ctx->codec_id) <= 0) + codec_tag = ost->enc_ctx->codec_tag; } - ret = avcodec_parameters_copy(par_dst, par_src); + ret = avcodec_parameters_from_context(par_dst, ost->enc_ctx); if (ret < 0) return ret; @@ -2973,7 +2970,7 @@ static int init_output_stream_streamcopy(OutputStream *ost) else if (ist->st->sample_aspect_ratio.num) sar = ist->st->sample_aspect_ratio; else - sar = par_src->sample_aspect_ratio; + sar = par_dst->sample_aspect_ratio; ost->st->sample_aspect_ratio = par_dst->sample_aspect_ratio = sar; ost->st->avg_frame_rate = ist->st->avg_frame_rate; ost->st->r_frame_rate = ist->st->r_frame_rate; diff --git a/ffmpeg.h b/ffmpeg.h index ebe5bf0..1256b1f 100644 --- a/ffmpeg.h +++ b/ffmpeg.h @@ -450,7 +450,6 @@ typedef struct OutputStream { AVBSFContext **bsf_ctx; AVCodecContext *enc_ctx; - AVCodecParameters *ref_par; /* associated input codec parameters with encoders options applied */ AVCodec *enc; int64_t max_frames; AVFrame *filtered_frame; diff --git a/ffmpeg_opt.c b/ffmpeg_opt.c index ddda3f2..6b802ca 100644 --- a/ffmpeg_opt.c +++ b/ffmpeg_opt.c @@ -1266,12 +1266,6 @@ static OutputStream *new_output_stream(OptionsContext *o, AVFormatContext *oc, e } ost->enc_ctx->codec_type = type; - ost->ref_par = avcodec_parameters_alloc(); - if (!ost->ref_par) { - av_log(NULL, AV_LOG_ERROR, "Error allocating the encoding parameters.\n"); - exit_program(1); - } - if (ost->enc) { AVIOContext *s = NULL; char *buf = NULL, *arg = NULL, *preset = NULL;