summaryrefslogtreecommitdiff
path: root/ext/vp8
diff options
context:
space:
mode:
authorPhilip Jägenstedt <philipj@opera.com>2010-05-21 21:28:29 +0200
committerSebastian Dröge <sebastian.droege@collabora.co.uk>2010-05-21 22:23:13 +0200
commit7ce969720f20d4c58f70e96fc4aa53e2586c9e47 (patch)
tree4dedf418711cb6761f993e4bddf74e8363ab282a /ext/vp8
parent17ab21dae3e1b44562aba361c003991571dab544 (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.c19
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;