Merge changes from topic "bluetoothmodule" into main am: 4bfa2e1e6d
Original change: https://android-review.googlesource.com/c/platform/hardware/interfaces/+/2677924 Change-Id: Ia2ad2cf0b2257db1d281f3ace920c79cd937ae80 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
commit
155c316265
3 changed files with 74 additions and 35 deletions
|
@ -20,6 +20,7 @@
|
|||
#include <android-base/logging.h>
|
||||
#include <android-base/stringprintf.h>
|
||||
#include <android/binder_manager.h>
|
||||
#include <hardware/audio.h>
|
||||
|
||||
#include "BluetoothAudioSession.h"
|
||||
|
||||
|
@ -538,23 +539,9 @@ bool BluetoothAudioSession::GetPresentationPosition(
|
|||
|
||||
void BluetoothAudioSession::UpdateSourceMetadata(
|
||||
const struct source_metadata& source_metadata) {
|
||||
std::lock_guard<std::recursive_mutex> guard(mutex_);
|
||||
if (!IsSessionReady()) {
|
||||
LOG(DEBUG) << __func__ << " - SessionType=" << toString(session_type_)
|
||||
<< " has NO session";
|
||||
return;
|
||||
}
|
||||
|
||||
ssize_t track_count = source_metadata.track_count;
|
||||
LOG(INFO) << __func__ << " - SessionType=" << toString(session_type_) << ","
|
||||
<< track_count << " track(s)";
|
||||
if (session_type_ == SessionType::A2DP_SOFTWARE_ENCODING_DATAPATH ||
|
||||
session_type_ == SessionType::A2DP_HARDWARE_OFFLOAD_ENCODING_DATAPATH ||
|
||||
session_type_ == SessionType::A2DP_SOFTWARE_DECODING_DATAPATH ||
|
||||
session_type_ == SessionType::A2DP_HARDWARE_OFFLOAD_DECODING_DATAPATH) {
|
||||
return;
|
||||
}
|
||||
|
||||
SourceMetadata hal_source_metadata;
|
||||
hal_source_metadata.tracks.resize(track_count);
|
||||
for (int i = 0; i < track_count; i++) {
|
||||
|
@ -571,33 +558,14 @@ void BluetoothAudioSession::UpdateSourceMetadata(
|
|||
<< toString(hal_source_metadata.tracks[i].contentType)
|
||||
<< ", gain=" << hal_source_metadata.tracks[i].gain;
|
||||
}
|
||||
|
||||
auto hal_retval = stack_iface_->updateSourceMetadata(hal_source_metadata);
|
||||
if (!hal_retval.isOk()) {
|
||||
LOG(WARNING) << __func__ << " - IBluetoothAudioPort SessionType="
|
||||
<< toString(session_type_) << " failed";
|
||||
}
|
||||
UpdateSourceMetadata(hal_source_metadata);
|
||||
}
|
||||
|
||||
void BluetoothAudioSession::UpdateSinkMetadata(
|
||||
const struct sink_metadata& sink_metadata) {
|
||||
std::lock_guard<std::recursive_mutex> guard(mutex_);
|
||||
if (!IsSessionReady()) {
|
||||
LOG(DEBUG) << __func__ << " - SessionType=" << toString(session_type_)
|
||||
<< " has NO session";
|
||||
return;
|
||||
}
|
||||
|
||||
ssize_t track_count = sink_metadata.track_count;
|
||||
LOG(INFO) << __func__ << " - SessionType=" << toString(session_type_) << ","
|
||||
<< track_count << " track(s)";
|
||||
if (session_type_ == SessionType::A2DP_SOFTWARE_ENCODING_DATAPATH ||
|
||||
session_type_ == SessionType::A2DP_HARDWARE_OFFLOAD_ENCODING_DATAPATH ||
|
||||
session_type_ == SessionType::A2DP_SOFTWARE_DECODING_DATAPATH ||
|
||||
session_type_ == SessionType::A2DP_HARDWARE_OFFLOAD_DECODING_DATAPATH) {
|
||||
return;
|
||||
}
|
||||
|
||||
SinkMetadata hal_sink_metadata;
|
||||
hal_sink_metadata.tracks.resize(track_count);
|
||||
for (int i = 0; i < track_count; i++) {
|
||||
|
@ -612,12 +580,57 @@ void BluetoothAudioSession::UpdateSinkMetadata(
|
|||
<< ", dest_device_address="
|
||||
<< sink_metadata.tracks[i].dest_device_address;
|
||||
}
|
||||
UpdateSinkMetadata(hal_sink_metadata);
|
||||
}
|
||||
|
||||
bool BluetoothAudioSession::UpdateSourceMetadata(
|
||||
const SourceMetadata& hal_source_metadata) {
|
||||
std::lock_guard<std::recursive_mutex> guard(mutex_);
|
||||
if (!IsSessionReady()) {
|
||||
LOG(DEBUG) << __func__ << " - SessionType=" << toString(session_type_)
|
||||
<< " has NO session";
|
||||
return false;
|
||||
}
|
||||
|
||||
if (session_type_ == SessionType::A2DP_SOFTWARE_ENCODING_DATAPATH ||
|
||||
session_type_ == SessionType::A2DP_HARDWARE_OFFLOAD_ENCODING_DATAPATH ||
|
||||
session_type_ == SessionType::A2DP_SOFTWARE_DECODING_DATAPATH ||
|
||||
session_type_ == SessionType::A2DP_HARDWARE_OFFLOAD_DECODING_DATAPATH) {
|
||||
return false;
|
||||
}
|
||||
|
||||
auto hal_retval = stack_iface_->updateSourceMetadata(hal_source_metadata);
|
||||
if (!hal_retval.isOk()) {
|
||||
LOG(WARNING) << __func__ << " - IBluetoothAudioPort SessionType="
|
||||
<< toString(session_type_) << " failed";
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool BluetoothAudioSession::UpdateSinkMetadata(
|
||||
const SinkMetadata& hal_sink_metadata) {
|
||||
std::lock_guard<std::recursive_mutex> guard(mutex_);
|
||||
if (!IsSessionReady()) {
|
||||
LOG(DEBUG) << __func__ << " - SessionType=" << toString(session_type_)
|
||||
<< " has NO session";
|
||||
return false;
|
||||
}
|
||||
|
||||
if (session_type_ == SessionType::A2DP_SOFTWARE_ENCODING_DATAPATH ||
|
||||
session_type_ == SessionType::A2DP_HARDWARE_OFFLOAD_ENCODING_DATAPATH ||
|
||||
session_type_ == SessionType::A2DP_SOFTWARE_DECODING_DATAPATH ||
|
||||
session_type_ == SessionType::A2DP_HARDWARE_OFFLOAD_DECODING_DATAPATH) {
|
||||
return false;
|
||||
}
|
||||
|
||||
auto hal_retval = stack_iface_->updateSinkMetadata(hal_sink_metadata);
|
||||
if (!hal_retval.isOk()) {
|
||||
LOG(WARNING) << __func__ << " - IBluetoothAudioPort SessionType="
|
||||
<< toString(session_type_) << " failed";
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
std::vector<LatencyMode> BluetoothAudioSession::GetSupportedLatencyModes() {
|
||||
|
|
|
@ -23,12 +23,15 @@
|
|||
#include <aidl/android/hardware/bluetooth/audio/LatencyMode.h>
|
||||
#include <aidl/android/hardware/bluetooth/audio/SessionType.h>
|
||||
#include <fmq/AidlMessageQueue.h>
|
||||
#include <hardware/audio.h>
|
||||
|
||||
#include <mutex>
|
||||
#include <unordered_map>
|
||||
#include <vector>
|
||||
|
||||
// To avoid inclusion of hardware/audio.h
|
||||
struct sink_metadata;
|
||||
struct source_metadata;
|
||||
|
||||
namespace aidl {
|
||||
namespace android {
|
||||
namespace hardware {
|
||||
|
@ -196,6 +199,9 @@ class BluetoothAudioSession {
|
|||
bool GetPresentationPosition(PresentationPosition& presentation_position);
|
||||
void UpdateSourceMetadata(const struct source_metadata& source_metadata);
|
||||
void UpdateSinkMetadata(const struct sink_metadata& sink_metadata);
|
||||
// New versions for AIDL-only clients.
|
||||
bool UpdateSourceMetadata(const SourceMetadata& hal_source_metadata);
|
||||
bool UpdateSinkMetadata(const SinkMetadata& hal_sink_metadata);
|
||||
|
||||
std::vector<LatencyMode> GetSupportedLatencyModes();
|
||||
void SetLatencyMode(const LatencyMode& latency_mode);
|
||||
|
|
|
@ -175,6 +175,26 @@ class BluetoothAudioSessionControl {
|
|||
}
|
||||
}
|
||||
|
||||
static bool UpdateSourceMetadata(const SessionType& session_type,
|
||||
const SourceMetadata& source_metadata) {
|
||||
std::shared_ptr<BluetoothAudioSession> session_ptr =
|
||||
BluetoothAudioSessionInstance::GetSessionInstance(session_type);
|
||||
if (session_ptr != nullptr) {
|
||||
return session_ptr->UpdateSourceMetadata(source_metadata);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
static bool UpdateSinkMetadata(const SessionType& session_type,
|
||||
const SinkMetadata& sink_metadata) {
|
||||
std::shared_ptr<BluetoothAudioSession> session_ptr =
|
||||
BluetoothAudioSessionInstance::GetSessionInstance(session_type);
|
||||
if (session_ptr != nullptr) {
|
||||
return session_ptr->UpdateSinkMetadata(sink_metadata);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
static std::vector<LatencyMode> GetSupportedLatencyModes(
|
||||
const SessionType& session_type) {
|
||||
std::shared_ptr<BluetoothAudioSession> session_ptr =
|
||||
|
|
Loading…
Reference in a new issue