Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(199)

Side by Side Diff: media/video/video_decode_accelerator.h

Issue 7361010: Enable fire-and-forget Destroy of HW video decoder, and misc other improvements. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: vrk CR responses. Created 9 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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"
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
154 enum VideoColorFormat { 154 enum VideoColorFormat {
155 // Value represents 32-bit RGBA format where each component is 8-bit in order 155 // Value represents 32-bit RGBA format where each component is 8-bit in order
156 // R-G-B-A. Regardless of endianness of the architecture color components are 156 // R-G-B-A. Regardless of endianness of the architecture color components are
157 // stored in this order in the memory. 157 // stored in this order in the memory.
158 VIDEOCOLORFORMAT_RGBA = 0, 158 VIDEOCOLORFORMAT_RGBA = 0,
159 }; 159 };
160 160
161 // Video decoder interface. 161 // Video decoder interface.
162 // This interface is extended by the various components that ultimately 162 // This interface is extended by the various components that ultimately
163 // implement the backend of PPB_VideoDecode_Dev. 163 // implement the backend of PPB_VideoDecode_Dev.
164 class VideoDecodeAccelerator { 164 //
165 // No thread-safety guarantees are implied by the use of RefCountedThreadSafe
166 // below.
167 class VideoDecodeAccelerator
168 : public base::RefCountedThreadSafe<VideoDecodeAccelerator> {
165 public: 169 public:
166 virtual ~VideoDecodeAccelerator();
167
168 // Enumeration of potential errors generated by the API. 170 // Enumeration of potential errors generated by the API.
169 // TODO(fischman): these errors are a bad match for both what OMX generates 171 // TODO(fischman): these errors are a bad match for both what OMX generates
170 // and for what the plugin wants. Overhaul this list with a more useful set. 172 // and for what the plugin wants. Overhaul this list with a more useful set.
171 enum Error { 173 enum Error {
172 VIDEODECODERERROR_NONE = 0, 174 VIDEODECODERERROR_NONE = 0,
173 VIDEODECODERERROR_UNINITIALIZED, 175 VIDEODECODERERROR_UNINITIALIZED,
174 VIDEODECODERERROR_UNSUPPORTED, 176 VIDEODECODERERROR_UNSUPPORTED,
175 VIDEODECODERERROR_INVALIDINPUT, 177 VIDEODECODERERROR_INVALIDINPUT,
176 VIDEODECODERERROR_MEMFAILURE, 178 VIDEODECODERERROR_MEMFAILURE,
177 VIDEODECODERERROR_INSUFFICIENT_BUFFERS, 179 VIDEODECODERERROR_INSUFFICIENT_BUFFERS,
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
219 // Callback to notify that decoded has decoded the end of the current 221 // Callback to notify that decoded has decoded the end of the current
220 // bitstream buffer. 222 // bitstream buffer.
221 virtual void NotifyEndOfBitstreamBuffer(int32 bitstream_buffer_id) = 0; 223 virtual void NotifyEndOfBitstreamBuffer(int32 bitstream_buffer_id) = 0;
222 224
223 // Flush completion callback. 225 // Flush completion callback.
224 virtual void NotifyFlushDone() = 0; 226 virtual void NotifyFlushDone() = 0;
225 227
226 // Reset completion callback. 228 // Reset completion callback.
227 virtual void NotifyResetDone() = 0; 229 virtual void NotifyResetDone() = 0;
228 230
229 // Destroy completion callback.
230 virtual void NotifyDestroyDone() = 0;
231
232 // Callback to notify about decoding errors. 231 // Callback to notify about decoding errors.
233 virtual void NotifyError(Error error) = 0; 232 virtual void NotifyError(Error error) = 0;
234 }; 233 };
235 234
236 // Video decoder functions. 235 // Video decoder functions.
237 236
238 // Initializes the video decoder with specific configuration. 237 // Initializes the video decoder with specific configuration.
239 // Parameters: 238 // Parameters:
240 // |config| is the configuration on which the decoder should be initialized. 239 // |config| is the configuration on which the decoder should be initialized.
241 // 240 //
(...skipping 30 matching lines...) Expand all
272 // client. Can be used to implement "end of stream" notification. 271 // client. Can be used to implement "end of stream" notification.
273 virtual void Flush() = 0; 272 virtual void Flush() = 0;
274 273
275 // Resets the decoder: all pending inputs are dropped immediately and the 274 // Resets the decoder: all pending inputs are dropped immediately and the
276 // decoder returned to a state ready for further Decode()s, followed by 275 // decoder returned to a state ready for further Decode()s, followed by
277 // NotifyResetDone() being called on the client. Can be used to implement 276 // NotifyResetDone() being called on the client. Can be used to implement
278 // "seek". 277 // "seek".
279 virtual void Reset() = 0; 278 virtual void Reset() = 0;
280 279
281 // Destroys the decoder: all pending inputs are dropped immediately and the 280 // Destroys the decoder: all pending inputs are dropped immediately and the
282 // component is freed, followed by NotifyDestroyDone being called on the 281 // component is freed. This call may asynchornously free system resources,
283 // client. After this is called no other calls may be made on the decoder, 282 // but its client-visible effects are synchronous. After this method returns
284 // and after NotifyDestroyDone is called no callbacks will be made by the 283 // no more callbacks will be made on the client.
285 // decoder on the client.
286 virtual void Destroy() = 0; 284 virtual void Destroy() = 0;
285
286 protected:
287 friend class base::RefCountedThreadSafe<VideoDecodeAccelerator>;
288 virtual ~VideoDecodeAccelerator();
287 }; 289 };
288 290
289 } // namespace media 291 } // namespace media
290 292
291 #endif // MEDIA_VIDEO_VIDEO_DECODE_ACCELERATOR_H_ 293 #endif // MEDIA_VIDEO_VIDEO_DECODE_ACCELERATOR_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698