1 /*
2  * Copyright (C) 2017 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 #ifndef ANDROID_AAUDIO_BINDING_AAUDIO_SERVICE_INTERFACE_H
18 #define ANDROID_AAUDIO_BINDING_AAUDIO_SERVICE_INTERFACE_H
19 
20 #include "binding/AAudioServiceDefinitions.h"
21 #include "binding/AAudioStreamRequest.h"
22 #include "binding/AAudioStreamConfiguration.h"
23 #include "binding/AudioEndpointParcelable.h"
24 
25 /**
26  * This has the same methods as IAAudioService but without the Binder features.
27  *
28  * It allows us to abstract the Binder interface and use an AudioStreamInternal
29  * both in the client and in the service.
30  */
31 namespace aaudio {
32 
33 class AAudioServiceInterface {
34 public:
35 
AAudioServiceInterface()36     AAudioServiceInterface() {};
37     virtual ~AAudioServiceInterface() = default;
38 
39     /**
40      * @param request info needed to create the stream
41      * @param configuration contains information about the created stream
42      * @return handle to the stream or a negative error
43      */
44     virtual aaudio_handle_t openStream(const AAudioStreamRequest &request,
45                                        AAudioStreamConfiguration &configuration) = 0;
46 
47     virtual aaudio_result_t closeStream(aaudio_handle_t streamHandle) = 0;
48 
49     /* Get an immutable description of the in-memory queues
50     * used to communicate with the underlying HAL or Service.
51     */
52     virtual aaudio_result_t getStreamDescription(aaudio_handle_t streamHandle,
53                                                  AudioEndpointParcelable &parcelable) = 0;
54 
55     /**
56      * Start the flow of data.
57      */
58     virtual aaudio_result_t startStream(aaudio_handle_t streamHandle) = 0;
59 
60     /**
61      * Stop the flow of data such that start() can resume without loss of data.
62      */
63     virtual aaudio_result_t pauseStream(aaudio_handle_t streamHandle) = 0;
64 
65     /**
66      * Stop the flow of data after data currently inthe buffer has played.
67      */
68     virtual aaudio_result_t stopStream(aaudio_handle_t streamHandle) = 0;
69 
70     /**
71      *  Discard any data held by the underlying HAL or Service.
72      */
73     virtual aaudio_result_t flushStream(aaudio_handle_t streamHandle) = 0;
74 
75     /**
76      * Manage the specified thread as a low latency audio thread.
77      */
78     virtual aaudio_result_t registerAudioThread(aaudio_handle_t streamHandle,
79                                                 pid_t clientProcessId,
80                                                 pid_t clientThreadId,
81                                                 int64_t periodNanoseconds) = 0;
82 
83     virtual aaudio_result_t unregisterAudioThread(aaudio_handle_t streamHandle,
84                                                   pid_t clientProcessId,
85                                                   pid_t clientThreadId) = 0;
86 };
87 
88 } /* namespace aaudio */
89 
90 #endif //ANDROID_AAUDIO_BINDING_AAUDIO_SERVICE_INTERFACE_H
91