diff --git a/audio/2.0/default/Device.cpp b/audio/2.0/default/Device.cpp index 8a51cd7d51..5ced0bcb0a 100644 --- a/audio/2.0/default/Device.cpp +++ b/audio/2.0/default/Device.cpp @@ -59,6 +59,14 @@ Result Device::analyzeStatus(const char* funcName, int status) { } } +void Device::closeInputStream(audio_stream_in_t* stream) { + mDevice->close_input_stream(mDevice, stream); +} + +void Device::closeOutputStream(audio_stream_out_t* stream) { + mDevice->close_output_stream(mDevice, stream); +} + char* Device::halGetParameters(const char* keys) { return mDevice->get_parameters(mDevice, keys); } @@ -160,7 +168,7 @@ Return Device::openOutputStream( ALOGV("open_output_stream status %d stream %p", status, halStream); sp streamOut; if (status == OK) { - streamOut = new StreamOut(mDevice, halStream); + streamOut = new StreamOut(this, halStream); } AudioConfig suggestedConfig; HidlUtils::audioConfigFromHal(halConfig, &suggestedConfig); @@ -196,7 +204,7 @@ Return Device::openInputStream( ALOGV("open_input_stream status %d stream %p", status, halStream); sp streamIn; if (status == OK) { - streamIn = new StreamIn(mDevice, halStream); + streamIn = new StreamIn(this, halStream); } AudioConfig suggestedConfig; HidlUtils::audioConfigFromHal(halConfig, &suggestedConfig); diff --git a/audio/2.0/default/Device.h b/audio/2.0/default/Device.h index 46177fc97b..7738361075 100644 --- a/audio/2.0/default/Device.h +++ b/audio/2.0/default/Device.h @@ -98,6 +98,8 @@ struct Device : public IDevice, public ParametersUtil { // Utility methods for extending interfaces. Result analyzeStatus(const char* funcName, int status); + void closeInputStream(audio_stream_in_t* stream); + void closeOutputStream(audio_stream_out_t* stream); audio_hw_device_t* device() const { return mDevice; } private: diff --git a/audio/2.0/default/StreamIn.cpp b/audio/2.0/default/StreamIn.cpp index b641e823c6..2745607e8b 100644 --- a/audio/2.0/default/StreamIn.cpp +++ b/audio/2.0/default/StreamIn.cpp @@ -135,7 +135,7 @@ bool ReadThread::threadLoop() { } // namespace -StreamIn::StreamIn(audio_hw_device_t* device, audio_stream_in_t* stream) +StreamIn::StreamIn(const sp& device, audio_stream_in_t* stream) : mIsClosed(false), mDevice(device), mStream(stream), mStreamCommon(new Stream(&stream->common)), mStreamMmap(new StreamMmap(stream)), @@ -154,9 +154,8 @@ StreamIn::~StreamIn() { status_t status = EventFlag::deleteEventFlag(&mEfGroup); ALOGE_IF(status, "read MQ event flag deletion error: %s", strerror(-status)); } - mDevice->close_input_stream(mDevice, mStream); + mDevice->closeInputStream(mStream); mStream = nullptr; - mDevice = nullptr; } // Methods from ::android::hardware::audio::V2_0::IStream follow. diff --git a/audio/2.0/default/StreamIn.h b/audio/2.0/default/StreamIn.h index b867387412..950d68fc73 100644 --- a/audio/2.0/default/StreamIn.h +++ b/audio/2.0/default/StreamIn.h @@ -27,6 +27,7 @@ #include #include +#include "Device.h" #include "Stream.h" namespace android { @@ -55,7 +56,7 @@ struct StreamIn : public IStreamIn { typedef MessageQueue DataMQ; typedef MessageQueue StatusMQ; - StreamIn(audio_hw_device_t* device, audio_stream_in_t* stream); + StreamIn(const sp& device, audio_stream_in_t* stream); // Methods from ::android::hardware::audio::V2_0::IStream follow. Return getFrameSize() override; @@ -101,10 +102,10 @@ struct StreamIn : public IStreamIn { private: bool mIsClosed; - audio_hw_device_t *mDevice; + const sp mDevice; audio_stream_in_t *mStream; - sp mStreamCommon; - sp> mStreamMmap; + const sp mStreamCommon; + const sp> mStreamMmap; std::unique_ptr mCommandMQ; std::unique_ptr mDataMQ; std::unique_ptr mStatusMQ; diff --git a/audio/2.0/default/StreamOut.cpp b/audio/2.0/default/StreamOut.cpp index d820f3cee5..88045a0afe 100644 --- a/audio/2.0/default/StreamOut.cpp +++ b/audio/2.0/default/StreamOut.cpp @@ -135,7 +135,7 @@ bool WriteThread::threadLoop() { } // namespace -StreamOut::StreamOut(audio_hw_device_t* device, audio_stream_out_t* stream) +StreamOut::StreamOut(const sp& device, audio_stream_out_t* stream) : mIsClosed(false), mDevice(device), mStream(stream), mStreamCommon(new Stream(&stream->common)), mStreamMmap(new StreamMmap(stream)), @@ -155,9 +155,8 @@ StreamOut::~StreamOut() { ALOGE_IF(status, "write MQ event flag deletion error: %s", strerror(-status)); } mCallback.clear(); - mDevice->close_output_stream(mDevice, mStream); + mDevice->closeOutputStream(mStream); mStream = nullptr; - mDevice = nullptr; } // Methods from ::android::hardware::audio::V2_0::IStream follow. diff --git a/audio/2.0/default/StreamOut.h b/audio/2.0/default/StreamOut.h index bbe64a1764..99352bc305 100644 --- a/audio/2.0/default/StreamOut.h +++ b/audio/2.0/default/StreamOut.h @@ -27,6 +27,7 @@ #include #include +#include "Device.h" #include "Stream.h" namespace android { @@ -57,7 +58,7 @@ struct StreamOut : public IStreamOut { typedef MessageQueue DataMQ; typedef MessageQueue StatusMQ; - StreamOut(audio_hw_device_t* device, audio_stream_out_t* stream); + StreamOut(const sp& device, audio_stream_out_t* stream); // Methods from ::android::hardware::audio::V2_0::IStream follow. Return getFrameSize() override; @@ -112,10 +113,10 @@ struct StreamOut : public IStreamOut { private: bool mIsClosed; - audio_hw_device_t *mDevice; + const sp mDevice; audio_stream_out_t *mStream; - sp mStreamCommon; - sp> mStreamMmap; + const sp mStreamCommon; + const sp> mStreamMmap; sp mCallback; std::unique_ptr mCommandMQ; std::unique_ptr mDataMQ;