| Index: content/common/gpu/media/vaapi_wrapper.h
|
| diff --git a/content/common/gpu/media/vaapi_wrapper.h b/content/common/gpu/media/vaapi_wrapper.h
|
| index 036bee4f61d7c05ab8c02749fe8d8343eb3f478c..eaf38b00642bf02bac9496b37d8de4b575f07e7b 100644
|
| --- a/content/common/gpu/media/vaapi_wrapper.h
|
| +++ b/content/common/gpu/media/vaapi_wrapper.h
|
| @@ -31,6 +31,10 @@
|
| #include "third_party/libva/va/va_x11.h"
|
| #endif // USE_X11
|
|
|
| +namespace ui {
|
| +class NativePixmap;
|
| +}
|
| +
|
| namespace content {
|
|
|
| // This class handles VA-API calls and ensures proper locking of VA-API calls
|
| @@ -43,7 +47,8 @@ namespace content {
|
| // It is also responsible for managing and freeing VABuffers (not VASurfaces),
|
| // which are used to queue parameters and slice data to the HW codec,
|
| // as well as underlying memory for VASurfaces themselves.
|
| -class CONTENT_EXPORT VaapiWrapper {
|
| +class CONTENT_EXPORT VaapiWrapper
|
| + : public base::RefCountedThreadSafe<VaapiWrapper> {
|
| public:
|
| enum CodecMode {
|
| kDecode,
|
| @@ -54,7 +59,7 @@ class CONTENT_EXPORT VaapiWrapper {
|
| // Return an instance of VaapiWrapper initialized for |va_profile| and
|
| // |mode|. |report_error_to_uma_cb| will be called independently from
|
| // reporting errors to clients via method return values.
|
| - static scoped_ptr<VaapiWrapper> Create(
|
| + static scoped_refptr<VaapiWrapper> Create(
|
| CodecMode mode,
|
| VAProfile va_profile,
|
| const base::Closure& report_error_to_uma_cb);
|
| @@ -63,7 +68,7 @@ class CONTENT_EXPORT VaapiWrapper {
|
| // |profile| to VAProfile.
|
| // |report_error_to_uma_cb| will be called independently from reporting
|
| // errors to clients via method return values.
|
| - static scoped_ptr<VaapiWrapper> CreateForVideoCodec(
|
| + static scoped_refptr<VaapiWrapper> CreateForVideoCodec(
|
| CodecMode mode,
|
| media::VideoCodecProfile profile,
|
| const base::Closure& report_error_to_uma_cb);
|
| @@ -106,6 +111,13 @@ class CONTENT_EXPORT VaapiWrapper {
|
| const gfx::Size& size,
|
| const std::vector<VASurfaceAttrib>& va_attribs);
|
|
|
| + // Create a VASurface for |pixmap| of |pixmap_size|. The ownership of the
|
| + // surface is transferred to the caller. It differs from surfaces created
|
| + // using CreateSurfaces(), where VaapiWrapper is the owner of the surfaces.
|
| + scoped_refptr<VASurface> CreateVASurfaceForPixmap(
|
| + const scoped_refptr<ui::NativePixmap>& pixmap,
|
| + const gfx::Size& pixmap_size);
|
| +
|
| // 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
|
| // longer needed and can be freed after this method returns.
|
| @@ -198,6 +210,17 @@ class CONTENT_EXPORT VaapiWrapper {
|
| // Get the created surfaces format.
|
| unsigned int va_surface_format() const { return va_surface_format_; }
|
|
|
| + // Use VPP to process |source_pixmap|, scaling to |target_size| and
|
| + // converting to |target_format|. Return the processed pixmap.
|
| + scoped_refptr<ui::NativePixmap> ProcessPixmap(
|
| + const scoped_refptr<ui::NativePixmap>& source_pixmap,
|
| + const gfx::Size& target_size,
|
| + gfx::BufferFormat target_format);
|
| +
|
| + // Create native pixmap with size |size| and format |format|.
|
| + scoped_refptr<ui::NativePixmap> CreateNativePixmap(gfx::Size size,
|
| + gfx::BufferFormat format);
|
| +
|
| private:
|
| struct ProfileInfo {
|
| VAProfile va_profile;
|
|
|