blob: e88bf9d11c0ff767b32489db0c2bf657dc58bc31 [file] [log] [blame]
// Copyright 2020 The Fuchsia 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 SRC_MEDIA_DRIVERS_AMLOGIC_ENCODER_LOCAL_CODEC_FACTORY_H_
#define SRC_MEDIA_DRIVERS_AMLOGIC_ENCODER_LOCAL_CODEC_FACTORY_H_
#include <fuchsia/mediacodec/cpp/fidl.h>
#include <lib/fidl/cpp/binding.h>
#include <lib/fit/function.h>
#include <lib/media/codec_impl/codec_adapter.h>
#include <lib/media/codec_impl/codec_admission_control.h>
#include <lib/media/codec_impl/codec_impl.h>
#include <fbl/macros.h>
class DeviceCtx;
class LocalCodecFactory : public fuchsia::mediacodec::CodecFactory {
public:
// device - parent device.
LocalCodecFactory(
async_dispatcher_t* fidl_dispatcher, DeviceCtx* device,
fidl::InterfaceRequest<CodecFactory> request,
fit::function<void(LocalCodecFactory*, std::unique_ptr<CodecImpl>)> factory_done_callback,
CodecAdmissionControl* codec_admission_control,
fit::function<void(LocalCodecFactory*, zx_status_t)> error_handler);
~LocalCodecFactory() override {}
//
// CodecFactory interface
//
void CreateDecoder(
fuchsia::mediacodec::CreateDecoder_Params video_decoder_params,
::fidl::InterfaceRequest<fuchsia::media::StreamProcessor> video_decoder) override;
void CreateEncoder(
fuchsia::mediacodec::CreateEncoder_Params encoder_params,
::fidl::InterfaceRequest<fuchsia::media::StreamProcessor> encoder_request) override;
private:
async_dispatcher_t* fidl_dispatcher_;
DeviceCtx* device_ = nullptr;
fidl::Binding<fuchsia::mediacodec::CodecFactory, LocalCodecFactory*> binding_;
// Returns the codec implementation and assumes drop of self.
fit::function<void(LocalCodecFactory*, std::unique_ptr<CodecImpl>)> factory_done_callback_;
// Assumes drop of self
fit::function<void(LocalCodecFactory*, zx_status_t)> error_handler_;
CodecAdmissionControl* codec_admission_control_;
};
#endif // SRC_MEDIA_DRIVERS_AMLOGIC_ENCODER_LOCAL_CODEC_FACTORY_H_