| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "media/filters/vpx_video_decoder.h" | 5 #include "media/filters/vpx_video_decoder.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <algorithm> | 10 #include <algorithm> |
| 11 #include <memory> |
| 11 #include <string> | 12 #include <string> |
| 12 #include <vector> | 13 #include <vector> |
| 13 | 14 |
| 14 #include "base/bind.h" | 15 #include "base/bind.h" |
| 15 #include "base/callback_helpers.h" | 16 #include "base/callback_helpers.h" |
| 16 #include "base/command_line.h" | 17 #include "base/command_line.h" |
| 17 #include "base/lazy_instance.h" | 18 #include "base/lazy_instance.h" |
| 18 #include "base/location.h" | 19 #include "base/location.h" |
| 19 #include "base/logging.h" | 20 #include "base/logging.h" |
| 20 #include "base/macros.h" | 21 #include "base/macros.h" |
| 22 #include "base/memory/ptr_util.h" |
| 21 #include "base/single_thread_task_runner.h" | 23 #include "base/single_thread_task_runner.h" |
| 22 #include "base/stl_util.h" | |
| 23 #include "base/strings/string_number_conversions.h" | 24 #include "base/strings/string_number_conversions.h" |
| 24 #include "base/sys_byteorder.h" | 25 #include "base/sys_byteorder.h" |
| 25 #include "base/sys_info.h" | 26 #include "base/sys_info.h" |
| 26 #include "base/threading/thread.h" | 27 #include "base/threading/thread.h" |
| 27 #include "base/trace_event/memory_allocator_dump.h" | 28 #include "base/trace_event/memory_allocator_dump.h" |
| 28 #include "base/trace_event/memory_dump_manager.h" | 29 #include "base/trace_event/memory_dump_manager.h" |
| 29 #include "base/trace_event/memory_dump_provider.h" | 30 #include "base/trace_event/memory_dump_provider.h" |
| 30 #include "base/trace_event/process_memory_dump.h" | 31 #include "base/trace_event/process_memory_dump.h" |
| 31 #include "base/trace_event/trace_event.h" | 32 #include "base/trace_event/trace_event.h" |
| 32 #include "media/base/bind_to_current_loop.h" | 33 #include "media/base/bind_to_current_loop.h" |
| (...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 216 ~MemoryPool() override; | 217 ~MemoryPool() override; |
| 217 | 218 |
| 218 // Gets the next available frame buffer for use by libvpx. | 219 // Gets the next available frame buffer for use by libvpx. |
| 219 VP9FrameBuffer* GetFreeFrameBuffer(size_t min_size); | 220 VP9FrameBuffer* GetFreeFrameBuffer(size_t min_size); |
| 220 | 221 |
| 221 // Method that gets called when a VideoFrame that references this pool gets | 222 // Method that gets called when a VideoFrame that references this pool gets |
| 222 // destroyed. | 223 // destroyed. |
| 223 void OnVideoFrameDestroyed(VP9FrameBuffer* frame_buffer); | 224 void OnVideoFrameDestroyed(VP9FrameBuffer* frame_buffer); |
| 224 | 225 |
| 225 // Frame buffers to be used by libvpx for VP9 Decoding. | 226 // Frame buffers to be used by libvpx for VP9 Decoding. |
| 226 std::vector<VP9FrameBuffer*> frame_buffers_; | 227 std::vector<std::unique_ptr<VP9FrameBuffer>> frame_buffers_; |
| 227 | 228 |
| 228 DISALLOW_COPY_AND_ASSIGN(MemoryPool); | 229 DISALLOW_COPY_AND_ASSIGN(MemoryPool); |
| 229 }; | 230 }; |
| 230 | 231 |
| 231 VpxVideoDecoder::MemoryPool::MemoryPool() { | 232 VpxVideoDecoder::MemoryPool::MemoryPool() { |
| 232 base::trace_event::MemoryDumpManager::GetInstance()->RegisterDumpProvider( | 233 base::trace_event::MemoryDumpManager::GetInstance()->RegisterDumpProvider( |
| 233 this, "VpxVideoDecoder", base::ThreadTaskRunnerHandle::Get()); | 234 this, "VpxVideoDecoder", base::ThreadTaskRunnerHandle::Get()); |
| 234 } | 235 } |
| 235 | 236 |
| 236 VpxVideoDecoder::MemoryPool::~MemoryPool() { | 237 VpxVideoDecoder::MemoryPool::~MemoryPool() { |
| 237 base::STLDeleteElements(&frame_buffers_); | |
| 238 base::trace_event::MemoryDumpManager::GetInstance()->UnregisterDumpProvider( | 238 base::trace_event::MemoryDumpManager::GetInstance()->UnregisterDumpProvider( |
| 239 this); | 239 this); |
| 240 } | 240 } |
| 241 | 241 |
| 242 VpxVideoDecoder::MemoryPool::VP9FrameBuffer* | 242 VpxVideoDecoder::MemoryPool::VP9FrameBuffer* |
| 243 VpxVideoDecoder::MemoryPool::GetFreeFrameBuffer(size_t min_size) { | 243 VpxVideoDecoder::MemoryPool::GetFreeFrameBuffer(size_t min_size) { |
| 244 // Check if a free frame buffer exists. | 244 // Check if a free frame buffer exists. |
| 245 size_t i = 0; | 245 size_t i = 0; |
| 246 for (; i < frame_buffers_.size(); ++i) { | 246 for (; i < frame_buffers_.size(); ++i) { |
| 247 if (frame_buffers_[i]->ref_cnt == 0) | 247 if (frame_buffers_[i]->ref_cnt == 0) |
| 248 break; | 248 break; |
| 249 } | 249 } |
| 250 | 250 |
| 251 if (i == frame_buffers_.size()) { | 251 if (i == frame_buffers_.size()) { |
| 252 // Create a new frame buffer. | 252 // Create a new frame buffer. |
| 253 frame_buffers_.push_back(new VP9FrameBuffer()); | 253 frame_buffers_.push_back(base::MakeUnique<VP9FrameBuffer>()); |
| 254 } | 254 } |
| 255 | 255 |
| 256 // Resize the frame buffer if necessary. | 256 // Resize the frame buffer if necessary. |
| 257 if (frame_buffers_[i]->data.size() < min_size) | 257 if (frame_buffers_[i]->data.size() < min_size) |
| 258 frame_buffers_[i]->data.resize(min_size); | 258 frame_buffers_[i]->data.resize(min_size); |
| 259 return frame_buffers_[i]; | 259 return frame_buffers_[i].get(); |
| 260 } | 260 } |
| 261 | 261 |
| 262 int32_t VpxVideoDecoder::MemoryPool::GetVP9FrameBuffer( | 262 int32_t VpxVideoDecoder::MemoryPool::GetVP9FrameBuffer( |
| 263 void* user_priv, | 263 void* user_priv, |
| 264 size_t min_size, | 264 size_t min_size, |
| 265 vpx_codec_frame_buffer* fb) { | 265 vpx_codec_frame_buffer* fb) { |
| 266 DCHECK(user_priv); | 266 DCHECK(user_priv); |
| 267 DCHECK(fb); | 267 DCHECK(fb); |
| 268 | 268 |
| 269 VpxVideoDecoder::MemoryPool* memory_pool = | 269 VpxVideoDecoder::MemoryPool* memory_pool = |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 310 base::trace_event::MemoryAllocatorDump* memory_dump = | 310 base::trace_event::MemoryAllocatorDump* memory_dump = |
| 311 pmd->CreateAllocatorDump("media/vpx/memory_pool"); | 311 pmd->CreateAllocatorDump("media/vpx/memory_pool"); |
| 312 base::trace_event::MemoryAllocatorDump* used_memory_dump = | 312 base::trace_event::MemoryAllocatorDump* used_memory_dump = |
| 313 pmd->CreateAllocatorDump("media/vpx/memory_pool/used"); | 313 pmd->CreateAllocatorDump("media/vpx/memory_pool/used"); |
| 314 | 314 |
| 315 pmd->AddSuballocation(memory_dump->guid(), | 315 pmd->AddSuballocation(memory_dump->guid(), |
| 316 base::trace_event::MemoryDumpManager::GetInstance() | 316 base::trace_event::MemoryDumpManager::GetInstance() |
| 317 ->system_allocator_pool_name()); | 317 ->system_allocator_pool_name()); |
| 318 size_t bytes_used = 0; | 318 size_t bytes_used = 0; |
| 319 size_t bytes_reserved = 0; | 319 size_t bytes_reserved = 0; |
| 320 for (const VP9FrameBuffer* frame_buffer : frame_buffers_) { | 320 for (const auto& frame_buffer : frame_buffers_) { |
| 321 if (frame_buffer->ref_cnt) | 321 if (frame_buffer->ref_cnt) |
| 322 bytes_used += frame_buffer->data.size(); | 322 bytes_used += frame_buffer->data.size(); |
| 323 bytes_reserved += frame_buffer->data.size(); | 323 bytes_reserved += frame_buffer->data.size(); |
| 324 } | 324 } |
| 325 | 325 |
| 326 memory_dump->AddScalar(base::trace_event::MemoryAllocatorDump::kNameSize, | 326 memory_dump->AddScalar(base::trace_event::MemoryAllocatorDump::kNameSize, |
| 327 base::trace_event::MemoryAllocatorDump::kUnitsBytes, | 327 base::trace_event::MemoryAllocatorDump::kUnitsBytes, |
| 328 bytes_reserved); | 328 bytes_reserved); |
| 329 used_memory_dump->AddScalar( | 329 used_memory_dump->AddScalar( |
| 330 base::trace_event::MemoryAllocatorDump::kNameSize, | 330 base::trace_event::MemoryAllocatorDump::kNameSize, |
| (...skipping 453 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 784 (*video_frame)->visible_data(VideoFrame::kUPlane), | 784 (*video_frame)->visible_data(VideoFrame::kUPlane), |
| 785 (*video_frame)->stride(VideoFrame::kUPlane), | 785 (*video_frame)->stride(VideoFrame::kUPlane), |
| 786 (*video_frame)->visible_data(VideoFrame::kVPlane), | 786 (*video_frame)->visible_data(VideoFrame::kVPlane), |
| 787 (*video_frame)->stride(VideoFrame::kVPlane), coded_size.width(), | 787 (*video_frame)->stride(VideoFrame::kVPlane), coded_size.width(), |
| 788 coded_size.height()); | 788 coded_size.height()); |
| 789 | 789 |
| 790 return true; | 790 return true; |
| 791 } | 791 } |
| 792 | 792 |
| 793 } // namespace media | 793 } // namespace media |
| OLD | NEW |