diff options
| author | Philip Jägenstedt <philipj@opera.com> | 2010-05-21 21:28:29 +0200 |
|---|---|---|
| committer | Sebastian Dröge <sebastian.droege@collabora.co.uk> | 2010-05-21 22:23:13 +0200 |
| commit | 7ce969720f20d4c58f70e96fc4aa53e2586c9e47 (patch) | |
| tree | 4dedf418711cb6761f993e4bddf74e8363ab282a /ext/vp8 | |
| parent | 17ab21dae3e1b44562aba361c003991571dab544 (diff) | |
vp8enc: threads property
Increasing from 1 to 2 threads on an Thinkpad X60s decreased encode time
in a test from ~24 s to ~19 s, so this is quite useful.
Ideally we should let 0 be the default and automatically match the number
of CPU cores (or something).
Diffstat (limited to 'ext/vp8')
| -rw-r--r-- | ext/vp8/gstvp8enc.c | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/ext/vp8/gstvp8enc.c b/ext/vp8/gstvp8enc.c index 07a14bf08..e984fed9d 100644 --- a/ext/vp8/gstvp8enc.c +++ b/ext/vp8/gstvp8enc.c @@ -78,6 +78,7 @@ struct _GstVP8Enc int max_latency; int max_keyframe_distance; int speed; + int threads; /* state */ @@ -115,6 +116,7 @@ enum #define DEFAULT_MAX_LATENCY 10 #define DEFAULT_MAX_KEYFRAME_DISTANCE 60 #define DEFAULT_SPEED 0 +#define DEFAULT_THREADS 1 enum { @@ -125,7 +127,8 @@ enum PROP_ERROR_RESILIENT, PROP_MAX_LATENCY, PROP_MAX_KEYFRAME_DISTANCE, - PROP_SPEED + PROP_SPEED, + PROP_THREADS }; #define GST_VP8_ENC_MODE_TYPE (gst_vp8_enc_mode_get_type()) @@ -287,6 +290,12 @@ gst_vp8_enc_class_init (GstVP8EncClass * klass) 0, 2, DEFAULT_SPEED, (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS))); + g_object_class_install_property (gobject_class, PROP_THREADS, + g_param_spec_int ("threads", "Threads", + "Threads", + 1, 64, DEFAULT_THREADS, + (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS))); + GST_DEBUG_CATEGORY_INIT (gst_vp8enc_debug, "vp8enc", 0, "VP8 Encoder"); } @@ -356,6 +365,9 @@ gst_vp8_enc_set_property (GObject * object, guint prop_id, case PROP_SPEED: gst_vp8_enc->speed = g_value_get_int (value); break; + case PROP_THREADS: + gst_vp8_enc->threads = g_value_get_int (value); + break; default: break; } @@ -392,6 +404,9 @@ gst_vp8_enc_get_property (GObject * object, guint prop_id, GValue * value, case PROP_SPEED: g_value_set_int (value, gst_vp8_enc->speed); break; + case PROP_THREADS: + g_value_set_int (value, gst_vp8_enc->threads); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -671,7 +686,7 @@ gst_vp8_enc_handle_frame (GstBaseVideoEncoder * base_video_encoder, cfg.g_error_resilient = encoder->error_resilient; cfg.g_pass = VPX_RC_ONE_PASS; cfg.g_lag_in_frames = encoder->max_latency; - + cfg.g_threads = encoder->threads; cfg.rc_end_usage = encoder->mode; if (encoder->bitrate) { cfg.rc_target_bitrate = encoder->bitrate / 1000; |
