Loading media/libaudiohal/impl/DeviceHalLocal.h +2 −2 Original line number Diff line number Diff line Loading @@ -114,6 +114,8 @@ class DeviceHalLocal : public DeviceHalInterface void closeOutputStream(struct audio_stream_out *stream_out); void closeInputStream(struct audio_stream_in *stream_in); uint32_t version() const { return mDev->common.version; } private: audio_hw_device_t *mDev; Loading @@ -124,8 +126,6 @@ class DeviceHalLocal : public DeviceHalInterface // The destructor automatically closes the device. virtual ~DeviceHalLocal(); uint32_t version() const { return mDev->common.version; } }; } // namespace CPP_VERSION Loading media/libaudiohal/impl/StreamHalHidl.cpp +35 −9 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ #include "DeviceHalHidl.h" #include "EffectHalHidl.h" #include "HidlUtils.h" #include "StreamHalHidl.h" #include "VersionUtils.h" Loading Loading @@ -610,12 +611,25 @@ status_t StreamOutHalHidl::updateSourceMetadata( const StreamOutHalInterface::SourceMetadata& sourceMetadata) { CPP_VERSION::SourceMetadata halMetadata = { .tracks = transformToHidlVec(sourceMetadata.tracks, [](const playback_track_metadata& metadata) -> PlaybackTrackMetadata { return { .usage=static_cast<AudioUsage>(metadata.usage), .contentType=static_cast<AudioContentType>(metadata.content_type), .gain=metadata.gain, [](const playback_track_metadata_v7& metadata) -> PlaybackTrackMetadata { PlaybackTrackMetadata halTrackMetadata = { .usage=static_cast<AudioUsage>(metadata.base.usage), .contentType=static_cast<AudioContentType>(metadata.base.content_type), .gain=metadata.base.gain, }; #if MAJOR_VERSION >= 7 HidlUtils::audioChannelMaskFromHal(metadata.channel_mask, false /*isInput*/, &halTrackMetadata.channelMask); std::istringstream tags{metadata.tags}; std::string tag; while (std::getline(tags, tag, HidlUtils::sAudioTagSeparator)) { if (!tag.empty()) { halTrackMetadata.tags.push_back(tag); } } #endif return halTrackMetadata; })}; return processReturn("updateSourceMetadata", mStream->updateSourceMetadata(halMetadata)); } Loading Loading @@ -902,11 +916,23 @@ status_t StreamInHalHidl::updateSinkMetadata(const StreamInHalInterface::SinkMetadata& sinkMetadata) { CPP_VERSION::SinkMetadata halMetadata = { .tracks = transformToHidlVec(sinkMetadata.tracks, [](const record_track_metadata& metadata) -> RecordTrackMetadata { return { .source=static_cast<AudioSource>(metadata.source), .gain=metadata.gain, [](const record_track_metadata_v7& metadata) -> RecordTrackMetadata { RecordTrackMetadata halTrackMetadata = { .source=static_cast<AudioSource>(metadata.base.source), .gain=metadata.base.gain, }; #if MAJOR_VERSION >= 7 HidlUtils::audioChannelMaskFromHal(metadata.channel_mask, true /*isInput*/, &halTrackMetadata.channelMask); std::istringstream tags{metadata.tags}; std::string tag; while (std::getline(tags, tag, HidlUtils::sAudioTagSeparator)) { if (!tag.empty()) { halTrackMetadata.tags.push_back(tag); } } #endif return halTrackMetadata; })}; return processReturn("updateSinkMetadata", mStream->updateSinkMetadata(halMetadata)); } Loading media/libaudiohal/impl/StreamHalLocal.cpp +83 −11 Original line number Diff line number Diff line Loading @@ -241,19 +241,55 @@ status_t StreamOutHalLocal::getPresentationPosition(uint64_t *frames, struct tim return mStream->get_presentation_position(mStream, frames, timestamp); } status_t StreamOutHalLocal::updateSourceMetadata(const SourceMetadata& sourceMetadata) { if (mStream->update_source_metadata == nullptr) { return INVALID_OPERATION; void StreamOutHalLocal::doUpdateSourceMetadata(const SourceMetadata& sourceMetadata) { std::vector<playback_track_metadata> halTracks; halTracks.reserve(sourceMetadata.tracks.size()); for (auto& metadata : sourceMetadata.tracks) { playback_track_metadata halTrackMetadata; playback_track_metadata_from_v7(&halTrackMetadata, &metadata); halTracks.push_back(halTrackMetadata); } const source_metadata_t halMetadata = { .track_count = halTracks.size(), .tracks = halTracks.data(), }; mStream->update_source_metadata(mStream, &halMetadata); } #if MAJOR_VERSION >= 7 void StreamOutHalLocal::doUpdateSourceMetadataV7(const SourceMetadata& sourceMetadata) { const source_metadata_t metadata { .track_count = sourceMetadata.tracks.size(), // const cast is fine as it is in a const structure .tracks = const_cast<playback_track_metadata*>(sourceMetadata.tracks.data()), .tracks = const_cast<playback_track_metadata_v7*>(sourceMetadata.tracks.data()), }; mStream->update_source_metadata(mStream, &metadata); mStream->update_source_metadata_v7(mStream, &metadata); } #endif status_t StreamOutHalLocal::updateSourceMetadata(const SourceMetadata& sourceMetadata) { #if MAJOR_VERSION < 7 if (mStream->update_source_metadata == nullptr) { return INVALID_OPERATION; } doUpdateSourceMetadata(sourceMetadata); #else if (mDevice->version() < AUDIO_DEVICE_API_VERSION_3_2) if (mStream->update_source_metadata == nullptr) { return INVALID_OPERATION; } doUpdateSourceMetadata(sourceMetadata); } else { if (mStream->update_source_metadata_v7 == nullptr) { return INVALID_OPERATION; } doUpdateSourceMetadataV7(sourceMetadata); } #endif return OK; } status_t StreamOutHalLocal::start() { if (mStream->start == NULL) return INVALID_OPERATION; return mStream->start(mStream); Loading Loading @@ -352,16 +388,52 @@ status_t StreamInHalLocal::getCapturePosition(int64_t *frames, int64_t *time) { return mStream->get_capture_position(mStream, frames, time); } status_t StreamInHalLocal::updateSinkMetadata(const SinkMetadata& sinkMetadata) { if (mStream->update_sink_metadata == nullptr) { return INVALID_OPERATION; void StreamInHalLocal::doUpdateSinkMetadata(const SinkMetadata& sinkMetadata) { std::vector<record_track_metadata> halTracks; halTracks.reserve(sinkMetadata.tracks.size()); for (auto& metadata : sinkMetadata.tracks) { record_track_metadata halTrackMetadata; record_track_metadata_from_v7(&halTrackMetadata, &metadata); halTracks.push_back(halTrackMetadata); } const sink_metadata_t halMetadata = { .track_count = halTracks.size(), .tracks = halTracks.data(), }; mStream->update_sink_metadata(mStream, &halMetadata); } const sink_metadata_t metadata { #if MAJOR_VERSION >= 7 void StreamInHalLocal::doUpdateSinkMetadataV7(const SinkMetadata& sinkMetadata) { const sink_metadata_v7_t halMetadata { .track_count = sinkMetadata.tracks.size(), // const cast is fine as it is in a const structure .tracks = const_cast<record_track_metadata*>(sinkMetadata.tracks.data()), .tracks = const_cast<record_track_metadata_v7*>(sinkMetadata.tracks.data()), }; mStream->update_sink_metadata(mStream, &metadata); mStream->update_sink_metadata_v7(mStream, &halMetadata); } #endif status_t StreamInHalLocal::updateSinkMetadata(const SinkMetadata& sinkMetadata) { #if MAJOR_VERSION < 7 if (mStream->update_sink_metadata == nullptr) { return INVALID_OPERATION; // not supported by the HAL } doUpdateSinkMetadata(sinkMetadata); #else if (mDevice->version() < AUDIO_DEVICE_API_VERSION_3_2) if (mStream->update_sink_metadata == nullptr) { return INVALID_OPERATION; // not supported by the HAL } doUpdateSinkMetadata(sinkMetadata); } else { if (mStream->update_sink_metadata_v7 == nullptr) { return INVALID_OPERATION; // not supported by the HAL } doUpdateSinkMetadataV7(sinkMetadata); } #endif return OK; } Loading media/libaudiohal/impl/StreamHalLocal.h +6 −0 Original line number Diff line number Diff line Loading @@ -173,6 +173,9 @@ class StreamOutHalLocal : public StreamOutHalInterface, public StreamHalLocal { static int asyncCallback(stream_callback_event_t event, void *param, void *cookie); static int asyncEventCallback(stream_event_callback_type_t event, void *param, void *cookie); void doUpdateSourceMetadataV7(const SourceMetadata& sourceMetadata); void doUpdateSourceMetadata(const SourceMetadata& sourceMetadata); }; class StreamInHalLocal : public StreamInHalInterface, public StreamHalLocal { Loading Loading @@ -227,6 +230,9 @@ class StreamInHalLocal : public StreamInHalInterface, public StreamHalLocal { StreamInHalLocal(audio_stream_in_t *stream, sp<DeviceHalLocal> device); virtual ~StreamInHalLocal(); void doUpdateSinkMetadata(const SinkMetadata& sinkMetadata); void doUpdateSinkMetadataV7(const SinkMetadata& sinkMetadata); }; } // namespace CPP_VERSION Loading media/libaudiohal/include/media/audiohal/StreamHalInterface.h +2 −2 Original line number Diff line number Diff line Loading @@ -158,7 +158,7 @@ class StreamOutHalInterface : public virtual StreamHalInterface { virtual status_t getPresentationPosition(uint64_t *frames, struct timespec *timestamp) = 0; struct SourceMetadata { std::vector<playback_track_metadata_t> tracks; std::vector<playback_track_metadata_v7_t> tracks; }; /** * Called when the metadata of the stream's source has been changed. Loading Loading @@ -197,7 +197,7 @@ class StreamInHalInterface : public virtual StreamHalInterface { virtual status_t setPreferredMicrophoneFieldDimension(float zoom) = 0; struct SinkMetadata { std::vector<record_track_metadata_t> tracks; std::vector<record_track_metadata_v7_t> tracks; }; /** * Called when the metadata of the stream's sink has been changed. Loading Loading
media/libaudiohal/impl/DeviceHalLocal.h +2 −2 Original line number Diff line number Diff line Loading @@ -114,6 +114,8 @@ class DeviceHalLocal : public DeviceHalInterface void closeOutputStream(struct audio_stream_out *stream_out); void closeInputStream(struct audio_stream_in *stream_in); uint32_t version() const { return mDev->common.version; } private: audio_hw_device_t *mDev; Loading @@ -124,8 +126,6 @@ class DeviceHalLocal : public DeviceHalInterface // The destructor automatically closes the device. virtual ~DeviceHalLocal(); uint32_t version() const { return mDev->common.version; } }; } // namespace CPP_VERSION Loading
media/libaudiohal/impl/StreamHalHidl.cpp +35 −9 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ #include "DeviceHalHidl.h" #include "EffectHalHidl.h" #include "HidlUtils.h" #include "StreamHalHidl.h" #include "VersionUtils.h" Loading Loading @@ -610,12 +611,25 @@ status_t StreamOutHalHidl::updateSourceMetadata( const StreamOutHalInterface::SourceMetadata& sourceMetadata) { CPP_VERSION::SourceMetadata halMetadata = { .tracks = transformToHidlVec(sourceMetadata.tracks, [](const playback_track_metadata& metadata) -> PlaybackTrackMetadata { return { .usage=static_cast<AudioUsage>(metadata.usage), .contentType=static_cast<AudioContentType>(metadata.content_type), .gain=metadata.gain, [](const playback_track_metadata_v7& metadata) -> PlaybackTrackMetadata { PlaybackTrackMetadata halTrackMetadata = { .usage=static_cast<AudioUsage>(metadata.base.usage), .contentType=static_cast<AudioContentType>(metadata.base.content_type), .gain=metadata.base.gain, }; #if MAJOR_VERSION >= 7 HidlUtils::audioChannelMaskFromHal(metadata.channel_mask, false /*isInput*/, &halTrackMetadata.channelMask); std::istringstream tags{metadata.tags}; std::string tag; while (std::getline(tags, tag, HidlUtils::sAudioTagSeparator)) { if (!tag.empty()) { halTrackMetadata.tags.push_back(tag); } } #endif return halTrackMetadata; })}; return processReturn("updateSourceMetadata", mStream->updateSourceMetadata(halMetadata)); } Loading Loading @@ -902,11 +916,23 @@ status_t StreamInHalHidl::updateSinkMetadata(const StreamInHalInterface::SinkMetadata& sinkMetadata) { CPP_VERSION::SinkMetadata halMetadata = { .tracks = transformToHidlVec(sinkMetadata.tracks, [](const record_track_metadata& metadata) -> RecordTrackMetadata { return { .source=static_cast<AudioSource>(metadata.source), .gain=metadata.gain, [](const record_track_metadata_v7& metadata) -> RecordTrackMetadata { RecordTrackMetadata halTrackMetadata = { .source=static_cast<AudioSource>(metadata.base.source), .gain=metadata.base.gain, }; #if MAJOR_VERSION >= 7 HidlUtils::audioChannelMaskFromHal(metadata.channel_mask, true /*isInput*/, &halTrackMetadata.channelMask); std::istringstream tags{metadata.tags}; std::string tag; while (std::getline(tags, tag, HidlUtils::sAudioTagSeparator)) { if (!tag.empty()) { halTrackMetadata.tags.push_back(tag); } } #endif return halTrackMetadata; })}; return processReturn("updateSinkMetadata", mStream->updateSinkMetadata(halMetadata)); } Loading
media/libaudiohal/impl/StreamHalLocal.cpp +83 −11 Original line number Diff line number Diff line Loading @@ -241,19 +241,55 @@ status_t StreamOutHalLocal::getPresentationPosition(uint64_t *frames, struct tim return mStream->get_presentation_position(mStream, frames, timestamp); } status_t StreamOutHalLocal::updateSourceMetadata(const SourceMetadata& sourceMetadata) { if (mStream->update_source_metadata == nullptr) { return INVALID_OPERATION; void StreamOutHalLocal::doUpdateSourceMetadata(const SourceMetadata& sourceMetadata) { std::vector<playback_track_metadata> halTracks; halTracks.reserve(sourceMetadata.tracks.size()); for (auto& metadata : sourceMetadata.tracks) { playback_track_metadata halTrackMetadata; playback_track_metadata_from_v7(&halTrackMetadata, &metadata); halTracks.push_back(halTrackMetadata); } const source_metadata_t halMetadata = { .track_count = halTracks.size(), .tracks = halTracks.data(), }; mStream->update_source_metadata(mStream, &halMetadata); } #if MAJOR_VERSION >= 7 void StreamOutHalLocal::doUpdateSourceMetadataV7(const SourceMetadata& sourceMetadata) { const source_metadata_t metadata { .track_count = sourceMetadata.tracks.size(), // const cast is fine as it is in a const structure .tracks = const_cast<playback_track_metadata*>(sourceMetadata.tracks.data()), .tracks = const_cast<playback_track_metadata_v7*>(sourceMetadata.tracks.data()), }; mStream->update_source_metadata(mStream, &metadata); mStream->update_source_metadata_v7(mStream, &metadata); } #endif status_t StreamOutHalLocal::updateSourceMetadata(const SourceMetadata& sourceMetadata) { #if MAJOR_VERSION < 7 if (mStream->update_source_metadata == nullptr) { return INVALID_OPERATION; } doUpdateSourceMetadata(sourceMetadata); #else if (mDevice->version() < AUDIO_DEVICE_API_VERSION_3_2) if (mStream->update_source_metadata == nullptr) { return INVALID_OPERATION; } doUpdateSourceMetadata(sourceMetadata); } else { if (mStream->update_source_metadata_v7 == nullptr) { return INVALID_OPERATION; } doUpdateSourceMetadataV7(sourceMetadata); } #endif return OK; } status_t StreamOutHalLocal::start() { if (mStream->start == NULL) return INVALID_OPERATION; return mStream->start(mStream); Loading Loading @@ -352,16 +388,52 @@ status_t StreamInHalLocal::getCapturePosition(int64_t *frames, int64_t *time) { return mStream->get_capture_position(mStream, frames, time); } status_t StreamInHalLocal::updateSinkMetadata(const SinkMetadata& sinkMetadata) { if (mStream->update_sink_metadata == nullptr) { return INVALID_OPERATION; void StreamInHalLocal::doUpdateSinkMetadata(const SinkMetadata& sinkMetadata) { std::vector<record_track_metadata> halTracks; halTracks.reserve(sinkMetadata.tracks.size()); for (auto& metadata : sinkMetadata.tracks) { record_track_metadata halTrackMetadata; record_track_metadata_from_v7(&halTrackMetadata, &metadata); halTracks.push_back(halTrackMetadata); } const sink_metadata_t halMetadata = { .track_count = halTracks.size(), .tracks = halTracks.data(), }; mStream->update_sink_metadata(mStream, &halMetadata); } const sink_metadata_t metadata { #if MAJOR_VERSION >= 7 void StreamInHalLocal::doUpdateSinkMetadataV7(const SinkMetadata& sinkMetadata) { const sink_metadata_v7_t halMetadata { .track_count = sinkMetadata.tracks.size(), // const cast is fine as it is in a const structure .tracks = const_cast<record_track_metadata*>(sinkMetadata.tracks.data()), .tracks = const_cast<record_track_metadata_v7*>(sinkMetadata.tracks.data()), }; mStream->update_sink_metadata(mStream, &metadata); mStream->update_sink_metadata_v7(mStream, &halMetadata); } #endif status_t StreamInHalLocal::updateSinkMetadata(const SinkMetadata& sinkMetadata) { #if MAJOR_VERSION < 7 if (mStream->update_sink_metadata == nullptr) { return INVALID_OPERATION; // not supported by the HAL } doUpdateSinkMetadata(sinkMetadata); #else if (mDevice->version() < AUDIO_DEVICE_API_VERSION_3_2) if (mStream->update_sink_metadata == nullptr) { return INVALID_OPERATION; // not supported by the HAL } doUpdateSinkMetadata(sinkMetadata); } else { if (mStream->update_sink_metadata_v7 == nullptr) { return INVALID_OPERATION; // not supported by the HAL } doUpdateSinkMetadataV7(sinkMetadata); } #endif return OK; } Loading
media/libaudiohal/impl/StreamHalLocal.h +6 −0 Original line number Diff line number Diff line Loading @@ -173,6 +173,9 @@ class StreamOutHalLocal : public StreamOutHalInterface, public StreamHalLocal { static int asyncCallback(stream_callback_event_t event, void *param, void *cookie); static int asyncEventCallback(stream_event_callback_type_t event, void *param, void *cookie); void doUpdateSourceMetadataV7(const SourceMetadata& sourceMetadata); void doUpdateSourceMetadata(const SourceMetadata& sourceMetadata); }; class StreamInHalLocal : public StreamInHalInterface, public StreamHalLocal { Loading Loading @@ -227,6 +230,9 @@ class StreamInHalLocal : public StreamInHalInterface, public StreamHalLocal { StreamInHalLocal(audio_stream_in_t *stream, sp<DeviceHalLocal> device); virtual ~StreamInHalLocal(); void doUpdateSinkMetadata(const SinkMetadata& sinkMetadata); void doUpdateSinkMetadataV7(const SinkMetadata& sinkMetadata); }; } // namespace CPP_VERSION Loading
media/libaudiohal/include/media/audiohal/StreamHalInterface.h +2 −2 Original line number Diff line number Diff line Loading @@ -158,7 +158,7 @@ class StreamOutHalInterface : public virtual StreamHalInterface { virtual status_t getPresentationPosition(uint64_t *frames, struct timespec *timestamp) = 0; struct SourceMetadata { std::vector<playback_track_metadata_t> tracks; std::vector<playback_track_metadata_v7_t> tracks; }; /** * Called when the metadata of the stream's source has been changed. Loading Loading @@ -197,7 +197,7 @@ class StreamInHalInterface : public virtual StreamHalInterface { virtual status_t setPreferredMicrophoneFieldDimension(float zoom) = 0; struct SinkMetadata { std::vector<record_track_metadata_t> tracks; std::vector<record_track_metadata_v7_t> tracks; }; /** * Called when the metadata of the stream's sink has been changed. Loading