| 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_;
|
|
|
|
|