From patchwork Sat Sep 10 04:37:18 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rodger Combs X-Patchwork-Id: 515 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.140.134 with SMTP id o128csp631796vsd; Fri, 9 Sep 2016 21:38:36 -0700 (PDT) X-Received: by 10.194.116.134 with SMTP id jw6mr5728357wjb.134.1473482316581; Fri, 09 Sep 2016 21:38:36 -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 kq1si5943843wjb.150.2016.09.09.21.38.34; Fri, 09 Sep 2016 21:38:36 -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 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 39D2A689EB8; Sat, 10 Sep 2016 07:38:02 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-oi0-f66.google.com (mail-oi0-f66.google.com [209.85.218.66]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E4486689E98 for ; Sat, 10 Sep 2016 07:37:53 +0300 (EEST) Received: by mail-oi0-f66.google.com with SMTP id 2so13231955oif.2 for ; Fri, 09 Sep 2016 21:38:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:subject:date:message-id:in-reply-to:references; bh=FEL2y+D6rbl/ONeg92qEUif/0MSDeMDPc5/e1P5foAo=; b=LZF3gEUYVJSmTV+b4R6ZkGLrW38ZR+inrutlT0uqtkWf25NBjBI/MS8R45JJ8VBkwA UctlEnO4eftboTNDtGj0KsYIfSkf5Sx1ldv6Bh1k+YbRNsyrIEoE8OypGHPjzRhTVIk3 r2SB6EAgLMzoKujR/mKScadWWxBVWA4sCBjXHfSEslxmDUjx4IVUNmEVYtg0r6Ur2/sh D6KJ1HogN+NbjCDJ0SMGStdt/BfgZ4pqUOy9ok+LtUC+EtgCJ6A6u0ZKsBNeJB+tI5Qm b3Dx5Xi9LovYJL7Vg0C4EQVmrkOf8ShLbaICLZVf5BYD6F1oH3Th+cN89602jIvC5LFn tuxQ== 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:in-reply-to :references; bh=FEL2y+D6rbl/ONeg92qEUif/0MSDeMDPc5/e1P5foAo=; b=khokBH9+PKtBgYXVoXZakYjFJhxq8VVCgTMsG5kG5kgQLyZl4LbpYCO01gZhNm/8u3 XDyt8DhQXPwOYhe9kVHRu1M6QUln2CzuX5fgOO1PsMuhR/TW/zTDYgKxN/908kTEevdq cl5Nwzz9o+AHI4ugJVMRGPJqQluB5mtQfDTByJLLEjb9GNJR5fsBapc4GZ//D6tGSCpR 7Cje2BnIuoYdIqoeCJqGH8U5ZroSteIn62yZg8FA8AVde8vbuDg3lAak0Wyjp8eUMUfc JUrzxYB9bt1RCgYY++FrQquraxwBVCvQ/DnL5wnz1GRdcpqjHDerSPLhzV9kbQpkSnE2 PYYA== X-Gm-Message-State: AE9vXwNP+e9iStj1jqJV89AUu1llRQqn3CYajB8bk42wya+4/lAQtelS4LAz4Bu5vt3wXQ== X-Received: by 10.202.65.196 with SMTP id o187mr10368550oia.105.1473482283163; Fri, 09 Sep 2016 21:38:03 -0700 (PDT) Received: from Rodgers-MacBook-Pro.local.net (c-73-209-137-129.hsd1.il.comcast.net. [73.209.137.129]) by smtp.gmail.com with ESMTPSA id s185sm3616106ita.21.2016.09.09.21.38.02 for (version=TLS1 cipher=AES128-SHA bits=128/128); Fri, 09 Sep 2016 21:38:02 -0700 (PDT) From: Rodger Combs To: ffmpeg-devel@ffmpeg.org Date: Fri, 9 Sep 2016 23:37:18 -0500 Message-Id: <20160910043725.98484-4-rodger.combs@gmail.com> X-Mailer: git-send-email 2.10.0 In-Reply-To: <20160910043725.98484-1-rodger.combs@gmail.com> References: <20160910043725.98484-1-rodger.combs@gmail.com> Subject: [FFmpeg-devel] [PATCH 04/11] lavf/segment: fix writing separate header with auto BSF 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" --- libavformat/segment.c | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/libavformat/segment.c b/libavformat/segment.c index 139761f..7e56f82 100644 --- a/libavformat/segment.c +++ b/libavformat/segment.c @@ -89,6 +89,7 @@ typedef struct SegmentContext { int64_t last_val; ///< remember last time for wrap around detection int64_t last_cut; ///< remember last cut int cut_pending; + int header_written; ///< whether we've already called avformat_write_header char *entry_prefix; ///< prefix to add to list entry filenames int list_type; ///< set the list type @@ -260,6 +261,7 @@ static int segment_start(AVFormatContext *s, int write_header) if (write_header) { AVDictionary *options = NULL; av_dict_copy(&options, seg->format_options, 0); + av_dict_set(&options, "fflags", "-autobsf", 0); err = avformat_write_header(oc, &options); av_dict_free(&options); if (err < 0) @@ -756,7 +758,8 @@ static int seg_init(AVFormatContext *s) } av_dict_copy(&options, seg->format_options, 0); - ret = avformat_write_header(oc, &options); + av_dict_set(&options, "fflags", "-autobsf", 0); + ret = avformat_init_output(oc, &options); if (av_dict_count(options)) { av_log(s, AV_LOG_ERROR, "Some of the provided format options in '%s' are not recognized\n", seg->format_options_str); @@ -772,6 +775,13 @@ static int seg_init(AVFormatContext *s) seg->segment_frame_count = 0; av_assert0(s->nb_streams == oc->nb_streams); + if (ret == AVSTREAM_INIT_IN_WRITE_HEADER) { + ret = avformat_write_header(oc, NULL); + if (ret < 0) + return ret; + seg->header_written = 1; + } + for (i = 0; i < s->nb_streams; i++) { AVStream *inner_st = oc->streams[i]; AVStream *outer_st = s->streams[i]; @@ -781,6 +791,21 @@ static int seg_init(AVFormatContext *s) if (oc->avoid_negative_ts > 0 && s->avoid_negative_ts < 0) s->avoid_negative_ts = 1; + return ret; +} + +static int seg_write_header(AVFormatContext *s) +{ + SegmentContext *seg = s->priv_data; + AVFormatContext *oc = seg->avf; + int ret; + + if (!seg->header_written) { + ret = avformat_write_header(oc, NULL); + if (ret < 0) + return ret; + } + if (!seg->write_header_trailer || seg->header_filename) { if (seg->header_filename) { av_write_frame(oc, NULL); @@ -1012,6 +1037,7 @@ AVOutputFormat ff_segment_muxer = { .priv_data_size = sizeof(SegmentContext), .flags = AVFMT_NOFILE|AVFMT_GLOBALHEADER, .init = seg_init, + .write_header = seg_write_header, .write_packet = seg_write_packet, .write_trailer = seg_write_trailer, .deinit = seg_free, @@ -1031,6 +1057,7 @@ AVOutputFormat ff_stream_segment_muxer = { .priv_data_size = sizeof(SegmentContext), .flags = AVFMT_NOFILE, .init = seg_init, + .write_header = seg_write_header, .write_packet = seg_write_packet, .write_trailer = seg_write_trailer, .deinit = seg_free,