[FFmpeg-devel] lavf:Constify AVOutputFormat pointer

Submitted by Carl Eugen Hoyos on Feb. 9, 2019, 2:46 p.m.

Details

Message ID CAB0OVGoLHqQaD3=Hmpmsy_dpv+v5AQA1zfG2yfQ6o7HQj2XG=Q@mail.gmail.com
State New
Headers show

Commit Message

Carl Eugen Hoyos Feb. 9, 2019, 2:46 p.m.
2019-02-09 15:44 GMT+01:00, Carl Eugen Hoyos <ceffmpeg@gmail.com>:
> 2019-02-09 15:42 GMT+01:00, James Almer <jamrial@gmail.com>:
>> On 2/9/2019 11:23 AM, Carl Eugen Hoyos wrote:
>>> Hi!
>>>
>>> Attached patch is supposed to constify all occurrences of
>>> AVOutputFormat in libavformat.
>>>
>>> Please comment, Carl Eugen
>>>
>>>
>>> 0001-lavf-Constify-AVOutputFormat-pointer.patch
>>>
>>> From ba32f41824df07b7a6cb45964ef912c5fc05b276 Mon Sep 17 00:00:00 2001
>>> From: Carl Eugen Hoyos <ceffmpeg@gmail.com>
>>> Date: Sat, 9 Feb 2019 15:21:17 +0100
>>> Subject: [PATCH] lavf: Constify AVOutputFormat pointer.
>>>
>>> ---
>>>  libavformat/allformats.c         |    4 ++++
>>>  libavformat/avformat.h           |   15 ++++++++++-----
>>>  libavformat/fifo.c               |    4 ++--
>>>  libavformat/format.c             |    6 +++---
>>>  libavformat/hdsenc.c             |    2 +-
>>>  libavformat/hlsenc.c             |    4 ++--
>>>  libavformat/mux.c                |    4 ++--
>>>  libavformat/rtp.c                |    2 +-
>>>  libavformat/rtpenc_chain.c       |    2 +-
>>>  libavformat/rtpenc_mpegts.c      |    4 ++--
>>>  libavformat/segment.c            |    2 +-
>>>  libavformat/smoothstreamingenc.c |    2 +-
>>>  libavformat/version.h            |    3 +++
>>>  libavformat/webm_chunk.c         |    2 +-
>>>  14 files changed, 34 insertions(+), 22 deletions(-)
>>>
>>> diff --git a/libavformat/allformats.c b/libavformat/allformats.c
>>> index 0684498..64d0f02 100644
>>> --- a/libavformat/allformats.c
>>> +++ b/libavformat/allformats.c
>>> @@ -595,7 +595,11 @@ AVOutputFormat *av_oformat_next(const
>>> AVOutputFormat
>>> *f)
>>>      ff_thread_once(&av_format_next_init, av_format_init_next);
>>>
>>>      if (f)
>>> +#if FF_API_AVIOFORMAT
>>> +        return (AVOutputFormat *) f->next;
>>> +#else
>>>          return f->next;
>>> +#endif
>>>      else {
>>>          void *opaque = NULL;
>>>          return (AVOutputFormat *)av_muxer_iterate(&opaque);
>>> diff --git a/libavformat/avformat.h b/libavformat/avformat.h
>>> index fdaffa5..52922c0 100644
>>> --- a/libavformat/avformat.h
>>> +++ b/libavformat/avformat.h
>>> @@ -532,7 +532,12 @@ typedef struct AVOutputFormat {
>>>       * New public fields should be added right above.
>>>       *****************************************************************
>>>       */
>>> -    struct AVOutputFormat *next;
>>> +#if FF_API_AVIOFORMAT
>>> +#define av_const59 const
>>> +#else
>>> +#define av_const59
>>> +#endif
>>
>> Shouldn't it be the other way around? FF_API_AVIOFORMAT
>> evaluates to 1 when major is < 59.
>
> Yes, I had realized this in the meantime, new patch attached.

And with the correct version in version.h

Carl Eugen

Comments

Carl Eugen Hoyos Feb. 14, 2019, 8:54 p.m.
2019-02-09 15:46 GMT+01:00, Carl Eugen Hoyos <ceffmpeg@gmail.com>:
> 2019-02-09 15:44 GMT+01:00, Carl Eugen Hoyos <ceffmpeg@gmail.com>:
>> 2019-02-09 15:42 GMT+01:00, James Almer <jamrial@gmail.com>:
>>> On 2/9/2019 11:23 AM, Carl Eugen Hoyos wrote:
>>>> Hi!
>>>>
>>>> Attached patch is supposed to constify all occurrences of
>>>> AVOutputFormat in libavformat.
>>>>
>>>> Please comment, Carl Eugen
>>>>
>>>>
>>>> 0001-lavf-Constify-AVOutputFormat-pointer.patch
>>>>
>>>> From ba32f41824df07b7a6cb45964ef912c5fc05b276 Mon Sep 17 00:00:00 2001
>>>> From: Carl Eugen Hoyos <ceffmpeg@gmail.com>
>>>> Date: Sat, 9 Feb 2019 15:21:17 +0100
>>>> Subject: [PATCH] lavf: Constify AVOutputFormat pointer.
>>>>
>>>> ---
>>>>  libavformat/allformats.c         |    4 ++++
>>>>  libavformat/avformat.h           |   15 ++++++++++-----
>>>>  libavformat/fifo.c               |    4 ++--
>>>>  libavformat/format.c             |    6 +++---
>>>>  libavformat/hdsenc.c             |    2 +-
>>>>  libavformat/hlsenc.c             |    4 ++--
>>>>  libavformat/mux.c                |    4 ++--
>>>>  libavformat/rtp.c                |    2 +-
>>>>  libavformat/rtpenc_chain.c       |    2 +-
>>>>  libavformat/rtpenc_mpegts.c      |    4 ++--
>>>>  libavformat/segment.c            |    2 +-
>>>>  libavformat/smoothstreamingenc.c |    2 +-
>>>>  libavformat/version.h            |    3 +++
>>>>  libavformat/webm_chunk.c         |    2 +-
>>>>  14 files changed, 34 insertions(+), 22 deletions(-)
>>>>
>>>> diff --git a/libavformat/allformats.c b/libavformat/allformats.c
>>>> index 0684498..64d0f02 100644
>>>> --- a/libavformat/allformats.c
>>>> +++ b/libavformat/allformats.c
>>>> @@ -595,7 +595,11 @@ AVOutputFormat *av_oformat_next(const
>>>> AVOutputFormat
>>>> *f)
>>>>      ff_thread_once(&av_format_next_init, av_format_init_next);
>>>>
>>>>      if (f)
>>>> +#if FF_API_AVIOFORMAT
>>>> +        return (AVOutputFormat *) f->next;
>>>> +#else
>>>>          return f->next;
>>>> +#endif
>>>>      else {
>>>>          void *opaque = NULL;
>>>>          return (AVOutputFormat *)av_muxer_iterate(&opaque);
>>>> diff --git a/libavformat/avformat.h b/libavformat/avformat.h
>>>> index fdaffa5..52922c0 100644
>>>> --- a/libavformat/avformat.h
>>>> +++ b/libavformat/avformat.h
>>>> @@ -532,7 +532,12 @@ typedef struct AVOutputFormat {
>>>>       * New public fields should be added right above.
>>>>       *****************************************************************
>>>>       */
>>>> -    struct AVOutputFormat *next;
>>>> +#if FF_API_AVIOFORMAT
>>>> +#define av_const59 const
>>>> +#else
>>>> +#define av_const59
>>>> +#endif
>>>
>>> Shouldn't it be the other way around? FF_API_AVIOFORMAT
>>> evaluates to 1 when major is < 59.
>>
>> Yes, I had realized this in the meantime, new patch attached.
>
> And with the correct version in version.h

Ping.

Carl Eugen

Patch hide | download patch | download mbox

From 12857febacc9786c591d6d4c464bba1e4f4d7548 Mon Sep 17 00:00:00 2001
From: Carl Eugen Hoyos <ceffmpeg@gmail.com>
Date: Sat, 9 Feb 2019 15:43:42 +0100
Subject: [PATCH] lavf: Constify AVOutputFormat pointer.

---
 libavformat/allformats.c         |    4 ++++
 libavformat/avformat.h           |   15 ++++++++++-----
 libavformat/fifo.c               |    4 ++--
 libavformat/format.c             |    6 +++---
 libavformat/hdsenc.c             |    2 +-
 libavformat/hlsenc.c             |    4 ++--
 libavformat/mux.c                |    4 ++--
 libavformat/rtp.c                |    2 +-
 libavformat/rtpenc_chain.c       |    2 +-
 libavformat/rtpenc_mpegts.c      |    4 ++--
 libavformat/segment.c            |    2 +-
 libavformat/smoothstreamingenc.c |    2 +-
 libavformat/version.h            |    3 +++
 libavformat/webm_chunk.c         |    2 +-
 14 files changed, 34 insertions(+), 22 deletions(-)

diff --git a/libavformat/allformats.c b/libavformat/allformats.c
index 0684498..411cfe7 100644
--- a/libavformat/allformats.c
+++ b/libavformat/allformats.c
@@ -595,7 +595,11 @@  AVOutputFormat *av_oformat_next(const AVOutputFormat *f)
     ff_thread_once(&av_format_next_init, av_format_init_next);
 
     if (f)
+#if FF_API_AVIOFORMAT
         return f->next;
+#else
+        return (AVOutputFormat *) f->next;
+#endif
     else {
         void *opaque = NULL;
         return (AVOutputFormat *)av_muxer_iterate(&opaque);
diff --git a/libavformat/avformat.h b/libavformat/avformat.h
index fdaffa5..c8dfe88 100644
--- a/libavformat/avformat.h
+++ b/libavformat/avformat.h
@@ -532,7 +532,12 @@  typedef struct AVOutputFormat {
      * New public fields should be added right above.
      *****************************************************************
      */
-    struct AVOutputFormat *next;
+#if FF_API_AVIOFORMAT
+#define av_const59
+#else
+#define av_const59 const
+#endif
+    av_const59 struct AVOutputFormat *next;
     /**
      * size of private data so that it can be allocated in the wrapper
      */
@@ -1353,7 +1358,7 @@  typedef struct AVFormatContext {
      *
      * Muxing only, must be set by the caller before avformat_write_header().
      */
-    struct AVOutputFormat *oformat;
+    av_const59 struct AVOutputFormat *oformat;
 
     /**
      * Format private data. This is an AVOptions-enabled struct
@@ -2211,7 +2216,7 @@  AVProgram *av_new_program(AVFormatContext *s, int id);
  * @return >= 0 in case of success, a negative AVERROR code in case of
  * failure
  */
-int avformat_alloc_output_context2(AVFormatContext **ctx, AVOutputFormat *oformat,
+int avformat_alloc_output_context2(AVFormatContext **ctx, av_const59 AVOutputFormat *oformat,
                                    const char *format_name, const char *filename);
 
 /**
@@ -2687,14 +2692,14 @@  int av_write_trailer(AVFormatContext *s);
  * @param mime_type if non-NULL checks if mime_type matches with the
  * MIME type of the registered formats
  */
-AVOutputFormat *av_guess_format(const char *short_name,
+av_const59 AVOutputFormat *av_guess_format(const char *short_name,
                                 const char *filename,
                                 const char *mime_type);
 
 /**
  * Guess the codec ID based upon muxer and filename.
  */
-enum AVCodecID av_guess_codec(AVOutputFormat *fmt, const char *short_name,
+enum AVCodecID av_guess_codec(av_const59 AVOutputFormat *fmt, const char *short_name,
                             const char *filename, const char *mime_type,
                             enum AVMediaType type);
 
diff --git a/libavformat/fifo.c b/libavformat/fifo.c
index 145e2e2..2bc63fa 100644
--- a/libavformat/fifo.c
+++ b/libavformat/fifo.c
@@ -442,7 +442,7 @@  static void *fifo_consumer_thread(void *data)
     return NULL;
 }
 
-static int fifo_mux_init(AVFormatContext *avf, AVOutputFormat *oformat,
+static int fifo_mux_init(AVFormatContext *avf, av_const59 AVOutputFormat *oformat,
                          const char *filename)
 {
     FifoContext *fifo = avf->priv_data;
@@ -481,7 +481,7 @@  static int fifo_mux_init(AVFormatContext *avf, AVOutputFormat *oformat,
 static int fifo_init(AVFormatContext *avf)
 {
     FifoContext *fifo = avf->priv_data;
-    AVOutputFormat *oformat;
+    av_const59 AVOutputFormat *oformat;
     int ret = 0;
 
     if (fifo->recovery_wait_streamtime && !fifo->drop_pkts_on_overflow) {
diff --git a/libavformat/format.c b/libavformat/format.c
index 2c4c895..4b89a1a 100644
--- a/libavformat/format.c
+++ b/libavformat/format.c
@@ -48,7 +48,7 @@  int av_match_ext(const char *filename, const char *extensions)
     return 0;
 }
 
-AVOutputFormat *av_guess_format(const char *short_name, const char *filename,
+av_const59 AVOutputFormat *av_guess_format(const char *short_name, const char *filename,
                                 const char *mime_type)
 {
     const AVOutputFormat *fmt = NULL;
@@ -84,12 +84,12 @@  AVOutputFormat *av_guess_format(const char *short_name, const char *filename,
     return fmt_found;
 }
 
-enum AVCodecID av_guess_codec(AVOutputFormat *fmt, const char *short_name,
+enum AVCodecID av_guess_codec(av_const59 AVOutputFormat *fmt, const char *short_name,
                               const char *filename, const char *mime_type,
                               enum AVMediaType type)
 {
     if (av_match_name("segment", fmt->name) || av_match_name("ssegment", fmt->name)) {
-        AVOutputFormat *fmt2 = av_guess_format(NULL, filename, NULL);
+        av_const59 AVOutputFormat *fmt2 = av_guess_format(NULL, filename, NULL);
         if (fmt2)
             fmt = fmt2;
     }
diff --git a/libavformat/hdsenc.c b/libavformat/hdsenc.c
index d82aee1..2c5f1da 100644
--- a/libavformat/hdsenc.c
+++ b/libavformat/hdsenc.c
@@ -315,7 +315,7 @@  static int hds_write_header(AVFormatContext *s)
 {
     HDSContext *c = s->priv_data;
     int ret = 0, i;
-    AVOutputFormat *oformat;
+    av_const59 AVOutputFormat *oformat;
 
     if (mkdir(s->url, 0777) == -1 && errno != EEXIST) {
         ret = AVERROR(errno);
diff --git a/libavformat/hlsenc.c b/libavformat/hlsenc.c
index d91960d..24a991b 100644
--- a/libavformat/hlsenc.c
+++ b/libavformat/hlsenc.c
@@ -110,8 +110,8 @@  typedef struct VariantStream {
     unsigned var_stream_idx;
     unsigned number;
     int64_t sequence;
-    AVOutputFormat *oformat;
-    AVOutputFormat *vtt_oformat;
+    av_const59 AVOutputFormat *oformat;
+    av_const59 AVOutputFormat *vtt_oformat;
     AVIOContext *out;
     int packets_written;
     int init_range_length;
diff --git a/libavformat/mux.c b/libavformat/mux.c
index 2847a02..d1546d1 100644
--- a/libavformat/mux.c
+++ b/libavformat/mux.c
@@ -145,7 +145,7 @@  enum AVChromaLocation ff_choose_chroma_location(AVFormatContext *s, AVStream *st
 
 }
 
-int avformat_alloc_output_context2(AVFormatContext **avctx, AVOutputFormat *oformat,
+int avformat_alloc_output_context2(AVFormatContext **avctx, av_const59 AVOutputFormat *oformat,
                                    const char *format, const char *filename)
 {
     AVFormatContext *s = avformat_alloc_context();
@@ -246,7 +246,7 @@  static int init_muxer(AVFormatContext *s, AVDictionary **options)
     AVStream *st;
     AVDictionary *tmp = NULL;
     AVCodecParameters *par = NULL;
-    AVOutputFormat *of = s->oformat;
+    const AVOutputFormat *of = s->oformat;
     const AVCodecDescriptor *desc;
     AVDictionaryEntry *e;
 
diff --git a/libavformat/rtp.c b/libavformat/rtp.c
index 4745e54..38e2343 100644
--- a/libavformat/rtp.c
+++ b/libavformat/rtp.c
@@ -91,7 +91,7 @@  int ff_rtp_get_payload_type(AVFormatContext *fmt,
                             AVCodecParameters *par, int idx)
 {
     int i;
-    AVOutputFormat *ofmt = fmt ? fmt->oformat : NULL;
+    const AVOutputFormat *ofmt = fmt ? fmt->oformat : NULL;
 
     /* Was the payload type already specified for the RTP muxer? */
     if (ofmt && ofmt->priv_class && fmt->priv_data) {
diff --git a/libavformat/rtpenc_chain.c b/libavformat/rtpenc_chain.c
index d3c1bc9..14b0a94 100644
--- a/libavformat/rtpenc_chain.c
+++ b/libavformat/rtpenc_chain.c
@@ -31,7 +31,7 @@  int ff_rtp_chain_mux_open(AVFormatContext **out, AVFormatContext *s,
 {
     AVFormatContext *rtpctx = NULL;
     int ret;
-    AVOutputFormat *rtp_format = av_guess_format("rtp", NULL, NULL);
+    av_const59 AVOutputFormat *rtp_format = av_guess_format("rtp", NULL, NULL);
     uint8_t *rtpflags;
     AVDictionary *opts = NULL;
 
diff --git a/libavformat/rtpenc_mpegts.c b/libavformat/rtpenc_mpegts.c
index 5f81e1a..fa7d018 100644
--- a/libavformat/rtpenc_mpegts.c
+++ b/libavformat/rtpenc_mpegts.c
@@ -48,8 +48,8 @@  static int rtp_mpegts_write_header(AVFormatContext *s)
 {
     struct MuxChain *chain = s->priv_data;
     AVFormatContext *mpegts_ctx = NULL, *rtp_ctx = NULL;
-    AVOutputFormat *mpegts_format = av_guess_format("mpegts", NULL, NULL);
-    AVOutputFormat *rtp_format    = av_guess_format("rtp", NULL, NULL);
+    av_const59 AVOutputFormat *mpegts_format = av_guess_format("mpegts", NULL, NULL);
+    av_const59 AVOutputFormat *rtp_format    = av_guess_format("rtp", NULL, NULL);
     int i, ret = AVERROR(ENOMEM);
     AVStream *st;
 
diff --git a/libavformat/segment.c b/libavformat/segment.c
index e2ac2c3..605ea25 100644
--- a/libavformat/segment.c
+++ b/libavformat/segment.c
@@ -72,7 +72,7 @@  typedef struct SegmentContext {
     int segment_idx_wrap;  ///< number after which the index wraps
     int segment_idx_wrap_nb;  ///< number of time the index has wraped
     int segment_count;     ///< number of segment files already written
-    AVOutputFormat *oformat;
+    av_const59 AVOutputFormat *oformat;
     AVFormatContext *avf;
     char *format;              ///< format to use for output segment files
     char *format_options_str;  ///< format options to use for output segment files
diff --git a/libavformat/smoothstreamingenc.c b/libavformat/smoothstreamingenc.c
index 094712a..1ab5191 100644
--- a/libavformat/smoothstreamingenc.c
+++ b/libavformat/smoothstreamingenc.c
@@ -293,7 +293,7 @@  static int ism_write_header(AVFormatContext *s)
 {
     SmoothStreamingContext *c = s->priv_data;
     int ret = 0, i;
-    AVOutputFormat *oformat;
+    av_const59 AVOutputFormat *oformat;
 
     if (mkdir(s->url, 0777) == -1 && errno != EEXIST) {
         ret = AVERROR(errno);
diff --git a/libavformat/version.h b/libavformat/version.h
index 4408eca..3774903 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
diff --git a/libavformat/webm_chunk.c b/libavformat/webm_chunk.c
index 7ceb276..4af7fda 100644
--- a/libavformat/webm_chunk.c
+++ b/libavformat/webm_chunk.c
@@ -53,7 +53,7 @@  typedef struct WebMChunkContext {
     char *http_method;
     uint64_t duration_written;
     int prev_pts;
-    AVOutputFormat *oformat;
+    av_const59 AVOutputFormat *oformat;
     AVFormatContext *avf;
 } WebMChunkContext;
 
-- 
1.7.10.4