OutputMixExt.h revision 928ea4ffff40c82987cfb1ac9e3095fdc6968709
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 19daf661248ff6ea2e21799e5114c78b7c1d49630eGlenn Kasten#ifdef USE_OUTPUTMIXEXT 20daf661248ff6ea2e21799e5114c78b7c1d49630eGlenn Kasten 2100d2d554e04ac369367c903dbf53b975355d1bcdGlenn Kasten#ifdef __cplusplus 2200d2d554e04ac369367c903dbf53b975355d1bcdGlenn Kastenextern "C" { 2300d2d554e04ac369367c903dbf53b975355d1bcdGlenn Kasten#endif 24bd3cb772fc94c5baf0d1fe1a63693b33ca5fe9e3Glenn Kastenextern const SLInterfaceID SL_IID_OUTPUTMIXEXT; 2500d2d554e04ac369367c903dbf53b975355d1bcdGlenn Kasten#ifdef __cplusplus 2600d2d554e04ac369367c903dbf53b975355d1bcdGlenn Kasten} 2700d2d554e04ac369367c903dbf53b975355d1bcdGlenn Kasten#endif 28bd3cb772fc94c5baf0d1fe1a63693b33ca5fe9e3Glenn Kasten 29bd3cb772fc94c5baf0d1fe1a63693b33ca5fe9e3Glenn Kastentypedef const struct SLOutputMixExtItf_ * const * SLOutputMixExtItf; 30bd3cb772fc94c5baf0d1fe1a63693b33ca5fe9e3Glenn Kasten 31369f3138f19f7102bf0f98b890ab84c8df633a93Glenn Kasten/** \brief v-table for IOutputMixExt */ 32369f3138f19f7102bf0f98b890ab84c8df633a93Glenn Kasten 33bd3cb772fc94c5baf0d1fe1a63693b33ca5fe9e3Glenn Kastenstruct SLOutputMixExtItf_ { 34bd3cb772fc94c5baf0d1fe1a63693b33ca5fe9e3Glenn Kasten void (*FillBuffer)(SLOutputMixExtItf self, void *pBuffer, SLuint32 size); 35bd3cb772fc94c5baf0d1fe1a63693b33ca5fe9e3Glenn Kasten}; 36daf661248ff6ea2e21799e5114c78b7c1d49630eGlenn Kasten 37369f3138f19f7102bf0f98b890ab84c8df633a93Glenn Kasten/** \brief Track describes each PCM input source to OutputMix */ 38daf661248ff6ea2e21799e5114c78b7c1d49630eGlenn Kasten 39369f3138f19f7102bf0f98b890ab84c8df633a93Glenn Kastentypedef struct { 40daf661248ff6ea2e21799e5114c78b7c1d49630eGlenn Kasten struct BufferQueue_interface *mBufferQueue; 41369f3138f19f7102bf0f98b890ab84c8df633a93Glenn Kasten CAudioPlayer *mAudioPlayer; ///< Mixer examines this track if non-NULL 42369f3138f19f7102bf0f98b890ab84c8df633a93Glenn Kasten const void *mReader; ///< Pointer to next frame in BufferHeader.mBuffer 43369f3138f19f7102bf0f98b890ab84c8df633a93Glenn Kasten SLuint32 mAvail; ///< Number of available bytes in the current buffer 44928ea4ffff40c82987cfb1ac9e3095fdc6968709Glenn Kasten float mGains[STEREO_CHANNELS]; ///< Copied from CAudioPlayer::mGains 458c065779232fdd89abace68d2fc7bea786a010d7Glenn Kasten SLuint32 mFramesMixed; ///< Number of sample frames mixed from track; reset periodically 46369f3138f19f7102bf0f98b890ab84c8df633a93Glenn Kasten} Track; 47daf661248ff6ea2e21799e5114c78b7c1d49630eGlenn Kasten 4800d2d554e04ac369367c903dbf53b975355d1bcdGlenn Kasten#ifndef this 4900d2d554e04ac369367c903dbf53b975355d1bcdGlenn Kasten#define this this_ 5000d2d554e04ac369367c903dbf53b975355d1bcdGlenn Kasten#endif 51acd88797a1d3b8225bab888d29036e245f275be5Glenn Kastenextern SLresult IOutputMixExt_checkAudioPlayerSourceSink(CAudioPlayer *this); 52e5bf0d2c9531a7064eb3ddcafaf93ac1b0974037Glenn Kastenextern void audioPlayerGainUpdate(CAudioPlayer *this); 53343c522ebf4f9c321eef8c3b3b2945f1c1cb8846Glenn Kastenextern void IOutputMixExt_Destroy(CAudioPlayer *this); 54e5d006b298ce7683d66f7ec86136403cf5fb20d6Glenn Kastenextern void IOutputMixExt_FillBuffer(SLOutputMixExtItf self, void *pBuffer, SLuint32 size); 55daf661248ff6ea2e21799e5114c78b7c1d49630eGlenn Kasten 56daf661248ff6ea2e21799e5114c78b7c1d49630eGlenn Kasten#endif 57