diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/modules/bluetooth/sbc.c | 29 | 
1 files changed, 12 insertions, 17 deletions
diff --git a/src/modules/bluetooth/sbc.c b/src/modules/bluetooth/sbc.c index 12d37371..779be4bd 100644 --- a/src/modules/bluetooth/sbc.c +++ b/src/modules/bluetooth/sbc.c @@ -1004,7 +1004,7 @@ ssize_t sbc_decode(sbc_t *sbc, const void *input, size_t input_len,  		sbc->bitpool = priv->frame.bitpool;  		priv->frame.codesize = sbc_get_codesize(sbc); -		priv->frame.length = sbc_get_frame_length(sbc); +		priv->frame.length = framelen;  	}  	if (!output) @@ -1136,30 +1136,25 @@ void sbc_finish(sbc_t *sbc)  size_t sbc_get_frame_length(sbc_t *sbc)  {  	size_t ret; -	uint8_t subbands, channels, blocks, joint; +	uint8_t subbands, channels, blocks, joint, bitpool;  	struct sbc_priv *priv;  	priv = sbc->priv; -	if (!priv->init) { -		subbands = sbc->subbands ? 8 : 4; -		blocks = 4 + (sbc->blocks * 4); -		channels = sbc->mode == SBC_MODE_MONO ? 1 : 2; -		joint = sbc->mode == SBC_MODE_JOINT_STEREO ? 1 : 0; -	} else { -		subbands = priv->frame.subbands; -		blocks = priv->frame.blocks; -		channels = priv->frame.channels; -		joint = priv->frame.joint; -	} +	if (priv->init) +		return priv->frame.length; -	ret = 4 + (4 * subbands * channels) / 8; +	subbands = sbc->subbands ? 8 : 4; +	blocks = 4 + (sbc->blocks * 4); +	channels = sbc->mode == SBC_MODE_MONO ? 1 : 2; +	joint = sbc->mode == SBC_MODE_JOINT_STEREO ? 1 : 0; +	bitpool = sbc->bitpool; +	ret = 4 + (4 * subbands * channels) / 8;  	/* This term is not always evenly divide so we round it up */  	if (channels == 1) -		ret += ((blocks * channels * sbc->bitpool) + 7) / 8; +		ret += ((blocks * channels * bitpool) + 7) / 8;  	else -		ret += (((joint ? subbands : 0) + blocks * sbc->bitpool) + 7) -			/ 8; +		ret += (((joint ? subbands : 0) + blocks * bitpool) + 7) / 8;  	return ret;  }  | 
