summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVincent Penquerc'h <vincent.penquerch@collabora.co.uk>2015-03-12 12:49:40 +0000
committerVincent Penquerc'h <vincent.penquerch@collabora.co.uk>2015-03-12 14:04:20 +0000
commitfcce2fe05913d1ea0fdf6ab656951b9a010fb2b9 (patch)
tree8578b41306ec17a17e4f92c96a4f66e83e06649d
parentb8565d3ab6481e85848f810af076a87c18fa572d (diff)
downloadgstreamer-plugins-base-fcce2fe05913d1ea0fdf6ab656951b9a010fb2b9.tar.gz
opusenc: replace cbr and constrained-vbr properties with an enum
It was deemed confusing before. https://bugzilla.gnome.org/show_bug.cgi?id=744909
-rw-r--r--ext/opus/gstopusenc.c87
-rw-r--r--ext/opus/gstopusenc.h10
2 files changed, 83 insertions, 14 deletions
diff --git a/ext/opus/gstopusenc.c b/ext/opus/gstopusenc.c
index 603fad870..cb3f276f4 100644
--- a/ext/opus/gstopusenc.c
+++ b/ext/opus/gstopusenc.c
@@ -136,6 +136,29 @@ gst_opus_enc_audio_type_get_type (void)
return id;
}
+#define GST_OPUS_ENC_TYPE_BITRATE_TYPE (gst_opus_enc_bitrate_type_get_type())
+static GType
+gst_opus_enc_bitrate_type_get_type (void)
+{
+ static const GEnumValue values[] = {
+ {BITRATE_TYPE_CBR, "CBR", "cbr"},
+ {BITRATE_TYPE_VBR, "VBR", "vbr"},
+ {BITRATE_TYPE_CONSTRAINED_VBR, "Constrained VBR", "constrained-vbr"},
+ {0, NULL, NULL}
+ };
+ static volatile GType id = 0;
+
+ if (g_once_init_enter ((gsize *) & id)) {
+ GType _id;
+
+ _id = g_enum_register_static ("GstOpusEncBitrateType", values);
+
+ g_once_init_leave ((gsize *) & id, _id);
+ }
+
+ return id;
+}
+
#define FORMAT_STR GST_AUDIO_NE(S16)
static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE ("sink",
GST_PAD_SINK,
@@ -160,6 +183,7 @@ static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src",
#define DEFAULT_FRAMESIZE 20
#define DEFAULT_CBR TRUE
#define DEFAULT_CONSTRAINED_VBR TRUE
+#define DEFAULT_BITRATE_TYPE BITRATE_TYPE_CBR
#define DEFAULT_COMPLEXITY 10
#define DEFAULT_INBAND_FEC FALSE
#define DEFAULT_DTX FALSE
@@ -176,6 +200,7 @@ enum
PROP_FRAME_SIZE,
PROP_CBR,
PROP_CONSTRAINED_VBR,
+ PROP_BITRATE_TYPE,
PROP_COMPLEXITY,
PROP_INBAND_FEC,
PROP_DTX,
@@ -271,11 +296,17 @@ gst_opus_enc_class_init (GstOpusEncClass * klass)
g_param_spec_boolean ("cbr", "Constant bit rate", "Constant bit rate",
DEFAULT_CBR,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
- GST_PARAM_MUTABLE_PLAYING));
+ GST_PARAM_MUTABLE_PLAYING | G_PARAM_DEPRECATED));
g_object_class_install_property (gobject_class, PROP_CONSTRAINED_VBR,
g_param_spec_boolean ("constrained-vbr", "Constrained VBR",
"Constrained VBR", DEFAULT_CONSTRAINED_VBR,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
+ GST_PARAM_MUTABLE_PLAYING | G_PARAM_DEPRECATED));
+ g_object_class_install_property (gobject_class, PROP_BITRATE_TYPE,
+ g_param_spec_enum ("bitrate-type", "Bitrate type",
+ "Bitrate type", GST_OPUS_ENC_TYPE_BITRATE_TYPE,
+ DEFAULT_BITRATE_TYPE,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
GST_PARAM_MUTABLE_PLAYING));
g_object_class_install_property (gobject_class, PROP_COMPLEXITY,
g_param_spec_int ("complexity", "Complexity", "Complexity", 0, 10,
@@ -337,8 +368,7 @@ gst_opus_enc_init (GstOpusEnc * enc)
enc->bitrate = DEFAULT_BITRATE;
enc->bandwidth = DEFAULT_BANDWIDTH;
enc->frame_size = DEFAULT_FRAMESIZE;
- enc->cbr = DEFAULT_CBR;
- enc->constrained_vbr = DEFAULT_CONSTRAINED_VBR;
+ enc->bitrate_type = DEFAULT_BITRATE_TYPE;
enc->complexity = DEFAULT_COMPLEXITY;
enc->inband_fec = DEFAULT_INBAND_FEC;
enc->dtx = DEFAULT_DTX;
@@ -695,9 +725,11 @@ gst_opus_enc_setup (GstOpusEnc * enc)
opus_multistream_encoder_ctl (enc->state, OPUS_SET_BITRATE (enc->bitrate), 0);
opus_multistream_encoder_ctl (enc->state, OPUS_SET_BANDWIDTH (enc->bandwidth),
0);
- opus_multistream_encoder_ctl (enc->state, OPUS_SET_VBR (!enc->cbr), 0);
opus_multistream_encoder_ctl (enc->state,
- OPUS_SET_VBR_CONSTRAINT (enc->constrained_vbr), 0);
+ OPUS_SET_VBR (enc->bitrate_type != BITRATE_TYPE_CBR), 0);
+ opus_multistream_encoder_ctl (enc->state,
+ OPUS_SET_VBR_CONSTRAINT (enc->bitrate_type ==
+ BITRATE_TYPE_CONSTRAINED_VBR), 0);
opus_multistream_encoder_ctl (enc->state,
OPUS_SET_COMPLEXITY (enc->complexity), 0);
opus_multistream_encoder_ctl (enc->state,
@@ -997,10 +1029,16 @@ gst_opus_enc_get_property (GObject * object, guint prop_id, GValue * value,
g_value_set_enum (value, enc->frame_size);
break;
case PROP_CBR:
- g_value_set_boolean (value, enc->cbr);
+ g_warning ("cbr property is deprecated; use bitrate-type instead");
+ g_value_set_boolean (value, enc->bitrate_type == BITRATE_TYPE_CBR);
break;
case PROP_CONSTRAINED_VBR:
- g_value_set_boolean (value, enc->constrained_vbr);
+ g_warning
+ ("constrained-vbr property is deprecated; use bitrate-type instead");
+ g_value_set_boolean (value,
+ enc->bitrate_type == BITRATE_TYPE_CONSTRAINED_VBR);
+ case PROP_BITRATE_TYPE:
+ g_value_set_enum (value, enc->bitrate_type);
break;
case PROP_COMPLEXITY:
g_value_set_int (value, enc->complexity);
@@ -1065,15 +1103,40 @@ gst_opus_enc_set_property (GObject * object, guint prop_id,
g_mutex_unlock (&enc->property_lock);
break;
case PROP_CBR:
- /* this one has an opposite meaning to the opus ctl... */
+ g_warning ("cbr property is deprecated; use bitrate-type instead");
g_mutex_lock (&enc->property_lock);
- enc->cbr = g_value_get_boolean (value);
- if (enc->state)
- opus_multistream_encoder_ctl (enc->state, OPUS_SET_VBR (!enc->cbr));
+ enc->bitrate_type = BITRATE_TYPE_CBR;
+ if (enc->state) {
+ opus_multistream_encoder_ctl (enc->state, OPUS_SET_VBR (FALSE));
+ opus_multistream_encoder_ctl (enc->state,
+ OPUS_SET_VBR_CONSTRAINT (FALSE), 0);
+ }
g_mutex_unlock (&enc->property_lock);
break;
case PROP_CONSTRAINED_VBR:
- GST_OPUS_UPDATE_PROPERTY (constrained_vbr, boolean, VBR_CONSTRAINT);
+ g_warning
+ ("constrained-vbr property is deprecated; use bitrate-type instead");
+ g_mutex_lock (&enc->property_lock);
+ enc->bitrate_type = BITRATE_TYPE_CONSTRAINED_VBR;
+ if (enc->state) {
+ opus_multistream_encoder_ctl (enc->state, OPUS_SET_VBR (TRUE));
+ opus_multistream_encoder_ctl (enc->state,
+ OPUS_SET_VBR_CONSTRAINT (TRUE), 0);
+ }
+ g_mutex_unlock (&enc->property_lock);
+ break;
+ case PROP_BITRATE_TYPE:
+ /* this one has an opposite meaning to the opus ctl... */
+ g_mutex_lock (&enc->property_lock);
+ enc->bitrate_type = g_value_get_enum (value);
+ if (enc->state) {
+ opus_multistream_encoder_ctl (enc->state,
+ OPUS_SET_VBR (enc->bitrate_type != BITRATE_TYPE_CBR));
+ opus_multistream_encoder_ctl (enc->state,
+ OPUS_SET_VBR_CONSTRAINT (enc->bitrate_type ==
+ BITRATE_TYPE_CONSTRAINED_VBR), 0);
+ }
+ g_mutex_unlock (&enc->property_lock);
break;
case PROP_COMPLEXITY:
GST_OPUS_UPDATE_PROPERTY (complexity, int, COMPLEXITY);
diff --git a/ext/opus/gstopusenc.h b/ext/opus/gstopusenc.h
index ef2d3f6b2..4ff9610d6 100644
--- a/ext/opus/gstopusenc.h
+++ b/ext/opus/gstopusenc.h
@@ -45,6 +45,13 @@ G_BEGIN_DECLS
#define MAX_FRAME_SIZE 2000*2
#define MAX_FRAME_BYTES 2000
+typedef enum
+{
+ BITRATE_TYPE_CBR,
+ BITRATE_TYPE_VBR,
+ BITRATE_TYPE_CONSTRAINED_VBR,
+} GstOpusEncBitrateType;
+
typedef struct _GstOpusEnc GstOpusEnc;
typedef struct _GstOpusEncClass GstOpusEncClass;
@@ -61,8 +68,7 @@ struct _GstOpusEnc {
gint bitrate;
gint bandwidth;
gint frame_size;
- gboolean cbr;
- gboolean constrained_vbr;
+ GstOpusEncBitrateType bitrate_type;
gint complexity;
gboolean inband_fec;
gboolean dtx;