[FFmpeg-devel] [PATCH] vpxenc: add codec specific speed option
James Zern
jzern
Fri Jan 7 02:43:53 CET 2011
-speed maps to VP8E_SET_CPUUSED [-16,16].
While this establishes the framework for libvpx codec specific options
I was wondering about name clashes with these. Is 'speed' too generic
for this?
libavcodec/libvpxenc.c | 13 +++++++++++--
1 files changed, 11 insertions(+), 2 deletions(-)
-------------- next part --------------
diff --git a/libavcodec/libvpxenc.c b/libavcodec/libvpxenc.c
index d0838ba..a4dc621 100644
--- a/libavcodec/libvpxenc.c
+++ b/libavcodec/libvpxenc.c
@@ -30,6 +30,7 @@
#include "avcodec.h"
#include "libavutil/base64.h"
+#include "libavutil/opt.h"
/**
* Portion of struct vpx_codec_cx_pkt from vpx_encoder.h.
@@ -52,8 +53,16 @@ typedef struct VP8EncoderContext {
struct vpx_fixed_buf twopass_stats;
unsigned long deadline; //i.e., RT/GOOD/BEST
struct FrameListData *coded_frame_list;
+
+ int cpuused;
} VP8Context;
+static const AVOption options[]={
+{"speed", "", offsetof(VP8Context, cpuused), FF_OPT_TYPE_INT, 3, -16, 16, AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_ENCODING_PARAM},
+{NULL}
+};
+static const AVClass class = { "libvpx", av_default_item_name, options, LIBAVUTIL_VERSION_INT };
+
/** String mappings for enum vp8e_enc_control_id */
static const char *ctlidstr[] = {
[VP8E_UPD_ENTROPY] = "VP8E_UPD_ENTROPY",
@@ -204,7 +213,6 @@ static av_cold int vp8_init(AVCodecContext *avctx)
{
VP8Context *ctx = avctx->priv_data;
const struct vpx_codec_iface *iface = &vpx_codec_vp8_cx_algo;
- int cpuused = 3;
struct vpx_codec_enc_cfg enccfg;
int res;
@@ -308,7 +316,7 @@ static av_cold int vp8_init(AVCodecContext *avctx)
//codec control failures are currently treated only as warnings
av_log(avctx, AV_LOG_DEBUG, "vpx_codec_control\n");
- codecctl_int(avctx, VP8E_SET_CPUUSED, cpuused);
+ codecctl_int(avctx, VP8E_SET_CPUUSED, ctx->cpuused);
codecctl_int(avctx, VP8E_SET_NOISE_SENSITIVITY, avctx->noise_reduction);
codecctl_int(avctx, VP8E_SET_TOKEN_PARTITIONS, av_log2(avctx->slices));
@@ -506,4 +514,5 @@ AVCodec libvpx_encoder = {
CODEC_CAP_DELAY,
.pix_fmts = (const enum PixelFormat[]){PIX_FMT_YUV420P, PIX_FMT_NONE},
.long_name = NULL_IF_CONFIG_SMALL("libvpx VP8"),
+ .priv_class= &class,
};
More information about the ffmpeg-devel
mailing list