From patchwork Mon Feb 19 05:55:09 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Dixit, Vishwanath" X-Patchwork-Id: 7650 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.150.33 with SMTP id c30csp1143754jai; Sun, 18 Feb 2018 21:55:27 -0800 (PST) X-Google-Smtp-Source: AH8x225zhix8h4vpxzpXQ15ShAOwiROObTo+M7sR7nQZNksTtJ9asOogrfqY0qd3tLhKhj1KdKhq X-Received: by 10.28.74.217 with SMTP id n86mr10729118wmi.93.1519019727353; Sun, 18 Feb 2018 21:55:27 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1519019727; cv=none; d=google.com; s=arc-20160816; b=MFvSWIvp5gW5OB3OutMpGUyDe9V5vvfkIllGw0dzUR5N3AynJQbK+kGGKUZ4oIgMTB 7GiKRZe5GCDV+fM1qYsFJTjQnCi1CiFrHnqjrby0mNzqBPjO9ZhBCvWfScsZEAUiVroW MRFHkruVGTPiWeaZRSdqBBaDerRC1C3vBu1vF5kx952WYqesB0tMOMSSb6QGVmOUMNMP wDH7Gh/qb42WYpTK8icPWo+DrCP+KeLINO6QP3lbEiaUBxncjwBeN4hRVw2yXeO3C8ep 91vICkj5irwK7GD0VRjT7x1jQTaoOI8RRLs7xNUrDSeOnGRVO6haeLl8Hm0HRm+ypGVt iuWg== 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:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:feedback-id:message-id:date:to:from :dkim-signature:delivered-to:arc-authentication-results; bh=O64hVoFF2kZ1+UF/apA/Es4JVqrz0DdPIDZUce/Y59Y=; b=O/9Btrknfq3dhOAe4513g4enSLLNeDVKmyCWE8gTueoqY+q9UOWOmKvBiS6pt4e9d6 zrswOLR1Ujx9f2E00Bn7QAD8RR8ZPzpHeYq3aS5tdAyexjvNtllOlgATSd2Q7PR8zCEJ O7e/HKOfH+qNzzvDi62MTF7znJFB+f7Xjl0EwBrHQEsmv01z7XMLsix+Hcrb7yn7aVtj q4xvGvfpi3n5k/JsDuctcDpZ747KZJsJGvwqsaVnTphWV1lJyuFJ89dZagpFn6/rwEI6 RFv+EXmNc/Muj0MIhqQF7wY1NdMFrrcVz6D2COwdcBGq2fN1xdTPd3e791zS+ZN9h5/F hU0w== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@smtpservice.net header.s=m78bu0.a1-4.dyn header.b=AND7b5oV; 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=QUARANTINE sp=NONE dis=NONE) header.from=akamai.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id 128si9451009wms.31.2018.02.18.21.55.26; Sun, 18 Feb 2018 21:55:27 -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=@smtpservice.net header.s=m78bu0.a1-4.dyn header.b=AND7b5oV; 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=QUARANTINE sp=NONE dis=NONE) header.from=akamai.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id A1C37689BD0; Mon, 19 Feb 2018 07:55:24 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from a2i831.smtp2go.com (a2i831.smtp2go.com [103.47.207.63]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 22F54689BD0 for ; Mon, 19 Feb 2018 07:55:18 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=smtpservice.net; s=m78bu0.a1-4.dyn; x=1519020624; h=Feedback-ID: X-Smtpcorp-Track:Message-Id:Date:Subject:To:From:Reply-To:Sender: List-Unsubscribe; bh=0MU245afJxgE7zUei79rAh0f/+0rPkp50cjSpiqXyOo=; b=AND7b5oV uFfvrPWGeR3EIxIDAN1nN0pdGbxmoVnzwdaZ/1J8WtBJu/pPK+YNzy0mR//9LFSm5vSwKCfxC8CS/ Arc808HgHHtI3XYIEbTKjXJRQVPyQ9r2TXMGznA2TAC/sN0KmN8/5omGc86vg+QVyd5VcdTA5WjIR kJe6k4r9z89RLMZWmLgXozVmxyGk0Y1ayDGJxRIfQLwkIPA1Ty0aVhDEjKGwJ1kRI7gat1ah5Z6RE +aR2og6v4GwkMXvok7hLiKRJbQk43dOCcET0bBhHJTFRmZod+q9iIZRfMKwUGqfxEo6XSzRlJ0Kgz wm1qFrUjgb82v/MMyXxFT2yBeA==; From: vdixit@akamai.com To: ffmpeg-devel@ffmpeg.org Date: Mon, 19 Feb 2018 11:25:09 +0530 Message-Id: <1519019709-12387-1-git-send-email-vdixit@akamai.com> X-Mailer: git-send-email 1.9.1 X-Smtpcorp-Track: 1-n-ey4bajkRC5.iiPDuwZK6 Feedback-ID: 337386m:337386asVRLGB:337386s1nterKZGk:SMTPCORP X-Report-Abuse: Please forward a copy of this message, including all headers, to Subject: [FFmpeg-devel] [PATCH 1/3] avformat/movenc: addition of flag to fragment at every frame 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: Vishwanath Dixit MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" From: Vishwanath Dixit --- libavformat/movenc.c | 10 +++++++--- libavformat/movenc.h | 1 + 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/libavformat/movenc.c b/libavformat/movenc.c index f433499..5b1e66c 100644 --- a/libavformat/movenc.c +++ b/libavformat/movenc.c @@ -62,6 +62,7 @@ static const AVOption options[] = { { "moov_size", "maximum moov size so it can be placed at the begin", offsetof(MOVMuxContext, reserved_moov_size), AV_OPT_TYPE_INT, {.i64 = 0}, 0, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, 0 }, { "empty_moov", "Make the initial moov atom empty", 0, AV_OPT_TYPE_CONST, {.i64 = FF_MOV_FLAG_EMPTY_MOOV}, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, "movflags" }, { "frag_keyframe", "Fragment at video keyframes", 0, AV_OPT_TYPE_CONST, {.i64 = FF_MOV_FLAG_FRAG_KEYFRAME}, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, "movflags" }, + { "frag_every_frame", "Fragment at every frame", 0, AV_OPT_TYPE_CONST, {.i64 = FF_MOV_FLAG_FRAG_EVERY_FRAME}, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, "movflags" }, { "separate_moof", "Write separate moof/mdat atoms for each track", 0, AV_OPT_TYPE_CONST, {.i64 = FF_MOV_FLAG_SEPARATE_MOOF}, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, "movflags" }, { "frag_custom", "Flush fragments on caller requests", 0, AV_OPT_TYPE_CONST, {.i64 = FF_MOV_FLAG_FRAG_CUSTOM}, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, "movflags" }, { "isml", "Create a live smooth streaming feed (for pushing to a publishing point)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_MOV_FLAG_ISML}, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, "movflags" }, @@ -5432,7 +5433,8 @@ static int mov_write_single_packet(AVFormatContext *s, AVPacket *pkt) (mov->max_fragment_size && mov->mdat_size + size >= mov->max_fragment_size) || (mov->flags & FF_MOV_FLAG_FRAG_KEYFRAME && par->codec_type == AVMEDIA_TYPE_VIDEO && - trk->entry && pkt->flags & AV_PKT_FLAG_KEY)) { + trk->entry && pkt->flags & AV_PKT_FLAG_KEY) || + (mov->flags & FF_MOV_FLAG_FRAG_EVERY_FRAME)) { if (frag_duration >= mov->min_fragment_duration) { // Set the duration of this track to line up with the next // sample in this track. This avoids relying on AVPacket @@ -5874,7 +5876,8 @@ static int mov_init(AVFormatContext *s) if (mov->max_fragment_duration || mov->max_fragment_size || mov->flags & (FF_MOV_FLAG_EMPTY_MOOV | FF_MOV_FLAG_FRAG_KEYFRAME | - FF_MOV_FLAG_FRAG_CUSTOM)) + FF_MOV_FLAG_FRAG_CUSTOM | + FF_MOV_FLAG_FRAG_EVERY_FRAME)) mov->flags |= FF_MOV_FLAG_FRAGMENT; /* Set other implicit flags immediately */ @@ -6238,7 +6241,8 @@ static int mov_write_header(AVFormatContext *s) if (mov->flags & FF_MOV_FLAG_FRAGMENT) { /* If no fragmentation options have been set, set a default. */ if (!(mov->flags & (FF_MOV_FLAG_FRAG_KEYFRAME | - FF_MOV_FLAG_FRAG_CUSTOM)) && + FF_MOV_FLAG_FRAG_CUSTOM | + FF_MOV_FLAG_FRAG_EVERY_FRAME)) && !mov->max_fragment_duration && !mov->max_fragment_size) mov->flags |= FF_MOV_FLAG_FRAG_KEYFRAME; } else { diff --git a/libavformat/movenc.h b/libavformat/movenc.h index c4e966b..ca2a9c9 100644 --- a/libavformat/movenc.h +++ b/libavformat/movenc.h @@ -245,6 +245,7 @@ typedef struct MOVMuxContext { #define FF_MOV_FLAG_USE_MDTA (1 << 17) #define FF_MOV_FLAG_SKIP_TRAILER (1 << 18) #define FF_MOV_FLAG_NEGATIVE_CTS_OFFSETS (1 << 19) +#define FF_MOV_FLAG_FRAG_EVERY_FRAME (1 << 20) int ff_mov_write_packet(AVFormatContext *s, AVPacket *pkt);