diff mbox

[FFmpeg-devel] lavf:Constify AVInputFormat pointer

Message ID CAB0OVGqm3Zu-DDTjBeZVj0Hc2Hf9k2ctqs5fWu1nCVM0rSY+XA@mail.gmail.com
State Superseded
Headers show

Commit Message

Carl Eugen Hoyos Jan. 31, 2019, 8:54 p.m. UTC
2019-01-31 21:43 GMT+01:00, Carl Eugen Hoyos <ceffmpeg@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

Comments

James Almer Jan. 31, 2019, 10:15 p.m. UTC | #1
On 1/31/2019 5:54 PM, Carl Eugen Hoyos wrote:
> 2019-01-31 21:43 GMT+01:00, Carl Eugen Hoyos <ceffmpeg@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@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
>
Michael Niedermayer Feb. 1, 2019, 12:13 a.m. UTC | #2
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 <ceffmpeg@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 <ceffmpeg@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

[...]
diff mbox

Patch

From f383a7f914b2c7240378b404d529a7d73c68941b Mon Sep 17 00:00:00 2001
From: Carl Eugen Hoyos <ceffmpeg@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);
 
 /**
@@ -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
                           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