aboutsummaryrefslogtreecommitdiff
path: root/common/V4L2Device.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'common/V4L2Device.cpp')
-rw-r--r--common/V4L2Device.cpp121
1 files changed, 50 insertions, 71 deletions
diff --git a/common/V4L2Device.cpp b/common/V4L2Device.cpp
index 68a9dca..a31d82b 100644
--- a/common/V4L2Device.cpp
+++ b/common/V4L2Device.cpp
@@ -313,7 +313,7 @@ private:
V4L2BufferRefBase::V4L2BufferRefBase(const struct v4l2_buffer& v4l2Buffer,
base::WeakPtr<V4L2Queue> queue)
: mQueue(std::move(queue)), mReturnTo(mQueue->mFreeBuffers) {
- DCHECK_CALLED_ON_VALID_SEQUENCE(mSequenceChecker);
+ ALOG_ASSERT(mSequenceChecker.CalledOnValidSequence());
ALOG_ASSERT(V4L2_TYPE_IS_MULTIPLANAR(v4l2Buffer.type));
ALOG_ASSERT(v4l2Buffer.length <= base::size(mV4l2Planes));
ALOG_ASSERT(mReturnTo);
@@ -331,7 +331,7 @@ V4L2BufferRefBase::~V4L2BufferRefBase() {
}
bool V4L2BufferRefBase::queueBuffer() {
- DCHECK_CALLED_ON_VALID_SEQUENCE(mSequenceChecker);
+ ALOG_ASSERT(mSequenceChecker.CalledOnValidSequence());
if (!mQueue) return false;
@@ -341,7 +341,7 @@ bool V4L2BufferRefBase::queueBuffer() {
}
void* V4L2BufferRefBase::getPlaneMapping(const size_t plane) {
- DCHECK_CALLED_ON_VALID_SEQUENCE(mSequenceChecker);
+ ALOG_ASSERT(mSequenceChecker.CalledOnValidSequence());
if (!mQueue) return nullptr;
@@ -349,7 +349,7 @@ void* V4L2BufferRefBase::getPlaneMapping(const size_t plane) {
}
bool V4L2BufferRefBase::checkNumFDsForFormat(const size_t numFds) const {
- DCHECK_CALLED_ON_VALID_SEQUENCE(mSequenceChecker);
+ ALOG_ASSERT(mSequenceChecker.CalledOnValidSequence());
if (!mQueue) return false;
@@ -383,24 +383,24 @@ bool V4L2BufferRefBase::checkNumFDsForFormat(const size_t numFds) const {
V4L2WritableBufferRef::V4L2WritableBufferRef(const struct v4l2_buffer& v4l2Buffer,
base::WeakPtr<V4L2Queue> queue)
: mBufferData(std::make_unique<V4L2BufferRefBase>(v4l2Buffer, std::move(queue))) {
- DCHECK_CALLED_ON_VALID_SEQUENCE(mSequenceChecker);
+ ALOG_ASSERT(mSequenceChecker.CalledOnValidSequence());
}
V4L2WritableBufferRef::V4L2WritableBufferRef(V4L2WritableBufferRef&& other)
: mBufferData(std::move(other.mBufferData)) {
- DCHECK_CALLED_ON_VALID_SEQUENCE(mSequenceChecker);
+ ALOG_ASSERT(mSequenceChecker.CalledOnValidSequence());
DCHECK_CALLED_ON_VALID_SEQUENCE(other.mSequenceChecker);
}
V4L2WritableBufferRef::~V4L2WritableBufferRef() {
// Only valid references should be sequence-checked
if (mBufferData) {
- DCHECK_CALLED_ON_VALID_SEQUENCE(mSequenceChecker);
+ ALOG_ASSERT(mSequenceChecker.CalledOnValidSequence());
}
}
V4L2WritableBufferRef& V4L2WritableBufferRef::operator=(V4L2WritableBufferRef&& other) {
- DCHECK_CALLED_ON_VALID_SEQUENCE(mSequenceChecker);
+ ALOG_ASSERT(mSequenceChecker.CalledOnValidSequence());
DCHECK_CALLED_ON_VALID_SEQUENCE(other.mSequenceChecker);
if (this == &other) return *this;
@@ -411,14 +411,14 @@ V4L2WritableBufferRef& V4L2WritableBufferRef::operator=(V4L2WritableBufferRef&&
}
enum v4l2_memory V4L2WritableBufferRef::memory() const {
- DCHECK_CALLED_ON_VALID_SEQUENCE(mSequenceChecker);
+ ALOG_ASSERT(mSequenceChecker.CalledOnValidSequence());
ALOG_ASSERT(mBufferData);
return static_cast<enum v4l2_memory>(mBufferData->mV4l2Buffer.memory);
}
bool V4L2WritableBufferRef::doQueue() && {
- DCHECK_CALLED_ON_VALID_SEQUENCE(mSequenceChecker);
+ ALOG_ASSERT(mSequenceChecker.CalledOnValidSequence());
ALOG_ASSERT(mBufferData);
bool queued = mBufferData->queueBuffer();
@@ -430,7 +430,7 @@ bool V4L2WritableBufferRef::doQueue() && {
}
bool V4L2WritableBufferRef::queueMMap() && {
- DCHECK_CALLED_ON_VALID_SEQUENCE(mSequenceChecker);
+ ALOG_ASSERT(mSequenceChecker.CalledOnValidSequence());
ALOG_ASSERT(mBufferData);
// Move ourselves so our data gets freed no matter when we return
@@ -445,7 +445,7 @@ bool V4L2WritableBufferRef::queueMMap() && {
}
bool V4L2WritableBufferRef::queueUserPtr(const std::vector<void*>& ptrs) && {
- DCHECK_CALLED_ON_VALID_SEQUENCE(mSequenceChecker);
+ ALOG_ASSERT(mSequenceChecker.CalledOnValidSequence());
ALOG_ASSERT(mBufferData);
// Move ourselves so our data gets freed no matter when we return
@@ -471,7 +471,7 @@ bool V4L2WritableBufferRef::queueUserPtr(const std::vector<void*>& ptrs) && {
}
bool V4L2WritableBufferRef::queueDMABuf(const std::vector<int>& fds) && {
- DCHECK_CALLED_ON_VALID_SEQUENCE(mSequenceChecker);
+ ALOG_ASSERT(mSequenceChecker.CalledOnValidSequence());
ALOG_ASSERT(mBufferData);
// Move ourselves so our data gets freed no matter when we return
@@ -491,14 +491,14 @@ bool V4L2WritableBufferRef::queueDMABuf(const std::vector<int>& fds) && {
}
size_t V4L2WritableBufferRef::planesCount() const {
- DCHECK_CALLED_ON_VALID_SEQUENCE(mSequenceChecker);
+ ALOG_ASSERT(mSequenceChecker.CalledOnValidSequence());
ALOG_ASSERT(mBufferData);
return mBufferData->mV4l2Buffer.length;
}
size_t V4L2WritableBufferRef::getPlaneSize(const size_t plane) const {
- DCHECK_CALLED_ON_VALID_SEQUENCE(mSequenceChecker);
+ ALOG_ASSERT(mSequenceChecker.CalledOnValidSequence());
ALOG_ASSERT(mBufferData);
if (plane >= planesCount()) {
@@ -510,7 +510,7 @@ size_t V4L2WritableBufferRef::getPlaneSize(const size_t plane) const {
}
void V4L2WritableBufferRef::setPlaneSize(const size_t plane, const size_t size) {
- DCHECK_CALLED_ON_VALID_SEQUENCE(mSequenceChecker);
+ ALOG_ASSERT(mSequenceChecker.CalledOnValidSequence());
ALOG_ASSERT(mBufferData);
enum v4l2_memory mem = memory();
@@ -529,28 +529,28 @@ void V4L2WritableBufferRef::setPlaneSize(const size_t plane, const size_t size)
}
void* V4L2WritableBufferRef::getPlaneMapping(const size_t plane) {
- DCHECK_CALLED_ON_VALID_SEQUENCE(mSequenceChecker);
+ ALOG_ASSERT(mSequenceChecker.CalledOnValidSequence());
ALOG_ASSERT(mBufferData);
return mBufferData->getPlaneMapping(plane);
}
void V4L2WritableBufferRef::setTimeStamp(const struct timeval& timestamp) {
- DCHECK_CALLED_ON_VALID_SEQUENCE(mSequenceChecker);
+ ALOG_ASSERT(mSequenceChecker.CalledOnValidSequence());
ALOG_ASSERT(mBufferData);
mBufferData->mV4l2Buffer.timestamp = timestamp;
}
const struct timeval& V4L2WritableBufferRef::getTimeStamp() const {
- DCHECK_CALLED_ON_VALID_SEQUENCE(mSequenceChecker);
+ ALOG_ASSERT(mSequenceChecker.CalledOnValidSequence());
ALOG_ASSERT(mBufferData);
return mBufferData->mV4l2Buffer.timestamp;
}
void V4L2WritableBufferRef::setPlaneBytesUsed(const size_t plane, const size_t bytesUsed) {
- DCHECK_CALLED_ON_VALID_SEQUENCE(mSequenceChecker);
+ ALOG_ASSERT(mSequenceChecker.CalledOnValidSequence());
ALOG_ASSERT(mBufferData);
if (plane >= planesCount()) {
@@ -567,7 +567,7 @@ void V4L2WritableBufferRef::setPlaneBytesUsed(const size_t plane, const size_t b
}
size_t V4L2WritableBufferRef::getPlaneBytesUsed(const size_t plane) const {
- DCHECK_CALLED_ON_VALID_SEQUENCE(mSequenceChecker);
+ ALOG_ASSERT(mSequenceChecker.CalledOnValidSequence());
ALOG_ASSERT(mBufferData);
if (plane >= planesCount()) {
@@ -579,7 +579,7 @@ size_t V4L2WritableBufferRef::getPlaneBytesUsed(const size_t plane) const {
}
void V4L2WritableBufferRef::setPlaneDataOffset(const size_t plane, const size_t dataOffset) {
- DCHECK_CALLED_ON_VALID_SEQUENCE(mSequenceChecker);
+ ALOG_ASSERT(mSequenceChecker.CalledOnValidSequence());
ALOG_ASSERT(mBufferData);
if (plane >= planesCount()) {
@@ -591,7 +591,7 @@ void V4L2WritableBufferRef::setPlaneDataOffset(const size_t plane, const size_t
}
size_t V4L2WritableBufferRef::bufferId() const {
- DCHECK_CALLED_ON_VALID_SEQUENCE(mSequenceChecker);
+ ALOG_ASSERT(mSequenceChecker.CalledOnValidSequence());
ALOG_ASSERT(mBufferData);
return mBufferData->mV4l2Buffer.index;
@@ -600,7 +600,7 @@ size_t V4L2WritableBufferRef::bufferId() const {
V4L2ReadableBuffer::V4L2ReadableBuffer(const struct v4l2_buffer& v4l2Buffer,
base::WeakPtr<V4L2Queue> queue)
: mBufferData(std::make_unique<V4L2BufferRefBase>(v4l2Buffer, std::move(queue))) {
- DCHECK_CALLED_ON_VALID_SEQUENCE(mSequenceChecker);
+ ALOG_ASSERT(mSequenceChecker.CalledOnValidSequence());
}
V4L2ReadableBuffer::~V4L2ReadableBuffer() {
@@ -611,42 +611,42 @@ V4L2ReadableBuffer::~V4L2ReadableBuffer() {
}
bool V4L2ReadableBuffer::isLast() const {
- DCHECK_CALLED_ON_VALID_SEQUENCE(mSequenceChecker);
+ ALOG_ASSERT(mSequenceChecker.CalledOnValidSequence());
ALOG_ASSERT(mBufferData);
return mBufferData->mV4l2Buffer.flags & V4L2_BUF_FLAG_LAST;
}
bool V4L2ReadableBuffer::isKeyframe() const {
- DCHECK_CALLED_ON_VALID_SEQUENCE(mSequenceChecker);
+ ALOG_ASSERT(mSequenceChecker.CalledOnValidSequence());
ALOG_ASSERT(mBufferData);
return mBufferData->mV4l2Buffer.flags & V4L2_BUF_FLAG_KEYFRAME;
}
struct timeval V4L2ReadableBuffer::getTimeStamp() const {
- DCHECK_CALLED_ON_VALID_SEQUENCE(mSequenceChecker);
+ ALOG_ASSERT(mSequenceChecker.CalledOnValidSequence());
ALOG_ASSERT(mBufferData);
return mBufferData->mV4l2Buffer.timestamp;
}
size_t V4L2ReadableBuffer::planesCount() const {
- DCHECK_CALLED_ON_VALID_SEQUENCE(mSequenceChecker);
+ ALOG_ASSERT(mSequenceChecker.CalledOnValidSequence());
ALOG_ASSERT(mBufferData);
return mBufferData->mV4l2Buffer.length;
}
const void* V4L2ReadableBuffer::getPlaneMapping(const size_t plane) const {
- DCHECK_CALLED_ON_VALID_SEQUENCE(mSequenceChecker);
+ ALOG_ASSERT(mSequenceChecker.CalledOnValidSequence());
DCHECK(mBufferData);
return mBufferData->getPlaneMapping(plane);
}
size_t V4L2ReadableBuffer::getPlaneBytesUsed(const size_t plane) const {
- DCHECK_CALLED_ON_VALID_SEQUENCE(mSequenceChecker);
+ ALOG_ASSERT(mSequenceChecker.CalledOnValidSequence());
ALOG_ASSERT(mBufferData);
if (plane >= planesCount()) {
@@ -658,7 +658,7 @@ size_t V4L2ReadableBuffer::getPlaneBytesUsed(const size_t plane) const {
}
size_t V4L2ReadableBuffer::getPlaneDataOffset(const size_t plane) const {
- DCHECK_CALLED_ON_VALID_SEQUENCE(mSequenceChecker);
+ ALOG_ASSERT(mSequenceChecker.CalledOnValidSequence());
ALOG_ASSERT(mBufferData);
if (plane >= planesCount()) {
@@ -670,7 +670,7 @@ size_t V4L2ReadableBuffer::getPlaneDataOffset(const size_t plane) const {
}
size_t V4L2ReadableBuffer::bufferId() const {
- DCHECK_CALLED_ON_VALID_SEQUENCE(mSequenceChecker);
+ ALOG_ASSERT(mSequenceChecker.CalledOnValidSequence());
ALOG_ASSERT(mBufferData);
return mBufferData->mV4l2Buffer.index;
@@ -698,11 +698,11 @@ public:
V4L2Queue::V4L2Queue(scoped_refptr<V4L2Device> dev, enum v4l2_buf_type type,
base::OnceClosure destroyCb)
: mType(type), mDevice(dev), mDestroyCb(std::move(destroyCb)) {
- DCHECK_CALLED_ON_VALID_SEQUENCE(mSequenceChecker);
+ ALOG_ASSERT(mSequenceChecker.CalledOnValidSequence());
}
V4L2Queue::~V4L2Queue() {
- DCHECK_CALLED_ON_VALID_SEQUENCE(mSequenceChecker);
+ ALOG_ASSERT(mSequenceChecker.CalledOnValidSequence());
if (mIsStreaming) {
ALOGEQ("Queue is still streaming, trying to stop it...");
@@ -756,7 +756,7 @@ std::pair<std::optional<struct v4l2_format>, int> V4L2Queue::getFormat() {
}
size_t V4L2Queue::allocateBuffers(size_t count, enum v4l2_memory memory) {
- DCHECK_CALLED_ON_VALID_SEQUENCE(mSequenceChecker);
+ ALOG_ASSERT(mSequenceChecker.CalledOnValidSequence());
ALOG_ASSERT(!mFreeBuffers);
ALOG_ASSERT(mQueuedBuffers.size() == 0u);
@@ -827,7 +827,7 @@ size_t V4L2Queue::allocateBuffers(size_t count, enum v4l2_memory memory) {
}
bool V4L2Queue::deallocateBuffers() {
- DCHECK_CALLED_ON_VALID_SEQUENCE(mSequenceChecker);
+ ALOG_ASSERT(mSequenceChecker.CalledOnValidSequence());
if (isStreaming()) {
ALOGEQ("Cannot deallocate buffers while streaming.");
@@ -860,7 +860,7 @@ bool V4L2Queue::deallocateBuffers() {
}
size_t V4L2Queue::getMemoryUsage() const {
- DCHECK_CALLED_ON_VALID_SEQUENCE(mSequenceChecker);
+ ALOG_ASSERT(mSequenceChecker.CalledOnValidSequence());
size_t usage = 0;
for (const auto& buf : mBuffers) {
usage += buf->getMemoryUsage();
@@ -873,7 +873,7 @@ v4l2_memory V4L2Queue::getMemoryType() const {
}
std::optional<V4L2WritableBufferRef> V4L2Queue::getFreeBuffer() {
- DCHECK_CALLED_ON_VALID_SEQUENCE(mSequenceChecker);
+ ALOG_ASSERT(mSequenceChecker.CalledOnValidSequence());
// No buffers allocated at the moment?
if (!mFreeBuffers) return std::nullopt;
@@ -886,7 +886,7 @@ std::optional<V4L2WritableBufferRef> V4L2Queue::getFreeBuffer() {
}
std::optional<V4L2WritableBufferRef> V4L2Queue::getFreeBuffer(size_t requestedBufferIid) {
- DCHECK_CALLED_ON_VALID_SEQUENCE(mSequenceChecker);
+ ALOG_ASSERT(mSequenceChecker.CalledOnValidSequence());
// No buffers allocated at the moment?
if (!mFreeBuffers) return std::nullopt;
@@ -899,7 +899,7 @@ std::optional<V4L2WritableBufferRef> V4L2Queue::getFreeBuffer(size_t requestedBu
}
bool V4L2Queue::queueBuffer(struct v4l2_buffer* v4l2Buffer) {
- DCHECK_CALLED_ON_VALID_SEQUENCE(mSequenceChecker);
+ ALOG_ASSERT(mSequenceChecker.CalledOnValidSequence());
int ret = mDevice->ioctl(VIDIOC_QBUF, v4l2Buffer);
if (ret) {
@@ -919,7 +919,7 @@ bool V4L2Queue::queueBuffer(struct v4l2_buffer* v4l2Buffer) {
}
std::pair<bool, V4L2ReadableBufferRef> V4L2Queue::dequeueBuffer() {
- DCHECK_CALLED_ON_VALID_SEQUENCE(mSequenceChecker);
+ ALOG_ASSERT(mSequenceChecker.CalledOnValidSequence());
// No need to dequeue if no buffers queued.
if (queuedBuffersCount() == 0) return std::make_pair(true, nullptr);
@@ -968,13 +968,13 @@ std::pair<bool, V4L2ReadableBufferRef> V4L2Queue::dequeueBuffer() {
}
bool V4L2Queue::isStreaming() const {
- DCHECK_CALLED_ON_VALID_SEQUENCE(mSequenceChecker);
+ ALOG_ASSERT(mSequenceChecker.CalledOnValidSequence());
return mIsStreaming;
}
bool V4L2Queue::streamon() {
- DCHECK_CALLED_ON_VALID_SEQUENCE(mSequenceChecker);
+ ALOG_ASSERT(mSequenceChecker.CalledOnValidSequence());
if (mIsStreaming) return true;
@@ -991,7 +991,7 @@ bool V4L2Queue::streamon() {
}
bool V4L2Queue::streamoff() {
- DCHECK_CALLED_ON_VALID_SEQUENCE(mSequenceChecker);
+ ALOG_ASSERT(mSequenceChecker.CalledOnValidSequence());
// We do not check the value of IsStreaming(), because we may have queued buffers to the queue
// and wish to get them back - in such as case, we may need to do a VIDIOC_STREAMOFF on a
@@ -1017,19 +1017,19 @@ bool V4L2Queue::streamoff() {
}
size_t V4L2Queue::allocatedBuffersCount() const {
- DCHECK_CALLED_ON_VALID_SEQUENCE(mSequenceChecker);
+ ALOG_ASSERT(mSequenceChecker.CalledOnValidSequence());
return mBuffers.size();
}
size_t V4L2Queue::freeBuffersCount() const {
- DCHECK_CALLED_ON_VALID_SEQUENCE(mSequenceChecker);
+ ALOG_ASSERT(mSequenceChecker.CalledOnValidSequence());
return mFreeBuffers ? mFreeBuffers->size() : 0;
}
size_t V4L2Queue::queuedBuffersCount() const {
- DCHECK_CALLED_ON_VALID_SEQUENCE(mSequenceChecker);
+ ALOG_ASSERT(mSequenceChecker.CalledOnValidSequence());
return mQueuedBuffers.size();
}
@@ -1439,27 +1439,6 @@ int32_t V4L2Device::h264LevelIdcToV4L2H264Level(uint8_t levelIdc) {
}
// static
-v4l2_mpeg_video_bitrate_mode V4L2Device::C2BitrateModeToV4L2BitrateMode(
- C2Config::bitrate_mode_t bitrateMode) {
- switch (bitrateMode) {
- case C2Config::bitrate_mode_t::BITRATE_CONST_SKIP_ALLOWED:
- ALOGW("BITRATE_CONST_SKIP_ALLOWED not supported, defaulting to BITRATE_CONST");
- FALLTHROUGH;
- case C2Config::bitrate_mode_t::BITRATE_CONST:
- return V4L2_MPEG_VIDEO_BITRATE_MODE_CBR;
- case C2Config::bitrate_mode_t::BITRATE_VARIABLE_SKIP_ALLOWED:
- ALOGW("BITRATE_VARIABLE_SKIP_ALLOWED not supported, defaulting to BITRATE_VARIABLE");
- FALLTHROUGH;
- case C2Config::bitrate_mode_t::BITRATE_VARIABLE:
- return V4L2_MPEG_VIDEO_BITRATE_MODE_VBR;
- default:
- ALOGW("Unsupported bitrate mode %u, defaulting to BITRATE_VARIABLE",
- static_cast<uint32_t>(bitrateMode));
- return V4L2_MPEG_VIDEO_BITRATE_MODE_VBR;
- }
-}
-
-// static
ui::Size V4L2Device::allocatedSizeFromV4L2Format(const struct v4l2_format& format) {
ui::Size codedSize;
ui::Size visibleSize;
@@ -1530,7 +1509,7 @@ ui::Size V4L2Device::allocatedSizeFromV4L2Format(const struct v4l2_format& forma
// Sanity checks. Calculated coded size has to contain given visible size and fulfill buffer
// byte size requirements.
- ALOG_ASSERT(contains(Rect(codedSize), Rect(visibleSize)));
+ ALOG_ASSERT(Rect(codedSize).Contains(Rect(visibleSize)));
ALOG_ASSERT(sizeimage <= allocationSize(frameFormat, codedSize));
return codedSize;
@@ -1986,8 +1965,8 @@ void V4L2Device::enumerateDevicesForType(Type type) {
candidatePaths.push_back(devicePattern);
// We are sandboxed, so we can't query directory contents to check which devices are actually
- // available. Try to open the first 16; if not present, we will just fail to open immediately.
- for (int i = 0; i < 16; ++i) {
+ // available. Try to open the first 10; if not present, we will just fail to open immediately.
+ for (int i = 0; i < 10; ++i) {
candidatePaths.push_back(base::StringPrintf("%s%d", devicePattern.c_str(), i));
}