[FFmpeg-devel] [PATCH]lavf:Constify AVInputFormat pointer
James Almer
jamrial at gmail.com
Fri Feb 1 00:15:31 EET 2019
On 1/31/2019 5:54 PM, Carl Eugen Hoyos wrote:
> 2019-01-31 21:43 GMT+01:00, Carl Eugen Hoyos <ceffmpeg at 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 <ceffmpeg at 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 at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
More information about the ffmpeg-devel
mailing list