1b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten/* 2b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten * Copyright (C) 2011 The Android Open Source Project 3b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten * 4b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten * Licensed under the Apache License, Version 2.0 (the "License"); 5b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten * you may not use this file except in compliance with the License. 6b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten * You may obtain a copy of the License at 7b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten * 8b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten * http://www.apache.org/licenses/LICENSE-2.0 9b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten * 10b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten * Unless required by applicable law or agreed to in writing, software 11b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten * distributed under the License is distributed on an "AS IS" BASIS, 12b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten * See the License for the specific language governing permissions and 14b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten * limitations under the License. 15b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten */ 16b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten 17b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten#include "sles_allinclusive.h" 18b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten 19b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten// Handlers should return a mask of the attributes which they actually handled, 20b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten// or ATTR_NONE if they did not completely handle the attribute change. 21b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten 22b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten#ifdef ANDROID 23b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten 24b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten// SL_OBJECTID_AUDIOPLAYER, ATTR_GAIN 25b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kastenunsigned handler_AudioPlayer_gain(IObject *thiz) 26b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten{ 27b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten CAudioPlayer *ap = (CAudioPlayer *) thiz; 28b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten android_audioPlayer_volumeUpdate(ap); 29b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten return ATTR_GAIN; 30b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten} 31b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten 32b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten 33b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten// SL_OBJECTID_OUTPUTMIX, ATTR_GAIN 34b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kastenunsigned handler_OutputMix_gain(IObject *thiz) 35b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten{ 36b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten // FIXME update gains on all players attached to this outputmix 37b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten SL_LOGD("[ FIXME: gain update on an SL_OBJECTID_OUTPUTMIX to be implemented ]"); 38b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten return ATTR_GAIN; 39b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten} 40b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten 41b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten 42b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten// SL_OBJECTID_MIDIPLAYER, ATTR_GAIN 43b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kastenunsigned handler_MidiPlayer_gain(IObject *thiz) 44b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten{ 45b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten SL_LOGD("[ FIXME: gain update on an SL_OBJECTID_MIDIPLAYER to be implemented ]"); 46b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten return ATTR_GAIN; 47b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten} 48b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten 49b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten 50b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten// XA_OBJECTID_MEDIAPLAYER, ATTR_GAIN 51b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kastenunsigned handler_MediaPlayer_gain(IObject *thiz) 52b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten{ 53b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten CMediaPlayer *mp = (CMediaPlayer *) thiz; 540afa0fdcde5876941eaefaacc778984ec4efefa0Glenn Kasten android_Player_volumeUpdate(mp); 55b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten return ATTR_GAIN; 56b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten} 57b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten 58b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten 59b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten// SL_OBJECTID_AUDIOPLAYER, ATTR_POSITION 60b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kastenunsigned handler_AudioPlayer_position(IObject *thiz) 61b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten{ 62b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten CAudioPlayer *ap; 63b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten ap = (CAudioPlayer *) thiz; 644dd35cea9d286fc5ffcdb87c59707208e09aeb07Glenn Kasten // FIXME provide means to return result for invalid use cases (e.g. buffer queue data source) 654dd35cea9d286fc5ffcdb87c59707208e09aeb07Glenn Kasten (void) android_audioPlayer_seek(ap, ap->mSeek.mPos); 66b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten return ATTR_POSITION; 67b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten} 68b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten 69b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten 70b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten// SL_OBJECTID_MIDIPLAYER, ATTR_POSITION 71b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kastenunsigned handler_MidiPlayer_position(IObject *thiz) 72b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten{ 73b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten SL_LOGD("[ FIXME: position update on an SL_OBJECTID_MIDIPLAYER to be implemented ]"); 74b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten return ATTR_POSITION; 75b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten} 76b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten 77b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten 78b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten// SL_OBJECTID_AUDIOPLAYER, ATTR_TRANSPORT 79b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kastenunsigned handler_AudioPlayer_transport(IObject *thiz) 80b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten{ 81b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten CAudioPlayer *ap = (CAudioPlayer *) thiz; 82183aa1fd76683f3bd7939668c4b02563b5820242Glenn Kasten android_audioPlayer_usePlayEventMask(ap); 83b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten return ATTR_TRANSPORT; 84b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten} 85b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten 86b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten 870145858a05d704e194ef3f7ac96d7804f08a362fGlenn Kasten// SL_OBJECTID_AUDIOPLAYER, ATTR_PLAY_STATE 880145858a05d704e194ef3f7ac96d7804f08a362fGlenn Kastenunsigned handler_AudioPlayer_play_state(IObject *thiz) 890145858a05d704e194ef3f7ac96d7804f08a362fGlenn Kasten{ 900145858a05d704e194ef3f7ac96d7804f08a362fGlenn Kasten CAudioPlayer *ap = (CAudioPlayer *) thiz; 910145858a05d704e194ef3f7ac96d7804f08a362fGlenn Kasten android_audioPlayer_setPlayState(ap); 920145858a05d704e194ef3f7ac96d7804f08a362fGlenn Kasten return ATTR_PLAY_STATE; 930145858a05d704e194ef3f7ac96d7804f08a362fGlenn Kasten} 940145858a05d704e194ef3f7ac96d7804f08a362fGlenn Kasten 950145858a05d704e194ef3f7ac96d7804f08a362fGlenn Kasten 96b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten// SL_OBJECTID_AUDIORECORDER, ATTR_TRANSPORT 97b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kastenunsigned handler_AudioRecorder_transport(IObject *thiz) 98b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten{ 99b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten CAudioRecorder* ar = (CAudioRecorder *) thiz; 100183aa1fd76683f3bd7939668c4b02563b5820242Glenn Kasten android_audioRecorder_useRecordEventMask(ar); 101b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten return ATTR_TRANSPORT; 102b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten} 103b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten 104b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten 105183aa1fd76683f3bd7939668c4b02563b5820242Glenn Kasten// XA_OBJECTID_MEDIAPLAYER, ATTR_TRANSPORT 106b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kastenunsigned handler_MediaPlayer_transport(IObject *thiz) 107b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten{ 108b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten CMediaPlayer *mp = (CMediaPlayer *) thiz; 109183aa1fd76683f3bd7939668c4b02563b5820242Glenn Kasten android_Player_usePlayEventMask(mp); 110183aa1fd76683f3bd7939668c4b02563b5820242Glenn Kasten return ATTR_TRANSPORT; 111183aa1fd76683f3bd7939668c4b02563b5820242Glenn Kasten} 112183aa1fd76683f3bd7939668c4b02563b5820242Glenn Kasten 113183aa1fd76683f3bd7939668c4b02563b5820242Glenn Kasten 114183aa1fd76683f3bd7939668c4b02563b5820242Glenn Kasten// XA_OBJECTID_MEDIAPLAYER, ATTR_PLAY_STATE 115183aa1fd76683f3bd7939668c4b02563b5820242Glenn Kastenunsigned handler_MediaPlayer_play_state(IObject *thiz) 116183aa1fd76683f3bd7939668c4b02563b5820242Glenn Kasten{ 117183aa1fd76683f3bd7939668c4b02563b5820242Glenn Kasten CMediaPlayer *mp = (CMediaPlayer *) thiz; 118b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten android::GenericPlayer* avp = mp->mAVPlayer.get(); 119b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten if (avp != NULL) { 120b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten android_Player_setPlayState(avp, mp->mPlay.mState, &(mp->mAndroidObjState)); 121b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten } 122183aa1fd76683f3bd7939668c4b02563b5820242Glenn Kasten return ATTR_PLAY_STATE; 123b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten} 124b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten 125b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten 126b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten// SL_OBJECTID_AUDIOPLAYER, ATTR_BQ_ENQUEUE 127b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kastenunsigned handler_AudioPlayer_bq_enqueue(IObject *thiz) 128b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten{ 129b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten // ( buffer queue count is non-empty and play state == PLAYING ) became true 130b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten CAudioPlayer *ap = (CAudioPlayer *) thiz; 1310145858a05d704e194ef3f7ac96d7804f08a362fGlenn Kasten assert(SL_PLAYSTATE_PLAYING == ap->mPlay.mState); 1320145858a05d704e194ef3f7ac96d7804f08a362fGlenn Kasten android_audioPlayer_bufferQueue_onRefilled_l(ap); 133b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten return ATTR_BQ_ENQUEUE; 134b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten} 135b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten 136b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten 137b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten// SL_OBJECTID_AUDIOPLAYER, ATTR_ABQ_ENQUEUE 138b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kastenunsigned handler_AudioPlayer_abq_enqueue(IObject *thiz) 139b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten{ 140b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten // (Android buffer queue count is non-empty and play state == PLAYING ) became true 141b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten CAudioPlayer *ap = (CAudioPlayer *) thiz; 1420145858a05d704e194ef3f7ac96d7804f08a362fGlenn Kasten assert(SL_PLAYSTATE_PLAYING == ap->mPlay.mState); 1430145858a05d704e194ef3f7ac96d7804f08a362fGlenn Kasten android_audioPlayer_androidBufferQueue_onRefilled_l(ap); 144b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten return ATTR_ABQ_ENQUEUE; 145b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten} 146b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten 147b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten 148b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten// XA_OBJECTID_MEDIAPLAYER, ATTR_ABQ_ENQUEUE 149b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kastenunsigned handler_MediaPlayer_abq_enqueue(IObject *thiz) 150b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten{ 151b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten CMediaPlayer* mp = (CMediaPlayer *)thiz; 152b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten if (SL_PLAYSTATE_PLAYING == mp->mPlay.mState) { 153b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten android_Player_androidBufferQueue_onRefilled_l(mp); 154b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten } 155b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten return ATTR_ABQ_ENQUEUE; 156b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten} 157b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten 158b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten// XA_OBJECTID_MEDIAPLAYER, ATTR_POSITION 159b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kastenunsigned handler_MediaPlayer_position(IObject *thiz) 160b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten{ 161b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten CMediaPlayer *mp = (CMediaPlayer *) thiz; 1624dd35cea9d286fc5ffcdb87c59707208e09aeb07Glenn Kasten // FIXME provide means to return result for invalid use cases (e.g. buffer queue data source) 1634dd35cea9d286fc5ffcdb87c59707208e09aeb07Glenn Kasten (void) android_Player_seek(mp, mp->mSeek.mPos); 164b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten return ATTR_POSITION; 165b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten} 166b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten 167b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten#else // !defined(ANDROID) 168b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten 169b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten// SL_OBJECTID_AUDIOPLAYER, ATTR_GAIN 170b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kastenunsigned handler_AudioPlayer_gain(IObject *thiz) 171b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten{ 172b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten CAudioPlayer *ap = (CAudioPlayer *) thiz; 173b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten audioPlayerGainUpdate(ap); 174b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten return ATTR_GAIN; 175b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten} 176b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten 177b27faa17b2fab644350c0264b23e18a5b388a8adGlenn Kasten#endif 178