Index: trunk/src/content/common/gpu/media/vaapi_wrapper.h |
=================================================================== |
--- trunk/src/content/common/gpu/media/vaapi_wrapper.h (revision 280019) |
+++ trunk/src/content/common/gpu/media/vaapi_wrapper.h (working copy) |
@@ -3,16 +3,12 @@ |
// found in the LICENSE file. |
// |
// This file contains an implementation of VaapiWrapper, used by |
-// VaapiVideoDecodeAccelerator and VaapiH264Decoder for decode, |
-// and VaapiVideoEncodeAccelerator for encode, to interface |
-// with libva (VA-API library for hardware video codec). |
+// VaapiVideoDecodeAccelerator and VaapiH264Decoder to interface |
+// with libva (VA-API library for hardware video decode). |
#ifndef CONTENT_COMMON_GPU_MEDIA_VAAPI_WRAPPER_H_ |
#define CONTENT_COMMON_GPU_MEDIA_VAAPI_WRAPPER_H_ |
-#include <set> |
-#include <vector> |
- |
#include "base/callback.h" |
#include "base/memory/ref_counted.h" |
#include "base/synchronization/lock.h" |
@@ -26,26 +22,20 @@ |
namespace content { |
// This class handles VA-API calls and ensures proper locking of VA-API calls |
-// to libva, the userspace shim to the HW codec driver. libva is not |
+// to libva, the userspace shim to the HW decoder driver. libva is not |
// thread-safe, so we have to perform locking ourselves. This class is fully |
// synchronous and its methods can be called from any thread and may wait on |
// the va_lock_ while other, concurrent calls run. |
// |
// This class is responsible for managing VAAPI connection, contexts and state. |
// It is also responsible for managing and freeing VABuffers (not VASurfaces), |
-// which are used to queue parameters and slice data to the HW codec, |
+// which are used to queue decode parameters and slice data to the HW decoder, |
// as well as underlying memory for VASurfaces themselves. |
class CONTENT_EXPORT VaapiWrapper { |
public: |
- enum CodecMode { |
- kDecode, |
- kEncode, |
- }; |
- |
// |report_error_to_uma_cb| will be called independently from reporting |
// errors to clients via method return values. |
static scoped_ptr<VaapiWrapper> Create( |
- CodecMode mode, |
media::VideoCodecProfile profile, |
Display* x_display, |
const base::Closure& report_error_to_uma_cb); |
@@ -67,30 +57,20 @@ |
void DestroySurfaces(); |
// Submit parameters or slice data of |va_buffer_type|, copying them from |
- // |buffer| of size |size|, into HW codec. The data in |buffer| is no |
+ // |buffer| of size |size|, into HW decoder. The data in |buffer| is no |
// longer needed and can be freed after this method returns. |
- // Data submitted via this method awaits in the HW codec until |
- // ExecuteAndDestroyPendingBuffers() is called to execute or |
- // DestroyPendingBuffers() is used to cancel a pending job. |
+ // Data submitted via this method awaits in the HW decoder until |
+ // DecodeAndDestroyPendingBuffers is called to execute or |
+ // DestroyPendingBuffers is used to cancel a pending decode. |
bool SubmitBuffer(VABufferType va_buffer_type, size_t size, void* buffer); |
- // Submit a VAEncMiscParameterBuffer of given |misc_param_type|, copying its |
- // data from |buffer| of size |size|, into HW codec. The data in |buffer| is |
- // no longer needed and can be freed after this method returns. |
- // Data submitted via this method awaits in the HW codec until |
- // ExecuteAndDestroyPendingBuffers() is called to execute or |
- // DestroyPendingBuffers() is used to cancel a pending job. |
- bool SubmitVAEncMiscParamBuffer(VAEncMiscParameterType misc_param_type, |
- size_t size, |
- void* buffer); |
- |
- // Cancel and destroy all buffers queued to the HW codec via SubmitBuffer(). |
- // Useful when a pending job is to be cancelled (on reset or error). |
+ // Cancel and destroy all buffers queued to the HW decoder via SubmitBuffer. |
+ // Useful when a pending decode is to be cancelled (on reset or error). |
void DestroyPendingBuffers(); |
- // Execute job in hardware on target |va_surface_id| and destroy pending |
- // buffers. Return false if Execute() fails. |
- bool ExecuteAndDestroyPendingBuffers(VASurfaceID va_surface_id); |
+ // Execute decode in hardware into |va_surface_id} and destroy pending |
+ // buffers. Return false if SubmitDecode() fails. |
+ bool DecodeAndDestroyPendingBuffers(VASurfaceID va_surface_id); |
// Put data from |va_surface_id| into |x_pixmap| of size |size|, |
// converting/scaling to it. |
@@ -112,41 +92,18 @@ |
// GetVaImage(). This is intended for testing only. |
void ReturnVaImageForTesting(VAImage* image); |
- // Upload contents of |frame| into |va_surface_id| for encode. |
- bool UploadVideoFrameToSurface(const scoped_refptr<media::VideoFrame>& frame, |
- VASurfaceID va_surface_id); |
- |
- // Create a buffer of |size| bytes to be used as encode output. |
- bool CreateCodedBuffer(size_t size, VABufferID* buffer_id); |
- |
- // Download the contents of the buffer with given |buffer_id| into a buffer of |
- // size |target_size|, pointed to by |target_ptr|. The number of bytes |
- // downloaded will be returned in |coded_data_size|. |sync_surface_id| will |
- // be used as a sync point, i.e. it will have to become idle before starting |
- // the download. |sync_surface_id| should be the source surface passed |
- // to the encode job. |
- bool DownloadAndDestroyCodedBuffer(VABufferID buffer_id, |
- VASurfaceID sync_surface_id, |
- uint8* target_ptr, |
- size_t target_size, |
- size_t* coded_data_size); |
- |
- // Destroy all previously-allocated (and not yet destroyed) coded buffers. |
- void DestroyCodedBuffers(); |
- |
private: |
VaapiWrapper(); |
- bool Initialize(CodecMode mode, |
- media::VideoCodecProfile profile, |
+ bool Initialize(media::VideoCodecProfile profile, |
Display* x_display, |
const base::Closure& report_error__to_uma_cb); |
void Deinitialize(); |
- // Execute pending job in hardware and destroy pending buffers. Return false |
- // if vaapi driver refuses to accept parameter or slice buffers submitted |
- // by client, or if execution fails in hardware. |
- bool Execute(VASurfaceID va_surface_id); |
+ // Execute decode in hardware and destroy pending buffers. Return false if |
+ // vaapi driver refuses to accept parameter or slice buffers submitted |
+ // by client or if decode fails in hardware. |
+ bool SubmitDecode(VASurfaceID va_surface_id); |
// Attempt to set render mode to "render to texture.". Failure is non-fatal. |
void TryToSetVADisplayAttributeToLocalGPU(); |
@@ -157,7 +114,7 @@ |
// Libva is not thread safe, so we have to do locking for it ourselves. |
// This lock is to be taken for the duration of all VA-API calls and for |
- // the entire job submission sequence in ExecuteAndDestroyPendingBuffers(). |
+ // the entire decode execution sequence in DecodeAndDestroyPendingBuffers(). |
base::Lock va_lock_; |
// Allocated ids for VASurfaces. |
@@ -174,14 +131,11 @@ |
// valid until DestroySurfaces(). |
VAContextID va_context_id_; |
- // Data queued up for HW codec, to be committed on next execution. |
+ // Data queued up for HW decoder, to be committed on next HW decode. |
std::vector<VABufferID> pending_slice_bufs_; |
std::vector<VABufferID> pending_va_bufs_; |
- // Bitstream buffers for encode. |
- std::set<VABufferID> coded_buffers_; |
- |
- // Called to report codec errors to UMA. Errors to clients are reported via |
+ // Called to report decoding errors to UMA. Errors to clients are reported via |
// return values from public methods. |
base::Closure report_error_to_uma_cb_; |