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