blob: 958f7a727d0a0209b3febd9a0fa4171c0902ce1c [file] [log] [blame]
Phil Burk828bea52017-01-03 17:22:09 -08001/*
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 BINDING_OBOESERVICEDEFINITIONS_H
18#define BINDING_OBOESERVICEDEFINITIONS_H
19
20#include <stdint.h>
21#include <utils/RefBase.h>
22#include <binder/TextOutput.h>
23#include <binder/IInterface.h>
24
25#include <oboe/OboeAudio.h>
26
27using android::NO_ERROR;
28using android::IBinder;
29
30namespace oboe {
31
32enum oboe_commands_t {
33 OPEN_STREAM = IBinder::FIRST_CALL_TRANSACTION,
34 CLOSE_STREAM,
35 GET_STREAM_DESCRIPTION,
36 START_STREAM,
37 PAUSE_STREAM,
38 FLUSH_STREAM,
39 REGISTER_AUDIO_THREAD,
40 UNREGISTER_AUDIO_THREAD,
41 TICKLE
42};
43
44// TODO Expand this to include all the open parameters.
45typedef struct OboeServiceStreamInfo_s {
46 int32_t deviceId;
47 int32_t samplesPerFrame; // number of channels
48 oboe_sample_rate_t sampleRate;
49 oboe_audio_format_t audioFormat;
50} OboeServiceStreamInfo;
51
52// This must be a fixed width so it can be in shared memory.
53enum RingbufferFlags : uint32_t {
54 NONE = 0,
55 RATE_ISOCHRONOUS = 0x0001,
56 RATE_ASYNCHRONOUS = 0x0002,
57 COHERENCY_DMA = 0x0004,
58 COHERENCY_ACQUIRE_RELEASE = 0x0008,
59 COHERENCY_AUTO = 0x0010,
60};
61
62// This is not passed through Binder.
63// Client side code will convert Binder data and fill this descriptor.
64typedef struct RingBufferDescriptor_s {
65 uint8_t* dataAddress; // offset from read or write block
66 int64_t* writeCounterAddress;
67 int64_t* readCounterAddress;
68 int32_t bytesPerFrame; // index is in frames
69 int32_t framesPerBurst; // for ISOCHRONOUS queues
70 int32_t capacityInFrames; // zero if unused
71 RingbufferFlags flags;
72} RingBufferDescriptor;
73
74// This is not passed through Binder.
75// Client side code will convert Binder data and fill this descriptor.
76typedef struct EndpointDescriptor_s {
77 // Set capacityInFrames to zero if Queue is unused.
78 RingBufferDescriptor upMessageQueueDescriptor; // server to client
79 RingBufferDescriptor downMessageQueueDescriptor; // client to server
80 RingBufferDescriptor upDataQueueDescriptor; // eg. record
81 RingBufferDescriptor downDataQueueDescriptor; // eg. playback
82} EndpointDescriptor;
83
84} // namespace oboe
85
86#endif //BINDING_OBOESERVICEDEFINITIONS_H