return 0;
}
-SBC_EXPORT int sbc_init_a2dp(sbc_t *sbc, unsigned long flags,
+static int sbc_set_a2dp(sbc_t *sbc, unsigned long flags,
const void *conf, size_t conf_len)
{
const struct a2dp_sbc *a2dp;
- int err;
if (conf_len != sizeof(*a2dp))
return -EINVAL;
- err = sbc_init(sbc, flags);
- if (err < 0)
- return err;
-
a2dp = conf;
switch (a2dp->frequency) {
sbc->frequency = SBC_FREQ_48000;
break;
default:
- goto failed;
+ return -EINVAL;
}
switch (a2dp->channel_mode) {
sbc->mode = SBC_MODE_JOINT_STEREO;
break;
default:
- goto failed;
+ return -EINVAL;
}
switch (a2dp->allocation_method) {
sbc->allocation = SBC_AM_LOUDNESS;
break;
default:
- goto failed;
+ return -EINVAL;
}
switch (a2dp->subbands) {
sbc->subbands = SBC_SB_8;
break;
default:
- goto failed;
+ return -EINVAL;
}
switch (a2dp->block_length) {
sbc->blocks = SBC_BLK_16;
break;
default:
- goto failed;
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
+SBC_EXPORT int sbc_init_a2dp(sbc_t *sbc, unsigned long flags,
+ const void *conf, size_t conf_len)
+{
+ int err;
+
+ err = sbc_init(sbc, flags);
+ if (err < 0)
+ return err;
+
+ err = sbc_set_a2dp(sbc, flags, conf, conf_len);
+ if (err < 0) {
+ sbc_finish(sbc);
+ return err;
}
return 0;
+}
+
+int sbc_reinit_a2dp(sbc_t *sbc, unsigned long flags,
+ const void *conf, size_t conf_len)
+{
+ int err;
+
+ err = sbc_reinit(sbc, flags);
+ if (err < 0)
+ return err;
-failed:
- sbc_finish(sbc);
- return -EINVAL;
+ return sbc_set_a2dp(sbc, flags, conf, conf_len);
}
SBC_EXPORT ssize_t sbc_parse(sbc_t *sbc, const void *input, size_t input_len)
int sbc_init_msbc(sbc_t *sbc, unsigned long flags);
int sbc_init_a2dp(sbc_t *sbc, unsigned long flags,
const void *conf, size_t conf_len);
+int sbc_reinit_a2dp(sbc_t *sbc, unsigned long flags,
+ const void *conf, size_t conf_len);
ssize_t sbc_parse(sbc_t *sbc, const void *input, size_t input_len);