1daf661248ff6ea2e21799e5114c78b7c1d49630eGlenn Kasten/* 2daf661248ff6ea2e21799e5114c78b7c1d49630eGlenn Kasten * Copyright (C) 2010 The Android Open Source Project 3daf661248ff6ea2e21799e5114c78b7c1d49630eGlenn Kasten * 4daf661248ff6ea2e21799e5114c78b7c1d49630eGlenn Kasten * Licensed under the Apache License, Version 2.0 (the "License"); 5daf661248ff6ea2e21799e5114c78b7c1d49630eGlenn Kasten * you may not use this file except in compliance with the License. 6daf661248ff6ea2e21799e5114c78b7c1d49630eGlenn Kasten * You may obtain a copy of the License at 7daf661248ff6ea2e21799e5114c78b7c1d49630eGlenn Kasten * 8daf661248ff6ea2e21799e5114c78b7c1d49630eGlenn Kasten * http://www.apache.org/licenses/LICENSE-2.0 9daf661248ff6ea2e21799e5114c78b7c1d49630eGlenn Kasten * 10daf661248ff6ea2e21799e5114c78b7c1d49630eGlenn Kasten * Unless required by applicable law or agreed to in writing, software 11daf661248ff6ea2e21799e5114c78b7c1d49630eGlenn Kasten * distributed under the License is distributed on an "AS IS" BASIS, 12daf661248ff6ea2e21799e5114c78b7c1d49630eGlenn Kasten * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13daf661248ff6ea2e21799e5114c78b7c1d49630eGlenn Kasten * See the License for the specific language governing permissions and 14daf661248ff6ea2e21799e5114c78b7c1d49630eGlenn Kasten * limitations under the License. 15daf661248ff6ea2e21799e5114c78b7c1d49630eGlenn Kasten */ 16bd3cb772fc94c5baf0d1fe1a63693b33ca5fe9e3Glenn Kasten 17369f3138f19f7102bf0f98b890ab84c8df633a93Glenn Kasten/** \file OutputMixExt.h OutputMixExt interface */ 18bd3cb772fc94c5baf0d1fe1a63693b33ca5fe9e3Glenn Kasten 1900d2d554e04ac369367c903dbf53b975355d1bcdGlenn Kasten#ifdef __cplusplus 2000d2d554e04ac369367c903dbf53b975355d1bcdGlenn Kastenextern "C" { 2100d2d554e04ac369367c903dbf53b975355d1bcdGlenn Kasten#endif 22bd3cb772fc94c5baf0d1fe1a63693b33ca5fe9e3Glenn Kastenextern const SLInterfaceID SL_IID_OUTPUTMIXEXT; 2300d2d554e04ac369367c903dbf53b975355d1bcdGlenn Kasten#ifdef __cplusplus 2400d2d554e04ac369367c903dbf53b975355d1bcdGlenn Kasten} 2500d2d554e04ac369367c903dbf53b975355d1bcdGlenn Kasten#endif 26bd3cb772fc94c5baf0d1fe1a63693b33ca5fe9e3Glenn Kasten 27bd3cb772fc94c5baf0d1fe1a63693b33ca5fe9e3Glenn Kastentypedef const struct SLOutputMixExtItf_ * const * SLOutputMixExtItf; 28bd3cb772fc94c5baf0d1fe1a63693b33ca5fe9e3Glenn Kasten 29369f3138f19f7102bf0f98b890ab84c8df633a93Glenn Kasten/** \brief v-table for IOutputMixExt */ 30369f3138f19f7102bf0f98b890ab84c8df633a93Glenn Kasten 31bd3cb772fc94c5baf0d1fe1a63693b33ca5fe9e3Glenn Kastenstruct SLOutputMixExtItf_ { 32bd3cb772fc94c5baf0d1fe1a63693b33ca5fe9e3Glenn Kasten void (*FillBuffer)(SLOutputMixExtItf self, void *pBuffer, SLuint32 size); 33bd3cb772fc94c5baf0d1fe1a63693b33ca5fe9e3Glenn Kasten}; 34daf661248ff6ea2e21799e5114c78b7c1d49630eGlenn Kasten 35369f3138f19f7102bf0f98b890ab84c8df633a93Glenn Kasten/** \brief Track describes each PCM input source to OutputMix */ 36daf661248ff6ea2e21799e5114c78b7c1d49630eGlenn Kasten 37369f3138f19f7102bf0f98b890ab84c8df633a93Glenn Kastentypedef struct { 38daf661248ff6ea2e21799e5114c78b7c1d49630eGlenn Kasten struct BufferQueue_interface *mBufferQueue; 39369f3138f19f7102bf0f98b890ab84c8df633a93Glenn Kasten CAudioPlayer *mAudioPlayer; ///< Mixer examines this track if non-NULL 40369f3138f19f7102bf0f98b890ab84c8df633a93Glenn Kasten const void *mReader; ///< Pointer to next frame in BufferHeader.mBuffer 41369f3138f19f7102bf0f98b890ab84c8df633a93Glenn Kasten SLuint32 mAvail; ///< Number of available bytes in the current buffer 42928ea4ffff40c82987cfb1ac9e3095fdc6968709Glenn Kasten float mGains[STEREO_CHANNELS]; ///< Copied from CAudioPlayer::mGains 438c065779232fdd89abace68d2fc7bea786a010d7Glenn Kasten SLuint32 mFramesMixed; ///< Number of sample frames mixed from track; reset periodically 44369f3138f19f7102bf0f98b890ab84c8df633a93Glenn Kasten} Track; 45daf661248ff6ea2e21799e5114c78b7c1d49630eGlenn Kasten 46bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kastenextern SLresult IOutputMixExt_checkAudioPlayerSourceSink(CAudioPlayer *thiz); 47bcc5c7225e3b7a1dbf2e9e830987f69167acf06fGlenn Kastenextern void audioPlayerGainUpdate(CAudioPlayer *thiz); 48e5d006b298ce7683d66f7ec86136403cf5fb20d6Glenn Kastenextern void IOutputMixExt_FillBuffer(SLOutputMixExtItf self, void *pBuffer, SLuint32 size); 49