15738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 25738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 35738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Copyright (C) 2004-2012 Broadcom Corporation 45738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 55738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 65738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * you may not use this file except in compliance with the License. 75738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * You may obtain a copy of the License at: 85738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 95738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * See the License for the specific language governing permissions and 155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * limitations under the License. 165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ******************************************************************************/ 185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/****************************************************************************** 205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * This module contains utility functions for dealing with SBC data frames 225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * and codec capabilities. 235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project * 245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ******************************************************************************/ 255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "a2d_api.h" 275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "a2d_sbc.h" 285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bta_av_sbc.h" 295cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen#include "utl.h" 305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef int (tBTA_AV_SBC_ACT)(void *p_src, void *p_dst, 325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32 src_samples, UINT32 dst_samples, 335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32 *p_ret); 345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef struct 365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project INT32 cur_pos; /* current position */ 385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32 src_sps; /* samples per second (source audio data) */ 395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32 dst_sps; /* samples per second (converted audio data) */ 405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tBTA_AV_SBC_ACT *p_act; /* the action function to do the conversion */ 415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 bits; /* number of bits per pcm sample */ 425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT16 n_channels; /* number of channels (i.e. mono(1), stereo(2)...) */ 435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project INT16 worker1; 445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project INT16 worker2; 455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 div; 465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} tBTA_AV_SBC_UPS_CB; 475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjecttBTA_AV_SBC_UPS_CB bta_av_sbc_ups_cb; 495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_av_sbc_init_up_sample 535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description initialize the up sample 555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** src_sps: samples per second (source audio data) 575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** dst_sps: samples per second (converted audio data) 585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** bits: number of bits per pcm sample 595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** n_channels: number of channels (i.e. mono(1), stereo(2)...) 605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns none 625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_av_sbc_init_up_sample (UINT32 src_sps, UINT32 dst_sps, UINT16 bits, UINT16 n_channels) 655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_av_sbc_ups_cb.cur_pos = -1; 675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_av_sbc_ups_cb.src_sps = src_sps; 685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_av_sbc_ups_cb.dst_sps = dst_sps; 695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_av_sbc_ups_cb.bits = bits; 705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_av_sbc_ups_cb.n_channels= n_channels; 715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(n_channels == 1) 735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* mono */ 755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(bits == 8) 765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_av_sbc_ups_cb.p_act = bta_av_sbc_up_sample_8m; 785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_av_sbc_ups_cb.div = 1; 795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_av_sbc_ups_cb.p_act = bta_av_sbc_up_sample_16m; 835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_av_sbc_ups_cb.div = 2; 845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* stereo */ 895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(bits == 8) 905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_av_sbc_ups_cb.p_act = bta_av_sbc_up_sample_8s; 925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_av_sbc_ups_cb.div = 2; 935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_av_sbc_ups_cb.p_act = bta_av_sbc_up_sample_16s; 975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_av_sbc_ups_cb.div = 4; 985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 1035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_av_sbc_up_sample 1055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Given the source (p_src) audio data and 1075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** source speed (src_sps, samples per second), 1085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** This function converts it to audio data in the desired format 1095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** p_src: the data buffer that holds the source audio data 1115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** p_dst: the data buffer to hold the converted audio data 1125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** src_samples: The number of source samples (number of bytes) 1135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** dst_samples: The size of p_dst (number of bytes) 1145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Note: An AE reported an issue with this function. 1165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** When called with bta_av_sbc_up_sample(src, uint8_array_dst..) 1175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** the byte before uint8_array_dst may get overwritten. 1185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Using uint16_array_dst avoids the problem. 1195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** This issue is related to endian-ness and is hard to resolve 1205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** in a generic manner. 1215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** **************** Please use uint16 array as dst. 1225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns The number of bytes used in p_dst 1245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** The number of bytes used in p_src (in *p_ret) 1255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 1275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectint bta_av_sbc_up_sample (void *p_src, void *p_dst, 1285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32 src_samples, UINT32 dst_samples, 1295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32 *p_ret) 1305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32 src; 1325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32 dst; 1335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if(bta_av_sbc_ups_cb.p_act) 1355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project src = src_samples/bta_av_sbc_ups_cb.div; 1375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project dst = dst_samples/bta_av_sbc_ups_cb.div; 1385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return (*bta_av_sbc_ups_cb.p_act)(p_src, p_dst, src, dst, p_ret); 1395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 1415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p_ret = 0; 1435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return 0; 1445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 1465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 1485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_av_sbc_up_sample_16s (16bits-stereo) 1505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Given the source (p_src) audio data and 1525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** source speed (src_sps, samples per second), 1535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** This function converts it to audio data in the desired format 1545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** p_src: the data buffer that holds the source audio data 1565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** p_dst: the data buffer to hold the converted audio data 1575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** src_samples: The number of source samples (in uint of 4 bytes) 1585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** dst_samples: The size of p_dst (in uint of 4 bytes) 1595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns The number of bytes used in p_dst 1615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** The number of bytes used in p_src (in *p_ret) 1625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 1635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 1645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectint bta_av_sbc_up_sample_16s (void *p_src, void *p_dst, 1655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32 src_samples, UINT32 dst_samples, 1665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32 *p_ret) 1675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 1685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project INT16 *p_src_tmp = (INT16 *)p_src; 1695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project INT16 *p_dst_tmp = (INT16 *)p_dst; 1705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project INT16 *p_worker1 = &bta_av_sbc_ups_cb.worker1; 1715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project INT16 *p_worker2 = &bta_av_sbc_ups_cb.worker2; 1725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32 src_sps = bta_av_sbc_ups_cb.src_sps; 1735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32 dst_sps = bta_av_sbc_ups_cb.dst_sps; 1745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project while (bta_av_sbc_ups_cb.cur_pos > 0 && dst_samples) 1765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p_dst_tmp++ = *p_worker1; 1785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p_dst_tmp++ = *p_worker2; 1795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_av_sbc_ups_cb.cur_pos -= src_sps; 1815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project dst_samples--; 1825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 1835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_av_sbc_ups_cb.cur_pos = dst_sps; 1855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project while (src_samples-- && dst_samples) 1875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p_worker1 = *p_src_tmp++; 1895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p_worker2 = *p_src_tmp++; 1905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project do 1925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 1935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p_dst_tmp++ = *p_worker1; 1945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p_dst_tmp++ = *p_worker2; 1955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 1965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_av_sbc_ups_cb.cur_pos -= src_sps; 1975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project dst_samples--; 1985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } while (bta_av_sbc_ups_cb.cur_pos > 0 && dst_samples); 1995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_av_sbc_ups_cb.cur_pos += dst_sps; 2015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 2025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bta_av_sbc_ups_cb.cur_pos == (INT32)dst_sps) 2045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_av_sbc_ups_cb.cur_pos = 0; 2055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p_ret = ((char *)p_src_tmp - (char *)p_src); 2075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return ((char *)p_dst_tmp - (char *)p_dst); 2085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 2115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_av_sbc_up_sample_16m (16bits-mono) 2135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Given the source (p_src) audio data and 2155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** source speed (src_sps, samples per second), 2165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** This function converts it to audio data in the desired format 2175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** p_src: the data buffer that holds the source audio data 2195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** p_dst: the data buffer to hold the converted audio data 2205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** src_samples: The number of source samples (in uint of 2 bytes) 2215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** dst_samples: The size of p_dst (in uint of 2 bytes) 2225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns The number of bytes used in p_dst 2245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** The number of bytes used in p_src (in *p_ret) 2255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 2275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectint bta_av_sbc_up_sample_16m (void *p_src, void *p_dst, 2285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32 src_samples, UINT32 dst_samples, 2295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32 *p_ret) 2305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 2315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project INT16 *p_src_tmp = (INT16 *)p_src; 2325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project INT16 *p_dst_tmp = (INT16 *)p_dst; 2335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project INT16 *p_worker = &bta_av_sbc_ups_cb.worker1; 2345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32 src_sps = bta_av_sbc_ups_cb.src_sps; 2355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32 dst_sps = bta_av_sbc_ups_cb.dst_sps; 2365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project while (bta_av_sbc_ups_cb.cur_pos > 0 && dst_samples) 2385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p_dst_tmp++ = *p_worker; 2405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p_dst_tmp++ = *p_worker; 2415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_av_sbc_ups_cb.cur_pos -= src_sps; 2435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project dst_samples--; 2445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project dst_samples--; 2455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 2465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_av_sbc_ups_cb.cur_pos = dst_sps; 2495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project while (src_samples-- && dst_samples) 2515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p_worker = *p_src_tmp++; 2535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project do 2555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 2565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p_dst_tmp++ = *p_worker; 2575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p_dst_tmp++ = *p_worker; 2585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_av_sbc_ups_cb.cur_pos -= src_sps; 2605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project dst_samples--; 2615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project dst_samples--; 2625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } while (bta_av_sbc_ups_cb.cur_pos > 0 && dst_samples); 2645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_av_sbc_ups_cb.cur_pos += dst_sps; 2665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 2675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bta_av_sbc_ups_cb.cur_pos == (INT32)dst_sps) 2695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_av_sbc_ups_cb.cur_pos = 0; 2705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p_ret = ((char *)p_src_tmp - (char *)p_src); 2725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return ((char *)p_dst_tmp - (char *)p_dst); 2735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 2745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 2755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 2765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_av_sbc_up_sample_8s (8bits-stereo) 2785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Given the source (p_src) audio data and 2805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** source speed (src_sps, samples per second), 2815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** This function converts it to audio data in the desired format 2825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** p_src: the data buffer that holds the source audio data 2845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** p_dst: the data buffer to hold the converted audio data 2855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** src_samples: The number of source samples (in uint of 2 bytes) 2865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** dst_samples: The size of p_dst (in uint of 2 bytes) 2875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns The number of bytes used in p_dst 2895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** The number of bytes used in p_src (in *p_ret) 2905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 2915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 2925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectint bta_av_sbc_up_sample_8s (void *p_src, void *p_dst, 2935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32 src_samples, UINT32 dst_samples, 2945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32 *p_ret) 2955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 2965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *p_src_tmp = (UINT8 *)p_src; 2975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project INT16 *p_dst_tmp = (INT16 *)p_dst; 2985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project INT16 *p_worker1 = &bta_av_sbc_ups_cb.worker1; 2995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project INT16 *p_worker2 = &bta_av_sbc_ups_cb.worker2; 3005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32 src_sps = bta_av_sbc_ups_cb.src_sps; 3015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32 dst_sps = bta_av_sbc_ups_cb.dst_sps; 3025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project while (bta_av_sbc_ups_cb.cur_pos > 0 && dst_samples) 3045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p_dst_tmp++ = *p_worker1; 3065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p_dst_tmp++ = *p_worker2; 3075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_av_sbc_ups_cb.cur_pos -= src_sps; 3095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project dst_samples--; 3105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project dst_samples--; 3115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_av_sbc_ups_cb.cur_pos = dst_sps; 3145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project while (src_samples -- && dst_samples) 3165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p_worker1 = *(UINT8 *)p_src_tmp++; 3185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p_worker1 -= 0x80; 3195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p_worker1 <<= 8; 3205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p_worker2 = *(UINT8 *)p_src_tmp++; 3215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p_worker2 -= 0x80; 3225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p_worker2 <<= 8; 3235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project do 3255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p_dst_tmp++ = *p_worker1; 3275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p_dst_tmp++ = *p_worker2; 3285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_av_sbc_ups_cb.cur_pos -= src_sps; 3305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project dst_samples--; 3315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project dst_samples--; 3325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } while (bta_av_sbc_ups_cb.cur_pos > 0 && dst_samples); 3335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_av_sbc_ups_cb.cur_pos += dst_sps; 3355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bta_av_sbc_ups_cb.cur_pos == (INT32)dst_sps) 3385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_av_sbc_ups_cb.cur_pos = 0; 3395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p_ret = ((char *)p_src_tmp - (char *)p_src); 3415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return ((char *)p_dst_tmp - (char *)p_dst); 3425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 3435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 3455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_av_sbc_up_sample_8m (8bits-mono) 3475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Given the source (p_src) audio data and 3495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** source speed (src_sps, samples per second), 3505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** This function converts it to audio data in the desired format 3515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** p_src: the data buffer that holds the source audio data 3535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** p_dst: the data buffer to hold the converted audio data 3545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** src_samples: The number of source samples (number of bytes) 3555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** dst_samples: The size of p_dst (number of bytes) 3565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns The number of bytes used in p_dst 3585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** The number of bytes used in p_src (in *p_ret) 3595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 3605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 3615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectint bta_av_sbc_up_sample_8m (void *p_src, void *p_dst, 3625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32 src_samples, UINT32 dst_samples, 3635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32 *p_ret) 3645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 3655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *p_src_tmp = (UINT8 *)p_src; 3665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project INT16 *p_dst_tmp = (INT16 *)p_dst; 3675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project INT16 *p_worker = &bta_av_sbc_ups_cb.worker1; 3685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32 src_sps = bta_av_sbc_ups_cb.src_sps; 3695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT32 dst_sps = bta_av_sbc_ups_cb.dst_sps; 3705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project while (bta_av_sbc_ups_cb.cur_pos > 0 && dst_samples) 3725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p_dst_tmp++ = *p_worker; 3745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p_dst_tmp++ = *p_worker; 3755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_av_sbc_ups_cb.cur_pos -= src_sps; 3775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project dst_samples -= 4; 3785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 3795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_av_sbc_ups_cb.cur_pos = dst_sps; 3825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project while (src_samples-- && dst_samples) 3845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p_worker = *(UINT8 *)p_src_tmp++; 3865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p_worker -= 0x80; 3875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p_worker <<= 8; 3885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project do 3905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 3915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p_dst_tmp++ = *p_worker; 3925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p_dst_tmp++ = *p_worker; 3935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_av_sbc_ups_cb.cur_pos -= src_sps; 3955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project dst_samples -= 4; 3965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } while (bta_av_sbc_ups_cb.cur_pos > 0 && dst_samples); 3985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 3995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_av_sbc_ups_cb.cur_pos += dst_sps; 4005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (bta_av_sbc_ups_cb.cur_pos == (INT32)dst_sps) 4035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project bta_av_sbc_ups_cb.cur_pos = 0; 4045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *p_ret = ((char *)p_src_tmp - (char *)p_src); 4065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return ((char *)p_dst_tmp - (char *)p_dst); 4075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 4085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 4105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_av_sbc_cfg_for_cap 4125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description Determine the preferred SBC codec configuration for the 4145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** given codec capabilities. The function is passed the 4155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** preferred codec configuration and the peer codec 4165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** capabilities for the stream. The function attempts to 4175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** match the preferred capabilities with the configuration 4185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** as best it can. The resulting codec configuration is 4195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** returned in the same memory used for the capabilities. 4205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns 0 if ok, nonzero if error. 4225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Codec configuration in p_cap. 4235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 4245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 4255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectUINT8 bta_av_sbc_cfg_for_cap(UINT8 *p_peer, tA2D_SBC_CIE *p_cap, tA2D_SBC_CIE *p_pref) 4265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 4275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 status = A2D_SUCCESS; 4285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tA2D_SBC_CIE peer_cie; 4295cd8bff2dd0337cb52bf48f312e3d2d55a8882fbMike J. Chen UNUSED(p_cap); 4305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* parse peer capabilities */ 4325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((status = A2D_ParsSbcInfo(&peer_cie, p_peer, TRUE)) != 0) 4335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 4345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return status; 4355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Check if the peer supports our channel mode */ 4385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (peer_cie.ch_mode & p_pref->ch_mode) 4395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 4405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project peer_cie.ch_mode = p_pref->ch_mode; 4415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 4435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 444e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_ERROR("bta_av_sbc_cfg_for_cap: ch_mode(0x%02X) not supported", p_pref->ch_mode); 4455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return A2D_FAIL; 4465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Check if the peer supports our sampling freq */ 4495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (peer_cie.samp_freq & p_pref->samp_freq) 4505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 4515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project peer_cie.samp_freq = p_pref->samp_freq; 4525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 4545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 455e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_ERROR("bta_av_sbc_cfg_for_cap: samp_freq(0x%02X) not supported", p_pref->samp_freq); 4565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return A2D_FAIL; 4575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Check if the peer supports our block len */ 4605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (peer_cie.block_len & p_pref->block_len) 4615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 4625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project peer_cie.block_len = p_pref->block_len; 4635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 4655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 466e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_ERROR("bta_av_sbc_cfg_for_cap: block_len(0x%02X) not supported", p_pref->block_len); 4675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return A2D_FAIL; 4685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Check if the peer supports our num subbands */ 4715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (peer_cie.num_subbands & p_pref->num_subbands) 4725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 4735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project peer_cie.num_subbands = p_pref->num_subbands; 4745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 4765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 477e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_ERROR("bta_av_sbc_cfg_for_cap: num_subbands(0x%02X) not supported", p_pref->num_subbands); 4785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return A2D_FAIL; 4795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* Check if the peer supports our alloc method */ 4825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (peer_cie.alloc_mthd & p_pref->alloc_mthd) 4835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 4845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project peer_cie.alloc_mthd = p_pref->alloc_mthd; 4855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else 4875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 488e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_ERROR("bta_av_sbc_cfg_for_cap: alloc_mthd(0x%02X) not supported", p_pref->alloc_mthd); 4895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return A2D_FAIL; 4905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* max bitpool */ 4935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_pref->max_bitpool != 0 && p_pref->max_bitpool < peer_cie.max_bitpool) 4945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 4955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project peer_cie.max_bitpool = p_pref->max_bitpool; 4965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 4975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 4985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* min bitpool */ 4995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (p_pref->min_bitpool != 0 && p_pref->min_bitpool > peer_cie.min_bitpool) 5005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project peer_cie.min_bitpool = p_pref->min_bitpool; 5025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if (status == A2D_SUCCESS) 5055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 5065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* build configuration */ 5075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project A2D_BldSbcInfo(A2D_MEDIA_TYPE_AUDIO, &peer_cie, p_peer); 5085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 5095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return status; 5105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 5115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 5135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 514cc35559160745c60b42ae182002a59337d844d09Hemant Gupta** Function bta_av_sbc_cfg_matches_cap 515cc35559160745c60b42ae182002a59337d844d09Hemant Gupta** 516cc35559160745c60b42ae182002a59337d844d09Hemant Gupta** Description This function checks whether an SBC codec configuration 517cc35559160745c60b42ae182002a59337d844d09Hemant Gupta** matched with capabilities. Here we check subset. 518cc35559160745c60b42ae182002a59337d844d09Hemant Gupta** 519cc35559160745c60b42ae182002a59337d844d09Hemant Gupta** Returns 0 if ok, nonzero if error. 520cc35559160745c60b42ae182002a59337d844d09Hemant Gupta** 521cc35559160745c60b42ae182002a59337d844d09Hemant Gupta*******************************************************************************/ 522cc35559160745c60b42ae182002a59337d844d09Hemant GuptaUINT8 bta_av_sbc_cfg_matches_cap(UINT8 *p_cfg, tA2D_SBC_CIE *p_cap) 523cc35559160745c60b42ae182002a59337d844d09Hemant Gupta{ 524cc35559160745c60b42ae182002a59337d844d09Hemant Gupta UINT8 status = 0; 525cc35559160745c60b42ae182002a59337d844d09Hemant Gupta tA2D_SBC_CIE cfg_cie; 526cc35559160745c60b42ae182002a59337d844d09Hemant Gupta 527cc35559160745c60b42ae182002a59337d844d09Hemant Gupta /* parse configuration */ 528cc35559160745c60b42ae182002a59337d844d09Hemant Gupta if ((status = A2D_ParsSbcInfo(&cfg_cie, p_cfg, TRUE)) != 0) 529cc35559160745c60b42ae182002a59337d844d09Hemant Gupta { 530e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_ERROR(" bta_av_sbc_cfg_matches_cap Parsing Failed %d", status); 531cc35559160745c60b42ae182002a59337d844d09Hemant Gupta return status; 532cc35559160745c60b42ae182002a59337d844d09Hemant Gupta } 533cc35559160745c60b42ae182002a59337d844d09Hemant Gupta 534cc35559160745c60b42ae182002a59337d844d09Hemant Gupta /* verify that each parameter is in range */ 535cc35559160745c60b42ae182002a59337d844d09Hemant Gupta 536e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG(" FREQ peer: 0%x, capability 0%x", cfg_cie.samp_freq, p_cap->samp_freq); 537e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG(" CH_MODE peer: 0%x, capability 0%x", cfg_cie.ch_mode, p_cap->ch_mode); 538e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG(" BLOCK_LEN peer: 0%x, capability 0%x", cfg_cie.block_len, p_cap->block_len); 539e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG(" SUB_BAND peer: 0%x, capability 0%x", cfg_cie.num_subbands, p_cap->num_subbands); 540e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG(" ALLOC_MTHD peer: 0%x, capability 0%x", cfg_cie.alloc_mthd, p_cap->alloc_mthd); 541e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG(" MAX_BitPool peer: 0%x, capability 0%x", cfg_cie.max_bitpool, p_cap->max_bitpool); 542e8c3d75b75493911ebf0f99c83676359657178f7Sharvil Nanavati APPL_TRACE_DEBUG(" Min_bitpool peer: 0%x, capability 0%x", cfg_cie.min_bitpool, p_cap->min_bitpool); 543cc35559160745c60b42ae182002a59337d844d09Hemant Gupta 544cc35559160745c60b42ae182002a59337d844d09Hemant Gupta /* sampling frequency */ 545cc35559160745c60b42ae182002a59337d844d09Hemant Gupta if ((cfg_cie.samp_freq & p_cap->samp_freq) == 0) 546cc35559160745c60b42ae182002a59337d844d09Hemant Gupta { 547cc35559160745c60b42ae182002a59337d844d09Hemant Gupta status = A2D_NS_SAMP_FREQ; 548cc35559160745c60b42ae182002a59337d844d09Hemant Gupta } 549cc35559160745c60b42ae182002a59337d844d09Hemant Gupta /* channel mode */ 550cc35559160745c60b42ae182002a59337d844d09Hemant Gupta else if ((cfg_cie.ch_mode & p_cap->ch_mode) == 0) 551cc35559160745c60b42ae182002a59337d844d09Hemant Gupta { 552cc35559160745c60b42ae182002a59337d844d09Hemant Gupta status = A2D_NS_CH_MODE; 553cc35559160745c60b42ae182002a59337d844d09Hemant Gupta } 554cc35559160745c60b42ae182002a59337d844d09Hemant Gupta /* block length */ 555cc35559160745c60b42ae182002a59337d844d09Hemant Gupta else if ((cfg_cie.block_len & p_cap->block_len) == 0) 556cc35559160745c60b42ae182002a59337d844d09Hemant Gupta { 557cc35559160745c60b42ae182002a59337d844d09Hemant Gupta status = A2D_BAD_BLOCK_LEN; 558cc35559160745c60b42ae182002a59337d844d09Hemant Gupta } 559cc35559160745c60b42ae182002a59337d844d09Hemant Gupta /* subbands */ 560cc35559160745c60b42ae182002a59337d844d09Hemant Gupta else if ((cfg_cie.num_subbands & p_cap->num_subbands) == 0) 561cc35559160745c60b42ae182002a59337d844d09Hemant Gupta { 562cc35559160745c60b42ae182002a59337d844d09Hemant Gupta status = A2D_NS_SUBBANDS; 563cc35559160745c60b42ae182002a59337d844d09Hemant Gupta } 564cc35559160745c60b42ae182002a59337d844d09Hemant Gupta /* allocation method */ 565cc35559160745c60b42ae182002a59337d844d09Hemant Gupta else if ((cfg_cie.alloc_mthd & p_cap->alloc_mthd) == 0) 566cc35559160745c60b42ae182002a59337d844d09Hemant Gupta { 567cc35559160745c60b42ae182002a59337d844d09Hemant Gupta status = A2D_NS_ALLOC_MTHD; 568cc35559160745c60b42ae182002a59337d844d09Hemant Gupta } 569cc35559160745c60b42ae182002a59337d844d09Hemant Gupta /* max bitpool */ 570cc35559160745c60b42ae182002a59337d844d09Hemant Gupta else if (cfg_cie.max_bitpool > p_cap->max_bitpool) 571cc35559160745c60b42ae182002a59337d844d09Hemant Gupta { 572cc35559160745c60b42ae182002a59337d844d09Hemant Gupta status = A2D_NS_MAX_BITPOOL; 573cc35559160745c60b42ae182002a59337d844d09Hemant Gupta } 574cc35559160745c60b42ae182002a59337d844d09Hemant Gupta /* min bitpool */ 575cc35559160745c60b42ae182002a59337d844d09Hemant Gupta else if (cfg_cie.min_bitpool < p_cap->min_bitpool) 576cc35559160745c60b42ae182002a59337d844d09Hemant Gupta { 577cc35559160745c60b42ae182002a59337d844d09Hemant Gupta status = A2D_NS_MIN_BITPOOL; 578cc35559160745c60b42ae182002a59337d844d09Hemant Gupta } 579cc35559160745c60b42ae182002a59337d844d09Hemant Gupta 580cc35559160745c60b42ae182002a59337d844d09Hemant Gupta return status; 581cc35559160745c60b42ae182002a59337d844d09Hemant Gupta} 582cc35559160745c60b42ae182002a59337d844d09Hemant Gupta 583cc35559160745c60b42ae182002a59337d844d09Hemant Gupta 584cc35559160745c60b42ae182002a59337d844d09Hemant Gupta/******************************************************************************* 585cc35559160745c60b42ae182002a59337d844d09Hemant Gupta** 5865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_av_sbc_cfg_in_cap 5875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function checks whether an SBC codec configuration 5895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** is allowable for the given codec capabilities. 5905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns 0 if ok, nonzero if error. 5925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 5935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 5945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectUINT8 bta_av_sbc_cfg_in_cap(UINT8 *p_cfg, tA2D_SBC_CIE *p_cap) 5955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 5965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 status = 0; 5975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project tA2D_SBC_CIE cfg_cie; 5985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 5995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* parse configuration */ 6005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((status = A2D_ParsSbcInfo(&cfg_cie, p_cfg, FALSE)) != 0) 6015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return status; 6035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* verify that each parameter is in range */ 6065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 607cc35559160745c60b42ae182002a59337d844d09Hemant Gupta 6085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* sampling frequency */ 6095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project if ((cfg_cie.samp_freq & p_cap->samp_freq) == 0) 6105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status = A2D_NS_SAMP_FREQ; 6125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* channel mode */ 6145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else if ((cfg_cie.ch_mode & p_cap->ch_mode) == 0) 6155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status = A2D_NS_CH_MODE; 6175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* block length */ 6195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else if ((cfg_cie.block_len & p_cap->block_len) == 0) 6205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status = A2D_BAD_BLOCK_LEN; 6225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* subbands */ 6245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else if ((cfg_cie.num_subbands & p_cap->num_subbands) == 0) 6255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status = A2D_NS_SUBBANDS; 6275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* allocation method */ 6295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else if ((cfg_cie.alloc_mthd & p_cap->alloc_mthd) == 0) 6305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status = A2D_NS_ALLOC_MTHD; 6325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* max bitpool */ 6345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else if (cfg_cie.max_bitpool > p_cap->max_bitpool) 6355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status = A2D_NS_MAX_BITPOOL; 6375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project /* min bitpool */ 6395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project else if (cfg_cie.min_bitpool < p_cap->min_bitpool) 6405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project { 6415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project status = A2D_NS_MIN_BITPOOL; 6425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project } 6435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project return status; 6455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************* 6485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function bta_av_sbc_bld_hdr 6505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description This function builds the packet header for MPF1. 6525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns void 6545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** 6555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/ 6565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectvoid bta_av_sbc_bld_hdr(BT_HDR *p_buf, UINT16 fr_per_pkt) 6575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{ 6585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project UINT8 *p; 6595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 6605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_buf->offset -= BTA_AV_SBC_HDR_SIZE; 6615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p = (UINT8 *) (p_buf + 1) + p_buf->offset; 6625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project p_buf->len += BTA_AV_SBC_HDR_SIZE; 6635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project A2D_BldSbcMplHdr(p, FALSE, FALSE, FALSE, (UINT8) fr_per_pkt); 6645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} 6655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project 666