blob: e2382c318615980e746efbbfb1ba74d0fd983e7b [file] [log] [blame]
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef MEDIA_GPU_VAAPI_VP9_VAAPI_VIDEO_DECODER_DELEGATE_H_
#define MEDIA_GPU_VAAPI_VP9_VAAPI_VIDEO_DECODER_DELEGATE_H_
#include "base/callback_helpers.h"
#include "base/memory/scoped_refptr.h"
#include "base/sequence_checker.h"
#include "media/filters/vp9_parser.h"
#include "media/gpu/vaapi/vaapi_video_decoder_delegate.h"
#include "media/gpu/vp9_decoder.h"
namespace media {
class ScopedVABuffer;
class VP9Picture;
class VP9VaapiVideoDecoderDelegate : public VP9Decoder::VP9Accelerator,
public VaapiVideoDecoderDelegate {
public:
VP9VaapiVideoDecoderDelegate(
DecodeSurfaceHandler<VASurface>* const vaapi_dec,
scoped_refptr<VaapiWrapper> vaapi_wrapper,
ProtectedSessionUpdateCB on_protected_session_update_cb =
base::DoNothing(),
CdmContext* cdm_context = nullptr,
EncryptionScheme encryption_scheme = EncryptionScheme::kUnencrypted);
VP9VaapiVideoDecoderDelegate(const VP9VaapiVideoDecoderDelegate&) = delete;
VP9VaapiVideoDecoderDelegate& operator=(const VP9VaapiVideoDecoderDelegate&) =
delete;
~VP9VaapiVideoDecoderDelegate() override;
// VP9Decoder::VP9Accelerator implementation.
scoped_refptr<VP9Picture> CreateVP9Picture() override;
Status SubmitDecode(scoped_refptr<VP9Picture> pic,
const Vp9SegmentationParams& seg,
const Vp9LoopFilterParams& lf,
const Vp9ReferenceFrameVector& reference_frames,
base::OnceClosure done_cb) override;
bool OutputPicture(scoped_refptr<VP9Picture> pic) override;
bool IsFrameContextRequired() const override;
bool GetFrameContext(scoped_refptr<VP9Picture> pic,
Vp9FrameContext* frame_ctx) override;
// VaapiVideoDecoderDelegate impl.
void OnVAContextDestructionSoon() override;
private:
std::unique_ptr<ScopedVABuffer> picture_params_;
std::unique_ptr<ScopedVABuffer> slice_params_;
std::unique_ptr<ScopedVABuffer> crypto_params_;
std::unique_ptr<ScopedVABuffer> protected_params_;
};
} // namespace media
#endif // MEDIA_GPU_VAAPI_VP9_VAAPI_VIDEO_DECODER_DELEGATE_H_