mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2024-12-28 18:32:22 +00:00
avcodec/libwebpenc: Deduplicate options, AVClass, pix_fmts
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
This commit is contained in:
parent
425d272507
commit
19d8077e31
@ -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",
|
||||
};
|
||||
|
@ -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",
|
||||
};
|
||||
|
@ -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) {
|
||||
|
@ -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 */
|
||||
|
Loading…
Reference in New Issue
Block a user