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 /* Pitch implementation */
18
19 #include "sles_allinclusive.h"
20
21
IPitch_SetPitch(SLPitchItf self,SLpermille pitch)22 static SLresult IPitch_SetPitch(SLPitchItf self, SLpermille pitch)
23 {
24 SL_ENTER_INTERFACE
25
26 IPitch *thiz = (IPitch *) self;
27 // const, so no lock needed
28 if (!(thiz->mMinPitch <= pitch && pitch <= thiz->mMaxPitch)) {
29 result = SL_RESULT_PARAMETER_INVALID;
30 } else {
31 interface_lock_poke(thiz);
32 thiz->mPitch = pitch;
33 interface_unlock_poke(thiz);
34 result = SL_RESULT_SUCCESS;
35 }
36
37 SL_LEAVE_INTERFACE
38 }
39
40
IPitch_GetPitch(SLPitchItf self,SLpermille * pPitch)41 static SLresult IPitch_GetPitch(SLPitchItf self, SLpermille *pPitch)
42 {
43 SL_ENTER_INTERFACE
44
45 if (NULL == pPitch) {
46 result = SL_RESULT_PARAMETER_INVALID;
47 } else {
48 IPitch *thiz = (IPitch *) self;
49 interface_lock_peek(thiz);
50 SLpermille pitch = thiz->mPitch;
51 interface_unlock_peek(thiz);
52 *pPitch = pitch;
53 result = SL_RESULT_SUCCESS;
54 }
55
56 SL_LEAVE_INTERFACE
57 }
58
59
IPitch_GetPitchCapabilities(SLPitchItf self,SLpermille * pMinPitch,SLpermille * pMaxPitch)60 static SLresult IPitch_GetPitchCapabilities(SLPitchItf self,
61 SLpermille *pMinPitch, SLpermille *pMaxPitch)
62 {
63 SL_ENTER_INTERFACE
64
65 // per spec, each is optional, and does not require that at least one must be non-NULL
66 #if 0
67 if (NULL == pMinPitch && NULL == pMaxPitch)
68 result = SL_RESULT_PARAMETER_INVALID;
69 #endif
70 IPitch *thiz = (IPitch *) self;
71 // const, so no lock needed
72 SLpermille minPitch = thiz->mMinPitch;
73 SLpermille maxPitch = thiz->mMaxPitch;
74 if (NULL != pMinPitch)
75 *pMinPitch = minPitch;
76 if (NULL != pMaxPitch)
77 *pMaxPitch = maxPitch;
78 result = SL_RESULT_SUCCESS;
79
80 SL_LEAVE_INTERFACE
81 }
82
83
84 static const struct SLPitchItf_ IPitch_Itf = {
85 IPitch_SetPitch,
86 IPitch_GetPitch,
87 IPitch_GetPitchCapabilities
88 };
89
IPitch_init(void * self)90 void IPitch_init(void *self)
91 {
92 IPitch *thiz = (IPitch *) self;
93 thiz->mItf = &IPitch_Itf;
94 thiz->mPitch = 1000;
95 // const
96 thiz->mMinPitch = -500;
97 thiz->mMaxPitch = 2000;
98 }
99