2019-02-01 1:13 GMT+01:00, Michael Niedermayer <mich...@niedermayer.cc>: > 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 <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 > >> 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 <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; > > 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 <ceffm...@gmail.com> 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
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel