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 #ifndef MEDIA_FILTERS_GPU_VIDEO_DECODER_H_ | 5 #ifndef MEDIA_FILTERS_GPU_VIDEO_DECODER_H_ |
6 #define MEDIA_FILTERS_GPU_VIDEO_DECODER_H_ | 6 #define MEDIA_FILTERS_GPU_VIDEO_DECODER_H_ |
7 | 7 |
8 #include <list> | 8 #include <list> |
9 #include <map> | 9 #include <map> |
10 #include <set> | 10 #include <set> |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
52 const OutputCB& output_cb) override; | 52 const OutputCB& output_cb) override; |
53 void Decode(const scoped_refptr<DecoderBuffer>& buffer, | 53 void Decode(const scoped_refptr<DecoderBuffer>& buffer, |
54 const DecodeCB& decode_cb) override; | 54 const DecodeCB& decode_cb) override; |
55 void Reset(const base::Closure& closure) override; | 55 void Reset(const base::Closure& closure) override; |
56 bool NeedsBitstreamConversion() const override; | 56 bool NeedsBitstreamConversion() const override; |
57 bool CanReadWithoutStalling() const override; | 57 bool CanReadWithoutStalling() const override; |
58 int GetMaxDecodeRequests() const override; | 58 int GetMaxDecodeRequests() const override; |
59 | 59 |
60 // VideoDecodeAccelerator::Client implementation. | 60 // VideoDecodeAccelerator::Client implementation. |
61 void NotifyCdmAttached(bool success) override; | 61 void NotifyCdmAttached(bool success) override; |
62 void ProvidePictureBuffers(uint32 count, | 62 void ProvidePictureBuffers(uint32_t count, |
63 const gfx::Size& size, | 63 const gfx::Size& size, |
64 uint32 texture_target) override; | 64 uint32_t texture_target) override; |
65 void DismissPictureBuffer(int32 id) override; | 65 void DismissPictureBuffer(int32_t id) override; |
66 void PictureReady(const media::Picture& picture) override; | 66 void PictureReady(const media::Picture& picture) override; |
67 void NotifyEndOfBitstreamBuffer(int32 id) override; | 67 void NotifyEndOfBitstreamBuffer(int32_t id) override; |
68 void NotifyFlushDone() override; | 68 void NotifyFlushDone() override; |
69 void NotifyResetDone() override; | 69 void NotifyResetDone() override; |
70 void NotifyError(media::VideoDecodeAccelerator::Error error) override; | 70 void NotifyError(media::VideoDecodeAccelerator::Error error) override; |
71 | 71 |
72 static const char kDecoderName[]; | 72 static const char kDecoderName[]; |
73 | 73 |
74 protected: | 74 protected: |
75 ~GpuVideoDecoder() override; | 75 ~GpuVideoDecoder() override; |
76 | 76 |
77 private: | 77 private: |
(...skipping 16 matching lines...) Expand all Loading... |
94 struct PendingDecoderBuffer { | 94 struct PendingDecoderBuffer { |
95 PendingDecoderBuffer(SHMBuffer* s, | 95 PendingDecoderBuffer(SHMBuffer* s, |
96 const scoped_refptr<DecoderBuffer>& b, | 96 const scoped_refptr<DecoderBuffer>& b, |
97 const DecodeCB& done_cb); | 97 const DecodeCB& done_cb); |
98 ~PendingDecoderBuffer(); | 98 ~PendingDecoderBuffer(); |
99 SHMBuffer* shm_buffer; | 99 SHMBuffer* shm_buffer; |
100 scoped_refptr<DecoderBuffer> buffer; | 100 scoped_refptr<DecoderBuffer> buffer; |
101 DecodeCB done_cb; | 101 DecodeCB done_cb; |
102 }; | 102 }; |
103 | 103 |
104 typedef std::map<int32, PictureBuffer> PictureBufferMap; | 104 typedef std::map<int32_t, PictureBuffer> PictureBufferMap; |
105 | 105 |
106 // Callback to set CDM. |cdm_attached_cb| is called when the decryptor in the | 106 // Callback to set CDM. |cdm_attached_cb| is called when the decryptor in the |
107 // CDM has been completely attached to the pipeline. | 107 // CDM has been completely attached to the pipeline. |
108 void SetCdm(CdmContext* cdm_context, const CdmAttachedCB& cdm_attached_cb); | 108 void SetCdm(CdmContext* cdm_context, const CdmAttachedCB& cdm_attached_cb); |
109 | 109 |
110 void DeliverFrame(const scoped_refptr<VideoFrame>& frame); | 110 void DeliverFrame(const scoped_refptr<VideoFrame>& frame); |
111 | 111 |
112 // Static method is to allow it to run even after GVD is deleted. | 112 // Static method is to allow it to run even after GVD is deleted. |
113 static void ReleaseMailbox(base::WeakPtr<GpuVideoDecoder> decoder, | 113 static void ReleaseMailbox(base::WeakPtr<GpuVideoDecoder> decoder, |
114 media::GpuVideoAcceleratorFactories* factories, | 114 media::GpuVideoAcceleratorFactories* factories, |
115 int64 picture_buffer_id, | 115 int64_t picture_buffer_id, |
116 uint32 texture_id, | 116 uint32_t texture_id, |
117 const gpu::SyncToken& release_sync_token); | 117 const gpu::SyncToken& release_sync_token); |
118 // Indicate the picture buffer can be reused by the decoder. | 118 // Indicate the picture buffer can be reused by the decoder. |
119 void ReusePictureBuffer(int64 picture_buffer_id); | 119 void ReusePictureBuffer(int64_t picture_buffer_id); |
120 | 120 |
121 void RecordBufferData( | 121 void RecordBufferData( |
122 const BitstreamBuffer& bitstream_buffer, const DecoderBuffer& buffer); | 122 const BitstreamBuffer& bitstream_buffer, const DecoderBuffer& buffer); |
123 void GetBufferData(int32 id, base::TimeDelta* timetamp, | 123 void GetBufferData(int32_t id, |
124 gfx::Rect* visible_rect, gfx::Size* natural_size); | 124 base::TimeDelta* timetamp, |
| 125 gfx::Rect* visible_rect, |
| 126 gfx::Size* natural_size); |
125 | 127 |
126 void DestroyVDA(); | 128 void DestroyVDA(); |
127 | 129 |
128 // Request a shared-memory segment of at least |min_size| bytes. Will | 130 // Request a shared-memory segment of at least |min_size| bytes. Will |
129 // allocate as necessary. | 131 // allocate as necessary. |
130 scoped_ptr<SHMBuffer> GetSHM(size_t min_size); | 132 scoped_ptr<SHMBuffer> GetSHM(size_t min_size); |
131 | 133 |
132 // Return a shared-memory segment to the available pool. | 134 // Return a shared-memory segment to the available pool. |
133 void PutSHM(scoped_ptr<SHMBuffer> shm_buffer); | 135 void PutSHM(scoped_ptr<SHMBuffer> shm_buffer); |
134 | 136 |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
167 | 169 |
168 // Callback to request/cancel CDM ready notification. | 170 // Callback to request/cancel CDM ready notification. |
169 SetCdmReadyCB set_cdm_ready_cb_; | 171 SetCdmReadyCB set_cdm_ready_cb_; |
170 CdmAttachedCB cdm_attached_cb_; | 172 CdmAttachedCB cdm_attached_cb_; |
171 | 173 |
172 // Shared-memory buffer pool. Since allocating SHM segments requires a | 174 // Shared-memory buffer pool. Since allocating SHM segments requires a |
173 // round-trip to the browser process, we keep allocation out of the | 175 // round-trip to the browser process, we keep allocation out of the |
174 // steady-state of the decoder. | 176 // steady-state of the decoder. |
175 std::vector<SHMBuffer*> available_shm_segments_; | 177 std::vector<SHMBuffer*> available_shm_segments_; |
176 | 178 |
177 std::map<int32, PendingDecoderBuffer> bitstream_buffers_in_decoder_; | 179 std::map<int32_t, PendingDecoderBuffer> bitstream_buffers_in_decoder_; |
178 PictureBufferMap assigned_picture_buffers_; | 180 PictureBufferMap assigned_picture_buffers_; |
179 // PictureBuffers given to us by VDA via PictureReady, which we sent forward | 181 // PictureBuffers given to us by VDA via PictureReady, which we sent forward |
180 // as VideoFrames to be rendered via decode_cb_, and which will be returned | 182 // as VideoFrames to be rendered via decode_cb_, and which will be returned |
181 // to us via ReusePictureBuffer. | 183 // to us via ReusePictureBuffer. |
182 typedef std::map<int32 /* picture_buffer_id */, uint32 /* texture_id */> | 184 typedef std::map<int32_t /* picture_buffer_id */, uint32_t /* texture_id */> |
183 PictureBufferTextureMap; | 185 PictureBufferTextureMap; |
184 PictureBufferTextureMap picture_buffers_at_display_; | 186 PictureBufferTextureMap picture_buffers_at_display_; |
185 | 187 |
186 // The texture target used for decoded pictures. | 188 // The texture target used for decoded pictures. |
187 uint32 decoder_texture_target_; | 189 uint32_t decoder_texture_target_; |
188 | 190 |
189 struct BufferData { | 191 struct BufferData { |
190 BufferData(int32 bbid, base::TimeDelta ts, const gfx::Rect& visible_rect, | 192 BufferData(int32_t bbid, |
| 193 base::TimeDelta ts, |
| 194 const gfx::Rect& visible_rect, |
191 const gfx::Size& natural_size); | 195 const gfx::Size& natural_size); |
192 ~BufferData(); | 196 ~BufferData(); |
193 int32 bitstream_buffer_id; | 197 int32_t bitstream_buffer_id; |
194 base::TimeDelta timestamp; | 198 base::TimeDelta timestamp; |
195 gfx::Rect visible_rect; | 199 gfx::Rect visible_rect; |
196 gfx::Size natural_size; | 200 gfx::Size natural_size; |
197 }; | 201 }; |
198 std::list<BufferData> input_buffer_data_; | 202 std::list<BufferData> input_buffer_data_; |
199 | 203 |
200 // picture_buffer_id and the frame wrapping the corresponding Picture, for | 204 // picture_buffer_id and the frame wrapping the corresponding Picture, for |
201 // frames that have been decoded but haven't been requested by a Decode() yet. | 205 // frames that have been decoded but haven't been requested by a Decode() yet. |
202 int32 next_picture_buffer_id_; | 206 int32_t next_picture_buffer_id_; |
203 int32 next_bitstream_buffer_id_; | 207 int32_t next_bitstream_buffer_id_; |
204 | 208 |
205 // Set during ProvidePictureBuffers(), used for checking and implementing | 209 // Set during ProvidePictureBuffers(), used for checking and implementing |
206 // HasAvailableOutputFrames(). | 210 // HasAvailableOutputFrames(). |
207 int available_pictures_; | 211 int available_pictures_; |
208 | 212 |
209 // If true, the client cannot expect the VDA to produce any new decoded | 213 // If true, the client cannot expect the VDA to produce any new decoded |
210 // frames, until it returns all PictureBuffers it may be holding back to the | 214 // frames, until it returns all PictureBuffers it may be holding back to the |
211 // VDA. In other words, the VDA may require all PictureBuffers to be able to | 215 // VDA. In other words, the VDA may require all PictureBuffers to be able to |
212 // proceed with decoding the next frame. | 216 // proceed with decoding the next frame. |
213 bool needs_all_picture_buffers_to_decode_; | 217 bool needs_all_picture_buffers_to_decode_; |
214 | 218 |
215 // Bound to factories_->GetMessageLoop(). | 219 // Bound to factories_->GetMessageLoop(). |
216 // NOTE: Weak pointers must be invalidated before all other member variables. | 220 // NOTE: Weak pointers must be invalidated before all other member variables. |
217 base::WeakPtrFactory<GpuVideoDecoder> weak_factory_; | 221 base::WeakPtrFactory<GpuVideoDecoder> weak_factory_; |
218 | 222 |
219 DISALLOW_COPY_AND_ASSIGN(GpuVideoDecoder); | 223 DISALLOW_COPY_AND_ASSIGN(GpuVideoDecoder); |
220 }; | 224 }; |
221 | 225 |
222 } // namespace media | 226 } // namespace media |
223 | 227 |
224 #endif // MEDIA_FILTERS_GPU_VIDEO_DECODER_H_ | 228 #endif // MEDIA_FILTERS_GPU_VIDEO_DECODER_H_ |
OLD | NEW |