diff options
author | Andreas Rheinhardt <andreas.rheinhardt@outlook.com> | 2021-06-09 01:33:39 +0200 |
---|---|---|
committer | Andreas Rheinhardt <andreas.rheinhardt@outlook.com> | 2021-07-08 20:10:17 +0200 |
commit | 19d8077e3172dfac6efd5995903b2ae22cc52744 (patch) | |
tree | fadea771d8d1b63b56ccd58fd3fbc88fa9bd635b /libavcodec | |
parent | 425d272507edbcce458df0064abefd4b02098dfa (diff) | |
download | ffmpeg-19d8077e3172dfac6efd5995903b2ae22cc52744.tar.gz |
avcodec/libwebpenc: Deduplicate options, AVClass, pix_fmts
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
Diffstat (limited to 'libavcodec')
-rw-r--r-- | libavcodec/libwebpenc.c | 17 | ||||
-rw-r--r-- | libavcodec/libwebpenc_animencoder.c | 17 | ||||
-rw-r--r-- | libavcodec/libwebpenc_common.c | 38 | ||||
-rw-r--r-- | libavcodec/libwebpenc_common.h | 33 |
4 files changed, 51 insertions, 54 deletions
diff --git a/libavcodec/libwebpenc.c b/libavcodec/libwebpenc.c index 97adacb6b2..afaf80047b 100644 --- a/libavcodec/libwebpenc.c +++ b/libavcodec/libwebpenc.c @@ -87,29 +87,18 @@ static int libwebp_encode_close(AVCodecContext *avctx) return 0; } -static const AVClass class = { - .class_name = "libwebp", - .item_name = av_default_item_name, - .option = options, - .version = LIBAVUTIL_VERSION_INT, -}; - const AVCodec ff_libwebp_encoder = { .name = "libwebp", .long_name = NULL_IF_CONFIG_SMALL("libwebp WebP image"), .type = AVMEDIA_TYPE_VIDEO, .id = AV_CODEC_ID_WEBP, .capabilities = AV_CODEC_CAP_DR1, + .pix_fmts = ff_libwebpenc_pix_fmts, + .priv_class = &ff_libwebpenc_class, .priv_data_size = sizeof(LibWebPContext), + .defaults = ff_libwebp_defaults, .init = libwebp_encode_init, .encode2 = libwebp_encode_frame, .close = libwebp_encode_close, - .pix_fmts = (const enum AVPixelFormat[]) { - AV_PIX_FMT_RGB32, - AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUVA420P, - AV_PIX_FMT_NONE - }, - .priv_class = &class, - .defaults = libwebp_defaults, .wrapper_name = "libwebp", }; diff --git a/libavcodec/libwebpenc_animencoder.c b/libavcodec/libwebpenc_animencoder.c index 742aefb467..537f1576bd 100644 --- a/libavcodec/libwebpenc_animencoder.c +++ b/libavcodec/libwebpenc_animencoder.c @@ -125,29 +125,18 @@ static int libwebp_anim_encode_close(AVCodecContext *avctx) return 0; } -static const AVClass class = { - .class_name = "libwebp_anim", - .item_name = av_default_item_name, - .option = options, - .version = LIBAVUTIL_VERSION_INT, -}; - const AVCodec ff_libwebp_anim_encoder = { .name = "libwebp_anim", .long_name = NULL_IF_CONFIG_SMALL("libwebp WebP image"), .type = AVMEDIA_TYPE_VIDEO, .id = AV_CODEC_ID_WEBP, .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY, + .pix_fmts = ff_libwebpenc_pix_fmts, + .priv_class = &ff_libwebpenc_class, .priv_data_size = sizeof(LibWebPAnimContext), + .defaults = ff_libwebp_defaults, .init = libwebp_anim_encode_init, .encode2 = libwebp_anim_encode_frame, .close = libwebp_anim_encode_close, - .pix_fmts = (const enum AVPixelFormat[]) { - AV_PIX_FMT_RGB32, - AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUVA420P, - AV_PIX_FMT_NONE - }, - .priv_class = &class, - .defaults = libwebp_defaults, .wrapper_name = "libwebp", }; diff --git a/libavcodec/libwebpenc_common.c b/libavcodec/libwebpenc_common.c index 3c4c3e2294..6a5fa70dcd 100644 --- a/libavcodec/libwebpenc_common.c +++ b/libavcodec/libwebpenc_common.c @@ -24,8 +24,46 @@ * WebP encoder using libwebp: common structs and methods. */ +#include "libavutil/opt.h" #include "libwebpenc_common.h" +const AVCodecDefault ff_libwebp_defaults[] = { + { "compression_level", "4" }, + { "global_quality", "-1" }, + { NULL }, +}; + +#define OFFSET(x) offsetof(LibWebPContextCommon, x) +#define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM +static const AVOption options[] = { + { "lossless", "Use lossless mode", OFFSET(lossless), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, VE }, + { "preset", "Configuration preset", OFFSET(preset), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, WEBP_PRESET_TEXT, VE, "preset" }, + { "none", "do not use a preset", 0, AV_OPT_TYPE_CONST, { .i64 = -1 }, 0, 0, VE, "preset" }, + { "default", "default preset", 0, AV_OPT_TYPE_CONST, { .i64 = WEBP_PRESET_DEFAULT }, 0, 0, VE, "preset" }, + { "picture", "digital picture, like portrait, inner shot", 0, AV_OPT_TYPE_CONST, { .i64 = WEBP_PRESET_PICTURE }, 0, 0, VE, "preset" }, + { "photo", "outdoor photograph, with natural lighting", 0, AV_OPT_TYPE_CONST, { .i64 = WEBP_PRESET_PHOTO }, 0, 0, VE, "preset" }, + { "drawing", "hand or line drawing, with high-contrast details", 0, AV_OPT_TYPE_CONST, { .i64 = WEBP_PRESET_DRAWING }, 0, 0, VE, "preset" }, + { "icon", "small-sized colorful images", 0, AV_OPT_TYPE_CONST, { .i64 = WEBP_PRESET_ICON }, 0, 0, VE, "preset" }, + { "text", "text-like", 0, AV_OPT_TYPE_CONST, { .i64 = WEBP_PRESET_TEXT }, 0, 0, VE, "preset" }, + { "cr_threshold","Conditional replenishment threshold", OFFSET(cr_threshold), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, VE }, + { "cr_size" ,"Conditional replenishment block size", OFFSET(cr_size) , AV_OPT_TYPE_INT, { .i64 = 16 }, 0, 256, VE }, + { "quality" ,"Quality", OFFSET(quality), AV_OPT_TYPE_FLOAT, { .dbl = 75 }, 0, 100, VE }, + { NULL }, +}; + +const AVClass ff_libwebpenc_class = { + .class_name = "libwebp encoder", + .item_name = av_default_item_name, + .option = options, + .version = LIBAVUTIL_VERSION_INT, +}; + +const enum AVPixelFormat ff_libwebpenc_pix_fmts[] = { + AV_PIX_FMT_RGB32, + AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUVA420P, + AV_PIX_FMT_NONE +}; + int ff_libwebp_error_to_averror(int err) { switch (err) { diff --git a/libavcodec/libwebpenc_common.h b/libavcodec/libwebpenc_common.h index e74e57939e..0c13176b79 100644 --- a/libavcodec/libwebpenc_common.h +++ b/libavcodec/libwebpenc_common.h @@ -29,11 +29,12 @@ #include <webp/encode.h> -#include "libavutil/common.h" +#include "libavutil/attributes.h" #include "libavutil/frame.h" -#include "libavutil/imgutils.h" -#include "libavutil/opt.h" +#include "libavutil/log.h" +#include "libavutil/pixfmt.h" #include "avcodec.h" +#include "codec.h" #include "internal.h" typedef struct LibWebPContextCommon { @@ -57,28 +58,8 @@ int ff_libwebp_get_frame(AVCodecContext *avctx, LibWebPContextCommon *s, const AVFrame *frame, AVFrame **alt_frame_ptr, WebPPicture **pic_ptr); -#define OFFSET(x) offsetof(LibWebPContextCommon, x) -#define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM -static const AVOption options[] = { - { "lossless", "Use lossless mode", OFFSET(lossless), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, VE }, - { "preset", "Configuration preset", OFFSET(preset), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, WEBP_PRESET_TEXT, VE, "preset" }, - { "none", "do not use a preset", 0, AV_OPT_TYPE_CONST, { .i64 = -1 }, 0, 0, VE, "preset" }, - { "default", "default preset", 0, AV_OPT_TYPE_CONST, { .i64 = WEBP_PRESET_DEFAULT }, 0, 0, VE, "preset" }, - { "picture", "digital picture, like portrait, inner shot", 0, AV_OPT_TYPE_CONST, { .i64 = WEBP_PRESET_PICTURE }, 0, 0, VE, "preset" }, - { "photo", "outdoor photograph, with natural lighting", 0, AV_OPT_TYPE_CONST, { .i64 = WEBP_PRESET_PHOTO }, 0, 0, VE, "preset" }, - { "drawing", "hand or line drawing, with high-contrast details", 0, AV_OPT_TYPE_CONST, { .i64 = WEBP_PRESET_DRAWING }, 0, 0, VE, "preset" }, - { "icon", "small-sized colorful images", 0, AV_OPT_TYPE_CONST, { .i64 = WEBP_PRESET_ICON }, 0, 0, VE, "preset" }, - { "text", "text-like", 0, AV_OPT_TYPE_CONST, { .i64 = WEBP_PRESET_TEXT }, 0, 0, VE, "preset" }, - { "cr_threshold","Conditional replenishment threshold", OFFSET(cr_threshold), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, VE }, - { "cr_size" ,"Conditional replenishment block size", OFFSET(cr_size) , AV_OPT_TYPE_INT, { .i64 = 16 }, 0, 256, VE }, - { "quality" ,"Quality", OFFSET(quality), AV_OPT_TYPE_FLOAT, { .dbl = 75 }, 0, 100, VE }, - { NULL }, -}; - -static const AVCodecDefault libwebp_defaults[] = { - { "compression_level", "4" }, - { "global_quality", "-1" }, - { NULL }, -}; +extern const enum AVPixelFormat ff_libwebpenc_pix_fmts[]; +extern const AVClass ff_libwebpenc_class; +extern const AVCodecDefault ff_libwebp_defaults[]; #endif /* AVCODEC_LIBWEBPENC_COMMON_H */ |