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