[FFmpeg-devel] [PATCH 17/21] avcodec/zlib_wrapper: Add wrapper for deflateInit()

Andreas Rheinhardt andreas.rheinhardt at outlook.com
Tue Mar 15 22:06:07 EET 2022


The rationale is the same as for the wrappers for inflateInit(),
although the case for it is admittedly not so strong because
there are less users of deflateInit().

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at outlook.com>
---
 configure                 |  2 ++
 libavcodec/Makefile       |  1 +
 libavcodec/zlib_wrapper.c | 34 ++++++++++++++++++++++++++++++++++
 libavcodec/zlib_wrapper.h | 10 ++++++++++
 4 files changed, 47 insertions(+)

diff --git a/configure b/configure
index 74485fb713..26417f541f 100755
--- a/configure
+++ b/configure
@@ -2433,6 +2433,7 @@ CONFIG_EXTRA="
     cbs_jpeg
     cbs_mpeg2
     cbs_vp9
+    deflate_wrapper
     dirac_parse
     dnn
     dovi_rpu
@@ -2711,6 +2712,7 @@ cbs_jpeg_select="cbs"
 cbs_mpeg2_select="cbs"
 cbs_vp9_select="cbs"
 dct_select="rdft"
+deflate_wrapper_deps="zlib"
 dirac_parse_select="golomb"
 dovi_rpu_select="golomb"
 dnn_suggest="libtensorflow libopenvino"
diff --git a/libavcodec/Makefile b/libavcodec/Makefile
index 62c8e34963..c45503b81b 100644
--- a/libavcodec/Makefile
+++ b/libavcodec/Makefile
@@ -77,6 +77,7 @@ OBJS-$(CONFIG_CBS_MPEG2)               += cbs_mpeg2.o
 OBJS-$(CONFIG_CBS_VP9)                 += cbs_vp9.o
 OBJS-$(CONFIG_CRYSTALHD)               += crystalhd.o
 OBJS-$(CONFIG_DCT)                     += dct.o dct32_fixed.o dct32_float.o
+OBJS-$(CONFIG_DEFLATE_WRAPPER)         += zlib_wrapper.o
 OBJS-$(CONFIG_DOVI_RPU)                += dovi_rpu.o
 OBJS-$(CONFIG_ERROR_RESILIENCE)        += error_resilience.o
 OBJS-$(CONFIG_EXIF)                    += exif.o tiff_common.o
diff --git a/libavcodec/zlib_wrapper.c b/libavcodec/zlib_wrapper.c
index 5b93c2c74f..bf104e5bf6 100644
--- a/libavcodec/zlib_wrapper.c
+++ b/libavcodec/zlib_wrapper.c
@@ -21,6 +21,7 @@
 
 #include <zlib.h>
 
+#include "config.h"
 #include "libavutil/error.h"
 #include "libavutil/log.h"
 #include "libavutil/mem.h"
@@ -36,6 +37,7 @@ static void free_wrapper(void *opaque, void *ptr)
     av_free(ptr);
 }
 
+#if CONFIG_INFLATE_WRAPPER
 int ff_inflate_init(FFZStream *z, void *logctx)
 {
     z_stream *const zstream = &z->zstream;
@@ -58,7 +60,9 @@ int ff_inflate_init(FFZStream *z, void *logctx)
     }
     return 0;
 }
+#endif
 
+#if CONFIG_DEFLATE_WRAPPER
 void ff_inflate_end(FFZStream *z)
 {
     if (z->inited) {
@@ -66,3 +70,33 @@ void ff_inflate_end(FFZStream *z)
         inflateEnd(&z->zstream);
     }
 }
+
+int ff_deflate_init(FFZStream *z, int level, void *logctx)
+{
+    z_stream *const zstream = &z->zstream;
+    int zret;
+
+    z->inited = 0;
+    zstream->zalloc = alloc_wrapper;
+    zstream->zfree  = free_wrapper;
+    zstream->opaque = Z_NULL;
+
+    zret = deflateInit(zstream, level);
+    if (zret == Z_OK) {
+        z->inited = 1;
+    } else {
+        av_log(logctx, AV_LOG_ERROR, "deflateInit error %d, message: %s\n",
+               zret, zstream->msg ? zstream->msg : "");
+        return AVERROR_EXTERNAL;
+    }
+    return 0;
+}
+
+void ff_deflate_end(FFZStream *z)
+{
+    if (z->inited) {
+        z->inited = 0;
+        deflateEnd(&z->zstream);
+    }
+}
+#endif
diff --git a/libavcodec/zlib_wrapper.h b/libavcodec/zlib_wrapper.h
index 0e91713b25..fa8ee654fd 100644
--- a/libavcodec/zlib_wrapper.h
+++ b/libavcodec/zlib_wrapper.h
@@ -48,4 +48,14 @@ int ff_inflate_init(FFZStream *zstream, void *logctx);
  */
 void ff_inflate_end(FFZStream *zstream);
 
+/**
+ * Wrapper around deflateInit(). It works analogously to ff_inflate_init().
+ */
+int ff_deflate_init(FFZStream *zstream, int level, void *logctx);
+
+/**
+ * Wrapper around deflateEnd(). It works analogously to ff_inflate_end().
+ */
+void ff_deflate_end(FFZStream *zstream);
+
 #endif /* AVCODEC_ZLIB_WRAPPER_H */
-- 
2.32.0



More information about the ffmpeg-devel mailing list