summaryrefslogtreecommitdiff
path: root/chromium/media/capture/video/chromeos/stream_buffer_manager.cc
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2019-05-24 11:40:17 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2019-05-24 12:42:11 +0000
commit5d87695f37678f96492b258bbab36486c59866b4 (patch)
treebe9783bbaf04fb930c4d74ca9c00b5e7954c8bc6 /chromium/media/capture/video/chromeos/stream_buffer_manager.cc
parent6c11fb357ec39bf087b8b632e2b1e375aef1b38b (diff)
downloadqtwebengine-chromium-5d87695f37678f96492b258bbab36486c59866b4.tar.gz
BASELINE: Update Chromium to 75.0.3770.56
Change-Id: I86d2007fd27a45d5797eee06f4c9369b8b50ac4f Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Diffstat (limited to 'chromium/media/capture/video/chromeos/stream_buffer_manager.cc')
-rw-r--r--chromium/media/capture/video/chromeos/stream_buffer_manager.cc83
1 files changed, 64 insertions, 19 deletions
diff --git a/chromium/media/capture/video/chromeos/stream_buffer_manager.cc b/chromium/media/capture/video/chromeos/stream_buffer_manager.cc
index 4420ec935a9..6ba6adfcddb 100644
--- a/chromium/media/capture/video/chromeos/stream_buffer_manager.cc
+++ b/chromium/media/capture/video/chromeos/stream_buffer_manager.cc
@@ -27,15 +27,7 @@ StreamBufferManager::StreamBufferManager(
weak_ptr_factory_(this) {}
StreamBufferManager::~StreamBufferManager() {
- for (const auto& iter : stream_context_) {
- if (iter.second) {
- for (const auto& buf : iter.second->buffers) {
- if (buf) {
- buf->Unmap();
- }
- }
- }
- }
+ DestroyCurrentStreamsAndBuffers();
}
gfx::GpuMemoryBuffer* StreamBufferManager::GetBufferById(StreamType stream_type,
@@ -54,9 +46,26 @@ VideoCaptureFormat StreamBufferManager::GetStreamCaptureFormat(
return stream_context_[stream_type]->capture_format;
}
+void StreamBufferManager::DestroyCurrentStreamsAndBuffers() {
+ for (const auto& iter : stream_context_) {
+ if (iter.second) {
+ for (const auto& buf : iter.second->buffers) {
+ if (buf) {
+ buf->Unmap();
+ }
+ }
+ iter.second->buffers.clear();
+ }
+ }
+ stream_context_.clear();
+}
+
bool StreamBufferManager::HasFreeBuffers(
const std::set<StreamType>& stream_types) {
for (auto stream_type : stream_types) {
+ if (IsInputStream(stream_type)) {
+ continue;
+ }
if (stream_context_[stream_type]->free_buffers.empty()) {
return false;
}
@@ -64,10 +73,22 @@ bool StreamBufferManager::HasFreeBuffers(
return true;
}
+bool StreamBufferManager::HasStreamsConfigured(
+ std::initializer_list<StreamType> stream_types) {
+ for (auto stream_type : stream_types) {
+ if (stream_context_.find(stream_type) == stream_context_.end()) {
+ return false;
+ }
+ }
+ return true;
+}
+
void StreamBufferManager::SetUpStreamsAndBuffers(
VideoCaptureFormat capture_format,
const cros::mojom::CameraMetadataPtr& static_metadata,
std::vector<cros::mojom::Camera3StreamPtr> streams) {
+ DestroyCurrentStreamsAndBuffers();
+
for (auto& stream : streams) {
DVLOG(2) << "Stream " << stream->id
<< " stream_type: " << stream->stream_type
@@ -100,17 +121,23 @@ void StreamBufferManager::SetUpStreamsAndBuffers(
stream_context_[stream_type]->capture_format.pixel_format =
stream_format.video_format;
+ // For input stream, there is no need to allocate buffers.
+ if (IsInputStream(stream_type)) {
+ continue;
+ }
+
// Allocate buffers.
size_t num_buffers = stream_context_[stream_type]->stream->max_buffers;
stream_context_[stream_type]->buffers.resize(num_buffers);
int32_t buffer_width, buffer_height;
switch (stream_type) {
- case StreamType::kPreview: {
+ case StreamType::kPreviewOutput:
+ case StreamType::kYUVOutput: {
buffer_width = stream_context_[stream_type]->stream->width;
buffer_height = stream_context_[stream_type]->stream->height;
break;
}
- case StreamType::kStillCapture: {
+ case StreamType::kJpegOutput: {
const cros::mojom::CameraMetadataEntryPtr* jpeg_max_size =
GetMetadataEntry(
static_metadata,
@@ -160,7 +187,8 @@ cros::mojom::Camera3StreamPtr StreamBufferManager::GetStreamConfiguration(
}
base::Optional<BufferInfo> StreamBufferManager::RequestBuffer(
- StreamType stream_type) {
+ StreamType stream_type,
+ base::Optional<uint64_t> buffer_id) {
VideoPixelFormat buffer_format =
stream_context_[stream_type]->capture_format.pixel_format;
uint32_t drm_format = PixFormatVideoToDrm(buffer_format);
@@ -175,11 +203,25 @@ base::Optional<BufferInfo> StreamBufferManager::RequestBuffer(
}
BufferInfo buffer_info;
- buffer_info.id = stream_context_[stream_type]->free_buffers.front();
- stream_context_[stream_type]->free_buffers.pop();
- buffer_info.gpu_memory_buffer = stream_context_[stream_type]
- ->buffers[GetBufferIndex(buffer_info.id)]
- .get();
+ if (buffer_id.has_value()) {
+ // Currently, only kYUVInput has an associated output buffer which is
+ // kYUVOutput.
+ if (stream_type != StreamType::kYUVInput) {
+ return {};
+ }
+ buffer_info.id = *buffer_id;
+ buffer_info.gpu_memory_buffer =
+ stream_context_[StreamType::kYUVOutput]
+ ->buffers[GetBufferIndex(buffer_info.id)]
+ .get();
+ } else {
+ buffer_info.id = stream_context_[stream_type]->free_buffers.front();
+ stream_context_[stream_type]->free_buffers.pop();
+ buffer_info.gpu_memory_buffer =
+ stream_context_[stream_type]
+ ->buffers[GetBufferIndex(buffer_info.id)]
+ .get();
+ }
buffer_info.hal_pixel_format = stream_context_[stream_type]->stream->format;
buffer_info.drm_format = drm_format;
return buffer_info;
@@ -187,11 +229,14 @@ base::Optional<BufferInfo> StreamBufferManager::RequestBuffer(
void StreamBufferManager::ReleaseBuffer(StreamType stream_type,
uint64_t buffer_id) {
+ if (IsInputStream(stream_type)) {
+ return;
+ }
stream_context_[stream_type]->free_buffers.push(buffer_id);
}
-size_t StreamBufferManager::GetNumberOfStreams() {
- return stream_context_.size();
+bool StreamBufferManager::IsReprocessSupported() {
+ return stream_context_.find(StreamType::kYUVOutput) != stream_context_.end();
}
// static