avcodec: add common fflcms2 boilerplate

Handling this in general code makes more sense than handling it in
individual codec files, because it would be a lot of unnecessary code
duplication for the plenty of formats that support exporting ICC
profiles (jpg, png, tiff, webp, jxl, ...).

encode.c and decode.c will be in charge of initializing this state as
needed, so we merely need to make sure to uninit it afterwards from the
common destructor path.

Signed-off-by: Niklas Haas <git@haasn.dev>
This commit is contained in:
Niklas Haas 2022-06-28 15:13:04 +02:00
parent e1a0f2df3d
commit c688ddc067
5 changed files with 18 additions and 1 deletions

2
configure vendored
View File

@ -3814,7 +3814,7 @@ swresample_suggest="libm libsoxr stdatomic"
swscale_deps="avutil"
swscale_suggest="libm stdatomic"
avcodec_extralibs="pthreads_extralibs iconv_extralibs dxva2_extralibs"
avcodec_extralibs="pthreads_extralibs iconv_extralibs dxva2_extralibs lcms2_extralibs"
avfilter_extralibs="pthreads_extralibs"
avutil_extralibs="d3d11va_extralibs nanosleep_extralibs pthreads_extralibs vaapi_drm_extralibs vaapi_x11_extralibs vdpau_x11_extralibs"

View File

@ -114,6 +114,7 @@ OBJS-$(CONFIG_INTRAX8) += intrax8.o intrax8dsp.o msmpeg4data.o
OBJS-$(CONFIG_IVIDSP) += ivi_dsp.o
OBJS-$(CONFIG_JNI) += ffjni.o jni.o
OBJS-$(CONFIG_JPEGTABLES) += jpegtables.o
OBJS-$(CONFIG_LCMS2) += fflcms2.o
OBJS-$(CONFIG_LLAUDDSP) += lossless_audiodsp.o
OBJS-$(CONFIG_LLVIDDSP) += lossless_videodsp.o
OBJS-$(CONFIG_LLVIDENCDSP) += lossless_videoencdsp.o

View File

@ -479,6 +479,10 @@ av_cold int avcodec_close(AVCodecContext *avctx)
av_channel_layout_uninit(&avci->initial_ch_layout);
#if CONFIG_LCMS2
ff_icc_context_uninit(&avci->icc);
#endif
av_freep(&avctx->internal);
}

View File

@ -49,6 +49,10 @@
#include "internal.h"
#include "thread.h"
#if CONFIG_LCMS2
# include "fflcms2.h"
#endif
static int apply_param_change(AVCodecContext *avctx, const AVPacket *avpkt)
{
int ret;

View File

@ -33,6 +33,10 @@
#include "avcodec.h"
#include "config.h"
#if CONFIG_LCMS2
# include "fflcms2.h"
#endif
#define FF_SANE_NB_CHANNELS 512U
#if HAVE_SIMD_ALIGN_64
@ -146,6 +150,10 @@ typedef struct AVCodecInternal {
uint64_t initial_channel_layout;
#endif
AVChannelLayout initial_ch_layout;
#if CONFIG_LCMS2
FFIccContext icc; /* used to read and write embedded ICC profiles */
#endif
} AVCodecInternal;
/**