mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-19 06:46:38 +00:00
sbc: Add bitpool capability.
This commit is contained in:
parent
f2441fe654
commit
a2152f6c12
4 changed files with 40 additions and 6 deletions
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue