| 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 <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
| 11 #include "base/memory/weak_ptr.h" | |
| 12 #include "media/base/bitstream_buffer.h" | 11 #include "media/base/bitstream_buffer.h" |
| 13 #include "media/base/video_decoder_config.h" | 12 #include "media/base/video_decoder_config.h" |
| 14 #include "media/video/picture.h" | 13 #include "media/video/picture.h" |
| 15 #include "ui/gfx/size.h" | 14 #include "ui/gfx/size.h" |
| 16 | 15 |
| 17 namespace media { | 16 namespace media { |
| 18 | 17 |
| 19 // Video decoder interface. | 18 // Video decoder interface. |
| 20 // This interface is extended by the various components that ultimately | 19 // This interface is extended by the various components that ultimately |
| 21 // implement the backend of PPB_VideoDecode_Dev. | 20 // implement the backend of PPB_VideoDecode_Dev. |
| 22 class MEDIA_EXPORT VideoDecodeAccelerator | 21 class MEDIA_EXPORT VideoDecodeAccelerator { |
| 23 : public base::SupportsWeakPtr<VideoDecodeAccelerator> { | |
| 24 public: | 22 public: |
| 25 virtual ~VideoDecodeAccelerator(); | 23 virtual ~VideoDecodeAccelerator(); |
| 26 | 24 |
| 27 // Enumeration of potential errors generated by the API. | 25 // Enumeration of potential errors generated by the API. |
| 28 // Note: Keep these in sync with PP_VideoDecodeError_Dev. Also do not | 26 // Note: Keep these in sync with PP_VideoDecodeError_Dev. Also do not |
| 29 // rearrange, reuse or remove values as they are used for gathering UMA | 27 // rearrange, reuse or remove values as they are used for gathering UMA |
| 30 // statistics. | 28 // statistics. |
| 31 enum Error { | 29 enum Error { |
| 32 // An operation was attempted during an incompatible decoder state. | 30 // An operation was attempted during an incompatible decoder state. |
| 33 ILLEGAL_STATE = 1, | 31 ILLEGAL_STATE = 1, |
| 34 // Invalid argument was passed to an API method. | 32 // Invalid argument was passed to an API method. |
| 35 INVALID_ARGUMENT, | 33 INVALID_ARGUMENT, |
| 36 // Encoded input is unreadable. | 34 // Encoded input is unreadable. |
| 37 UNREADABLE_INPUT, | 35 UNREADABLE_INPUT, |
| 38 // A failure occurred at the browser layer or one of its dependencies. | 36 // A failure occurred at the browser layer or one of its dependencies. |
| 39 // Examples of such failures include GPU hardware failures, GPU driver | 37 // Examples of such failures include GPU hardware failures, GPU driver |
| 40 // failures, GPU library failures, browser programming errors, and so on. | 38 // failures, GPU library failures, browser programming errors, and so on. |
| 41 PLATFORM_FAILURE, | 39 PLATFORM_FAILURE, |
| 42 // Largest used enum. This should be adjusted when new errors are added. | 40 // Largest used enum. This should be adjusted when new errors are added. |
| 43 LARGEST_ERROR_ENUM, | 41 LARGEST_ERROR_ENUM, |
| 44 }; | 42 }; |
| 45 | 43 |
| 46 // Interface for collaborating with picture interface to provide memory for | 44 // Interface for collaborating with picture interface to provide memory for |
| 47 // output picture and blitting them. | 45 // output picture and blitting them. These callbacks will not be made unless |
| 46 // Initialize() has returned successfully. |
| 48 // This interface is extended by the various layers that relay messages back | 47 // This interface is extended by the various layers that relay messages back |
| 49 // to the plugin, through the PPP_VideoDecode_Dev interface the plugin | 48 // to the plugin, through the PPP_VideoDecode_Dev interface the plugin |
| 50 // implements. | 49 // implements. |
| 51 class MEDIA_EXPORT Client { | 50 class MEDIA_EXPORT Client { |
| 52 public: | 51 public: |
| 53 // Callback to notify client that decoder has been initialized. | |
| 54 virtual void NotifyInitializeDone() = 0; | |
| 55 | |
| 56 // Callback to tell client how many and what size of buffers to provide. | 52 // Callback to tell client how many and what size of buffers to provide. |
| 57 virtual void ProvidePictureBuffers(uint32 requested_num_of_buffers, | 53 virtual void ProvidePictureBuffers(uint32 requested_num_of_buffers, |
| 58 const gfx::Size& dimensions, | 54 const gfx::Size& dimensions, |
| 59 uint32 texture_target) = 0; | 55 uint32 texture_target) = 0; |
| 60 | 56 |
| 61 // Callback to dismiss picture buffer that was assigned earlier. | 57 // Callback to dismiss picture buffer that was assigned earlier. |
| 62 virtual void DismissPictureBuffer(int32 picture_buffer_id) = 0; | 58 virtual void DismissPictureBuffer(int32 picture_buffer_id) = 0; |
| 63 | 59 |
| 64 // Callback to deliver decoded pictures ready to be displayed. | 60 // Callback to deliver decoded pictures ready to be displayed. |
| 65 virtual void PictureReady(const Picture& picture) = 0; | 61 virtual void PictureReady(const Picture& picture) = 0; |
| 66 | 62 |
| 67 // Callback to notify that decoded has decoded the end of the current | 63 // Callback to notify that decoded has decoded the end of the current |
| 68 // bitstream buffer. | 64 // bitstream buffer. |
| 69 virtual void NotifyEndOfBitstreamBuffer(int32 bitstream_buffer_id) = 0; | 65 virtual void NotifyEndOfBitstreamBuffer(int32 bitstream_buffer_id) = 0; |
| 70 | 66 |
| 71 // Flush completion callback. | 67 // Flush completion callback. |
| 72 virtual void NotifyFlushDone() = 0; | 68 virtual void NotifyFlushDone() = 0; |
| 73 | 69 |
| 74 // Reset completion callback. | 70 // Reset completion callback. |
| 75 virtual void NotifyResetDone() = 0; | 71 virtual void NotifyResetDone() = 0; |
| 76 | 72 |
| 77 // Callback to notify about decoding errors. | 73 // Callback to notify about decoding errors. Note that errors in |
| 74 // Initialize() will not be reported here, but will instead be indicated by |
| 75 // a false return value there. |
| 78 virtual void NotifyError(Error error) = 0; | 76 virtual void NotifyError(Error error) = 0; |
| 79 | 77 |
| 80 protected: | 78 protected: |
| 81 virtual ~Client() {} | 79 virtual ~Client() {} |
| 82 }; | 80 }; |
| 83 | 81 |
| 84 // Video decoder functions. | 82 // Video decoder functions. |
| 85 | 83 |
| 86 // Initializes the video decoder with specific configuration. | 84 // Initializes the video decoder with specific configuration. Called once per |
| 85 // decoder construction. This call is synchronous and returns true iff |
| 86 // initialization is successful. |
| 87 // Parameters: | 87 // Parameters: |
| 88 // |profile| is the video stream's format profile. | 88 // |profile| is the video stream's format profile. |
| 89 // |client| is the client of this video decoder. The provided pointer must | 89 // |client| is the client of this video decoder. The provided pointer must |
| 90 // be valid until Destroy() is called. | 90 // be valid until Destroy() is called. |
| 91 // | |
| 92 // Returns true when command successfully accepted. Otherwise false. | |
| 93 virtual bool Initialize(VideoCodecProfile profile, Client* client) = 0; | 91 virtual bool Initialize(VideoCodecProfile profile, Client* client) = 0; |
| 94 | 92 |
| 95 // Decodes given bitstream buffer that contains at most one frame. Once | 93 // Decodes given bitstream buffer that contains at most one frame. Once |
| 96 // decoder is done with processing |bitstream_buffer| it will call | 94 // decoder is done with processing |bitstream_buffer| it will call |
| 97 // NotifyEndOfBitstreamBuffer() with the bitstream buffer id. | 95 // NotifyEndOfBitstreamBuffer() with the bitstream buffer id. |
| 98 // Parameters: | 96 // Parameters: |
| 99 // |bitstream_buffer| is the input bitstream that is sent for decoding. | 97 // |bitstream_buffer| is the input bitstream that is sent for decoding. |
| 100 virtual void Decode(const BitstreamBuffer& bitstream_buffer) = 0; | 98 virtual void Decode(const BitstreamBuffer& bitstream_buffer) = 0; |
| 101 | 99 |
| 102 // Assigns a set of texture-backed picture buffers to the video decoder. | 100 // Assigns a set of texture-backed picture buffers to the video decoder. |
| 103 // | 101 // |
| 104 // Ownership of each picture buffer remains with the client, but the client | 102 // Ownership of each picture buffer remains with the client, but the client |
| 105 // is not allowed to deallocate the buffer before the DismissPictureBuffer | 103 // is not allowed to deallocate the buffer before the DismissPictureBuffer |
| (...skipping 27 matching lines...) Expand all Loading... |
| 133 // component is freed. This call may asynchornously free system resources, | 131 // component is freed. This call may asynchornously free system resources, |
| 134 // but its client-visible effects are synchronous. After this method returns | 132 // but its client-visible effects are synchronous. After this method returns |
| 135 // no more callbacks will be made on the client. Deletes |this| | 133 // no more callbacks will be made on the client. Deletes |this| |
| 136 // unconditionally, so make sure to drop all pointers to it! | 134 // unconditionally, so make sure to drop all pointers to it! |
| 137 virtual void Destroy() = 0; | 135 virtual void Destroy() = 0; |
| 138 }; | 136 }; |
| 139 | 137 |
| 140 } // namespace media | 138 } // namespace media |
| 141 | 139 |
| 142 #endif // MEDIA_VIDEO_VIDEO_DECODE_ACCELERATOR_H_ | 140 #endif // MEDIA_VIDEO_VIDEO_DECODE_ACCELERATOR_H_ |
| OLD | NEW |