Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
From: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
To: ffmpeg-devel@ffmpeg.org
Cc: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
Subject: [FFmpeg-devel] [PATCH v2 15/22] avformat/avio: Constify data pointees of write callbacks
Date: Thu,  7 Sep 2023 03:05:31 +0200
Message-ID: <AS8P250MB074440CD0AD8F8F98A848D778FEEA@AS8P250MB0744.EURP250.PROD.OUTLOOK.COM> (raw)
In-Reply-To: <AS8P250MB0744BBA654FCCAFE5649A4868FEEA@AS8P250MB0744.EURP250.PROD.OUTLOOK.COM>

They are currently non-const for reasons unknown, although
avio_write() accepts a const buffer.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
---
rtmpcrypt.c sometimes modifies the buffer whose content
it is supposed to write.

 doc/APIchanges                   |  4 ++++
 libavformat/avio.c               |  4 ++++
 libavformat/avio.h               | 13 +++++++++++++
 libavformat/avio_internal.h      |  4 ++++
 libavformat/aviobuf.c            | 28 ++++++++++++++++++++++++++++
 libavformat/hdsenc.c             |  4 ++++
 libavformat/smoothstreamingenc.c |  4 ++++
 libavformat/url.h                |  8 ++++++++
 libavformat/version_major.h      |  1 +
 9 files changed, 70 insertions(+)

diff --git a/doc/APIchanges b/doc/APIchanges
index 762c2d6628..963ad477bf 100644
--- a/doc/APIchanges
+++ b/doc/APIchanges
@@ -2,6 +2,10 @@ The last version increases of all libraries were on 2023-02-09
 
 API changes, most recent first:
 
+2023-09-07 - xxxxxxxxxx - lavf 60.xx.100 - avio.h
+  Constify the buffer pointees in the write_packet and write_data_type
+  callbacks of AVIOContext.
+
 2023-09-07 - xxxxxxxxxx - lavc 60.26.100 - defs.h
   Add AV_PROFILE_* and AV_LEVEL_* replacements in defs.h for the
   defines from avcodec.h. The latter are deprecated.
diff --git a/libavformat/avio.c b/libavformat/avio.c
index 5e1acba31b..053cb2e05a 100644
--- a/libavformat/avio.c
+++ b/libavformat/avio.c
@@ -421,7 +421,11 @@ int ffurl_read_complete(URLContext *h, unsigned char *buf, int size)
                                   h->prot->url_read, NULL, 1);
 }
 
+#if FF_API_AVIO_WRITE_NONCONST
 int ffurl_write2(void *urlcontext, uint8_t *buf, int size)
+#else
+int ffurl_write2(void *urlcontext, const uint8_t *buf, int size)
+#endif
 {
     URLContext *h = urlcontext;
 
diff --git a/libavformat/avio.h b/libavformat/avio.h
index 5f13e0622d..887a397c37 100644
--- a/libavformat/avio.h
+++ b/libavformat/avio.h
@@ -238,7 +238,11 @@ typedef struct AVIOContext {
     void *opaque;           /**< A private pointer, passed to the read/write/seek/...
                                  functions. */
     int (*read_packet)(void *opaque, uint8_t *buf, int buf_size);
+#if FF_API_AVIO_WRITE_NONCONST
     int (*write_packet)(void *opaque, uint8_t *buf, int buf_size);
+#else
+    int (*write_packet)(void *opaque, const uint8_t *buf, int buf_size);
+#endif
     int64_t (*seek)(void *opaque, int64_t offset, int whence);
     int64_t pos;            /**< position in the file of the current buffer */
     int eof_reached;        /**< true if was unable to read due to error or eof */
@@ -286,8 +290,13 @@ typedef struct AVIOContext {
     /**
      * A callback that is used instead of write_packet.
      */
+#if FF_API_AVIO_WRITE_NONCONST
     int (*write_data_type)(void *opaque, uint8_t *buf, int buf_size,
                            enum AVIODataMarkerType type, int64_t time);
+#else
+    int (*write_data_type)(void *opaque, const uint8_t *buf, int buf_size,
+                           enum AVIODataMarkerType type, int64_t time);
+#endif
     /**
      * If set, don't call write_data_type separately for AVIO_DATA_MARKER_BOUNDARY_POINT,
      * but ignore them and treat them as AVIO_DATA_MARKER_UNKNOWN (to avoid needlessly
@@ -407,7 +416,11 @@ AVIOContext *avio_alloc_context(
                   int write_flag,
                   void *opaque,
                   int (*read_packet)(void *opaque, uint8_t *buf, int buf_size),
+#if FF_API_AVIO_WRITE_NONCONST
                   int (*write_packet)(void *opaque, uint8_t *buf, int buf_size),
+#else
+                  int (*write_packet)(void *opaque, const uint8_t *buf, int buf_size),
+#endif
                   int64_t (*seek)(void *opaque, int64_t offset, int whence));
 
 /**
diff --git a/libavformat/avio_internal.h b/libavformat/avio_internal.h
index aef6ab660e..bd58499b64 100644
--- a/libavformat/avio_internal.h
+++ b/libavformat/avio_internal.h
@@ -89,7 +89,11 @@ void ffio_init_context(FFIOContext *s,
                   int write_flag,
                   void *opaque,
                   int (*read_packet)(void *opaque, uint8_t *buf, int buf_size),
+#if FF_API_AVIO_WRITE_NONCONST
                   int (*write_packet)(void *opaque, uint8_t *buf, int buf_size),
+#else
+                  int (*write_packet)(void *opaque, const uint8_t *buf, int buf_size),
+#endif
                   int64_t (*seek)(void *opaque, int64_t offset, int whence));
 
 /**
diff --git a/libavformat/aviobuf.c b/libavformat/aviobuf.c
index ad5827f216..c55fe8a837 100644
--- a/libavformat/aviobuf.c
+++ b/libavformat/aviobuf.c
@@ -84,7 +84,11 @@ void ffio_init_context(FFIOContext *ctx,
                   int write_flag,
                   void *opaque,
                   int (*read_packet)(void *opaque, uint8_t *buf, int buf_size),
+#if FF_API_AVIO_WRITE_NONCONST
                   int (*write_packet)(void *opaque, uint8_t *buf, int buf_size),
+#else
+                  int (*write_packet)(void *opaque, const uint8_t *buf, int buf_size),
+#endif
                   int64_t (*seek)(void *opaque, int64_t offset, int whence))
 {
     AVIOContext *const s = &ctx->pub;
@@ -143,7 +147,11 @@ AVIOContext *avio_alloc_context(
                   int write_flag,
                   void *opaque,
                   int (*read_packet)(void *opaque, uint8_t *buf, int buf_size),
+#if FF_API_AVIO_WRITE_NONCONST
                   int (*write_packet)(void *opaque, uint8_t *buf, int buf_size),
+#else
+                  int (*write_packet)(void *opaque, const uint8_t *buf, int buf_size),
+#endif
                   int64_t (*seek)(void *opaque, int64_t offset, int whence))
 {
     FFIOContext *s = av_malloc(sizeof(*s));
@@ -165,12 +173,20 @@ static void writeout(AVIOContext *s, const uint8_t *data, int len)
     if (!s->error) {
         int ret = 0;
         if (s->write_data_type)
+#if FF_API_AVIO_WRITE_NONCONST
             ret = s->write_data_type(s->opaque, (uint8_t *)data,
+#else
+            ret = s->write_data_type(s->opaque, data,
+#endif
                                      len,
                                      ctx->current_type,
                                      ctx->last_time);
         else if (s->write_packet)
+#if FF_API_AVIO_WRITE_NONCONST
             ret = s->write_packet(s->opaque, (uint8_t *)data, len);
+#else
+            ret = s->write_packet(s->opaque, data, len);
+#endif
         if (ret < 0) {
             s->error = ret;
         } else {
@@ -1396,7 +1412,11 @@ typedef struct DynBuffer {
     uint8_t io_buffer[1];
 } DynBuffer;
 
+#if FF_API_AVIO_WRITE_NONCONST
 static int dyn_buf_write(void *opaque, uint8_t *buf, int buf_size)
+#else
+static int dyn_buf_write(void *opaque, const uint8_t *buf, int buf_size)
+#endif
 {
     DynBuffer *d = opaque;
     unsigned new_size;
@@ -1428,7 +1448,11 @@ static int dyn_buf_write(void *opaque, uint8_t *buf, int buf_size)
     return buf_size;
 }
 
+#if FF_API_AVIO_WRITE_NONCONST
 static int dyn_packet_buf_write(void *opaque, uint8_t *buf, int buf_size)
+#else
+static int dyn_packet_buf_write(void *opaque, const uint8_t *buf, int buf_size)
+#endif
 {
     unsigned char buf1[4];
     int ret;
@@ -1565,7 +1589,11 @@ void ffio_free_dyn_buf(AVIOContext **s)
     avio_context_free(s);
 }
 
+#if FF_API_AVIO_WRITE_NONCONST
 static int null_buf_write(void *opaque, uint8_t *buf, int buf_size)
+#else
+static int null_buf_write(void *opaque, const uint8_t *buf, int buf_size)
+#endif
 {
     DynBuffer *d = opaque;
 
diff --git a/libavformat/hdsenc.c b/libavformat/hdsenc.c
index 080a873ee8..7062441b70 100644
--- a/libavformat/hdsenc.c
+++ b/libavformat/hdsenc.c
@@ -112,7 +112,11 @@ static int parse_header(OutputStream *os, const uint8_t *buf, int buf_size)
     return 0;
 }
 
+#if FF_API_AVIO_WRITE_NONCONST
 static int hds_write(void *opaque, uint8_t *buf, int buf_size)
+#else
+static int hds_write(void *opaque, const uint8_t *buf, int buf_size)
+#endif
 {
     OutputStream *os = opaque;
     if (os->out) {
diff --git a/libavformat/smoothstreamingenc.c b/libavformat/smoothstreamingenc.c
index 3c050ca54e..0379e9a079 100644
--- a/libavformat/smoothstreamingenc.c
+++ b/libavformat/smoothstreamingenc.c
@@ -75,7 +75,11 @@ typedef struct SmoothStreamingContext {
     int nb_fragments;
 } SmoothStreamingContext;
 
+#if FF_API_AVIO_WRITE_NONCONST
 static int ism_write(void *opaque, uint8_t *buf, int buf_size)
+#else
+static int ism_write(void *opaque, const uint8_t *buf, int buf_size)
+#endif
 {
     OutputStream *os = opaque;
     if (os->out)
diff --git a/libavformat/url.h b/libavformat/url.h
index bba1a9a1df..f0327218d4 100644
--- a/libavformat/url.h
+++ b/libavformat/url.h
@@ -194,7 +194,11 @@ static inline int ffurl_read(URLContext *h, uint8_t *buf, int size)
  */
 int ffurl_read_complete(URLContext *h, unsigned char *buf, int size);
 
+#if FF_API_AVIO_WRITE_NONCONST
 int ffurl_write2(void *urlcontext, uint8_t *buf, int size);
+#else
+int ffurl_write2(void *urlcontext, const uint8_t *buf, int size);
+#endif
 /**
  * Write size bytes from buf to the resource accessed by h.
  *
@@ -203,7 +207,11 @@ int ffurl_write2(void *urlcontext, uint8_t *buf, int size);
  */
 static inline int ffurl_write(URLContext *h, const uint8_t *buf, int size)
 {
+#if FF_API_AVIO_WRITE_NONCONST
     return ffurl_write2(h, (uint8_t*)buf, size);
+#else
+    return ffurl_write2(h, buf, size);
+#endif
 }
 
 int64_t ffurl_seek2(void *urlcontext, int64_t pos, int whence);
diff --git a/libavformat/version_major.h b/libavformat/version_major.h
index 293fbd3397..1b43fe64cb 100644
--- a/libavformat/version_major.h
+++ b/libavformat/version_major.h
@@ -45,6 +45,7 @@
 #define FF_API_GET_END_PTS              (LIBAVFORMAT_VERSION_MAJOR < 61)
 #define FF_API_AVIODIRCONTEXT           (LIBAVFORMAT_VERSION_MAJOR < 61)
 #define FF_API_AVFORMAT_IO_CLOSE        (LIBAVFORMAT_VERSION_MAJOR < 61)
+#define FF_API_AVIO_WRITE_NONCONST      (LIBAVFORMAT_VERSION_MAJOR < 61)
 
 
 #define FF_API_R_FRAME_RATE            1
-- 
2.34.1

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

  parent reply	other threads:[~2023-09-07  1:06 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-09-07  1:02 [FFmpeg-devel] [PATCH v2 01/22] fate/demux, lavf-container: Workaround for AV1-aspect ratio issue Andreas Rheinhardt
2023-09-07  1:05 ` [FFmpeg-devel] [PATCH v2 02/22] avformat/avio: Don't use incompatible function pointer type for call Andreas Rheinhardt
2023-09-07  1:05 ` [FFmpeg-devel] [PATCH v2 03/22] avformat/internal: Avoid casting const away Andreas Rheinhardt
2023-09-07  1:05 ` [FFmpeg-devel] [PATCH v2 04/22] avformat/aviobuf: Don't use incompatible function pointer type for call Andreas Rheinhardt
2023-09-07  1:05 ` [FFmpeg-devel] [PATCH v2 05/22] avformat/dashenc: Avoid unnecessary casts Andreas Rheinhardt
2023-09-07  1:05 ` [FFmpeg-devel] [PATCH v2 06/22] avformat/dashenc: Use proper type for AVCodecIDs Andreas Rheinhardt
2023-09-07  1:05 ` [FFmpeg-devel] [PATCH v2 07/22] avformat/dashenc: Add const where appropriate Andreas Rheinhardt
2023-09-07  1:05 ` [FFmpeg-devel] [PATCH v2 08/22] avformat/dashenc: Simplify getting format string Andreas Rheinhardt
2023-09-07  1:05 ` [FFmpeg-devel] [PATCH v2 09/22] avformat/dashenc: Avoid relocations for short strings Andreas Rheinhardt
2023-09-07  1:05 ` [FFmpeg-devel] [PATCH v2 10/22] avformat/teeproto: Remove useless AVClass without options Andreas Rheinhardt
2023-09-07  1:05 ` [FFmpeg-devel] [PATCH v2 11/22] avdevice/lavfi: Remove unnecessary avio_internal.h inclusion Andreas Rheinhardt
2023-09-07  1:05 ` [FFmpeg-devel] [PATCH v2 12/22] avformat: Remove avformat and avio headers from protocols Andreas Rheinhardt
2023-09-07  1:05 ` [FFmpeg-devel] [PATCH v2 13/22] avformat/teeproto: Remove always-false check Andreas Rheinhardt
2023-09-07  1:05 ` [FFmpeg-devel] [PATCH v2 14/22] avformat/avio_internal: Don't include url.h Andreas Rheinhardt
2023-09-07  1:05 ` Andreas Rheinhardt [this message]
2023-09-07 15:02   ` [FFmpeg-devel] [PATCH v2 15/22] avformat/avio: Constify data pointees of write callbacks Anton Khirnov
2023-09-07 17:08     ` Andreas Rheinhardt
2023-09-07  1:05 ` [FFmpeg-devel] [PATCH v2 16/22] avutil/imgutils: Constify some pointees Andreas Rheinhardt
2023-09-10 11:09   ` Andreas Rheinhardt
2023-09-07  1:05 ` [FFmpeg-devel] [PATCH v2 17/22] avutil/samplefmt: " Andreas Rheinhardt
2023-09-07  1:05 ` [FFmpeg-devel] [PATCH v2 18/22] avutil/audio_fifo: " Andreas Rheinhardt
2023-09-07  1:05 ` [FFmpeg-devel] [PATCH v2 19/22] avutil/fifo: Constify AVFifo pointees in peek functions Andreas Rheinhardt
2023-09-07  1:05 ` [FFmpeg-devel] [PATCH v2 20/22] avcodec/v210dec: Don't cast const away Andreas Rheinhardt
2023-09-07  7:36   ` Paul B Mahol
2023-09-07  1:05 ` [FFmpeg-devel] [PATCH v2 21/22] avutil/imgutils: Add wrapper for av_image_copy() to avoid casts Andreas Rheinhardt
2023-09-07  1:05 ` [FFmpeg-devel] [PATCH v2 22/22] avfilter/vf_framepack: Use dedicated pointer for access Andreas Rheinhardt
2023-09-07 10:38 ` [FFmpeg-devel] [PATCH 23/26] avformat/avio: Remove duplicated freeing code Andreas Rheinhardt
2023-09-07 10:38 ` [FFmpeg-devel] [PATCH 24/26] avformat/avio: Remove redundant checks Andreas Rheinhardt
2023-09-07 10:38 ` [FFmpeg-devel] [PATCH 25/26] all: Use av_frame_replace() where appropriate Andreas Rheinhardt
2023-09-07 10:38 ` [FFmpeg-devel] [PATCH 26/26] avfilter/buffersrc: Use av_frame_clone() " Andreas Rheinhardt
2023-09-07 11:09   ` Nicolas George
2023-09-07 14:03 ` [FFmpeg-devel] [PATCH 27/31] avfilter/vf_vif: Don't cast const away unnecessarily Andreas Rheinhardt
2023-09-07 14:32   ` Paul B Mahol
2023-09-07 14:03 ` [FFmpeg-devel] [PATCH 28/31] avfilter/vsrc_testsrc: Don't use const uint8_t* when pointee changes Andreas Rheinhardt
2023-09-07 14:47   ` Paul B Mahol
2023-09-07 14:03 ` [FFmpeg-devel] [PATCH 29/31] avcodec/tiff: Don't cast const away Andreas Rheinhardt
2023-09-07 17:58   ` Paul B Mahol
2023-09-07 14:03 ` [FFmpeg-devel] [PATCH 30/31] avfilter/vf_varblur: Don't use pointer-to-const for destination Andreas Rheinhardt
2023-09-07 14:31   ` Paul B Mahol
2023-09-07 14:03 ` [FFmpeg-devel] [PATCH 31/31] avfilter/blend_modes: Always preserve constness Andreas Rheinhardt
2023-09-07 14:32   ` Paul B Mahol
2023-09-10 10:23 ` [FFmpeg-devel] [PATCH v2 01/22] fate/demux, lavf-container: Workaround for AV1-aspect ratio issue Andreas Rheinhardt

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=AS8P250MB074440CD0AD8F8F98A848D778FEEA@AS8P250MB0744.EURP250.PROD.OUTLOOK.COM \
    --to=andreas.rheinhardt@outlook.com \
    --cc=ffmpeg-devel@ffmpeg.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
		ffmpegdev@gitmailbox.com
	public-inbox-index ffmpegdev

Example config snippet for mirrors.


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git