blob: 14a955c5fffe28de83eb94d2973ea5072f74d1e0 [file] [log] [blame]
Cheney Niaef115f2018-11-07 08:41:55 +08001/*
2 * Copyright 2019 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#pragma once
18
19#include <hardware/audio.h>
20#include <system/audio.h>
21
22#include "device_port_proxy.h"
23
24constexpr unsigned int kBluetoothDefaultSampleRate = 44100;
25constexpr audio_format_t kBluetoothDefaultAudioFormatBitsPerSample =
26 AUDIO_FORMAT_PCM_16_BIT;
27
28constexpr unsigned int kBluetoothDefaultInputBufferMs = 20;
29
30constexpr unsigned int kBluetoothDefaultOutputBufferMs = 10;
31constexpr audio_channel_mask_t kBluetoothDefaultOutputChannelModeMask =
32 AUDIO_CHANNEL_OUT_STEREO;
33
34enum class BluetoothStreamState : uint8_t {
35 DISABLED = 0, // This stream is closing or set param "suspend=true"
36 STANDBY,
37 STARTING,
38 STARTED,
39 SUSPENDING,
40 UNKNOWN,
41};
42
43std::ostream& operator<<(std::ostream& os, const BluetoothStreamState& state);
44
45struct BluetoothStreamOut {
46 // Must be the first member so it can be cast from audio_stream
47 // or audio_stream_out pointer
48 audio_stream_out stream_out_;
49 ::android::bluetooth::audio::BluetoothAudioPortOut bluetooth_output_;
50 int64_t last_write_time_us_;
51 // Audio PCM Configs
52 uint32_t sample_rate_;
53 audio_channel_mask_t channel_mask_;
54 audio_format_t format_;
55 // frame is the number of samples per channel
56 // frames count per tick
57 size_t frames_count_;
58 // total frames written, reset on standby
59 uint64_t frames_rendered_;
60 // total frames written after opened, never reset
61 uint64_t frames_presented_;
62 mutable std::mutex mutex_;
63};
64
65int adev_open_output_stream(struct audio_hw_device* dev,
66 audio_io_handle_t handle, audio_devices_t devices,
67 audio_output_flags_t flags,
68 struct audio_config* config,
69 struct audio_stream_out** stream_out,
70 const char* address __unused);
71
72void adev_close_output_stream(struct audio_hw_device* dev,
73 struct audio_stream_out* stream);
74
75size_t adev_get_input_buffer_size(const struct audio_hw_device* dev,
76 const struct audio_config* config);
77
78int adev_open_input_stream(struct audio_hw_device* dev,
79 audio_io_handle_t handle, audio_devices_t devices,
80 struct audio_config* config,
81 struct audio_stream_in** stream_in,
82 audio_input_flags_t flags __unused,
83 const char* address __unused,
84 audio_source_t source __unused);
85
86void adev_close_input_stream(struct audio_hw_device* dev,
87 struct audio_stream_in* in);