| 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 #ifndef CONTENT_RENDERER_MEDIA_RTC_VIDEO_DECODER_H_ | 5 #ifndef CONTENT_RENDERER_MEDIA_RTC_VIDEO_DECODER_H_ |
| 6 #define CONTENT_RENDERER_MEDIA_RTC_VIDEO_DECODER_H_ | 6 #define CONTENT_RENDERER_MEDIA_RTC_VIDEO_DECODER_H_ |
| 7 | 7 |
| 8 #include <deque> | 8 #include <deque> |
| 9 #include <list> | 9 #include <list> |
| 10 #include <map> | 10 #include <map> |
| (...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 155 void DestroyVDA(); | 155 void DestroyVDA(); |
| 156 | 156 |
| 157 // Gets a shared-memory segment of at least |min_size| bytes from | 157 // Gets a shared-memory segment of at least |min_size| bytes from |
| 158 // |available_shm_segments_|. Returns NULL if there is no buffer or the | 158 // |available_shm_segments_|. Returns NULL if there is no buffer or the |
| 159 // buffer is not big enough. | 159 // buffer is not big enough. |
| 160 scoped_ptr<SHMBuffer> GetSHM_Locked(size_t min_size); | 160 scoped_ptr<SHMBuffer> GetSHM_Locked(size_t min_size); |
| 161 | 161 |
| 162 // Returns a shared-memory segment to the available pool. | 162 // Returns a shared-memory segment to the available pool. |
| 163 void PutSHM_Locked(scoped_ptr<SHMBuffer> shm_buffer); | 163 void PutSHM_Locked(scoped_ptr<SHMBuffer> shm_buffer); |
| 164 | 164 |
| 165 // Allocates |number| shared memory of at least |min_size| bytes. | 165 // Allocates |count| shared memory buffers of |size| bytes. |
| 166 void CreateSHM(int number, size_t min_size); | 166 void CreateSHM(size_t count, size_t size); |
| 167 | 167 |
| 168 // Stores the buffer metadata to |input_buffer_data_|. | 168 // Stores the buffer metadata to |input_buffer_data_|. |
| 169 void RecordBufferData(const BufferData& buffer_data); | 169 void RecordBufferData(const BufferData& buffer_data); |
| 170 // Gets the buffer metadata from |input_buffer_data_|. | 170 // Gets the buffer metadata from |input_buffer_data_|. |
| 171 void GetBufferData(int32 bitstream_buffer_id, uint32_t* timestamp); | 171 void GetBufferData(int32 bitstream_buffer_id, uint32_t* timestamp); |
| 172 | 172 |
| 173 // Records the result of InitDecode to UMA and returns |status|. | 173 // Records the result of InitDecode to UMA and returns |status|. |
| 174 int32_t RecordInitDecodeUMA(int32_t status); | 174 int32_t RecordInitDecodeUMA(int32_t status); |
| 175 | 175 |
| 176 // Assert the contract that this class is operated on the right thread. | 176 // Assert the contract that this class is operated on the right thread. |
| 177 void DCheckGpuVideoAcceleratorFactoriesTaskRunnerIsCurrent() const; | 177 void DCheckGpuVideoAcceleratorFactoriesTaskRunnerIsCurrent() const; |
| 178 | 178 |
| 179 // Query factories_ whether |profile| is supported and return true is so, | 179 // Query factories_ whether |profile| is supported and return true is so, |
| 180 // false otherwise. If true, also set resolution limits for |profile| | 180 // false otherwise. If true, also set resolution limits for |profile| |
| 181 // in min/max_resolution_. | 181 // in min/max_resolution_. |
| 182 bool IsProfileSupported(media::VideoCodecProfile profile); | 182 bool IsProfileSupported(media::VideoCodecProfile profile); |
| 183 | 183 |
| 184 // Clear the pending_buffers_ queue, freeing memory. |
| 185 void ClearPendingBuffers(); |
| 186 |
| 184 enum State { | 187 enum State { |
| 185 UNINITIALIZED, // The decoder has not initialized. | 188 UNINITIALIZED, // The decoder has not initialized. |
| 186 INITIALIZED, // The decoder has initialized. | 189 INITIALIZED, // The decoder has initialized. |
| 187 RESETTING, // The decoder is being reset. | 190 RESETTING, // The decoder is being reset. |
| 188 DECODE_ERROR, // Decoding error happened. | 191 DECODE_ERROR, // Decoding error happened. |
| 189 }; | 192 }; |
| 190 | 193 |
| 191 static const int32 ID_LAST; // maximum bitstream buffer id | 194 static const int32 ID_LAST; // maximum bitstream buffer id |
| 192 static const int32 ID_HALF; // half of the maximum bitstream buffer id | 195 static const int32 ID_HALF; // half of the maximum bitstream buffer id |
| 193 static const int32 ID_INVALID; // indicates Reset or Release never occurred | 196 static const int32 ID_INVALID; // indicates Reset or Release never occurred |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 231 // |next_bitstream_buffer_id_| and |reset_bitstream_buffer_id_|. | 234 // |next_bitstream_buffer_id_| and |reset_bitstream_buffer_id_|. |
| 232 base::Lock lock_; | 235 base::Lock lock_; |
| 233 | 236 |
| 234 // The state of RTCVideoDecoder. Guarded by |lock_|. | 237 // The state of RTCVideoDecoder. Guarded by |lock_|. |
| 235 State state_; | 238 State state_; |
| 236 | 239 |
| 237 // Guarded by |lock_|. | 240 // Guarded by |lock_|. |
| 238 webrtc::DecodedImageCallback* decode_complete_callback_; | 241 webrtc::DecodedImageCallback* decode_complete_callback_; |
| 239 | 242 |
| 240 // Total number of allocated SHM buffers. Guarded by |lock_|. | 243 // Total number of allocated SHM buffers. Guarded by |lock_|. |
| 241 int num_shm_buffers_; | 244 size_t num_shm_buffers_; |
| 242 | 245 |
| 243 // Shared-memory buffer pool. Since allocating SHM segments requires a | 246 // Shared-memory buffer pool. Since allocating SHM segments requires a |
| 244 // round-trip to the browser process, we keep allocation out of the | 247 // round-trip to the browser process, we keep allocation out of the |
| 245 // steady-state of the decoder. The vector owns SHM buffers. Guarded by | 248 // steady-state of the decoder. The vector owns SHM buffers. Guarded by |
| 246 // |lock_|. | 249 // |lock_|. |
| 247 std::vector<SHMBuffer*> available_shm_segments_; | 250 std::vector<SHMBuffer*> available_shm_segments_; |
| 248 | 251 |
| 249 // A queue storing WebRTC encoding images (and their metadata) that are | 252 // A queue storing WebRTC encoding images (and their metadata) that are |
| 250 // waiting for the shared memory. Guarded by |lock_|. | 253 // waiting for the shared memory. Guarded by |lock_|. |
| 251 std::deque<std::pair<webrtc::EncodedImage, BufferData> > pending_buffers_; | 254 std::deque<std::pair<webrtc::EncodedImage, BufferData> > pending_buffers_; |
| (...skipping 16 matching lines...) Expand all Loading... |
| 268 // Must be destroyed, or invalidated, on |vda_loop_proxy_| | 271 // Must be destroyed, or invalidated, on |vda_loop_proxy_| |
| 269 // NOTE: Weak pointers must be invalidated before all other member variables. | 272 // NOTE: Weak pointers must be invalidated before all other member variables. |
| 270 base::WeakPtrFactory<RTCVideoDecoder> weak_factory_; | 273 base::WeakPtrFactory<RTCVideoDecoder> weak_factory_; |
| 271 | 274 |
| 272 DISALLOW_COPY_AND_ASSIGN(RTCVideoDecoder); | 275 DISALLOW_COPY_AND_ASSIGN(RTCVideoDecoder); |
| 273 }; | 276 }; |
| 274 | 277 |
| 275 } // namespace content | 278 } // namespace content |
| 276 | 279 |
| 277 #endif // CONTENT_RENDERER_MEDIA_RTC_VIDEO_DECODER_H_ | 280 #endif // CONTENT_RENDERER_MEDIA_RTC_VIDEO_DECODER_H_ |
| OLD | NEW |