// Copyright 2018 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef MEDIA_GPU_VAAPI_VAAPI_UTILS_H_ #define MEDIA_GPU_VAAPI_VAAPI_UTILS_H_ #include <va/va.h> #include "base/functional/callback_forward.h" #include "base/functional/callback_helpers.h" #include "base/memory/raw_ptr.h" #include "base/thread_annotations.h" #include "ui/gfx/geometry/size.h" namespace base { class Lock; } namespace media { class VaapiWrapper; class Vp8ReferenceFrameVector; struct VAContextAndScopedVASurfaceDeleter; struct Vp8FrameHeader; // Class to map a given VABuffer, identified by |buffer_id|, for its lifetime. // The |lock_| might be null depending on the user of this class. If |lock_| is // not null, this class must operate under |lock_| acquired. class ScopedVABufferMapping { … }; // This class tracks the VABuffer life cycle from vaCreateBuffer() to // vaDestroyBuffer(). Users of this class are responsible for mapping and // unmapping the buffer as needed. The |lock_| might be null depending on the // user of this class. If |lock_| is not null, |lock_| is acquired for // destruction purposes. class ScopedVABuffer { … }; // This class tracks the VAImage life cycle from vaCreateImage() - vaGetImage() // to vaDestroyImage(). In between creation and destruction, image()->buf will // try to be be mapped on user space using a ScopedVABufferMapping. All // resources will be cleaned up appropriately. The |lock_| might be null // depending on the user of this class. If |lock_| is not null, |lock_| is // acquired for destruction purposes. class ScopedVAImage { … }; // A VA-API-specific surface used by video/image codec accelerators to work on. // As the name suggests, this class is self-cleaning. class ScopedVASurface { … }; // A combination of a numeric ID |id| and a callback to release it. This class // makes no assumptions on threading or lifetimes; |release_cb_| must provide // for this. // ScopedID allows for object-specific release callbacks, whereas // unique_ptr::deleter_type (or base::ScopedGeneric) only supports free // functions (or class-static methods) for freeing. template <typename T> class ScopedID { … }; // Shortcut for a VASurfaceID with tracked lifetime. VASurfaceHandle; // Adapts |frame_header| to the Vaapi data types. void FillVP8DataStructures(const Vp8FrameHeader& frame_header, const Vp8ReferenceFrameVector& reference_frames, VAIQMatrixBufferVP8* iq_matrix_buf, VAProbabilityDataBufferVP8* prob_buf, VAPictureParameterBufferVP8* pic_param, VASliceParameterBufferVP8* slice_param); bool IsValidVABufferType(VABufferType type); } // namespace media #endif // MEDIA_GPU_VAAPI_VAAPI_UTILS_H_