| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "content/renderer/media/gpu/rtc_video_decoder.h" | 5 #include "content/renderer/media/gpu/rtc_video_decoder.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 84 weak_factory_(this) { | 84 weak_factory_(this) { |
| 85 DCHECK(!factories_->GetTaskRunner()->BelongsToCurrentThread()); | 85 DCHECK(!factories_->GetTaskRunner()->BelongsToCurrentThread()); |
| 86 } | 86 } |
| 87 | 87 |
| 88 RTCVideoDecoder::~RTCVideoDecoder() { | 88 RTCVideoDecoder::~RTCVideoDecoder() { |
| 89 DVLOG(2) << "~RTCVideoDecoder"; | 89 DVLOG(2) << "~RTCVideoDecoder"; |
| 90 DCheckGpuVideoAcceleratorFactoriesTaskRunnerIsCurrent(); | 90 DCheckGpuVideoAcceleratorFactoriesTaskRunnerIsCurrent(); |
| 91 DestroyVDA(); | 91 DestroyVDA(); |
| 92 | 92 |
| 93 // Delete all shared memories. | 93 // Delete all shared memories. |
| 94 STLDeleteElements(&available_shm_segments_); | 94 base::STLDeleteElements(&available_shm_segments_); |
| 95 STLDeleteValues(&bitstream_buffers_in_decoder_); | 95 base::STLDeleteValues(&bitstream_buffers_in_decoder_); |
| 96 STLDeleteContainerPairFirstPointers(decode_buffers_.begin(), | 96 base::STLDeleteContainerPairFirstPointers(decode_buffers_.begin(), |
| 97 decode_buffers_.end()); | 97 decode_buffers_.end()); |
| 98 decode_buffers_.clear(); | 98 decode_buffers_.clear(); |
| 99 ClearPendingBuffers(); | 99 ClearPendingBuffers(); |
| 100 } | 100 } |
| 101 | 101 |
| 102 // static | 102 // static |
| 103 std::unique_ptr<RTCVideoDecoder> RTCVideoDecoder::Create( | 103 std::unique_ptr<RTCVideoDecoder> RTCVideoDecoder::Create( |
| 104 webrtc::VideoCodecType type, | 104 webrtc::VideoCodecType type, |
| 105 media::GpuVideoAcceleratorFactories* factories) { | 105 media::GpuVideoAcceleratorFactories* factories) { |
| 106 std::unique_ptr<RTCVideoDecoder> decoder; | 106 std::unique_ptr<RTCVideoDecoder> decoder; |
| 107 // See https://bugs.chromium.org/p/webrtc/issues/detail?id=5717. | 107 // See https://bugs.chromium.org/p/webrtc/issues/detail?id=5717. |
| (...skipping 697 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 805 if (available_shm_segments_.size() != num_shm_buffers_) { | 805 if (available_shm_segments_.size() != num_shm_buffers_) { |
| 806 // Either available_shm_segments_ is empty (and we already have some SHM | 806 // Either available_shm_segments_ is empty (and we already have some SHM |
| 807 // buffers allocated), or the size of available segments is not large | 807 // buffers allocated), or the size of available segments is not large |
| 808 // enough. In the former case we need to wait for buffers to be returned, | 808 // enough. In the former case we need to wait for buffers to be returned, |
| 809 // in the latter we need to wait for all buffers to be returned to drop | 809 // in the latter we need to wait for all buffers to be returned to drop |
| 810 // them and reallocate with a new size. | 810 // them and reallocate with a new size. |
| 811 return NULL; | 811 return NULL; |
| 812 } | 812 } |
| 813 | 813 |
| 814 if (num_shm_buffers_ != 0) { | 814 if (num_shm_buffers_ != 0) { |
| 815 STLDeleteElements(&available_shm_segments_); | 815 base::STLDeleteElements(&available_shm_segments_); |
| 816 num_shm_buffers_ = 0; | 816 num_shm_buffers_ = 0; |
| 817 } | 817 } |
| 818 | 818 |
| 819 // Create twice as large buffers as required, to avoid frequent reallocation. | 819 // Create twice as large buffers as required, to avoid frequent reallocation. |
| 820 factories_->GetTaskRunner()->PostTask( | 820 factories_->GetTaskRunner()->PostTask( |
| 821 FROM_HERE, | 821 FROM_HERE, |
| 822 base::Bind(&RTCVideoDecoder::CreateSHM, weak_factory_.GetWeakPtr(), | 822 base::Bind(&RTCVideoDecoder::CreateSHM, weak_factory_.GetWeakPtr(), |
| 823 kNumSharedMemorySegments, min_size * 2)); | 823 kNumSharedMemorySegments, min_size * 2)); |
| 824 | 824 |
| 825 // We'll be called again after the shared memory is created. | 825 // We'll be called again after the shared memory is created. |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 893 } | 893 } |
| 894 | 894 |
| 895 void RTCVideoDecoder::ClearPendingBuffers() { | 895 void RTCVideoDecoder::ClearPendingBuffers() { |
| 896 // Delete WebRTC input buffers. | 896 // Delete WebRTC input buffers. |
| 897 for (const auto& pending_buffer : pending_buffers_) | 897 for (const auto& pending_buffer : pending_buffers_) |
| 898 delete[] pending_buffer.first._buffer; | 898 delete[] pending_buffer.first._buffer; |
| 899 pending_buffers_.clear(); | 899 pending_buffers_.clear(); |
| 900 } | 900 } |
| 901 | 901 |
| 902 } // namespace content | 902 } // namespace content |
| OLD | NEW |