1f6f90fc5202248e2ae0abde6e655d7186cebc6afGlenn Kasten/* 2f6f90fc5202248e2ae0abde6e655d7186cebc6afGlenn Kasten * Copyright (C) 2010 The Android Open Source Project 3f6f90fc5202248e2ae0abde6e655d7186cebc6afGlenn Kasten * 4f6f90fc5202248e2ae0abde6e655d7186cebc6afGlenn Kasten * Licensed under the Apache License, Version 2.0 (the "License"); 5f6f90fc5202248e2ae0abde6e655d7186cebc6afGlenn Kasten * you may not use this file except in compliance with the License. 6f6f90fc5202248e2ae0abde6e655d7186cebc6afGlenn Kasten * You may obtain a copy of the License at 7f6f90fc5202248e2ae0abde6e655d7186cebc6afGlenn Kasten * 8f6f90fc5202248e2ae0abde6e655d7186cebc6afGlenn Kasten * http://www.apache.org/licenses/LICENSE-2.0 9f6f90fc5202248e2ae0abde6e655d7186cebc6afGlenn Kasten * 10f6f90fc5202248e2ae0abde6e655d7186cebc6afGlenn Kasten * Unless required by applicable law or agreed to in writing, software 11f6f90fc5202248e2ae0abde6e655d7186cebc6afGlenn Kasten * distributed under the License is distributed on an "AS IS" BASIS, 12f6f90fc5202248e2ae0abde6e655d7186cebc6afGlenn Kasten * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f6f90fc5202248e2ae0abde6e655d7186cebc6afGlenn Kasten * See the License for the specific language governing permissions and 14f6f90fc5202248e2ae0abde6e655d7186cebc6afGlenn Kasten * limitations under the License. 15f6f90fc5202248e2ae0abde6e655d7186cebc6afGlenn Kasten */ 16d4ac180347d2be1f4fe1d9ff4354e0157d83cd7bGlenn Kasten 1710ee2bc6119445f4339ecef998c40c9cc95057cdGlenn Kasten/** \file OutputMixExt.h OutputMixExt interface */ 18d4ac180347d2be1f4fe1d9ff4354e0157d83cd7bGlenn Kasten 1999cd40bd94b21ff01fa9391b04d8dd1fa7a05da7Glenn Kasten#ifdef __cplusplus 2099cd40bd94b21ff01fa9391b04d8dd1fa7a05da7Glenn Kastenextern "C" { 2199cd40bd94b21ff01fa9391b04d8dd1fa7a05da7Glenn Kasten#endif 22d4ac180347d2be1f4fe1d9ff4354e0157d83cd7bGlenn Kastenextern const SLInterfaceID SL_IID_OUTPUTMIXEXT; 2399cd40bd94b21ff01fa9391b04d8dd1fa7a05da7Glenn Kasten#ifdef __cplusplus 2499cd40bd94b21ff01fa9391b04d8dd1fa7a05da7Glenn Kasten} 2599cd40bd94b21ff01fa9391b04d8dd1fa7a05da7Glenn Kasten#endif 26d4ac180347d2be1f4fe1d9ff4354e0157d83cd7bGlenn Kasten 27d4ac180347d2be1f4fe1d9ff4354e0157d83cd7bGlenn Kastentypedef const struct SLOutputMixExtItf_ * const * SLOutputMixExtItf; 28d4ac180347d2be1f4fe1d9ff4354e0157d83cd7bGlenn Kasten 2910ee2bc6119445f4339ecef998c40c9cc95057cdGlenn Kasten/** \brief v-table for IOutputMixExt */ 3010ee2bc6119445f4339ecef998c40c9cc95057cdGlenn Kasten 31d4ac180347d2be1f4fe1d9ff4354e0157d83cd7bGlenn Kastenstruct SLOutputMixExtItf_ { 32d4ac180347d2be1f4fe1d9ff4354e0157d83cd7bGlenn Kasten void (*FillBuffer)(SLOutputMixExtItf self, void *pBuffer, SLuint32 size); 33d4ac180347d2be1f4fe1d9ff4354e0157d83cd7bGlenn Kasten}; 34f6f90fc5202248e2ae0abde6e655d7186cebc6afGlenn Kasten 3510ee2bc6119445f4339ecef998c40c9cc95057cdGlenn Kasten/** \brief Track describes each PCM input source to OutputMix */ 36f6f90fc5202248e2ae0abde6e655d7186cebc6afGlenn Kasten 3710ee2bc6119445f4339ecef998c40c9cc95057cdGlenn Kastentypedef struct { 38f6f90fc5202248e2ae0abde6e655d7186cebc6afGlenn Kasten struct BufferQueue_interface *mBufferQueue; 3910ee2bc6119445f4339ecef998c40c9cc95057cdGlenn Kasten CAudioPlayer *mAudioPlayer; ///< Mixer examines this track if non-NULL 4010ee2bc6119445f4339ecef998c40c9cc95057cdGlenn Kasten const void *mReader; ///< Pointer to next frame in BufferHeader.mBuffer 4110ee2bc6119445f4339ecef998c40c9cc95057cdGlenn Kasten SLuint32 mAvail; ///< Number of available bytes in the current buffer 424f924ff768d761f53db6fa2dbfb794ba7a65e776Glenn Kasten float mGains[STEREO_CHANNELS]; ///< Copied from CAudioPlayer::mGains 4366f75c45c9aea410b1f913d76995661e72571b67Glenn Kasten SLuint32 mFramesMixed; ///< Number of sample frames mixed from track; reset periodically 4410ee2bc6119445f4339ecef998c40c9cc95057cdGlenn Kasten} Track; 45f6f90fc5202248e2ae0abde6e655d7186cebc6afGlenn Kasten 4650bccde01980ae803b8656e8b08ecacb65540f50Glenn Kastenextern SLresult IOutputMixExt_checkAudioPlayerSourceSink(CAudioPlayer *thiz); 4750bccde01980ae803b8656e8b08ecacb65540f50Glenn Kastenextern void audioPlayerGainUpdate(CAudioPlayer *thiz); 489c03f04a9c6cc2a821182c8be8f2efe964a27efeGlenn Kastenextern void IOutputMixExt_FillBuffer(SLOutputMixExtItf self, void *pBuffer, SLuint32 size); 49