/* * Copyright (C) 2010 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #define ANDROID_DEFAULT_AUDIOTRACK_BUFFER_SIZE 4096 /************************************************************************************************** * AudioPlayer lifecycle ****************************/ /* * Checks that the combination of source and sink parameters is supported in this implementation. * Return * SL_RESULT_SUCCESS * SL_PARAMETER_INVALID */ extern SLresult android_audioPlayer_checkSourceSink(CAudioPlayer *pAudioPlayer); /* * Finish the Android-specific pre-Realize initialization of a CAudioPlayer. */ extern void android_audioPlayer_create(CAudioPlayer *pAudioPlayer); /* * Allocates and initializes the Android media framework objects intended to be used with the * given CAudioPlayer data * Return * SL_RESULT_SUCCESS * SL_RESULT_CONTENT_UNSUPPORTED if an error occurred during the allocation and initialization * of the Android resources */ extern SLresult android_audioPlayer_realize(CAudioPlayer *pAudioPlayer, SLboolean async); /* * Return * SL_RESULT_SUCCESS * SL_RESULT_PARAMETER_INVALID * SL_RESULT_INTERNAL_ERROR * SL_RESULT_PRECONDITIONS_VIOLATED */ extern SLresult android_audioPlayer_setConfig(CAudioPlayer *pAudioPlayer, const SLchar *configKey, const void *pConfigValue, SLuint32 valueSize); /* * if pConfigValue is NULL, pValueSize contains the size required for the given key * * Return * SL_RESULT_SUCCESS * SL_RESULT_PARAMETER_INVALID * SL_RESULT_INTERNAL_ERROR * SL_RESULT_PRECONDITIONS_VIOLATED */ extern SLresult android_audioPlayer_getConfig(CAudioPlayer *pAudioPlayer, const SLchar *configKey, SLuint32* pValueSize, void *pConfigValue); extern SLresult android_audioPlayer_preDestroy(CAudioPlayer *pAudioPlayer); extern SLresult android_audioPlayer_destroy(CAudioPlayer *pAudioPlayer); /************************************************************************************************** * Configuration ****************************/ extern SLresult android_audioPlayer_setPlaybackRateAndConstraints(CAudioPlayer *pAudioPlayer, SLpermille rate, SLuint32 constraints); extern SLresult android_audioPlayer_getDuration(IPlay *pPlayItf, SLmillisecond *pDurMsec); extern void android_audioPlayer_volumeUpdate(CAudioPlayer *pAudioPlayer); extern SLresult android_audioPlayer_setBufferingUpdateThresholdPerMille(CAudioPlayer *pAudioPlayer, SLpermille threshold); /************************************************************************************************** * Metadata Extraction ****************************/ /* * For all metadata extraction functions: * Precondition: * no lock held * pAudioPlayer != NULL * input pointers != NULL (pItemCount, pKeySize, pKey, pValueSize, pValue) * Return: * SL_RESULT_SUCCESS * SL_RESULT_PARAMETER_INVALID */ extern SLresult android_audioPlayer_metadata_getItemCount(CAudioPlayer *pAudioPlayer, SLuint32 *pItemCount); extern SLresult android_audioPlayer_metadata_getKeySize(CAudioPlayer *pAudioPlayer, SLuint32 index, SLuint32 *pKeySize); extern SLresult android_audioPlayer_metadata_getKey(CAudioPlayer *pAudioPlayer, SLuint32 index, SLuint32 size, SLMetadataInfo *pKey); extern SLresult android_audioPlayer_metadata_getValueSize(CAudioPlayer *pAudioPlayer, SLuint32 index, SLuint32 *pValueSize); extern SLresult android_audioPlayer_metadata_getValue(CAudioPlayer *pAudioPlayer, SLuint32 index, SLuint32 size, SLMetadataInfo *pValue); /************************************************************************************************** * Playback control and events ****************************/ extern void android_audioPlayer_setPlayState(CAudioPlayer *pAudioPlayer); extern void android_audioPlayer_usePlayEventMask(CAudioPlayer *pAudioPlayer); extern SLresult android_audioPlayer_seek(CAudioPlayer *pAudioPlayer, SLmillisecond posMsec); extern SLresult android_audioPlayer_loop(CAudioPlayer *pAudioPlayer, SLboolean loopEnable); extern void android_audioPlayer_getPosition(IPlay *pPlayItf, SLmillisecond *pPosMsec); /************************************************************************************************** * Buffer Queue events ****************************/ extern void android_audioPlayer_bufferQueue_onRefilled_l(CAudioPlayer *pAudioPlayer); extern SLresult android_audioPlayer_bufferQueue_onClear(CAudioPlayer *pAudioPlayer); /************************************************************************************************** * Android Buffer Queue ****************************/ /* must be called with a lock on pAudioPlayer->mThis */ extern void android_audioPlayer_androidBufferQueue_clear_l(CAudioPlayer *pAudioPlayer); /* must be called with a lock on pAudioPlayer->mThis */ extern void android_audioPlayer_androidBufferQueue_onRefilled_l(CAudioPlayer *pAudioPlayer);