mirror of
https://github.com/Evolution-X/hardware_interfaces
synced 2026-02-01 16:50:18 +00:00
Merge "Legacy wrapper: Use arbitrary limit on buffer size" into oc-mr1-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
0f65d6e38a
@@ -49,6 +49,13 @@ using ::android::sp;
|
||||
struct Stream : public IStream, public ParametersUtil {
|
||||
explicit Stream(audio_stream_t* stream);
|
||||
|
||||
/** 1GiB is the maximum buffer size the HAL client is allowed to request.
|
||||
* This value has been chosen to be under SIZE_MAX and still big enough
|
||||
* for all audio use case.
|
||||
* Keep private for 2.0, put in .hal in 2.1
|
||||
*/
|
||||
static constexpr uint32_t MAX_BUFFER_SIZE = 2 << 30 /* == 1GiB */;
|
||||
|
||||
// Methods from ::android::hardware::audio::V2_0::IStream follow.
|
||||
Return<uint64_t> getFrameSize() override;
|
||||
Return<uint64_t> getFrameCount() override;
|
||||
|
||||
@@ -347,14 +347,10 @@ Return<void> StreamIn::prepareForReading(uint32_t frameSize,
|
||||
sendError(Result::INVALID_ARGUMENTS);
|
||||
return Void();
|
||||
}
|
||||
// A message queue asserts if it can not handle the requested buffer,
|
||||
// thus the client has to guess the maximum size it can handle
|
||||
// Choose an arbitrary margin for the overhead of a message queue
|
||||
size_t metadataOverhead = 100000;
|
||||
if (frameSize >
|
||||
(std::numeric_limits<size_t>::max() - metadataOverhead) / framesCount) {
|
||||
ALOGE("Buffer too big: %u*%u bytes can not fit in a message queue",
|
||||
frameSize, framesCount);
|
||||
|
||||
if (frameSize > Stream::MAX_BUFFER_SIZE / framesCount) {
|
||||
ALOGE("Buffer too big: %u*%u bytes > MAX_BUFFER_SIZE (%u)", frameSize, framesCount,
|
||||
Stream::MAX_BUFFER_SIZE);
|
||||
sendError(Result::INVALID_ARGUMENTS);
|
||||
return Void();
|
||||
}
|
||||
|
||||
@@ -323,14 +323,9 @@ Return<void> StreamOut::prepareForWriting(uint32_t frameSize,
|
||||
sendError(Result::INVALID_ARGUMENTS);
|
||||
return Void();
|
||||
}
|
||||
// A message queue asserts if it can not handle the requested buffer,
|
||||
// thus the client has to guess the maximum size it can handle
|
||||
size_t metadataOverhead =
|
||||
100000; // Arbitrary margin for the overhead of a message queue
|
||||
if (frameSize >
|
||||
(std::numeric_limits<size_t>::max() - metadataOverhead) / framesCount) {
|
||||
ALOGE("Buffer too big: %u*%u bytes can not fit in a message queue",
|
||||
frameSize, framesCount);
|
||||
if (frameSize > Stream::MAX_BUFFER_SIZE / framesCount) {
|
||||
ALOGE("Buffer too big: %u*%u bytes > MAX_BUFFER_SIZE (%u)", frameSize, framesCount,
|
||||
Stream::MAX_BUFFER_SIZE);
|
||||
sendError(Result::INVALID_ARGUMENTS);
|
||||
return Void();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user