From patchwork Sat Feb 9 13:37:04 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Carl Eugen Hoyos X-Patchwork-Id: 12007 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id D3BC6447B6B for ; Sat, 9 Feb 2019 15:37:14 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id B168768A781; Sat, 9 Feb 2019 15:37:14 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-it1-f196.google.com (mail-it1-f196.google.com [209.85.166.196]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9989868A374 for ; Sat, 9 Feb 2019 15:37:07 +0200 (EET) Received: by mail-it1-f196.google.com with SMTP id h193so15959880ita.5 for ; Sat, 09 Feb 2019 05:37:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to; bh=+XI1k3R2NktkwMREu6Pl8w4NkwbPSKqPcFB5WyogN7s=; b=APGqyHjAS3Lvuy008kVtX/ZL30nPY86WF399W6FzeFknhiYV5ASQcU2cgaJlA5nYEQ LS146yoeWCVvCUdjTeFdHnbfCynDQVsSFIC+142W0y2fHZD6WCVfglqnjPVXTaG3cwlN LnRXXHdx9QlXQv1G/Qc13Dm7BdjIPgLUWkOQ2hDI3ycocJ4u8EJHcU97yN5gpQ1XfMqj RqMCCbMUnZJo1ewUeomlo46PQACW1J4extnWK2Dm0K1IRInw+uzTE/UVovrNOMR8SqjW Mmk2rEeGfyDV0B7nBu5QmXE6ypy1uLOQqrpF/lqOo0rnlzt1xjRRXNoJ8TaCgPDCj5nX LdZg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to; bh=+XI1k3R2NktkwMREu6Pl8w4NkwbPSKqPcFB5WyogN7s=; b=HhV+VQu3fmzW2R1T6PI/npzvXw3jKULDEHp2qsIaK+xuaX/+vit9b74rYcED5pbzyH jiSqgUgV9ADXc8YPPRy8N7ietOc0aiwYXt0peCuETP6aOuhftvvn9fWkDxP3X+C6aZGj 76orCfMOy5+Sv+28Y2DoBFgU4vZCoRKqnhZFUpKXc8LqbkL4/l3FWYlr3jBTh9lLLnY+ OEdCo3XM41zmR4e+UaeLMBf6sarZzKJZtrQH4zahpUYX8S8i0URPRAKhfkxBF51IA3Xg maGti7Rs0CE3fmmW9lMSOS1eQVclYt1C+jrN5+WdoTEmUSbW95ebAuaAcui4X77G/xcJ O0nw== X-Gm-Message-State: AHQUAuZFqfOV+I+E1L7EXVSNU27g/XQNsfmPbGxcyBqb+4kabIY56dEy vVYSZ1+0iVOzDJIF0+w0tuUCuEItGL55gSzmCqF/Mg== X-Google-Smtp-Source: AHgI3IbwBwgOEvWd4oWzXN4YoqyxAzNFo+EqUtA/fGlYwj0YjjFAvsJQY2bTJ+Ui/bRCd3s7QoqZ5PViiG6h6fJG/8k= X-Received: by 2002:a24:b64a:: with SMTP id d10mr1758102itj.149.1549719425804; Sat, 09 Feb 2019 05:37:05 -0800 (PST) MIME-Version: 1.0 Received: by 2002:a02:c890:0:0:0:0:0 with HTTP; Sat, 9 Feb 2019 05:37:04 -0800 (PST) In-Reply-To: <20190201001304.GM3501@michaelspb> References: <20190201001304.GM3501@michaelspb> From: Carl Eugen Hoyos Date: Sat, 9 Feb 2019 14:37:04 +0100 Message-ID: To: FFmpeg development discussions and patches Subject: Re: [FFmpeg-devel] [PATCH]lavf:Constify AVInputFormat pointer 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" 2019-02-01 1:13 GMT+01:00, Michael Niedermayer : > On Thu, Jan 31, 2019 at 09:54:14PM +0100, Carl Eugen Hoyos wrote: >> 2019-01-31 21:43 GMT+01:00, Carl Eugen Hoyos : >> > Hi! >> > >> > Attached patch persistently uses "const" for AVInputFormat pointer >> > after the next version bump. >> >> Now with an actually working version. >> >> Please comment, Carl Eugen > >> allformats.c | 6 +++++- >> avformat.h | 32 +++++++++++++++++++++++++++++++- >> dashdec.c | 3 +++ >> format.c | 32 ++++++++++++++++++++++++++++++-- >> hls.c | 3 +++ >> img2dec.c | 2 +- >> mpeg.c | 3 +++ >> rtpdec_asf.c | 3 +++ >> sapdec.c | 3 +++ >> utils.c | 11 ++++++++--- >> version.h | 3 +++ >> 11 files changed, 93 insertions(+), 8 deletions(-) >> d3aece2f0b9a9c3ff8b2a187ceccdc744ea40de2 >> 0001-lavf-Constify-AVInputFormat-pointer.patch >> From f383a7f914b2c7240378b404d529a7d73c68941b Mon Sep 17 00:00:00 2001 >> From: Carl Eugen Hoyos >> Date: Thu, 31 Jan 2019 21:51:56 +0100 >> Subject: [PATCH] lavf: Constify AVInputFormat pointer. >> >> --- >> libavformat/allformats.c | 6 +++++- >> libavformat/avformat.h | 32 +++++++++++++++++++++++++++++++- >> libavformat/dashdec.c | 3 +++ >> libavformat/format.c | 32 ++++++++++++++++++++++++++++++-- >> libavformat/hls.c | 3 +++ >> libavformat/img2dec.c | 2 +- >> libavformat/mpeg.c | 3 +++ >> libavformat/rtpdec_asf.c | 3 +++ >> libavformat/sapdec.c | 3 +++ >> libavformat/utils.c | 11 ++++++++--- >> libavformat/version.h | 3 +++ >> 11 files changed, 93 insertions(+), 8 deletions(-) >> >> diff --git a/libavformat/allformats.c b/libavformat/allformats.c >> index 0684498..01c4c14 100644 >> --- a/libavformat/allformats.c >> +++ b/libavformat/allformats.c >> @@ -583,7 +583,11 @@ AVInputFormat *av_iformat_next(const AVInputFormat >> *f) >> ff_thread_once(&av_format_next_init, av_format_init_next); >> >> if (f) >> - return f->next; >> + return >> +#if !FF_API_AVINPUTFORMAT >> + (AVInputFormat *) >> +#endif >> + f->next; >> else { >> void *opaque = NULL; >> return (AVInputFormat *)av_demuxer_iterate(&opaque); >> diff --git a/libavformat/avformat.h b/libavformat/avformat.h >> index fdaffa5..7c4ec8f 100644 >> --- a/libavformat/avformat.h >> +++ b/libavformat/avformat.h >> @@ -676,7 +676,10 @@ typedef struct AVInputFormat { >> * New public fields should be added right above. >> ***************************************************************** >> */ >> - struct AVInputFormat *next; >> +#if !FF_API_AVINPUTFORMAT >> + const >> +#endif >> +struct AVInputFormat *next; > > some av_const59 which is defined to nothing until version 59 > should avoid the repeated #if/endif > it would require an eventual update to change it to const at some > point but it would avoid most preprocessor comands New patch attached. Please comment, Carl Eugen From 7ab30f3dbc869ad9641d9b791bb9e3cd97a432fa Mon Sep 17 00:00:00 2001 From: Carl Eugen Hoyos Date: Sat, 9 Feb 2019 14:36:07 +0100 Subject: [PATCH] lavf: Constify AVInputFormat pointer. --- libavformat/allformats.c | 4 ++++ libavformat/avformat.h | 23 ++++++++++++++--------- libavformat/avidec.c | 2 +- libavformat/dashdec.c | 2 +- libavformat/format.c | 16 ++++++++-------- libavformat/hls.c | 2 +- libavformat/img2dec.c | 2 +- libavformat/mpeg.c | 2 +- libavformat/rtpdec_asf.c | 2 +- libavformat/sapdec.c | 2 +- libavformat/utils.c | 6 +++--- libavformat/version.h | 3 +++ 12 files changed, 39 insertions(+), 27 deletions(-) diff --git a/libavformat/allformats.c b/libavformat/allformats.c index 0684498..242edc3 100644 --- a/libavformat/allformats.c +++ b/libavformat/allformats.c @@ -583,7 +583,11 @@ AVInputFormat *av_iformat_next(const AVInputFormat *f) ff_thread_once(&av_format_next_init, av_format_init_next); if (f) +#if FF_API_AVIOFORMAT + return (AVInputFormat *) f->next; +#else return f->next; +#endif else { void *opaque = NULL; return (AVInputFormat *)av_demuxer_iterate(&opaque); diff --git a/libavformat/avformat.h b/libavformat/avformat.h index fdaffa5..a866c33 100644 --- a/libavformat/avformat.h +++ b/libavformat/avformat.h @@ -676,7 +676,12 @@ typedef struct AVInputFormat { * New public fields should be added right above. ***************************************************************** */ - struct AVInputFormat *next; +#if FF_API_AVIOFORMAT +#define av_const59 const +#else +#define av_const59 +#endif +av_const59 struct AVInputFormat *next; /** * Raw demuxers store their codec ID here. @@ -1346,7 +1351,7 @@ typedef struct AVFormatContext { * * Demuxing only, set by avformat_open_input(). */ - struct AVInputFormat *iformat; + av_const59 struct AVInputFormat *iformat; /** * The output container format. @@ -2222,7 +2227,7 @@ int avformat_alloc_output_context2(AVFormatContext **ctx, AVOutputFormat *oforma /** * Find AVInputFormat based on the short name of the input format. */ -AVInputFormat *av_find_input_format(const char *short_name); +av_const59 AVInputFormat *av_find_input_format(const char *short_name); /** * Guess the file format. @@ -2231,7 +2236,7 @@ AVInputFormat *av_find_input_format(const char *short_name); * @param is_opened Whether the file is already opened; determines whether * demuxers with or without AVFMT_NOFILE are probed. */ -AVInputFormat *av_probe_input_format(AVProbeData *pd, int is_opened); +av_const59 AVInputFormat *av_probe_input_format(AVProbeData *pd, int is_opened); /** * Guess the file format. @@ -2245,7 +2250,7 @@ AVInputFormat *av_probe_input_format(AVProbeData *pd, int is_opened); * If the score is <= AVPROBE_SCORE_MAX / 4 it is recommended * to retry with a larger probe buffer. */ -AVInputFormat *av_probe_input_format2(AVProbeData *pd, int is_opened, int *score_max); +av_const59 AVInputFormat *av_probe_input_format2(AVProbeData *pd, int is_opened, int *score_max); /** * Guess the file format. @@ -2254,7 +2259,7 @@ AVInputFormat *av_probe_input_format2(AVProbeData *pd, int is_opened, int *score * demuxers with or without AVFMT_NOFILE are probed. * @param score_ret The score of the best detection. */ -AVInputFormat *av_probe_input_format3(AVProbeData *pd, int is_opened, int *score_ret); +av_const59 AVInputFormat *av_probe_input_format3(AVProbeData *pd, int is_opened, int *score_ret); /** * Probe a bytestream to determine the input format. Each time a probe returns @@ -2272,14 +2277,14 @@ AVInputFormat *av_probe_input_format3(AVProbeData *pd, int is_opened, int *score * the maximal score is AVPROBE_SCORE_MAX * AVERROR code otherwise */ -int av_probe_input_buffer2(AVIOContext *pb, AVInputFormat **fmt, +int av_probe_input_buffer2(AVIOContext *pb, av_const59 AVInputFormat **fmt, const char *url, void *logctx, unsigned int offset, unsigned int max_probe_size); /** * Like av_probe_input_buffer2() but returns 0 on success */ -int av_probe_input_buffer(AVIOContext *pb, AVInputFormat **fmt, +int av_probe_input_buffer(AVIOContext *pb, av_const59 AVInputFormat **fmt, const char *url, void *logctx, unsigned int offset, unsigned int max_probe_size); @@ -2302,7 +2307,7 @@ int av_probe_input_buffer(AVIOContext *pb, AVInputFormat **fmt, * * @note If you want to use custom IO, preallocate the format context and set its pb field. */ -int avformat_open_input(AVFormatContext **ps, const char *url, AVInputFormat *fmt, AVDictionary **options); +int avformat_open_input(AVFormatContext **ps, const char *url, av_const59 AVInputFormat *fmt, AVDictionary **options); attribute_deprecated int av_demuxer_open(AVFormatContext *ic); diff --git a/libavformat/avidec.c b/libavformat/avidec.c index 3f07479..7b589f9 100644 --- a/libavformat/avidec.c +++ b/libavformat/avidec.c @@ -1068,7 +1068,7 @@ static int read_gab2_sub(AVFormatContext *s, AVStream *st, AVPacket *pkt) uint8_t desc[256]; int score = AVPROBE_SCORE_EXTENSION, ret; AVIStream *ast = st->priv_data; - AVInputFormat *sub_demuxer; + av_const59 AVInputFormat *sub_demuxer; AVRational time_base; int size; AVIOContext *pb = avio_alloc_context(pkt->data + 7, diff --git a/libavformat/dashdec.c b/libavformat/dashdec.c index 89acd58..0512690 100644 --- a/libavformat/dashdec.c +++ b/libavformat/dashdec.c @@ -1851,7 +1851,7 @@ static void close_demux_for_component(struct representation *pls) static int reopen_demux_for_component(AVFormatContext *s, struct representation *pls) { DASHContext *c = s->priv_data; - AVInputFormat *in_fmt = NULL; + av_const59 AVInputFormat *in_fmt = NULL; AVDictionary *in_fmt_opts = NULL; uint8_t *avio_ctx_buffer = NULL; int ret = 0, i; diff --git a/libavformat/format.c b/libavformat/format.c index 2c4c895..3c2be62 100644 --- a/libavformat/format.c +++ b/libavformat/format.c @@ -115,7 +115,7 @@ enum AVCodecID av_guess_codec(AVOutputFormat *fmt, const char *short_name, return AV_CODEC_ID_NONE; } -AVInputFormat *av_find_input_format(const char *short_name) +av_const59 AVInputFormat *av_find_input_format(const char *short_name) { const AVInputFormat *fmt = NULL; void *i = 0; @@ -125,12 +125,12 @@ AVInputFormat *av_find_input_format(const char *short_name) return NULL; } -AVInputFormat *av_probe_input_format3(AVProbeData *pd, int is_opened, +av_const59 AVInputFormat *av_probe_input_format3(AVProbeData *pd, int is_opened, int *score_ret) { AVProbeData lpd = *pd; const AVInputFormat *fmt1 = NULL; - AVInputFormat *fmt = NULL; + av_const59 AVInputFormat *fmt = NULL; int score, score_max = 0; void *i = 0; const static uint8_t zerobuffer[AVPROBE_PADDING_SIZE]; @@ -202,10 +202,10 @@ AVInputFormat *av_probe_input_format3(AVProbeData *pd, int is_opened, return fmt; } -AVInputFormat *av_probe_input_format2(AVProbeData *pd, int is_opened, int *score_max) +av_const59 AVInputFormat *av_probe_input_format2(AVProbeData *pd, int is_opened, int *score_max) { int score_ret; - AVInputFormat *fmt = av_probe_input_format3(pd, is_opened, &score_ret); + av_const59 AVInputFormat *fmt = av_probe_input_format3(pd, is_opened, &score_ret); if (score_ret > *score_max) { *score_max = score_ret; return fmt; @@ -213,13 +213,13 @@ AVInputFormat *av_probe_input_format2(AVProbeData *pd, int is_opened, int *score return NULL; } -AVInputFormat *av_probe_input_format(AVProbeData *pd, int is_opened) +av_const59 AVInputFormat *av_probe_input_format(AVProbeData *pd, int is_opened) { int score = 0; return av_probe_input_format2(pd, is_opened, &score); } -int av_probe_input_buffer2(AVIOContext *pb, AVInputFormat **fmt, +int av_probe_input_buffer2(AVIOContext *pb, av_const59 AVInputFormat **fmt, const char *filename, void *logctx, unsigned int offset, unsigned int max_probe_size) { @@ -309,7 +309,7 @@ fail: return ret < 0 ? ret : score; } -int av_probe_input_buffer(AVIOContext *pb, AVInputFormat **fmt, +int av_probe_input_buffer(AVIOContext *pb, av_const59 AVInputFormat **fmt, const char *filename, void *logctx, unsigned int offset, unsigned int max_probe_size) { diff --git a/libavformat/hls.c b/libavformat/hls.c index 8975a87..61afc71 100644 --- a/libavformat/hls.c +++ b/libavformat/hls.c @@ -1868,7 +1868,7 @@ static int hls_read_header(AVFormatContext *s) /* Open the demuxer for each playlist */ for (i = 0; i < c->n_playlists; i++) { struct playlist *pls = c->playlists[i]; - AVInputFormat *in_fmt = NULL; + av_const59 AVInputFormat *in_fmt = NULL; if (!(pls->ctx = avformat_alloc_context())) { ret = AVERROR(ENOMEM); diff --git a/libavformat/img2dec.c b/libavformat/img2dec.c index e82b1df..71d8aa3b 100644 --- a/libavformat/img2dec.c +++ b/libavformat/img2dec.c @@ -424,7 +424,7 @@ int ff_img_read_packet(AVFormatContext *s1, AVPacket *pkt) if (par->codec_id == AV_CODEC_ID_NONE) { AVProbeData pd = { 0 }; - AVInputFormat *ifmt; + const AVInputFormat *ifmt; uint8_t header[PROBE_BUF_MIN + AVPROBE_PADDING_SIZE]; int ret; int score = 0; diff --git a/libavformat/mpeg.c b/libavformat/mpeg.c index d4369b4..3b78d5f 100644 --- a/libavformat/mpeg.c +++ b/libavformat/mpeg.c @@ -722,7 +722,7 @@ static int vobsub_read_header(AVFormatContext *s) int stream_id = -1; char id[64] = {0}; char alt[MAX_LINE_SIZE] = {0}; - AVInputFormat *iformat; + av_const59 AVInputFormat *iformat; if (!vobsub->sub_name) { char *ext; diff --git a/libavformat/rtpdec_asf.c b/libavformat/rtpdec_asf.c index 54ffef6..2e79fe2 100644 --- a/libavformat/rtpdec_asf.c +++ b/libavformat/rtpdec_asf.c @@ -106,7 +106,7 @@ int ff_wms_parse_sdp_a_line(AVFormatContext *s, const char *p) AVDictionary *opts = NULL; int len = strlen(p) * 6 / 8; char *buf = av_mallocz(len); - AVInputFormat *iformat; + av_const59 AVInputFormat *iformat; if (!buf) return AVERROR(ENOMEM); diff --git a/libavformat/sapdec.c b/libavformat/sapdec.c index 7a6c8bf..e9debd7 100644 --- a/libavformat/sapdec.c +++ b/libavformat/sapdec.c @@ -68,7 +68,7 @@ static int sap_read_header(AVFormatContext *s) uint8_t recvbuf[RTP_MAX_PACKET_LENGTH]; int port; int ret, i; - AVInputFormat* infmt; + av_const59 AVInputFormat* infmt; if (!ff_network_init()) return AVERROR(EIO); diff --git a/libavformat/utils.c b/libavformat/utils.c index 7afef54..a48dde1 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -357,7 +357,7 @@ static int set_codec_from_probe_data(AVFormatContext *s, AVStream *st, { 0 } }; int score; - AVInputFormat *fmt = av_probe_input_format3(pd, 1, &score); + const AVInputFormat *fmt = av_probe_input_format3(pd, 1, &score); if (fmt) { int i; @@ -535,7 +535,7 @@ FF_ENABLE_DEPRECATION_WARNINGS int avformat_open_input(AVFormatContext **ps, const char *filename, - AVInputFormat *fmt, AVDictionary **options) + av_const59 AVInputFormat *fmt, AVDictionary **options) { AVFormatContext *s = *ps; int i, ret = 0; @@ -2163,7 +2163,7 @@ static int64_t ff_read_timestamp(AVFormatContext *s, int stream_index, int64_t * int ff_seek_frame_binary(AVFormatContext *s, int stream_index, int64_t target_ts, int flags) { - AVInputFormat *avif = s->iformat; + const AVInputFormat *avif = s->iformat; int64_t av_uninit(pos_min), av_uninit(pos_max), pos, pos_limit; int64_t ts_min, ts_max, ts; int index; diff --git a/libavformat/version.h b/libavformat/version.h index 4408eca..f189984 100644 --- a/libavformat/version.h +++ b/libavformat/version.h @@ -103,6 +103,9 @@ #ifndef FF_API_LAVF_MP4A_LATM #define FF_API_LAVF_MP4A_LATM (LIBAVFORMAT_VERSION_MAJOR < 59) #endif +#ifndef FF_API_AVIOFORMAT +#define FF_API_AVIOFORMAT (LIBAVFORMAT_VERSION_MAJOR < 59) +#endif #ifndef FF_API_R_FRAME_RATE -- 1.7.10.4