From patchwork Tue Mar 28 10:32:19 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Matthieu Bouron X-Patchwork-Id: 3143 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.44.195 with SMTP id s186csp542248vss; Tue, 28 Mar 2017 02:39:25 -0700 (PDT) X-Received: by 10.28.38.133 with SMTP id m127mr13185713wmm.41.1490693965800; Tue, 28 Mar 2017 02:39:25 -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 y53si4069174wry.67.2017.03.28.02.39.25; Tue, 28 Mar 2017 02:39:25 -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=@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 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 E47766897F9; Tue, 28 Mar 2017 12:38:59 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr0-f177.google.com (mail-wr0-f177.google.com [209.85.128.177]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 761B068975E for ; Tue, 28 Mar 2017 12:38:54 +0300 (EEST) Received: by mail-wr0-f177.google.com with SMTP id l43so95193882wre.1 for ; Tue, 28 Mar 2017 02:39:16 -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; bh=2h75n0AMNMBhOK5BxlQKdLtscp2NpiHe+8/ye7KEOA8=; b=TCBDV7ql9xme+OQ4CpW9E7KCWkwHldewprUfuJLoWv5rdE0s+tK0yvNtBIUI7mCye+ Y0TQIQcXFN31JWPfXBuX5LvWVWoVzZK5FD/BxaZlvr+nmX0YZRmmMSRI+Qkmq3ew7qsf q5lWshFhfDqnvNLXd8Ea7Q4xTM4PBgMgOEUFPQ+kQTJsActdDQOyTixtfpg3COnqmiON CfIPogZO2d0oFMDMJUgZn3X2pQCFGbYO7OcZNCvjiLzcZ6ygi7VQ73YxgdzJLenr+VWB hI1Jfu37kqxraW+1jxGhSW2K+hkapdDO2Sa0Ag4CuR45b04iScuqq48+QAOyZb9MryIm ljcQ== 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; bh=2h75n0AMNMBhOK5BxlQKdLtscp2NpiHe+8/ye7KEOA8=; b=mB4M7hPqL1+buy4tI7hJKbWjiqsDCzn1/iIN9W0NzmmTshG/6MH1kHw/C3innDZip/ 5fntdyVwCFKLNiJhn2Cnks1JnxxFKNS2N7qRNnzZG4Kh62fJ2qHmGjJcihf6lXAvllAR aJtTCZ9neFI9bdO78jIEI/13j5GMGSQg/4k4Tved1bP2gVO3UOuGH1jA76f+zOSRVZoV GvGu/n1vWSvI57vyvOVU8Ceuk4cqt7yT7aLspbqqDdVa/p11NqX2J3VNGidOxM/pPEBq zDE3C5zPvhKWwjxI8x+ymLLjHrfBHG/JsjbOjQSNzrh861YHPpdtdg7ipUwT+0CVIjyR vdiA== X-Gm-Message-State: AFeK/H0LThrAO6h4cyZhtgEnmJf1L0EsKeCg+0brIuxWP2vTmliPldHibY/xzyuYxflHZw== X-Received: by 10.223.128.34 with SMTP id 31mr24118577wrk.179.1490693537253; Tue, 28 Mar 2017 02:32:17 -0700 (PDT) Received: from boken.gopro.lcl (LPuteaux-656-1-74-135.w80-12.abo.wanadoo.fr. [80.12.80.135]) by smtp.gmail.com with ESMTPSA id b42sm4105694wra.36.2017.03.28.02.32.16 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 28 Mar 2017 02:32:16 -0700 (PDT) From: Matthieu Bouron To: ffmpeg-devel@ffmpeg.org Date: Tue, 28 Mar 2017 12:32:19 +0200 Message-Id: <20170328103219.6136-1-matthieu.bouron@gmail.com> X-Mailer: git-send-email 2.12.0 Subject: [FFmpeg-devel] [PATCH] doc/examples/remuxing: switch to codecpar 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: Matthieu Bouron MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Also limits remuxing to audio, video and subtitle streams. --- doc/examples/remuxing.c | 48 +++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 41 insertions(+), 7 deletions(-) diff --git a/doc/examples/remuxing.c b/doc/examples/remuxing.c index 65437d9abd..8615c73842 100644 --- a/doc/examples/remuxing.c +++ b/doc/examples/remuxing.c @@ -50,6 +50,9 @@ int main(int argc, char **argv) AVPacket pkt; const char *in_filename, *out_filename; int ret, i; + int stream_index = 0; + int *stream_mapping = NULL; + int stream_mapping_size = 0; if (argc < 3) { printf("usage: %s input output\n" @@ -83,25 +86,48 @@ int main(int argc, char **argv) goto end; } + stream_mapping_size = ifmt_ctx->nb_streams; + stream_mapping = av_mallocz_array(stream_mapping_size, sizeof(*stream_mapping)); + if (!stream_mapping) { + ret = AVERROR(ENOMEM); + goto end; + } + ofmt = ofmt_ctx->oformat; for (i = 0; i < ifmt_ctx->nb_streams; i++) { + AVStream *out_stream; AVStream *in_stream = ifmt_ctx->streams[i]; - AVStream *out_stream = avformat_new_stream(ofmt_ctx, in_stream->codec->codec); + AVCodecParameters *in_codecpar = in_stream->codecpar; + + if (in_codecpar->codec_type != AVMEDIA_TYPE_AUDIO && + in_codecpar->codec_type != AVMEDIA_TYPE_VIDEO && + in_codecpar->codec_type != AVMEDIA_TYPE_SUBTITLE) { + stream_mapping[i] = -1; + continue; + } + + stream_mapping[i] = stream_index++; + + out_stream = avformat_new_stream(ofmt_ctx, NULL); if (!out_stream) { fprintf(stderr, "Failed allocating output stream\n"); ret = AVERROR_UNKNOWN; goto end; } - ret = avcodec_copy_context(out_stream->codec, in_stream->codec); + ret = avcodec_parameters_copy(out_stream->codecpar, in_codecpar); if (ret < 0) { - fprintf(stderr, "Failed to copy context from input to output stream codec context\n"); + fprintf(stderr, "Failed to copy copy codec parameters\n"); + goto end; + } + out_stream->codecpar->codec_tag = 0; + + ret = avformat_transfer_internal_stream_timing_info(ofmt, out_stream, in_stream, AVFMT_TBCF_AUTO); + if (ret < 0) { + fprintf(stderr, "Failed to copy stream timing info\n"); goto end; } - out_stream->codec->codec_tag = 0; - if (ofmt_ctx->oformat->flags & AVFMT_GLOBALHEADER) - out_stream->codec->flags |= AV_CODEC_FLAG_GLOBAL_HEADER; } av_dump_format(ofmt_ctx, 0, out_filename, 1); @@ -127,8 +153,14 @@ int main(int argc, char **argv) break; in_stream = ifmt_ctx->streams[pkt.stream_index]; - out_stream = ofmt_ctx->streams[pkt.stream_index]; + if (pkt.stream_index >= stream_mapping_size || + stream_mapping[pkt.stream_index] < 0) { + av_packet_unref(&pkt); + continue; + } + pkt.stream_index = stream_mapping[pkt.stream_index]; + out_stream = ofmt_ctx->streams[pkt.stream_index]; log_packet(ifmt_ctx, &pkt, "in"); /* copy packet */ @@ -156,6 +188,8 @@ end: avio_closep(&ofmt_ctx->pb); avformat_free_context(ofmt_ctx); + av_freep(&stream_mapping); + if (ret < 0 && ret != AVERROR_EOF) { fprintf(stderr, "Error occurred: %s\n", av_err2str(ret)); return 1;