avcodec/zlib_wrapper: Add wrapper for deflateInit()

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().
Also remove an unnecessary inclusion of config.h in
libavformat/protocols.c in order to trigger a request for reconfigure
(which is needed for CONFIG_DEFLATE_WRAPPER to take effect).

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
This commit is contained in:
Andreas Rheinhardt 2022-03-15 17:56:38 +01:00
parent e9d12766b2
commit 9cae7f9450
5 changed files with 47 additions and 2 deletions

2
configure vendored
View File

@ -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"

View File

@ -78,6 +78,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

View File

@ -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;
@ -66,3 +68,35 @@ void ff_inflate_end(FFZStream *z)
inflateEnd(&z->zstream);
}
}
#endif
#if CONFIG_DEFLATE_WRAPPER
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

View File

@ -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 */

View File

@ -16,8 +16,6 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "config.h"
#include "libavutil/avstring.h"
#include "libavutil/mem.h"