diff options
author | jiabin <jiabin@google.com> | 2020-02-12 13:05:44 -0800 |
---|---|---|
committer | jiabin <jiabin@google.com> | 2020-02-25 09:08:26 -0800 |
commit | 5d116126946542cd34f68b5be4b1d7bb1ac4ca90 (patch) | |
tree | 15863cc2d77ab1ad7c998f6953d8ee527daff4c6 /audio/core/all-versions/default/StreamOut.cpp | |
parent | 7aab1010d4c58c13187fa0684c38264de8aead17 (diff) |
Add callback for output stream.
The callback is targeted for events related to an output stream.
Currently, there is one callback event defined, which is codec
format changed event.
Bug: 133526565
Test: manual
Test: atest VtsHalAudioV6_0TargetTest
Change-Id: I73a4914c1ffc30e1c88b8fedd61a031e24a069f6
Diffstat (limited to 'audio/core/all-versions/default/StreamOut.cpp')
-rw-r--r-- | audio/core/all-versions/default/StreamOut.cpp | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/audio/core/all-versions/default/StreamOut.cpp b/audio/core/all-versions/default/StreamOut.cpp index 7a4d72bd15..150d641cd0 100644 --- a/audio/core/all-versions/default/StreamOut.cpp +++ b/audio/core/all-versions/default/StreamOut.cpp @@ -22,6 +22,8 @@ //#define LOG_NDEBUG 0 #define ATRACE_TAG ATRACE_TAG_AUDIO +#include <string.h> + #include <memory> #include <android/log.h> @@ -612,6 +614,33 @@ Return<Result> StreamOut::setPlaybackRateParameters(const PlaybackRate& /*playba return Result::NOT_SUPPORTED; } +Return<Result> StreamOut::setEventCallback(const sp<IStreamOutEventCallback>& callback) { + if (mStream->set_event_callback == nullptr) return Result::NOT_SUPPORTED; + int result = mStream->set_event_callback(mStream, StreamOut::asyncEventCallback, this); + if (result == 0) { + mEventCallback = callback; + } + return Stream::analyzeStatus("set_stream_out_callback", result, {ENOSYS} /*ignore*/); +} + +// static +int StreamOut::asyncEventCallback(stream_event_callback_type_t event, void* param, void* cookie) { + StreamOut* self = reinterpret_cast<StreamOut*>(cookie); + sp<IStreamOutEventCallback> eventCallback = self->mEventCallback; + if (eventCallback.get() == nullptr) return 0; + ALOGV("%s event %d", __func__, event); + switch (event) { + case STREAM_EVENT_CBK_TYPE_CODEC_FORMAT_CHANGED: { + hidl_vec<uint8_t> audioMetadata; + audioMetadata.setToExternal((uint8_t*)param, strlen((char*)param)); + eventCallback->onCodecFormatChanged(audioMetadata); + } break; + default: + ALOGW("%s unknown event %d", __func__, event); + break; + } + return 0; +} #endif } // namespace implementation |