Home | History | Annotate | Download | only in android
      1 /*
      2  * Copyright (C) 2010 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 #define ANDROID_DEFAULT_AUDIOTRACK_BUFFER_SIZE 4096
     18 
     19 /**************************************************************************************************
     20  * AudioPlayer lifecycle
     21  ****************************/
     22 /*
     23  * Checks that the combination of source and sink parameters is supported in this implementation.
     24  * Return
     25  *     SL_RESULT_SUCCESS
     26  *     SL_PARAMETER_INVALID
     27  */
     28 extern SLresult android_audioPlayer_checkSourceSink(CAudioPlayer *pAudioPlayer);
     29 
     30 /*
     31  * Determines the Android media framework object that maps to the given audio source and sink.
     32  * Return
     33  *     SL_RESULT_SUCCESS if the Android resources were successfully created
     34  *     SL_PARAMETER_INVALID if the Android resources couldn't be created due to an invalid or
     35  *         unsupported parameter or value
     36  *     SL_RESULT_CONTENT_UNSUPPORTED if a format is not supported (e.g. sample rate too high)
     37  */
     38 extern SLresult android_audioPlayer_create(CAudioPlayer *pAudioPlayer);
     39 
     40 /*
     41  * Allocates and initializes the Android media framework objects intended to be used with the
     42  * given CAudioPlayer data
     43  * Return
     44  *     SL_RESULT_SUCCESS
     45  *     SL_RESULT_CONTENT_UNSUPPORTED if an error occurred during the allocation and initialization
     46  *         of the Android resources
     47  */
     48 extern SLresult android_audioPlayer_realize(CAudioPlayer *pAudioPlayer, SLboolean async);
     49 
     50 /*
     51  * Return
     52  *     SL_RESULT_SUCCESS
     53  *     SL_RESULT_PARAMETER_INVALID
     54  *     SL_RESULT_INTERNAL_ERROR
     55  *     SL_RESULT_PRECONDITIONS_VIOLATED
     56  */
     57 extern SLresult android_audioPlayer_setConfig(CAudioPlayer *pAudioPlayer, const SLchar *configKey,
     58         const void *pConfigValue, SLuint32 valueSize);
     59 
     60 /*
     61  * if pConfigValue is NULL, pValueSize contains the size required for the given key
     62  *
     63  * Return
     64  *     SL_RESULT_SUCCESS
     65  *     SL_RESULT_PARAMETER_INVALID
     66  *     SL_RESULT_INTERNAL_ERROR
     67  *     SL_RESULT_PRECONDITIONS_VIOLATED
     68  */
     69 extern SLresult android_audioPlayer_getConfig(CAudioPlayer *pAudioPlayer, const SLchar *configKey,
     70         SLuint32* pValueSize, void *pConfigValue);
     71 
     72 extern SLresult android_audioPlayer_preDestroy(CAudioPlayer *pAudioPlayer);
     73 
     74 extern SLresult android_audioPlayer_destroy(CAudioPlayer *pAudioPlayer);
     75 
     76 /**************************************************************************************************
     77  * Configuration
     78  ****************************/
     79 extern SLresult android_audioPlayer_setPlaybackRateAndConstraints(CAudioPlayer *pAudioPlayer,
     80         SLpermille rate, SLuint32 constraints);
     81 
     82 extern SLresult android_audioPlayer_getDuration(IPlay *pPlayItf, SLmillisecond *pDurMsec);
     83 
     84 extern void android_audioPlayer_volumeUpdate(CAudioPlayer *pAudioPlayer);
     85 
     86 extern SLresult android_audioPlayer_setBufferingUpdateThresholdPerMille(CAudioPlayer *pAudioPlayer,
     87         SLpermille threshold);
     88 
     89 /**************************************************************************************************
     90  * Metadata Extraction
     91  ****************************/
     92 /*
     93  * For all metadata extraction functions:
     94  * Precondition:
     95  *     no lock held
     96  *     pAudioPlayer != NULL
     97  *     input pointers != NULL (pItemCount, pKeySize, pKey, pValueSize, pValue)
     98  * Return:
     99  *     SL_RESULT_SUCCESS
    100  *     SL_RESULT_PARAMETER_INVALID
    101  */
    102 extern SLresult android_audioPlayer_metadata_getItemCount(CAudioPlayer *pAudioPlayer,
    103         SLuint32 *pItemCount);
    104 
    105 extern SLresult android_audioPlayer_metadata_getKeySize(CAudioPlayer *pAudioPlayer,
    106         SLuint32 index, SLuint32 *pKeySize);
    107 
    108 extern SLresult android_audioPlayer_metadata_getKey(CAudioPlayer *pAudioPlayer,
    109         SLuint32 index, SLuint32 size, SLMetadataInfo *pKey);
    110 
    111 extern SLresult android_audioPlayer_metadata_getValueSize(CAudioPlayer *pAudioPlayer,
    112         SLuint32 index, SLuint32 *pValueSize);
    113 
    114 extern SLresult android_audioPlayer_metadata_getValue(CAudioPlayer *pAudioPlayer,
    115         SLuint32 index, SLuint32 size, SLMetadataInfo *pValue);
    116 
    117 /**************************************************************************************************
    118  * Playback control and events
    119  ****************************/
    120 extern void android_audioPlayer_setPlayState(CAudioPlayer *pAudioPlayer);
    121 
    122 extern void android_audioPlayer_usePlayEventMask(CAudioPlayer *pAudioPlayer);
    123 
    124 extern SLresult android_audioPlayer_seek(CAudioPlayer *pAudioPlayer, SLmillisecond posMsec);
    125 
    126 extern SLresult android_audioPlayer_loop(CAudioPlayer *pAudioPlayer, SLboolean loopEnable);
    127 
    128 extern void android_audioPlayer_getPosition(IPlay *pPlayItf, SLmillisecond *pPosMsec);
    129 
    130 /**************************************************************************************************
    131  * Buffer Queue events
    132  ****************************/
    133 extern void android_audioPlayer_bufferQueue_onRefilled_l(CAudioPlayer *pAudioPlayer);
    134 
    135 extern SLresult android_audioPlayer_bufferQueue_onClear(CAudioPlayer *pAudioPlayer);
    136 
    137 /**************************************************************************************************
    138  * Android Buffer Queue
    139  ****************************/
    140 /* must be called with a lock on pAudioPlayer->mThis */
    141 extern SLresult android_audioPlayer_androidBufferQueue_registerCallback_l(
    142         CAudioPlayer *pAudioPlayer);
    143 /* must be called with a lock on pAudioPlayer->mThis */
    144 extern void android_audioPlayer_androidBufferQueue_clear_l(CAudioPlayer *pAudioPlayer);
    145 /* must be called with a lock on pAudioPlayer->mThis */
    146 extern void android_audioPlayer_androidBufferQueue_onRefilled_l(CAudioPlayer *pAudioPlayer);
    147