sbc: Add bitpool capability.
authorLuiz Augusto von Dentz <luiz.dentz@openbossa.org>
Mon, 29 Oct 2007 15:02:26 +0000 (15:02 +0000)
committerTim-Philipp Müller <tim@centricular.net>
Wed, 27 Mar 2013 22:21:15 +0000 (22:21 +0000)
ext/sbc/gstsbcenc.c
ext/sbc/gstsbcparse.c
ext/sbc/gstsbcutil.c
ext/sbc/gstsbcutil.h

index c6f11553e60f55fdcd6c561b9070338c861f26c6..245cf4250fbabd4dda82f182530519d9783dbcb5 100644 (file)
@@ -33,6 +33,7 @@
 #define SBC_ENC_DEFAULT_MODE CFG_MODE_AUTO
 #define SBC_ENC_DEFAULT_BLOCKS 16
 #define SBC_ENC_DEFAULT_SUB_BANDS 8
+#define SBC_ENC_DEFAULT_BITPOOL 53
 #define SBC_ENC_DEFAULT_ALLOCATION CFG_ALLOCATION_AUTO
 
 GST_DEBUG_CATEGORY_STATIC (sbc_enc_debug);
@@ -112,7 +113,8 @@ GST_STATIC_PAD_TEMPLATE ("src", GST_PAD_SRC, GST_PAD_ALWAYS,
         "mode = (string) { mono, dual, stereo, joint }, "
         "blocks = (int) { 4, 8, 12, 16 }, "
         "subbands = (int) { 4, 8 }, "
-        "allocation = (string) { snr, loudness }"));
+        "allocation = (string) { snr, loudness },"
+        "bitpool = (int) [ 2, 64 ]"));
 
 
 static GstCaps *
@@ -147,6 +149,8 @@ sbc_enc_generate_srcpad_caps (GstSbcEnc * enc, GstCaps * caps)
   else
     enc->sbc.allocation = enc->allocation;
 
+  enc->sbc.bitpool = SBC_ENC_DEFAULT_BITPOOL;
+
   mode = gst_sbc_get_mode_string (enc->sbc.joint);
   allocation = gst_sbc_get_allocation_string (enc->sbc.allocation);
 
@@ -156,7 +160,8 @@ sbc_enc_generate_srcpad_caps (GstSbcEnc * enc, GstCaps * caps)
       "mode", G_TYPE_STRING, mode,
       "subbands", G_TYPE_INT, enc->sbc.subbands,
       "blocks", G_TYPE_INT, enc->sbc.blocks,
-      "allocation", G_TYPE_STRING, allocation, NULL);
+      "allocation", G_TYPE_STRING, allocation,
+      "bitpool", G_TYPE_INT, enc->sbc.bitpool, NULL);
 
   return src_caps;
 }
index 2bc85584b15b00b197f4bc86c0e4177d3395c760..c876958d81f6453d2026ca2df792072db7185f31 100644 (file)
@@ -53,9 +53,10 @@ GST_STATIC_PAD_TEMPLATE ("src", GST_PAD_SRC, GST_PAD_ALWAYS,
         "mode = (string) { mono, dual, stereo, joint }, "
         "blocks = (int) { 4, 8, 12, 16 }, "
         "subbands = (int) { 4, 8 }, "
-        "allocation = (string) { snr, loudness }"));
+        "allocation = (string) { snr, loudness },"
+        "bitpool = (int) [ 2, 64 ]"));
 
-/* reates a fixed caps from the caps given. */
+/* Creates a fixed caps from the caps given. */
 static GstCaps *
 sbc_parse_select_caps (GstSbcParse * parse, GstCaps * caps)
 {
@@ -63,7 +64,7 @@ sbc_parse_select_caps (GstSbcParse * parse, GstCaps * caps)
   GstStructure *structure;
   const GValue *value;
   gboolean error = FALSE;
-  gint temp, rate, channels, blocks, subbands;
+  gint temp, rate, channels, blocks, subbands, bitpool;
   const gchar *allocation = NULL;
   const gchar *mode = NULL;
   const gchar *error_message = NULL;
@@ -134,6 +135,20 @@ sbc_parse_select_caps (GstSbcParse * parse, GstCaps * caps)
     subbands = temp;
   }
 
+  if (!gst_structure_has_field (structure, "bitpool")) {
+    error = TRUE;
+    error_message = "no bitpool";
+    goto error;
+  } else {
+    value = gst_structure_get_value (structure, "bitpool");
+    if (GST_VALUE_HOLDS_INT_RANGE (value)) {
+      temp = gst_sbc_select_bitpool_from_range (value);
+    } else {
+      temp = g_value_get_int (value);
+    }
+    bitpool = temp;
+  }
+
   if (!gst_structure_has_field (structure, "allocation")) {
     error = TRUE;
     error_message = "no allocation.";
@@ -172,11 +187,13 @@ error:
       "mode", G_TYPE_STRING, mode,
       "blocks", G_TYPE_INT, blocks,
       "subbands", G_TYPE_INT, subbands,
-      "allocation", G_TYPE_STRING, allocation, NULL);
+      "allocation", G_TYPE_STRING, allocation,
+      "bitpool", G_TYPE_INT, bitpool, NULL);
   parse->sbc.rate = rate;
   parse->sbc.channels = channels;
   parse->sbc.blocks = blocks;
   parse->sbc.subbands = subbands;
+  parse->sbc.bitpool = bitpool;
   parse->sbc.joint = gst_sbc_get_mode_int (mode);
   parse->sbc.allocation = gst_sbc_get_allocation_mode_int (allocation);
 
index 170ef0d4639167ce5f1c515426af6564ea1809cf..63f20fce86c5872e8c4c22b3b9db16806b78ff60 100644 (file)
@@ -112,6 +112,16 @@ gst_sbc_select_subbands_from_range (const GValue * value)
   return gst_value_get_int_range_max (value);
 }
 
+/*
+ * Selects one bitpool option from a range
+ * TODO - use a better approach to this (it is selecting the maximum value)
+ */
+gint
+gst_sbc_select_bitpool_from_range (const GValue * value)
+{
+  return gst_value_get_int_range_max (value);
+}
+
 /*
  * Selects one allocation mode from the ones on the list
  * TODO - use a better approach
index 70169a7436ad9a0a91ce4819040720d7a2567997..98f202f03b334e17342ea730f7c16f8126216226 100644 (file)
@@ -35,6 +35,8 @@ gint gst_sbc_select_blocks_from_range(const GValue *value);
 gint gst_sbc_select_subbands_from_list(const GValue *value);
 gint gst_sbc_select_subbands_from_range(const GValue *value);
 
+gint gst_sbc_select_bitpool_from_range(const GValue *value);
+
 const gchar *gst_sbc_get_allocation_from_list(const GValue *value);
 gint gst_sbc_get_allocation_mode_int(const gchar *allocation);
 const gchar *gst_sbc_get_allocation_string(int alloc);