Home | History | Annotate | Download | only in binding
      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 
     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