mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-10-06 10:42:22 +00:00
celtenc: Add support for setting the prediction mode and the start band
This commit is contained in:
parent
2d80fd6c22
commit
042419baa1
2 changed files with 59 additions and 3 deletions
|
@ -54,6 +54,29 @@
|
||||||
GST_DEBUG_CATEGORY_STATIC (celtenc_debug);
|
GST_DEBUG_CATEGORY_STATIC (celtenc_debug);
|
||||||
#define GST_CAT_DEFAULT celtenc_debug
|
#define GST_CAT_DEFAULT celtenc_debug
|
||||||
|
|
||||||
|
#define GST_CELT_ENC_TYPE_PREDICTION (gst_celt_enc_prediction_get_type())
|
||||||
|
static GType
|
||||||
|
gst_celt_enc_prediction_get_type (void)
|
||||||
|
{
|
||||||
|
static const GEnumValue values[] = {
|
||||||
|
{0, "Independent frames", "idependent"},
|
||||||
|
{1, "Short term interframe prediction", "short-term"},
|
||||||
|
{2, "Long term interframe prediction", "long-term"},
|
||||||
|
{0, NULL, NULL}
|
||||||
|
};
|
||||||
|
static volatile GType id = 0;
|
||||||
|
|
||||||
|
if (g_once_init_enter ((gsize *) & id)) {
|
||||||
|
GType _id;
|
||||||
|
|
||||||
|
_id = g_enum_register_static ("GstCeltEncPrediction", values);
|
||||||
|
|
||||||
|
g_once_init_leave ((gsize *) & id, _id);
|
||||||
|
}
|
||||||
|
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE ("sink",
|
static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE ("sink",
|
||||||
GST_PAD_SINK,
|
GST_PAD_SINK,
|
||||||
GST_PAD_ALWAYS,
|
GST_PAD_ALWAYS,
|
||||||
|
@ -77,6 +100,8 @@ static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src",
|
||||||
#define DEFAULT_CBR TRUE
|
#define DEFAULT_CBR TRUE
|
||||||
#define DEFAULT_COMPLEXITY 9
|
#define DEFAULT_COMPLEXITY 9
|
||||||
#define DEFAULT_MAX_BITRATE 64
|
#define DEFAULT_MAX_BITRATE 64
|
||||||
|
#define DEFAULT_PREDICTION 0
|
||||||
|
#define DEFAULT_START_BAND 0
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
|
@ -85,7 +110,9 @@ enum
|
||||||
PROP_FRAMESIZE,
|
PROP_FRAMESIZE,
|
||||||
PROP_CBR,
|
PROP_CBR,
|
||||||
PROP_COMPLEXITY,
|
PROP_COMPLEXITY,
|
||||||
PROP_MAX_BITRATE
|
PROP_MAX_BITRATE,
|
||||||
|
PROP_PREDICTION,
|
||||||
|
PROP_START_BAND
|
||||||
};
|
};
|
||||||
|
|
||||||
static void gst_celt_enc_finalize (GObject * object);
|
static void gst_celt_enc_finalize (GObject * object);
|
||||||
|
@ -173,6 +200,16 @@ gst_celt_enc_class_init (GstCeltEncClass * klass)
|
||||||
"Specify a maximum encoding bit rate (in Kbps) for variable bit rate encoding.",
|
"Specify a maximum encoding bit rate (in Kbps) for variable bit rate encoding.",
|
||||||
10, 320, DEFAULT_MAX_BITRATE,
|
10, 320, DEFAULT_MAX_BITRATE,
|
||||||
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
||||||
|
g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_PREDICTION,
|
||||||
|
g_param_spec_enum ("prediction", "Interframe Prediction",
|
||||||
|
"Controls the use of interframe prediction.",
|
||||||
|
GST_CELT_ENC_TYPE_PREDICTION, DEFAULT_PREDICTION,
|
||||||
|
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
||||||
|
g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_START_BAND,
|
||||||
|
g_param_spec_int ("start-band", "Start Band",
|
||||||
|
"Controls the start band that should be used",
|
||||||
|
0, G_MAXINT, DEFAULT_START_BAND,
|
||||||
|
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
||||||
|
|
||||||
gobject_class->finalize = GST_DEBUG_FUNCPTR (gst_celt_enc_finalize);
|
gobject_class->finalize = GST_DEBUG_FUNCPTR (gst_celt_enc_finalize);
|
||||||
|
|
||||||
|
@ -542,6 +579,7 @@ gst_celt_enc_init (GstCeltEnc * enc, GstCeltEncClass * klass)
|
||||||
enc->cbr = DEFAULT_CBR;
|
enc->cbr = DEFAULT_CBR;
|
||||||
enc->complexity = DEFAULT_COMPLEXITY;
|
enc->complexity = DEFAULT_COMPLEXITY;
|
||||||
enc->max_bitrate = DEFAULT_MAX_BITRATE;
|
enc->max_bitrate = DEFAULT_MAX_BITRATE;
|
||||||
|
enc->prediction = DEFAULT_PREDICTION;
|
||||||
|
|
||||||
enc->setup = FALSE;
|
enc->setup = FALSE;
|
||||||
enc->header_sent = FALSE;
|
enc->header_sent = FALSE;
|
||||||
|
@ -624,6 +662,12 @@ gst_celt_enc_setup (GstCeltEnc * enc)
|
||||||
#ifdef CELT_SET_COMPLEXITY
|
#ifdef CELT_SET_COMPLEXITY
|
||||||
celt_encoder_ctl (enc->state, CELT_SET_COMPLEXITY (enc->complexity), 0);
|
celt_encoder_ctl (enc->state, CELT_SET_COMPLEXITY (enc->complexity), 0);
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef CELT_SET_PREDICTION
|
||||||
|
celt_encoder_ctl (enc->state, CELT_SET_PREDICTION (enc->prediction), 0);
|
||||||
|
#endif
|
||||||
|
#ifdef CELT_SET_START_BAND
|
||||||
|
celt_encoder_ctl (enc->state, CELT_SET_START_BAND (enc->start_band), 0);
|
||||||
|
#endif
|
||||||
|
|
||||||
GST_LOG_OBJECT (enc, "we have frame size %d", enc->frame_size);
|
GST_LOG_OBJECT (enc, "we have frame size %d", enc->frame_size);
|
||||||
|
|
||||||
|
@ -1011,9 +1055,7 @@ gst_celt_enc_get_property (GObject * object, guint prop_id, GValue * value,
|
||||||
g_value_set_int (value, enc->frame_size);
|
g_value_set_int (value, enc->frame_size);
|
||||||
break;
|
break;
|
||||||
case PROP_CBR:
|
case PROP_CBR:
|
||||||
#ifdef CELT_SET_VBR_RATE
|
|
||||||
g_value_set_boolean (value, enc->cbr);
|
g_value_set_boolean (value, enc->cbr);
|
||||||
#endif
|
|
||||||
break;
|
break;
|
||||||
case PROP_COMPLEXITY:
|
case PROP_COMPLEXITY:
|
||||||
g_value_set_int (value, enc->complexity);
|
g_value_set_int (value, enc->complexity);
|
||||||
|
@ -1021,6 +1063,12 @@ gst_celt_enc_get_property (GObject * object, guint prop_id, GValue * value,
|
||||||
case PROP_MAX_BITRATE:
|
case PROP_MAX_BITRATE:
|
||||||
g_value_set_int (value, enc->max_bitrate);
|
g_value_set_int (value, enc->max_bitrate);
|
||||||
break;
|
break;
|
||||||
|
case PROP_PREDICTION:
|
||||||
|
g_value_set_enum (value, enc->prediction);
|
||||||
|
break;
|
||||||
|
case PROP_START_BAND:
|
||||||
|
g_value_set_int (value, enc->start_band);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
break;
|
break;
|
||||||
|
@ -1051,6 +1099,12 @@ gst_celt_enc_set_property (GObject * object, guint prop_id,
|
||||||
case PROP_MAX_BITRATE:
|
case PROP_MAX_BITRATE:
|
||||||
enc->max_bitrate = g_value_get_int (value);
|
enc->max_bitrate = g_value_get_int (value);
|
||||||
break;
|
break;
|
||||||
|
case PROP_PREDICTION:
|
||||||
|
enc->prediction = g_value_get_enum (value);
|
||||||
|
break;
|
||||||
|
case PROP_START_BAND:
|
||||||
|
enc->start_band = g_value_get_int (value);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -65,6 +65,8 @@ struct _GstCeltEnc {
|
||||||
gboolean cbr;
|
gboolean cbr;
|
||||||
gint complexity;
|
gint complexity;
|
||||||
gint max_bitrate;
|
gint max_bitrate;
|
||||||
|
gint prediction;
|
||||||
|
gint start_band;
|
||||||
|
|
||||||
gint channels;
|
gint channels;
|
||||||
gint rate;
|
gint rate;
|
||||||
|
|
Loading…
Reference in a new issue