Chromium Code Reviews| 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_VIDEO_VIDEO_DECODE_ACCELERATOR_H_ | 5 #ifndef MEDIA_VIDEO_VIDEO_DECODE_ACCELERATOR_H_ |
| 6 #define MEDIA_VIDEO_VIDEO_DECODE_ACCELERATOR_H_ | 6 #define MEDIA_VIDEO_VIDEO_DECODE_ACCELERATOR_H_ |
| 7 | 7 |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <memory> | 10 #include <memory> |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 107 // When set to ALLOCATE, the VDA is expected to allocate backing memory | 107 // When set to ALLOCATE, the VDA is expected to allocate backing memory |
| 108 // for PictureBuffers at the time of AssignPictureBuffers() call. | 108 // for PictureBuffers at the time of AssignPictureBuffers() call. |
| 109 // When set to IMPORT, the VDA will not allocate, but after receiving | 109 // When set to IMPORT, the VDA will not allocate, but after receiving |
| 110 // AssignPictureBuffers() call, it will expect a call to | 110 // AssignPictureBuffers() call, it will expect a call to |
| 111 // ImportBufferForPicture() for each PictureBuffer before use. | 111 // ImportBufferForPicture() for each PictureBuffer before use. |
| 112 enum class OutputMode { | 112 enum class OutputMode { |
| 113 ALLOCATE, | 113 ALLOCATE, |
| 114 IMPORT, | 114 IMPORT, |
| 115 }; | 115 }; |
| 116 | 116 |
| 117 // Specifies how the VDA should behave on VDA::Flush(). | |
| 118 // | |
| 119 // - KEEP_OUTPUT_BUFFERS: the VDA may retain PictureBuffers that did not | |
| 120 // contain any decoded pictures at the end of flush for later use. In this | |
| 121 // mode, VDA returns via PictureReady() only the Pictures containing any | |
| 122 // remaining frames, decoded and/or released as a part of the flush, and | |
| 123 // ends the flush sequence by posting NotifyFlushDone(). | |
| 124 // | |
| 125 // - RETURN_OUTPUT_BUFFERS: the VDA must return all PictureBuffers via | |
| 126 // PictureReady() before posting NotifyFlushDone(), including buffers not | |
|
Owen Lin
2016/04/13 09:21:39
Actually, the whole VideoDecodeAccelerator runs in
Pawel Osciak
2016/04/14 02:14:01
That's true, however VDA is also an IPC interface
Owen Lin
2016/04/14 02:57:17
I see. You're right, I only think about the the us
| |
| 127 // containing decoded frames (if any). Buffers not containing any decoded | |
| 128 // data must have bitstream_buffer_id set to -1. | |
| 129 // Note: buffers returned to the VDA by the Client via ReusePictureBuffer() | |
| 130 // after NotifyFlushDone() is posted by the VDA (even if NotifyFlushDone() | |
| 131 // has not yet been serviced by the Client) can be kept by the VDA and | |
| 132 // reused after flush. | |
| 133 enum class FlushMode { | |
| 134 KEEP_OUTPUT_BUFFERS, | |
| 135 RETURN_OUTPUT_BUFFERS, | |
| 136 }; | |
| 137 | |
| 117 Config() = default; | 138 Config() = default; |
| 118 Config(VideoCodecProfile profile); | 139 Config(VideoCodecProfile profile); |
| 119 Config(const VideoDecoderConfig& video_decoder_config); | 140 Config(const VideoDecoderConfig& video_decoder_config); |
| 120 | 141 |
| 121 std::string AsHumanReadableString() const; | 142 std::string AsHumanReadableString() const; |
| 122 | 143 |
| 123 // |profile| combines the information about the codec and its profile. | 144 // |profile| combines the information about the codec and its profile. |
| 124 VideoCodecProfile profile = VIDEO_CODEC_PROFILE_UNKNOWN; | 145 VideoCodecProfile profile = VIDEO_CODEC_PROFILE_UNKNOWN; |
| 125 | 146 |
| 126 // The flag indicating whether the stream is encrypted. | 147 // The flag indicating whether the stream is encrypted. |
| 127 bool is_encrypted = false; | 148 bool is_encrypted = false; |
| 128 | 149 |
| 129 // The flag indicating whether the client supports deferred initialization | 150 // The flag indicating whether the client supports deferred initialization |
| 130 // or not. | 151 // or not. |
| 131 bool is_deferred_initialization_allowed = false; | 152 bool is_deferred_initialization_allowed = false; |
| 132 | 153 |
| 133 // An optional graphics surface that the VDA should render to. For setting | 154 // An optional graphics surface that the VDA should render to. For setting |
| 134 // an output SurfaceView on Android. It's only valid when not equal to | 155 // an output SurfaceView on Android. It's only valid when not equal to |
| 135 // |kNoSurfaceID|. | 156 // |kNoSurfaceID|. |
| 136 int surface_id = kNoSurfaceID; | 157 int surface_id = kNoSurfaceID; |
| 137 | 158 |
| 138 // Coded size of the video frame hint, subject to change. | 159 // Coded size of the video frame hint, subject to change. |
| 139 gfx::Size initial_expected_coded_size; | 160 gfx::Size initial_expected_coded_size; |
| 140 | 161 |
| 141 OutputMode output_mode = OutputMode::ALLOCATE; | 162 OutputMode output_mode = OutputMode::ALLOCATE; |
| 163 | |
| 164 FlushMode flush_mode = FlushMode::KEEP_OUTPUT_BUFFERS; | |
| 142 }; | 165 }; |
| 143 | 166 |
| 144 // Interface for collaborating with picture interface to provide memory for | 167 // Interface for collaborating with picture interface to provide memory for |
| 145 // output picture and blitting them. These callbacks will not be made unless | 168 // output picture and blitting them. These callbacks will not be made unless |
| 146 // Initialize() has returned successfully. | 169 // Initialize() has returned successfully. |
| 147 // This interface is extended by the various layers that relay messages back | 170 // This interface is extended by the various layers that relay messages back |
| 148 // to the plugin, through the PPP_VideoDecoder_Dev interface the plugin | 171 // to the plugin, through the PPP_VideoDecoder_Dev interface the plugin |
| 149 // implements. | 172 // implements. |
| 150 class MEDIA_EXPORT Client { | 173 class MEDIA_EXPORT Client { |
| 151 public: | 174 public: |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 163 // larger than the value requested. | 186 // larger than the value requested. |
| 164 virtual void ProvidePictureBuffers(uint32_t requested_num_of_buffers, | 187 virtual void ProvidePictureBuffers(uint32_t requested_num_of_buffers, |
| 165 uint32_t textures_per_buffer, | 188 uint32_t textures_per_buffer, |
| 166 const gfx::Size& dimensions, | 189 const gfx::Size& dimensions, |
| 167 uint32_t texture_target) = 0; | 190 uint32_t texture_target) = 0; |
| 168 | 191 |
| 169 // Callback to dismiss picture buffer that was assigned earlier. | 192 // Callback to dismiss picture buffer that was assigned earlier. |
| 170 virtual void DismissPictureBuffer(int32_t picture_buffer_id) = 0; | 193 virtual void DismissPictureBuffer(int32_t picture_buffer_id) = 0; |
| 171 | 194 |
| 172 // Callback to deliver decoded pictures ready to be displayed. | 195 // Callback to deliver decoded pictures ready to be displayed. |
| 196 // If picture.bitstream_buffer_id is set to -1, the buffer does not contain | |
| 197 // any decoded data, but is being returned as a part of Flush(). | |
| 173 virtual void PictureReady(const Picture& picture) = 0; | 198 virtual void PictureReady(const Picture& picture) = 0; |
| 174 | 199 |
| 175 // Callback to notify that decoded has decoded the end of the current | 200 // Callback to notify that decoded has decoded the end of the current |
| 176 // bitstream buffer. | 201 // bitstream buffer. |
| 177 virtual void NotifyEndOfBitstreamBuffer(int32_t bitstream_buffer_id) = 0; | 202 virtual void NotifyEndOfBitstreamBuffer(int32_t bitstream_buffer_id) = 0; |
| 178 | 203 |
| 179 // Flush completion callback. | 204 // Flush completion callback. |
| 180 virtual void NotifyFlushDone() = 0; | 205 virtual void NotifyFlushDone() = 0; |
| 181 | 206 |
| 182 // Reset completion callback. | 207 // Reset completion callback. |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 261 // for each buffer that has been processed so that decoder may know onto which | 286 // for each buffer that has been processed so that decoder may know onto which |
| 262 // picture buffers it can write the output to. | 287 // picture buffers it can write the output to. |
| 263 // | 288 // |
| 264 // Parameters: | 289 // Parameters: |
| 265 // |picture_buffer_id| id of the picture buffer that is to be reused. | 290 // |picture_buffer_id| id of the picture buffer that is to be reused. |
| 266 virtual void ReusePictureBuffer(int32_t picture_buffer_id) = 0; | 291 virtual void ReusePictureBuffer(int32_t picture_buffer_id) = 0; |
| 267 | 292 |
| 268 // Flushes the decoder: all pending inputs will be decoded and pictures handed | 293 // Flushes the decoder: all pending inputs will be decoded and pictures handed |
| 269 // back to the client, followed by NotifyFlushDone() being called on the | 294 // back to the client, followed by NotifyFlushDone() being called on the |
| 270 // client. Can be used to implement "end of stream" notification. | 295 // client. Can be used to implement "end of stream" notification. |
| 296 // Exact behavior of Flush() depends on the selected FlushMode, set in the | |
| 297 // Config passed to Initialize(). | |
| 271 virtual void Flush() = 0; | 298 virtual void Flush() = 0; |
| 272 | 299 |
| 273 // Resets the decoder: all pending inputs are dropped immediately and the | 300 // Resets the decoder: all pending inputs are dropped immediately and the |
| 274 // decoder returned to a state ready for further Decode()s, followed by | 301 // decoder returned to a state ready for further Decode()s, followed by |
| 275 // NotifyResetDone() being called on the client. Can be used to implement | 302 // NotifyResetDone() being called on the client. Can be used to implement |
| 276 // "seek". | 303 // "seek". |
| 277 virtual void Reset() = 0; | 304 virtual void Reset() = 0; |
| 278 | 305 |
| 279 // Destroys the decoder: all pending inputs are dropped immediately and the | 306 // Destroys the decoder: all pending inputs are dropped immediately and the |
| 280 // component is freed. This call may asynchornously free system resources, | 307 // component is freed. This call may asynchornously free system resources, |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 338 // Specialize std::default_delete so that scoped_ptr<VideoDecodeAccelerator> | 365 // Specialize std::default_delete so that scoped_ptr<VideoDecodeAccelerator> |
| 339 // uses "Destroy()" instead of trying to use the destructor. | 366 // uses "Destroy()" instead of trying to use the destructor. |
| 340 template <> | 367 template <> |
| 341 struct MEDIA_EXPORT default_delete<media::VideoDecodeAccelerator> { | 368 struct MEDIA_EXPORT default_delete<media::VideoDecodeAccelerator> { |
| 342 void operator()(media::VideoDecodeAccelerator* vda) const; | 369 void operator()(media::VideoDecodeAccelerator* vda) const; |
| 343 }; | 370 }; |
| 344 | 371 |
| 345 } // namespace std | 372 } // namespace std |
| 346 | 373 |
| 347 #endif // MEDIA_VIDEO_VIDEO_DECODE_ACCELERATOR_H_ | 374 #endif // MEDIA_VIDEO_VIDEO_DECODE_ACCELERATOR_H_ |
| OLD | NEW |