On 1/31/2019 5:54 PM, Carl Eugen Hoyos wrote: > 2019-01-31 21:43 GMT+01:00, Carl Eugen Hoyos <ceffm...@gmail.com>: >> Hi! >> >> Attached patch persistently uses "const" for AVInputFormat pointer >> after the next version bump. > Now with an actually working version. > > Please comment, Carl Eugen > > > 0001-lavf-Constify-AVInputFormat-pointer.patch > > From f383a7f914b2c7240378b404d529a7d73c68941b Mon Sep 17 00:00:00 2001 > From: Carl Eugen Hoyos <ceffm...@gmail.com> > 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; > > /** > * Raw demuxers store their codec ID here. > @@ -1346,6 +1349,9 @@ typedef struct AVFormatContext { > * > * Demuxing only, set by avformat_open_input(). > */ > +#if !FF_API_AVINPUTFORMAT > + const > +#endif > struct AVInputFormat *iformat; > > /** > @@ -2222,6 +2228,9 @@ int avformat_alloc_output_context2(AVFormatContext > **ctx, AVOutputFormat *oforma > /** > * Find AVInputFormat based on the short name of the input format. > */ > +#if !FF_API_AVINPUTFORMAT > +const > +#endif > AVInputFormat *av_find_input_format(const char *short_name);
I'd prefer if you instead do like with av_probe_input_buffer() so we can simply remove the dead code after a major bump and end up with a single line prototype without extra line changes. > > /** > @@ -2231,6 +2240,9 @@ 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. > */ > +#if !FF_API_AVINPUTFORMAT > +const > +#endif > AVInputFormat *av_probe_input_format(AVProbeData *pd, int is_opened); > > /** > @@ -2245,6 +2257,9 @@ 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. > */ > +#if !FF_API_AVINPUTFORMAT > +const > +#endif > AVInputFormat *av_probe_input_format2(AVProbeData *pd, int is_opened, int > *score_max); > > /** > @@ -2254,6 +2269,9 @@ 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. > */ > +#if !FF_API_AVINPUTFORMAT > +const > +#endif > AVInputFormat *av_probe_input_format3(AVProbeData *pd, int is_opened, int > *score_ret); > > /** > @@ -2272,14 +2290,22 @@ AVInputFormat *av_probe_input_format3(AVProbeData > *pd, int is_opened, int *score > * the maximal score is AVPROBE_SCORE_MAX > * AVERROR code otherwise > */ > +#if FF_API_AVINPUTFORMAT > int av_probe_input_buffer2(AVIOContext *pb, AVInputFormat **fmt, > +#else > +int av_probe_input_buffer2(AVIOContext *pb, const AVInputFormat **fmt, > +#endif > const char *url, void *logctx, > unsigned int offset, unsigned int max_probe_size); > > /** > * Like av_probe_input_buffer2() but returns 0 on success > */ > +#if FF_API_AVINPUTFORMAT > int av_probe_input_buffer(AVIOContext *pb, AVInputFormat **fmt, > +#else > +int av_probe_input_buffer(AVIOContext *pb, const AVInputFormat **fmt, > +#endif > const char *url, void *logctx, > unsigned int offset, unsigned int max_probe_size); > > @@ -2302,7 +2328,11 @@ 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. > */ > +#if FF_API_AVINPUTFORMAT > int avformat_open_input(AVFormatContext **ps, const char *url, AVInputFormat > *fmt, AVDictionary **options); > +#else > +int avformat_open_input(AVFormatContext **ps, const char *url, const > AVInputFormat *fmt, AVDictionary **options); > +#endif > > attribute_deprecated > int av_demuxer_open(AVFormatContext *ic); > diff --git a/libavformat/dashdec.c b/libavformat/dashdec.c > index f4f4e93..ad9cdb1 100644 > --- a/libavformat/dashdec.c > +++ b/libavformat/dashdec.c > @@ -1851,6 +1851,9 @@ 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; > +#if !FF_API_AVINPUTFORMAT > + const > +#endif > AVInputFormat *in_fmt = NULL; > AVDictionary *in_fmt_opts = NULL; > uint8_t *avio_ctx_buffer = NULL; > diff --git a/libavformat/format.c b/libavformat/format.c > index 2c4c895..9f24ae0 100644 > --- a/libavformat/format.c > +++ b/libavformat/format.c > @@ -115,6 +115,9 @@ enum AVCodecID av_guess_codec(AVOutputFormat *fmt, const > char *short_name, > return AV_CODEC_ID_NONE; > } > > +#if !FF_API_AVINPUTFORMAT > +const > +#endif > AVInputFormat *av_find_input_format(const char *short_name) > { > const AVInputFormat *fmt = NULL; > @@ -125,11 +128,17 @@ AVInputFormat *av_find_input_format(const char > *short_name) > return NULL; > } > > +#if !FF_API_AVINPUTFORMAT > +const > +#endif > AVInputFormat *av_probe_input_format3(AVProbeData *pd, int is_opened, > int *score_ret) > { > AVProbeData lpd = *pd; > const AVInputFormat *fmt1 = NULL; > +#if !FF_API_AVINPUTFORMAT > +const > +#endif > AVInputFormat *fmt = NULL; > int score, score_max = 0; > void *i = 0; > @@ -202,9 +211,15 @@ AVInputFormat *av_probe_input_format3(AVProbeData *pd, > int is_opened, > return fmt; > } > > +#if !FF_API_AVINPUTFORMAT > +const > +#endif > AVInputFormat *av_probe_input_format2(AVProbeData *pd, int is_opened, int > *score_max) > { > int score_ret; > +#if !FF_API_AVINPUTFORMAT > +const > +#endif > AVInputFormat *fmt = av_probe_input_format3(pd, is_opened, &score_ret); > if (score_ret > *score_max) { > *score_max = score_ret; > @@ -213,13 +228,21 @@ AVInputFormat *av_probe_input_format2(AVProbeData *pd, > int is_opened, int *score > return NULL; > } > > +#if !FF_API_AVINPUTFORMAT > +const > +#endif > 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, > +#if FF_API_AVINPUTFORMAT > + AVInputFormat **fmt, > +#else > + const AVInputFormat **fmt, > +#endif Same for these. > const char *filename, void *logctx, > unsigned int offset, unsigned int max_probe_size) > { > @@ -309,7 +332,12 @@ fail: > return ret < 0 ? ret : score; > } > > -int av_probe_input_buffer(AVIOContext *pb, AVInputFormat **fmt, > +int av_probe_input_buffer(AVIOContext *pb, > +#if FF_API_AVINPUTFORMAT > + AVInputFormat **fmt, > +#else > + const AVInputFormat **fmt, > +#endif > 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..1b7ac4b 100644 > --- a/libavformat/hls.c > +++ b/libavformat/hls.c > @@ -1868,6 +1868,9 @@ 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]; > +#if !FF_API_AVINPUTFORMAT > + const > +#endif > AVInputFormat *in_fmt = NULL; > > if (!(pls->ctx = avformat_alloc_context())) { > 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..cbfebf6 100644 > --- a/libavformat/mpeg.c > +++ b/libavformat/mpeg.c > @@ -722,6 +722,9 @@ static int vobsub_read_header(AVFormatContext *s) > int stream_id = -1; > char id[64] = {0}; > char alt[MAX_LINE_SIZE] = {0}; > +#if !FF_API_AVINPUTFORMAT > + const > +#endif > AVInputFormat *iformat; > > if (!vobsub->sub_name) { > diff --git a/libavformat/rtpdec_asf.c b/libavformat/rtpdec_asf.c > index 54ffef6..69805b0 100644 > --- a/libavformat/rtpdec_asf.c > +++ b/libavformat/rtpdec_asf.c > @@ -106,6 +106,9 @@ 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); > +#if !FF_API_AVINPUTFORMAT > + const > +#endif > AVInputFormat *iformat; > > if (!buf) > diff --git a/libavformat/sapdec.c b/libavformat/sapdec.c > index 7a6c8bf..5103ab2 100644 > --- a/libavformat/sapdec.c > +++ b/libavformat/sapdec.c > @@ -68,6 +68,9 @@ static int sap_read_header(AVFormatContext *s) > uint8_t recvbuf[RTP_MAX_PACKET_LENGTH]; > int port; > int ret, i; > +#if !FF_API_AVINPUTFORMAT > + const > +#endif > AVInputFormat* infmt; > > if (!ff_network_init()) > diff --git a/libavformat/utils.c b/libavformat/utils.c > index 7afef54..4837ef3 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,12 @@ FF_ENABLE_DEPRECATION_WARNINGS > > > int avformat_open_input(AVFormatContext **ps, const char *filename, > - AVInputFormat *fmt, AVDictionary **options) > +#if FF_API_AVINPUTFORMAT > + AVInputFormat *fmt, > +#else > + const AVInputFormat *fmt, > +#endif > + AVDictionary **options) > { > AVFormatContext *s = *ps; > int i, ret = 0; > @@ -2163,7 +2168,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..6915be0 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_AVINPUTFORMAT > +#define FF_API_AVINPUTFORMAT (LIBAVFORMAT_VERSION_MAJOR < 59) > +#endif > > > #ifndef FF_API_R_FRAME_RATE > -- 1.7.10.4 > > > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > http://ffmpeg.org/mailman/listinfo/ffmpeg-devel > _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel