Home | History | Annotate | Download | only in binding
      1 /*
      2  * Copyright (C) 2016 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_IAAUDIO_SERVICE_H
     18 #define ANDROID_AAUDIO_IAAUDIO_SERVICE_H
     19 
     20 #include <stdint.h>
     21 #include <utils/RefBase.h>
     22 #include <binder/TextOutput.h>
     23 #include <binder/IInterface.h>
     24 
     25 #include <aaudio/AAudio.h>
     26 
     27 #include "binding/AAudioCommon.h"
     28 #include "binding/AAudioServiceDefinitions.h"
     29 #include "binding/AAudioStreamConfiguration.h"
     30 #include "binding/AAudioStreamRequest.h"
     31 #include "binding/AudioEndpointParcelable.h"
     32 #include "binding/IAAudioClient.h"
     33 
     34 namespace android {
     35 
     36 #define AAUDIO_SERVICE_NAME  "media.aaudio"
     37 
     38 // Interface (our AIDL) - service methods called by client
     39 class IAAudioService : public IInterface {
     40 public:
     41 
     42     DECLARE_META_INTERFACE(AAudioService);
     43 
     44     // Register an object to receive audio input/output change and track notifications.
     45     // For a given calling pid, AAudio service disregards any registrations after the first.
     46     // Thus the IAAudioClient must be a singleton per process.
     47     virtual void registerClient(const sp<IAAudioClient>& client) = 0;
     48 
     49     /**
     50      * @param request info needed to create the stream
     51      * @param configuration contains information about the created stream
     52      * @return handle to the stream or a negative error
     53      */
     54     virtual aaudio::aaudio_handle_t openStream(const aaudio::AAudioStreamRequest &request,
     55                                      aaudio::AAudioStreamConfiguration &configurationOutput) = 0;
     56 
     57     virtual aaudio_result_t closeStream(aaudio::aaudio_handle_t streamHandle) = 0;
     58 
     59     /* Get an immutable description of the in-memory queues
     60     * used to communicate with the underlying HAL or Service.
     61     */
     62     virtual aaudio_result_t getStreamDescription(aaudio::aaudio_handle_t streamHandle,
     63                                                aaudio::AudioEndpointParcelable &parcelable) = 0;
     64 
     65     /**
     66      * Start the flow of data.
     67      * This is asynchronous. When complete, the service will send a STARTED event.
     68      */
     69     virtual aaudio_result_t startStream(aaudio::aaudio_handle_t streamHandle) = 0;
     70 
     71     /**
     72      * Stop the flow of data such that start() can resume without loss of data.
     73      * This is asynchronous. When complete, the service will send a PAUSED event.
     74      */
     75     virtual aaudio_result_t pauseStream(aaudio::aaudio_handle_t streamHandle) = 0;
     76 
     77     /**
     78      * Stop the flow of data such that the data currently in the buffer is played.
     79      * This is asynchronous. When complete, the service will send a STOPPED event.
     80      */
     81     virtual aaudio_result_t stopStream(aaudio::aaudio_handle_t streamHandle) = 0;
     82 
     83     /**
     84      *  Discard any data held by the underlying HAL or Service.
     85      * This is asynchronous. When complete, the service will send a FLUSHED event.
     86      */
     87     virtual aaudio_result_t flushStream(aaudio::aaudio_handle_t streamHandle) = 0;
     88 
     89     /**
     90      * Manage the specified thread as a low latency audio thread.
     91      */
     92     virtual aaudio_result_t registerAudioThread(aaudio::aaudio_handle_t streamHandle,
     93                                               pid_t clientThreadId,
     94                                               int64_t periodNanoseconds) = 0;
     95 
     96     virtual aaudio_result_t unregisterAudioThread(aaudio::aaudio_handle_t streamHandle,
     97                                                 pid_t clientThreadId) = 0;
     98 };
     99 
    100 class BnAAudioService : public BnInterface<IAAudioService> {
    101 public:
    102     virtual status_t onTransact(uint32_t code, const Parcel& data,
    103                                 Parcel* reply, uint32_t flags = 0);
    104 
    105 };
    106 
    107 } /* namespace android */
    108 
    109 #endif //ANDROID_AAUDIO_IAAUDIO_SERVICE_H
    110