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 |