15738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************
25738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
35738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  Copyright (C) 1999-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 file contains constants and structures used by Encoder.
225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ******************************************************************************/
245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifndef SBC_ENCODER_H
265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SBC_ENCODER_H
275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define ENCODER_VERSION "0025"
295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifdef BUILDCFG
315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    #include "bt_target.h"
325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*DEFINES*/
355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifndef FALSE
365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define FALSE 0
375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifndef TRUE
405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define TRUE (!FALSE)
415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SBC_MAX_NUM_OF_SUBBANDS 8
445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SBC_MAX_NUM_OF_CHANNELS 2
455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SBC_MAX_NUM_OF_BLOCKS   16
465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SBC_LOUDNESS    0
485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SBC_SNR 1
495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SUB_BANDS_8 8
515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SUB_BANDS_4 4
525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SBC_sf16000 0
545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SBC_sf32000 1
555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SBC_sf44100 2
565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SBC_sf48000 3
575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SBC_MONO    0
595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SBC_DUAL    1
605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SBC_STEREO  2
615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SBC_JOINT_STEREO    3
625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SBC_BLOCK_0 4
645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SBC_BLOCK_1 8
655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SBC_BLOCK_2 12
665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SBC_BLOCK_3 16
675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SBC_NULL    0
695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifndef SBC_MAX_NUM_FRAME
715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SBC_MAX_NUM_FRAME 1
725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifndef SBC_DSP_OPT
755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SBC_DSP_OPT FALSE
765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* Set SBC_USE_ARM_PRAGMA to TRUE to use "#pragma arm section zidata" */
795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifndef SBC_USE_ARM_PRAGMA
805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SBC_USE_ARM_PRAGMA FALSE
815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* Set SBC_ARM_ASM_OPT to TRUE in case the target is an ARM */
845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* this will replace all the 32 and 64 bit mult by in line assembly code */
855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifndef SBC_ARM_ASM_OPT
865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SBC_ARM_ASM_OPT FALSE
875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* green hill compiler option -> Used to distinguish the syntax for inline assembly code*/
905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifndef SBC_GHS_COMPILER
915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SBC_GHS_COMPILER FALSE
925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* ARM compiler option -> Used to distinguish the syntax for inline assembly code */
955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifndef SBC_ARM_COMPILER
965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SBC_ARM_COMPILER TRUE
975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* Set SBC_IPAQ_OPT to TRUE in case the target is an ARM */
1005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* 32 and 64 bit mult will be performed using SINT64 ( usualy __int64 ) cast that usualy give optimal performance if supported */
1015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifndef SBC_IPAQ_OPT
1025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SBC_IPAQ_OPT TRUE
1035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
1045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* Debug only: set SBC_IS_64_MULT_IN_WINDOW_ACCU to TRUE to use 64 bit multiplication in the windowing */
1065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* -> not recomended, more MIPS for the same restitution.  */
1075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifndef SBC_IS_64_MULT_IN_WINDOW_ACCU
1085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SBC_IS_64_MULT_IN_WINDOW_ACCU  FALSE
1095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /*SBC_IS_64_MULT_IN_WINDOW_ACCU */
1105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* Set SBC_IS_64_MULT_IN_IDCT to TRUE to use 64 bits multiplication in the DCT of Matrixing */
1125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* -> more MIPS required for a better audio quality. comparasion with the SIG utilities shows a division by 10 of the RMS */
1135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* CAUTION: It only apply in the if SBC_FAST_DCT is set to TRUE */
1145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifndef SBC_IS_64_MULT_IN_IDCT
1155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SBC_IS_64_MULT_IN_IDCT  FALSE
1165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /*SBC_IS_64_MULT_IN_IDCT */
1175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* set SBC_IS_64_MULT_IN_QUANTIZER to TRUE to use 64 bits multiplication in the quantizer */
1195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* setting this flag to FALSE add whistling noise at 5.5 and 11 KHz usualy not perceptible by human's hears. */
1205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifndef SBC_IS_64_MULT_IN_QUANTIZER
1215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SBC_IS_64_MULT_IN_QUANTIZER  TRUE
1225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /*SBC_IS_64_MULT_IN_IDCT */
1235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* Debug only: set this flag to FALSE to disable fast DCT algorithm */
1255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifndef SBC_FAST_DCT
1265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SBC_FAST_DCT  TRUE
1275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /*SBC_FAST_DCT */
1285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* In case we do not use joint stereo mode the flag save some RAM and ROM in case it is set to FALSE */
1305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifndef SBC_JOINT_STE_INCLUDED
1315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SBC_JOINT_STE_INCLUDED TRUE
1325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
1335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* TRUE -> application should provide PCM buffer, FALSE PCM buffer reside in SBC_ENC_PARAMS */
1355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifndef SBC_NO_PCM_CPY_OPTION
1365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SBC_NO_PCM_CPY_OPTION FALSE
1375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
1385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define MINIMUM_ENC_VX_BUFFER_SIZE (8*10*2)
1405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifndef ENC_VX_BUFFER_SIZE
1415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define ENC_VX_BUFFER_SIZE (MINIMUM_ENC_VX_BUFFER_SIZE + 64)
1425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*#define ENC_VX_BUFFER_SIZE MINIMUM_ENC_VX_BUFFER_SIZE + 1024*/
1435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
1445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifndef SBC_FOR_EMBEDDED_LINUX
1465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SBC_FOR_EMBEDDED_LINUX FALSE
1475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
1485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*constants used for index calculation*/
1505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SBC_BLK (SBC_MAX_NUM_OF_CHANNELS * SBC_MAX_NUM_OF_SUBBANDS)
1515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "sbc_types.h"
1535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef struct SBC_ENC_PARAMS_TAG
1555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    SINT16 s16SamplingFreq;                         /* 16k, 32k, 44.1k or 48k*/
1575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    SINT16 s16ChannelMode;                          /* mono, dual, streo or joint streo*/
1585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    SINT16 s16NumOfSubBands;                        /* 4 or 8 */
1595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    SINT16 s16NumOfChannels;
1605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    SINT16 s16NumOfBlocks;                          /* 4, 8, 12 or 16*/
1615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    SINT16 s16AllocationMethod;                     /* loudness or SNR*/
1625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    SINT16 s16BitPool;                              /* 16*numOfSb for mono & dual;
1635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                                       32*numOfSb for stereo & joint stereo */
1645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16 u16BitRate;
1655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8   u8NumPacketToEncode;                    /* number of sbc frame to encode. Default is 1 */
1665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (SBC_JOINT_STE_INCLUDED == TRUE)
1675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    SINT16 as16Join[SBC_MAX_NUM_OF_SUBBANDS];       /*1 if JS, 0 otherwise*/
1685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
1695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    SINT16 s16MaxBitNeed;
1715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    SINT16 as16ScaleFactor[SBC_MAX_NUM_OF_CHANNELS*SBC_MAX_NUM_OF_SUBBANDS];
1725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    SINT16 *ps16NextPcmBuffer;
1745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#if (SBC_NO_PCM_CPY_OPTION == TRUE)
1755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    SINT16 *ps16PcmBuffer;
1765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#else
1775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    SINT16 as16PcmBuffer[SBC_MAX_NUM_FRAME*SBC_MAX_NUM_OF_BLOCKS * SBC_MAX_NUM_OF_CHANNELS * SBC_MAX_NUM_OF_SUBBANDS];
1785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
1795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    SINT16  s16ScartchMemForBitAlloc[16];
1815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    SINT32  s32SbBuffer[SBC_MAX_NUM_OF_CHANNELS * SBC_MAX_NUM_OF_SUBBANDS * SBC_MAX_NUM_OF_BLOCKS];
1835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    SINT16 as16Bits[SBC_MAX_NUM_OF_CHANNELS*SBC_MAX_NUM_OF_SUBBANDS];
1855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8  *pu8Packet;
1875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8  *pu8NextPacket;
1885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16 FrameHeader;
1895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16 u16PacketLength;
1905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}SBC_ENC_PARAMS;
1925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifdef __cplusplus
1945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern "C"
1955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
1975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectSBC_API extern void SBC_Encoder(SBC_ENC_PARAMS *strEncParams);
1985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source ProjectSBC_API extern void SBC_Encoder_Init(SBC_ENC_PARAMS *strEncParams);
1995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifdef __cplusplus
2005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
2015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
2025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
203