#ifndef MEDIA_GPU_VAAPI_VAAPI_IMAGE_PROCESSOR_BACKEND_H_
#define MEDIA_GPU_VAAPI_VAAPI_IMAGE_PROCESSOR_BACKEND_H_
#include <memory>
#include "base/containers/flat_map.h"
#include "base/containers/id_map.h"
#include "base/task/sequenced_task_runner.h"
#include "media/gpu/chromeos/image_processor_backend.h"
#include "media/gpu/media_gpu_export.h"
namespace media {
class VaapiWrapper;
class ScopedVASurface;
class VaapiImageProcessorBackend : public ImageProcessorBackend {
public:
VaapiImageProcessorBackend(const VaapiImageProcessorBackend&) = delete;
VaapiImageProcessorBackend& operator=(const VaapiImageProcessorBackend&) =
delete;
static std::unique_ptr<ImageProcessorBackend> Create(
const PortConfig& input_config,
const PortConfig& output_config,
OutputMode output_mode,
ErrorCB error_cb);
void ProcessFrame(scoped_refptr<FrameResource> input_frame,
scoped_refptr<FrameResource> output_frame,
FrameResourceReadyCB cb) override;
void Reset() override;
std::string type() const override;
private:
VaapiImageProcessorBackend(const PortConfig& input_config,
const PortConfig& output_config,
OutputMode output_mode,
ErrorCB error_cb);
~VaapiImageProcessorBackend() override;
const ScopedVASurface* GetOrCreateSurfaceForFrame(const FrameResource& frame,
bool use_protected);
scoped_refptr<VaapiWrapper> vaapi_wrapper_
GUARDED_BY_CONTEXT(backend_sequence_checker_);
bool needs_context_ GUARDED_BY_CONTEXT(backend_sequence_checker_) = false;
base::flat_map<base::UnguessableToken, std::unique_ptr<ScopedVASurface>>
allocated_va_surfaces_ GUARDED_BY_CONTEXT(backend_sequence_checker_);
};
}
#endif