Loading include/media/audiohal/StreamHalInterface.h +13 −0 Original line number Diff line number Diff line Loading @@ -62,6 +62,19 @@ class StreamHalInterface : public virtual RefBase virtual status_t dump(int fd) = 0; // Start a stream operating in mmap mode. virtual status_t start() = 0; // Stop a stream operating in mmap mode. virtual status_t stop() = 0; // Retrieve information on the data buffer in mmap mode. virtual status_t createMmapBuffer(int32_t minSizeFrames, struct audio_mmap_buffer_info *info) = 0; // Get current read/write position in the mmap buffer virtual status_t getMmapPosition(struct audio_mmap_position *position) = 0; protected: // Subclasses can not be constructed directly by clients. StreamHalInterface() {} Loading media/libaudiohal/StreamHalHidl.cpp +47 −0 Original line number Diff line number Diff line Loading @@ -31,6 +31,8 @@ using ::android::hardware::audio::V2_0::IStreamOutCallback; using ::android::hardware::audio::V2_0::ParameterValue; using ::android::hardware::audio::V2_0::Result; using ::android::hardware::audio::V2_0::TimeSpec; using ::android::hardware::audio::V2_0::MmapBufferInfo; using ::android::hardware::audio::V2_0::MmapPosition; using ::android::hardware::Return; using ::android::hardware::Void; Loading Loading @@ -128,6 +130,51 @@ status_t StreamHalHidl::dump(int fd) { return processReturn("dump", ret); } status_t StreamHalHidl::start() { if (!mStream) return NO_INIT; return processReturn("start", mStream->start()); } status_t StreamHalHidl::stop() { if (!mStream) return NO_INIT; return processReturn("stop", mStream->stop()); } status_t StreamHalHidl::createMmapBuffer(int32_t minSizeFrames, struct audio_mmap_buffer_info *info) { Result retval; Return<void> ret = mStream->createMmapBuffer( minSizeFrames, [&](Result r, const MmapBufferInfo& hidlInfo) { retval = r; if (retval == Result::OK) { native_handle *handle = hidlInfo.sharedMemory->handle(); if (handle->numFds > 0) { info->shared_memory_fd = dup(handle->data[0]); info->buffer_size_frames = hidlInfo.bufferSizeFrames; info->burst_size_frames = hidlInfo.burstSizeFrames; // info->shared_memory_address is not needed in HIDL context info->shared_memory_address = NULL; } else { retval = Result::NOT_INITIALIZED; } } }); return processReturn("createMmapBuffer", ret, retval); } status_t StreamHalHidl::getMmapPosition(struct audio_mmap_position *position) { Result retval; Return<void> ret = mStream->getMmapPosition( [&](Result r, const MmapPosition& hidlPosition) { retval = r; if (retval == Result::OK) { position->time_nanoseconds = hidlPosition.timeNanoseconds; position->position_frames = hidlPosition.positionFrames; } }); return processReturn("getMmapPosition", ret, retval); } namespace { Loading media/libaudiohal/StreamHalHidl.h +13 −0 Original line number Diff line number Diff line Loading @@ -67,6 +67,19 @@ class StreamHalHidl : public virtual StreamHalInterface, public ConversionHelper virtual status_t dump(int fd); // Start a stream operating in mmap mode. virtual status_t start(); // Stop a stream operating in mmap mode. virtual status_t stop(); // Retrieve information on the data buffer in mmap mode. virtual status_t createMmapBuffer(int32_t minSizeFrames, struct audio_mmap_buffer_info *info); // Get current read/write position in the mmap buffer virtual status_t getMmapPosition(struct audio_mmap_position *position); protected: // Subclasses can not be constructed directly by clients. explicit StreamHalHidl(IStream *stream); Loading media/libaudiohal/StreamHalLocal.cpp +41 −0 Original line number Diff line number Diff line Loading @@ -215,6 +215,26 @@ status_t StreamOutHalLocal::getPresentationPosition(uint64_t *frames, struct tim return mStream->get_presentation_position(mStream, frames, timestamp); } status_t StreamOutHalLocal::start() { if (mStream->start == NULL) return INVALID_OPERATION; return mStream->start(mStream); } status_t StreamOutHalLocal::stop() { if (mStream->stop == NULL) return INVALID_OPERATION; return mStream->stop(mStream); } status_t StreamOutHalLocal::createMmapBuffer(int32_t minSizeFrames, struct audio_mmap_buffer_info *info) { if (mStream->create_mmap_buffer == NULL) return INVALID_OPERATION; return mStream->create_mmap_buffer(mStream, minSizeFrames, info); } status_t StreamOutHalLocal::getMmapPosition(struct audio_mmap_position *position) { if (mStream->get_mmap_position == NULL) return INVALID_OPERATION; return mStream->get_mmap_position(mStream, position); } StreamInHalLocal::StreamInHalLocal(audio_stream_in_t *stream, sp<DeviceHalLocal> device) : StreamHalLocal(&stream->common, device), mStream(stream) { Loading Loading @@ -255,4 +275,25 @@ status_t StreamInHalLocal::getCapturePosition(int64_t *frames, int64_t *time) { return mStream->get_capture_position(mStream, frames, time); } status_t StreamInHalLocal::start() { if (mStream->start == NULL) return INVALID_OPERATION; return mStream->start(mStream); } status_t StreamInHalLocal::stop() { if (mStream->stop == NULL) return INVALID_OPERATION; return mStream->stop(mStream); } status_t StreamInHalLocal::createMmapBuffer(int32_t minSizeFrames, struct audio_mmap_buffer_info *info) { if (mStream->create_mmap_buffer == NULL) return INVALID_OPERATION; return mStream->create_mmap_buffer(mStream, minSizeFrames, info); } status_t StreamInHalLocal::getMmapPosition(struct audio_mmap_position *position) { if (mStream->get_mmap_position == NULL) return INVALID_OPERATION; return mStream->get_mmap_position(mStream, position); } } // namespace android media/libaudiohal/StreamHalLocal.h +39 −0 Original line number Diff line number Diff line Loading @@ -57,6 +57,19 @@ class StreamHalLocal : public virtual StreamHalInterface virtual status_t dump(int fd); // Start a stream operating in mmap mode. virtual status_t start() = 0; // Stop a stream operating in mmap mode. virtual status_t stop() = 0; // Retrieve information on the data buffer in mmap mode. virtual status_t createMmapBuffer(int32_t minSizeFrames, struct audio_mmap_buffer_info *info) = 0; // Get current read/write position in the mmap buffer virtual status_t getMmapPosition(struct audio_mmap_position *position) = 0; protected: // Subclasses can not be constructed directly by clients. StreamHalLocal(audio_stream_t *stream, sp<DeviceHalLocal> device); Loading Loading @@ -115,6 +128,19 @@ class StreamOutHalLocal : public StreamOutHalInterface, public StreamHalLocal { // Return a recent count of the number of audio frames presented to an external observer. virtual status_t getPresentationPosition(uint64_t *frames, struct timespec *timestamp); // Start a stream operating in mmap mode. virtual status_t start(); // Stop a stream operating in mmap mode. virtual status_t stop(); // Retrieve information on the data buffer in mmap mode. virtual status_t createMmapBuffer(int32_t minSizeFrames, struct audio_mmap_buffer_info *info); // Get current read/write position in the mmap buffer virtual status_t getMmapPosition(struct audio_mmap_position *position); private: audio_stream_out_t *mStream; wp<StreamOutHalInterfaceCallback> mCallback; Loading Loading @@ -147,6 +173,19 @@ class StreamInHalLocal : public StreamInHalInterface, public StreamHalLocal { // the clock time associated with that frame count. virtual status_t getCapturePosition(int64_t *frames, int64_t *time); // Start a stream operating in mmap mode. virtual status_t start(); // Stop a stream operating in mmap mode. virtual status_t stop(); // Retrieve information on the data buffer in mmap mode. virtual status_t createMmapBuffer(int32_t minSizeFrames, struct audio_mmap_buffer_info *info); // Get current read/write position in the mmap buffer virtual status_t getMmapPosition(struct audio_mmap_position *position); private: audio_stream_in_t *mStream; Loading Loading
include/media/audiohal/StreamHalInterface.h +13 −0 Original line number Diff line number Diff line Loading @@ -62,6 +62,19 @@ class StreamHalInterface : public virtual RefBase virtual status_t dump(int fd) = 0; // Start a stream operating in mmap mode. virtual status_t start() = 0; // Stop a stream operating in mmap mode. virtual status_t stop() = 0; // Retrieve information on the data buffer in mmap mode. virtual status_t createMmapBuffer(int32_t minSizeFrames, struct audio_mmap_buffer_info *info) = 0; // Get current read/write position in the mmap buffer virtual status_t getMmapPosition(struct audio_mmap_position *position) = 0; protected: // Subclasses can not be constructed directly by clients. StreamHalInterface() {} Loading
media/libaudiohal/StreamHalHidl.cpp +47 −0 Original line number Diff line number Diff line Loading @@ -31,6 +31,8 @@ using ::android::hardware::audio::V2_0::IStreamOutCallback; using ::android::hardware::audio::V2_0::ParameterValue; using ::android::hardware::audio::V2_0::Result; using ::android::hardware::audio::V2_0::TimeSpec; using ::android::hardware::audio::V2_0::MmapBufferInfo; using ::android::hardware::audio::V2_0::MmapPosition; using ::android::hardware::Return; using ::android::hardware::Void; Loading Loading @@ -128,6 +130,51 @@ status_t StreamHalHidl::dump(int fd) { return processReturn("dump", ret); } status_t StreamHalHidl::start() { if (!mStream) return NO_INIT; return processReturn("start", mStream->start()); } status_t StreamHalHidl::stop() { if (!mStream) return NO_INIT; return processReturn("stop", mStream->stop()); } status_t StreamHalHidl::createMmapBuffer(int32_t minSizeFrames, struct audio_mmap_buffer_info *info) { Result retval; Return<void> ret = mStream->createMmapBuffer( minSizeFrames, [&](Result r, const MmapBufferInfo& hidlInfo) { retval = r; if (retval == Result::OK) { native_handle *handle = hidlInfo.sharedMemory->handle(); if (handle->numFds > 0) { info->shared_memory_fd = dup(handle->data[0]); info->buffer_size_frames = hidlInfo.bufferSizeFrames; info->burst_size_frames = hidlInfo.burstSizeFrames; // info->shared_memory_address is not needed in HIDL context info->shared_memory_address = NULL; } else { retval = Result::NOT_INITIALIZED; } } }); return processReturn("createMmapBuffer", ret, retval); } status_t StreamHalHidl::getMmapPosition(struct audio_mmap_position *position) { Result retval; Return<void> ret = mStream->getMmapPosition( [&](Result r, const MmapPosition& hidlPosition) { retval = r; if (retval == Result::OK) { position->time_nanoseconds = hidlPosition.timeNanoseconds; position->position_frames = hidlPosition.positionFrames; } }); return processReturn("getMmapPosition", ret, retval); } namespace { Loading
media/libaudiohal/StreamHalHidl.h +13 −0 Original line number Diff line number Diff line Loading @@ -67,6 +67,19 @@ class StreamHalHidl : public virtual StreamHalInterface, public ConversionHelper virtual status_t dump(int fd); // Start a stream operating in mmap mode. virtual status_t start(); // Stop a stream operating in mmap mode. virtual status_t stop(); // Retrieve information on the data buffer in mmap mode. virtual status_t createMmapBuffer(int32_t minSizeFrames, struct audio_mmap_buffer_info *info); // Get current read/write position in the mmap buffer virtual status_t getMmapPosition(struct audio_mmap_position *position); protected: // Subclasses can not be constructed directly by clients. explicit StreamHalHidl(IStream *stream); Loading
media/libaudiohal/StreamHalLocal.cpp +41 −0 Original line number Diff line number Diff line Loading @@ -215,6 +215,26 @@ status_t StreamOutHalLocal::getPresentationPosition(uint64_t *frames, struct tim return mStream->get_presentation_position(mStream, frames, timestamp); } status_t StreamOutHalLocal::start() { if (mStream->start == NULL) return INVALID_OPERATION; return mStream->start(mStream); } status_t StreamOutHalLocal::stop() { if (mStream->stop == NULL) return INVALID_OPERATION; return mStream->stop(mStream); } status_t StreamOutHalLocal::createMmapBuffer(int32_t minSizeFrames, struct audio_mmap_buffer_info *info) { if (mStream->create_mmap_buffer == NULL) return INVALID_OPERATION; return mStream->create_mmap_buffer(mStream, minSizeFrames, info); } status_t StreamOutHalLocal::getMmapPosition(struct audio_mmap_position *position) { if (mStream->get_mmap_position == NULL) return INVALID_OPERATION; return mStream->get_mmap_position(mStream, position); } StreamInHalLocal::StreamInHalLocal(audio_stream_in_t *stream, sp<DeviceHalLocal> device) : StreamHalLocal(&stream->common, device), mStream(stream) { Loading Loading @@ -255,4 +275,25 @@ status_t StreamInHalLocal::getCapturePosition(int64_t *frames, int64_t *time) { return mStream->get_capture_position(mStream, frames, time); } status_t StreamInHalLocal::start() { if (mStream->start == NULL) return INVALID_OPERATION; return mStream->start(mStream); } status_t StreamInHalLocal::stop() { if (mStream->stop == NULL) return INVALID_OPERATION; return mStream->stop(mStream); } status_t StreamInHalLocal::createMmapBuffer(int32_t minSizeFrames, struct audio_mmap_buffer_info *info) { if (mStream->create_mmap_buffer == NULL) return INVALID_OPERATION; return mStream->create_mmap_buffer(mStream, minSizeFrames, info); } status_t StreamInHalLocal::getMmapPosition(struct audio_mmap_position *position) { if (mStream->get_mmap_position == NULL) return INVALID_OPERATION; return mStream->get_mmap_position(mStream, position); } } // namespace android
media/libaudiohal/StreamHalLocal.h +39 −0 Original line number Diff line number Diff line Loading @@ -57,6 +57,19 @@ class StreamHalLocal : public virtual StreamHalInterface virtual status_t dump(int fd); // Start a stream operating in mmap mode. virtual status_t start() = 0; // Stop a stream operating in mmap mode. virtual status_t stop() = 0; // Retrieve information on the data buffer in mmap mode. virtual status_t createMmapBuffer(int32_t minSizeFrames, struct audio_mmap_buffer_info *info) = 0; // Get current read/write position in the mmap buffer virtual status_t getMmapPosition(struct audio_mmap_position *position) = 0; protected: // Subclasses can not be constructed directly by clients. StreamHalLocal(audio_stream_t *stream, sp<DeviceHalLocal> device); Loading Loading @@ -115,6 +128,19 @@ class StreamOutHalLocal : public StreamOutHalInterface, public StreamHalLocal { // Return a recent count of the number of audio frames presented to an external observer. virtual status_t getPresentationPosition(uint64_t *frames, struct timespec *timestamp); // Start a stream operating in mmap mode. virtual status_t start(); // Stop a stream operating in mmap mode. virtual status_t stop(); // Retrieve information on the data buffer in mmap mode. virtual status_t createMmapBuffer(int32_t minSizeFrames, struct audio_mmap_buffer_info *info); // Get current read/write position in the mmap buffer virtual status_t getMmapPosition(struct audio_mmap_position *position); private: audio_stream_out_t *mStream; wp<StreamOutHalInterfaceCallback> mCallback; Loading Loading @@ -147,6 +173,19 @@ class StreamInHalLocal : public StreamInHalInterface, public StreamHalLocal { // the clock time associated with that frame count. virtual status_t getCapturePosition(int64_t *frames, int64_t *time); // Start a stream operating in mmap mode. virtual status_t start(); // Stop a stream operating in mmap mode. virtual status_t stop(); // Retrieve information on the data buffer in mmap mode. virtual status_t createMmapBuffer(int32_t minSizeFrames, struct audio_mmap_buffer_info *info); // Get current read/write position in the mmap buffer virtual status_t getMmapPosition(struct audio_mmap_position *position); private: audio_stream_in_t *mStream; Loading