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

Unified Diff: content/common/gpu/media/vaapi_wrapper.h

Issue 1432963003: [Ozone] Extends the lifetime of VaapiWrapper (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: nits/API naming fix Created 5 years, 1 month 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 side-by-side diff with in-line comments
Download patch
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..6ef137ca5e7bb172c58491c356bbd655b12b1468 100644
--- a/content/common/gpu/media/vaapi_wrapper.h
+++ b/content/common/gpu/media/vaapi_wrapper.h
@@ -31,6 +31,12 @@
#include "third_party/libva/va/va_x11.h"
#endif // USE_X11
+#if defined(USE_OZONE)
+namespace ui {
+class NativePixmap;
+}
+#endif
+
namespace content {
// This class handles VA-API calls and ensures proper locking of VA-API calls
@@ -43,7 +49,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 +61,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 +70,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);
@@ -79,8 +86,6 @@ class CONTENT_EXPORT VaapiWrapper {
// Return true when JPEG decode is supported.
static bool IsJpegDecodeSupported();
- ~VaapiWrapper();
-
// Create |num_surfaces| backing surfaces in driver for VASurfaces of
// |va_format|, each of size |size|. Returns true when successful, with the
// created IDs in |va_surfaces| to be managed and later wrapped in
@@ -106,6 +111,26 @@ class CONTENT_EXPORT VaapiWrapper {
const gfx::Size& size,
const std::vector<VASurfaceAttrib>& va_attribs);
+#if defined(USE_OZONE)
+ // 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);
+
+ // 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,
Pawel Osciak 2015/11/30 05:57:02 Sorry, I think you misunderstood me previously: I
william.xie1 2015/11/30 08:02:02 Done.
+ gfx::BufferFormat format);
+#endif
+
// 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.
@@ -199,6 +224,8 @@ class CONTENT_EXPORT VaapiWrapper {
unsigned int va_surface_format() const { return va_surface_format_; }
private:
+ friend class base::RefCountedThreadSafe<VaapiWrapper>;
+
struct ProfileInfo {
VAProfile va_profile;
gfx::Size max_resolution;
@@ -262,6 +289,7 @@ class CONTENT_EXPORT VaapiWrapper {
};
VaapiWrapper();
+ ~VaapiWrapper();
bool Initialize(CodecMode mode, VAProfile va_profile);
void Deinitialize();
« no previous file with comments | « content/common/gpu/media/vaapi_video_encode_accelerator.h ('k') | content/common/gpu/media/vaapi_wrapper.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698