From patchwork Sat Dec 30 21:16:01 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marton Balint X-Patchwork-Id: 7042 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.79.195 with SMTP id r64csp11989892jad; Sat, 30 Dec 2017 13:16:25 -0800 (PST) X-Google-Smtp-Source: ACJfBosSI6iMxm6kcYMAld1FzhHzhSKq3abmJw6cKNUHpVLj9PpgdfLldczef4uxOUUVmaSXsl9w X-Received: by 10.28.24.132 with SMTP id 126mr17333497wmy.34.1514668585489; Sat, 30 Dec 2017 13:16:25 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1514668585; cv=none; d=google.com; s=arc-20160816; b=igueABoPgAlUOBoJcXuAET9Lt4yH04BTHJTsoEZVoRB1fTV7N8gfExkzo8V/v+UE0V GIaknNXQSnoRbPFewaMHYAYIxkt93Fi9YMCsiUstUOtysvIR0WhZLVxpP9JGcKokJqVe m4x2Hu4fHfb4MeNqTaytCIw0CuvoM0tOi7Fmlh1Pu5tK3lnKa07/tDyewrkpDt1iv9bD DFyjT/dgswren2/5OkNjwQCIz2nhgr/dmUFKhUPHV0RiL7WbVRoGclTWUOk2bHBsRHwh 32Z5HE+3w4W3T5k9vEmQAmvFMFuPWtU0ez2lzS3e7GqwK2TCMpWeo1weSJ+n9ciDI2ey 695w== 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:message-id:date:to:from:delivered-to :arc-authentication-results; bh=MyEvqhTWK5PrV+pJWN2RqEj7cTqi64w+a0LIcGkuH/0=; b=oxjyjg1UURgARCTPTRhD9Hyu2deVqrbsmo4zd2HiP4kZVA00SrY4paj8TrA1aLeXTS 28X237q5+t5SY4k0x+Ho0ueTl3FGmCwWMXnAP92T6OhwFvY1bigCxcgBFwfZEQaRcklS WMSlFV3/krNWrqj1tNxI8UIb1BirN4m+Aj6XEmTqmuY8cmyvShwwyh0bpHCA2EGuonY2 cMH1LPU+KHvPX+CdhmP2zDV6SV79YdC+98VSiL4tyBT67BC2kqiLNkZVz60WRqy7tEfo CI/Il+tUjPRy857/xQx9WCrvTofFY8nIYsVu4tQN+CCxwCU0mwi9DXAUmLTCFVzfvse5 qE/w== ARC-Authentication-Results: i=1; mx.google.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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id k20si18250600wmh.272.2017.12.30.13.16.25; Sat, 30 Dec 2017 13:16:25 -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; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 3832B689F51; Sat, 30 Dec 2017 23:16:09 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from iq.passwd.hu (iq.passwd.hu [217.27.212.140]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 8584D689F29 for ; Sat, 30 Dec 2017 23:16:02 +0200 (EET) Received: from localhost (localhost [127.0.0.1]) by iq.passwd.hu (Postfix) with ESMTP id CD782E191B; Sat, 30 Dec 2017 22:16:16 +0100 (CET) X-Virus-Scanned: amavisd-new at passwd.hu Received: from iq.passwd.hu ([127.0.0.1]) by localhost (iq.passwd.hu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id WEt8z3rqIVOT; Sat, 30 Dec 2017 22:16:15 +0100 (CET) Received: from bluegene.passwd.hu (localhost [127.0.0.1]) by iq.passwd.hu (Postfix) with ESMTP id 56E6EE10EC; Sat, 30 Dec 2017 22:16:15 +0100 (CET) From: Marton Balint To: ffmpeg-devel@ffmpeg.org Date: Sat, 30 Dec 2017 22:16:01 +0100 Message-Id: <20171230211606.16405-1-cus@passwd.hu> X-Mailer: git-send-email 2.13.6 Subject: [FFmpeg-devel] [PATCH 1/6] avformat: add url field to AVFormatContext 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: Marton Balint MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" This will replace the 1024 character limited filename field. Compatiblity for output contexts are provided by copying filename field to URL if URL is unset and by providing an internal function for muxers to set both url and filename at once. Signed-off-by: Marton Balint --- doc/APIchanges | 3 +++ libavformat/avformat.h | 12 ++++++++++++ libavformat/internal.h | 7 +++++++ libavformat/mux.c | 11 ++++++++++- libavformat/utils.c | 14 ++++++++++++++ libavformat/version.h | 2 +- 6 files changed, 47 insertions(+), 2 deletions(-) diff --git a/doc/APIchanges b/doc/APIchanges index 3c9f237596..7ca097486e 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -15,6 +15,9 @@ libavutil: 2017-10-21 API changes, most recent first: +2017-xx-xx - xxxxxxx - lavf 58.4.100 - avformat.h + Add url field to AVFormatContext and add ff_format_set_url helper function. + 2017-xx-xx - xxxxxxx - lavc 58.9.100 - avcodec.h Deprecate av_lockmgr_register(). You need to build FFmpeg with threading support enabled to get basic thread-safety (which is the default build diff --git a/libavformat/avformat.h b/libavformat/avformat.h index 4f2798a871..c3229ed0e1 100644 --- a/libavformat/avformat.h +++ b/libavformat/avformat.h @@ -1391,6 +1391,18 @@ typedef struct AVFormatContext { char filename[1024]; /** + * input or output URL. Unlike the old filename field, this field has no + * length restriction. + * + * - demuxing: set by avformat_open_input(), initialized to an empty + * string if url parameter was NULL in avformat_open_input(). + * - muxing: may be set by the caller before avformat_write_header() (or + * avformat_init_output() if that is called first). Set to an + * empty string if it was NULL in avformat_init_output(). + */ + char *url; + + /** * Position of the first frame of the component, in * AV_TIME_BASE fractional seconds. NEVER set this value directly: * It is deduced from the AVStream values. diff --git a/libavformat/internal.h b/libavformat/internal.h index 0cd0556dc7..1e2a3e05a1 100644 --- a/libavformat/internal.h +++ b/libavformat/internal.h @@ -696,4 +696,11 @@ int ff_interleaved_peek(AVFormatContext *s, int stream, int ff_lock_avformat(void); int ff_unlock_avformat(void); +/** + * Set AVFormatContext url field to the provided pointer. The pointer must + * point to a valid string. The existing url field is freed if necessary. Also + * set the legacy filename field to the same string which was provided in url. + */ +void ff_format_set_url(AVFormatContext *s, char *url); + #endif /* AVFORMAT_INTERNAL_H */ diff --git a/libavformat/mux.c b/libavformat/mux.c index ea9f13fdf5..de63f2ca25 100644 --- a/libavformat/mux.c +++ b/libavformat/mux.c @@ -186,8 +186,12 @@ int avformat_alloc_output_context2(AVFormatContext **avctx, AVOutputFormat *ofor } else s->priv_data = NULL; - if (filename) + if (filename) { av_strlcpy(s->filename, filename, sizeof(s->filename)); + if (!(s->url = av_strdup(filename))) + goto nomem; + + } *avctx = s; return 0; nomem: @@ -251,6 +255,11 @@ static int init_muxer(AVFormatContext *s, AVDictionary **options) (ret = av_opt_set_dict2(s->priv_data, &tmp, AV_OPT_SEARCH_CHILDREN)) < 0) goto fail; + if (!s->url && !(s->url = av_strdup(s->filename))) { + ret = AVERROR(ENOMEM); + goto fail; + } + #if FF_API_LAVF_AVCTX FF_DISABLE_DEPRECATION_WARNINGS if (s->nb_streams && s->streams[0]->codec->flags & AV_CODEC_FLAG_BITEXACT) { diff --git a/libavformat/utils.c b/libavformat/utils.c index 2185a6f05b..fdfd3a088d 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -551,6 +551,11 @@ int avformat_open_input(AVFormatContext **ps, const char *filename, if ((ret = av_opt_set_dict(s, &tmp)) < 0) goto fail; + if (!(s->url = av_strdup(filename ? filename : ""))) { + ret = AVERROR(ENOMEM); + goto fail; + } + av_strlcpy(s->filename, filename ? filename : "", sizeof(s->filename)); if ((ret = init_input(s, filename, &tmp)) < 0) goto fail; @@ -4357,6 +4362,7 @@ void avformat_free_context(AVFormatContext *s) av_freep(&s->streams); flush_packet_queue(s); av_freep(&s->internal); + av_freep(&s->url); av_free(s); } @@ -5624,3 +5630,11 @@ FF_ENABLE_DEPRECATION_WARNINGS return st->internal->avctx->time_base; #endif } + +void ff_format_set_url(AVFormatContext *s, char *url) +{ + av_assert0(url); + av_freep(&s->url); + s->url = url; + av_strlcpy(s->filename, url, sizeof(s->filename)); +} diff --git a/libavformat/version.h b/libavformat/version.h index 5ced041f0a..49b9906a20 100644 --- a/libavformat/version.h +++ b/libavformat/version.h @@ -32,7 +32,7 @@ // Major bumping may affect Ticket5467, 5421, 5451(compatibility with Chromium) // Also please add any ticket numbers that you believe might be affected here #define LIBAVFORMAT_VERSION_MAJOR 58 -#define LIBAVFORMAT_VERSION_MINOR 3 +#define LIBAVFORMAT_VERSION_MINOR 4 #define LIBAVFORMAT_VERSION_MICRO 100 #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \