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