17b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten/* 27b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten * Copyright (C) 2011 The Android Open Source Project 37b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten * 47b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten * Licensed under the Apache License, Version 2.0 (the "License"); 57b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten * you may not use this file except in compliance with the License. 67b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten * You may obtain a copy of the License at 77b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten * 87b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten * http://www.apache.org/licenses/LICENSE-2.0 97b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten * 107b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten * Unless required by applicable law or agreed to in writing, software 117b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten * distributed under the License is distributed on an "AS IS" BASIS, 127b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten * See the License for the specific language governing permissions and 147b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten * limitations under the License. 157b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten */ 167b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten 177b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten#include "sles_allinclusive.h" 187b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten 197b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten// Handlers should return a mask of the attributes which they actually handled, 207b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten// or ATTR_NONE if they did not completely handle the attribute change. 217b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten 227b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten#ifdef ANDROID 237b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten 247b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten// SL_OBJECTID_AUDIOPLAYER, ATTR_GAIN 257b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kastenunsigned handler_AudioPlayer_gain(IObject *thiz) 267b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten{ 277b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten CAudioPlayer *ap = (CAudioPlayer *) thiz; 287b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten android_audioPlayer_volumeUpdate(ap); 297b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten return ATTR_GAIN; 307b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten} 317b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten 327b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten 337b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten// SL_OBJECTID_OUTPUTMIX, ATTR_GAIN 347b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kastenunsigned handler_OutputMix_gain(IObject *thiz) 357b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten{ 367b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten // FIXME update gains on all players attached to this outputmix 377b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten SL_LOGD("[ FIXME: gain update on an SL_OBJECTID_OUTPUTMIX to be implemented ]"); 387b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten return ATTR_GAIN; 397b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten} 407b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten 417b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten 427b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten// SL_OBJECTID_MIDIPLAYER, ATTR_GAIN 437b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kastenunsigned handler_MidiPlayer_gain(IObject *thiz) 447b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten{ 457b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten SL_LOGD("[ FIXME: gain update on an SL_OBJECTID_MIDIPLAYER to be implemented ]"); 467b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten return ATTR_GAIN; 477b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten} 487b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten 497b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten 507b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten// XA_OBJECTID_MEDIAPLAYER, ATTR_GAIN 517b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kastenunsigned handler_MediaPlayer_gain(IObject *thiz) 527b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten{ 537b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten CMediaPlayer *mp = (CMediaPlayer *) thiz; 5499b927751677abfb60a388d65dfeed1fed1db12cGlenn Kasten android_Player_volumeUpdate(mp); 557b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten return ATTR_GAIN; 567b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten} 577b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten 587b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten 597b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten// SL_OBJECTID_AUDIOPLAYER, ATTR_POSITION 607b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kastenunsigned handler_AudioPlayer_position(IObject *thiz) 617b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten{ 627b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten CAudioPlayer *ap; 637b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten ap = (CAudioPlayer *) thiz; 64f5ff1a75f55677163bd9a8bd804e8f5c33ef592cGlenn Kasten // FIXME provide means to return result for invalid use cases (e.g. buffer queue data source) 65f5ff1a75f55677163bd9a8bd804e8f5c33ef592cGlenn Kasten (void) android_audioPlayer_seek(ap, ap->mSeek.mPos); 667b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten return ATTR_POSITION; 677b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten} 687b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten 697b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten 707b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten// SL_OBJECTID_MIDIPLAYER, ATTR_POSITION 717b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kastenunsigned handler_MidiPlayer_position(IObject *thiz) 727b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten{ 737b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten SL_LOGD("[ FIXME: position update on an SL_OBJECTID_MIDIPLAYER to be implemented ]"); 747b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten return ATTR_POSITION; 757b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten} 767b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten 777b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten 787b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten// SL_OBJECTID_AUDIOPLAYER, ATTR_TRANSPORT 797b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kastenunsigned handler_AudioPlayer_transport(IObject *thiz) 807b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten{ 817b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten CAudioPlayer *ap = (CAudioPlayer *) thiz; 82bcfe680db1e392f3bb29382c2e15e89c3af783edGlenn Kasten android_audioPlayer_usePlayEventMask(ap); 837b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten return ATTR_TRANSPORT; 847b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten} 857b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten 867b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten 87f4647bf85968ab30eb07f9a80b99177d91068f94Glenn Kasten// SL_OBJECTID_AUDIOPLAYER, ATTR_PLAY_STATE 88f4647bf85968ab30eb07f9a80b99177d91068f94Glenn Kastenunsigned handler_AudioPlayer_play_state(IObject *thiz) 89f4647bf85968ab30eb07f9a80b99177d91068f94Glenn Kasten{ 90f4647bf85968ab30eb07f9a80b99177d91068f94Glenn Kasten CAudioPlayer *ap = (CAudioPlayer *) thiz; 91f4647bf85968ab30eb07f9a80b99177d91068f94Glenn Kasten android_audioPlayer_setPlayState(ap); 92f4647bf85968ab30eb07f9a80b99177d91068f94Glenn Kasten return ATTR_PLAY_STATE; 93f4647bf85968ab30eb07f9a80b99177d91068f94Glenn Kasten} 94f4647bf85968ab30eb07f9a80b99177d91068f94Glenn Kasten 95f4647bf85968ab30eb07f9a80b99177d91068f94Glenn Kasten 967b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten// SL_OBJECTID_AUDIORECORDER, ATTR_TRANSPORT 977b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kastenunsigned handler_AudioRecorder_transport(IObject *thiz) 987b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten{ 997b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten CAudioRecorder* ar = (CAudioRecorder *) thiz; 100bcfe680db1e392f3bb29382c2e15e89c3af783edGlenn Kasten android_audioRecorder_useRecordEventMask(ar); 1017b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten return ATTR_TRANSPORT; 1027b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten} 1037b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten 1047b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten 105bcfe680db1e392f3bb29382c2e15e89c3af783edGlenn Kasten// XA_OBJECTID_MEDIAPLAYER, ATTR_TRANSPORT 1067b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kastenunsigned handler_MediaPlayer_transport(IObject *thiz) 1077b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten{ 1087b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten CMediaPlayer *mp = (CMediaPlayer *) thiz; 109bcfe680db1e392f3bb29382c2e15e89c3af783edGlenn Kasten android_Player_usePlayEventMask(mp); 110bcfe680db1e392f3bb29382c2e15e89c3af783edGlenn Kasten return ATTR_TRANSPORT; 111bcfe680db1e392f3bb29382c2e15e89c3af783edGlenn Kasten} 112bcfe680db1e392f3bb29382c2e15e89c3af783edGlenn Kasten 113bcfe680db1e392f3bb29382c2e15e89c3af783edGlenn Kasten 114bcfe680db1e392f3bb29382c2e15e89c3af783edGlenn Kasten// XA_OBJECTID_MEDIAPLAYER, ATTR_PLAY_STATE 115bcfe680db1e392f3bb29382c2e15e89c3af783edGlenn Kastenunsigned handler_MediaPlayer_play_state(IObject *thiz) 116bcfe680db1e392f3bb29382c2e15e89c3af783edGlenn Kasten{ 117bcfe680db1e392f3bb29382c2e15e89c3af783edGlenn Kasten CMediaPlayer *mp = (CMediaPlayer *) thiz; 1187b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten android::GenericPlayer* avp = mp->mAVPlayer.get(); 1197b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten if (avp != NULL) { 120b8fe327b1505778e82db76de930dd3f62ec99158Glenn Kasten android_Player_setPlayState(avp, mp->mPlay.mState, &mp->mAndroidObjState); 1217b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten } 122bcfe680db1e392f3bb29382c2e15e89c3af783edGlenn Kasten return ATTR_PLAY_STATE; 1237b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten} 1247b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten 1257b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten 1267b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten// SL_OBJECTID_AUDIOPLAYER, ATTR_BQ_ENQUEUE 1277b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kastenunsigned handler_AudioPlayer_bq_enqueue(IObject *thiz) 1287b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten{ 1297b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten // ( buffer queue count is non-empty and play state == PLAYING ) became true 1307b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten CAudioPlayer *ap = (CAudioPlayer *) thiz; 131f4647bf85968ab30eb07f9a80b99177d91068f94Glenn Kasten assert(SL_PLAYSTATE_PLAYING == ap->mPlay.mState); 132f4647bf85968ab30eb07f9a80b99177d91068f94Glenn Kasten android_audioPlayer_bufferQueue_onRefilled_l(ap); 1337b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten return ATTR_BQ_ENQUEUE; 1347b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten} 1357b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten 1367b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten 1377b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten// SL_OBJECTID_AUDIOPLAYER, ATTR_ABQ_ENQUEUE 1387b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kastenunsigned handler_AudioPlayer_abq_enqueue(IObject *thiz) 1397b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten{ 1407b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten // (Android buffer queue count is non-empty and play state == PLAYING ) became true 1417b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten CAudioPlayer *ap = (CAudioPlayer *) thiz; 142f4647bf85968ab30eb07f9a80b99177d91068f94Glenn Kasten assert(SL_PLAYSTATE_PLAYING == ap->mPlay.mState); 143f4647bf85968ab30eb07f9a80b99177d91068f94Glenn Kasten android_audioPlayer_androidBufferQueue_onRefilled_l(ap); 1447b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten return ATTR_ABQ_ENQUEUE; 1457b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten} 1467b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten 1477b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten 1487b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten// XA_OBJECTID_MEDIAPLAYER, ATTR_ABQ_ENQUEUE 1497b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kastenunsigned handler_MediaPlayer_abq_enqueue(IObject *thiz) 1507b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten{ 1517b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten CMediaPlayer* mp = (CMediaPlayer *)thiz; 1527b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten if (SL_PLAYSTATE_PLAYING == mp->mPlay.mState) { 1537b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten android_Player_androidBufferQueue_onRefilled_l(mp); 1547b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten } 1557b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten return ATTR_ABQ_ENQUEUE; 1567b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten} 1577b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten 1587b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten// XA_OBJECTID_MEDIAPLAYER, ATTR_POSITION 1597b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kastenunsigned handler_MediaPlayer_position(IObject *thiz) 1607b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten{ 1617b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten CMediaPlayer *mp = (CMediaPlayer *) thiz; 162f5ff1a75f55677163bd9a8bd804e8f5c33ef592cGlenn Kasten // FIXME provide means to return result for invalid use cases (e.g. buffer queue data source) 163f5ff1a75f55677163bd9a8bd804e8f5c33ef592cGlenn Kasten (void) android_Player_seek(mp, mp->mSeek.mPos); 1647b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten return ATTR_POSITION; 1657b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten} 1667b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten 1677b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten#else // !defined(ANDROID) 1687b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten 1697b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten// SL_OBJECTID_AUDIOPLAYER, ATTR_GAIN 1707b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kastenunsigned handler_AudioPlayer_gain(IObject *thiz) 1717b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten{ 1727b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten CAudioPlayer *ap = (CAudioPlayer *) thiz; 1737b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten audioPlayerGainUpdate(ap); 1747b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten return ATTR_GAIN; 1757b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten} 1767b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten 1777b726bdcd996f1cab3a584c04ce1afc07bc8fbe7Glenn Kasten#endif 178