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