#define DEFAULT_MULTIPASS_MODE VPX_RC_ONE_PASS
#define DEFAULT_MULTIPASS_CACHE_FILE "multipass.cache"
#define DEFAULT_AUTO_ALT_REF_FRAMES FALSE
+#define DEFAULT_LAG_IN_FRAMES 0
enum
{
PROP_THREADS,
PROP_MULTIPASS_MODE,
PROP_MULTIPASS_CACHE_FILE,
- PROP_AUTO_ALT_REF_FRAMES
+ PROP_AUTO_ALT_REF_FRAMES,
+ PROP_LAG_IN_FRAMES
};
#define GST_VP8_ENC_MODE_TYPE (gst_vp8_enc_mode_get_type())
DEFAULT_AUTO_ALT_REF_FRAMES,
(GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
+ g_object_class_install_property (gobject_class, PROP_LAG_IN_FRAMES,
+ g_param_spec_uint ("lag-in-frames", "Max number of frames to lag",
+ "If set, this value allows the encoder to consume a number of input "
+ "frames before producing output frames.",
+ 0, 64, DEFAULT_LAG_IN_FRAMES,
+ (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
GST_DEBUG_CATEGORY_INIT (gst_vp8enc_debug, "vp8enc", 0, "VP8 Encoder");
}
gst_vp8_enc->multipass_mode = DEFAULT_MULTIPASS_MODE;
gst_vp8_enc->multipass_cache_file = g_strdup (DEFAULT_MULTIPASS_CACHE_FILE);
gst_vp8_enc->auto_alt_ref_frames = DEFAULT_AUTO_ALT_REF_FRAMES;
+ gst_vp8_enc->lag_in_frames = DEFAULT_LAG_IN_FRAMES;
}
static void
case PROP_AUTO_ALT_REF_FRAMES:
gst_vp8_enc->auto_alt_ref_frames = g_value_get_boolean (value);
break;
+ case PROP_LAG_IN_FRAMES:
+ gst_vp8_enc->lag_in_frames = g_value_get_uint (value);
+ break;
default:
break;
}
case PROP_AUTO_ALT_REF_FRAMES:
g_value_set_boolean (value, gst_vp8_enc->auto_alt_ref_frames);
break;
+ case PROP_LAG_IN_FRAMES:
+ g_value_set_uint (value, gst_vp8_enc->lag_in_frames);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
(encoder->auto_alt_ref_frames ? 1 : 0), gst_vpx_error_name (status));
}
+ cfg.g_lag_in_frames = encoder->lag_in_frames;
+
gst_base_video_encoder_set_latency (base_video_encoder, 0,
gst_util_uint64_scale (encoder->max_latency,
state->fps_d * GST_SECOND, state->fps_n));