#pragma once extern "C" { #include } #include "processor.h" #include "rife.h" namespace video2x { namespace processors { // InterpolatorRIFE class definition class InterpolatorRIFE : public Interpolator { public: // Constructor InterpolatorRIFE( int gpuid = 0, bool tta_mode = false, bool tta_temporal_mode = false, bool uhd_mode = false, int num_threads = 1, const fsutils::StringType model_name = STR("rife-v4.6") ); // Destructor virtual ~InterpolatorRIFE() override; // Initializes the interpolator with decoder and encoder contexts int init(AVCodecContext* dec_ctx, AVCodecContext* enc_ctx, AVBufferRef* hw_ctx) override; // Processes an input frame and returns the processed frame int interpolate(AVFrame* prev_frame, AVFrame* in_frame, AVFrame** out_frame, float time_step) override; // Returns the interpolator's type ProcessorType get_processor_type() const override { return ProcessorType::RIFE; } // Returns the interpolator's output dimensions void get_output_dimensions( const ProcessorConfig& proc_cfg, int in_width, int in_height, int& out_width, int& out_height ) const override; private: RIFE* rife_; int gpuid_; bool tta_mode_; bool tta_temporal_mode_; bool uhd_mode_; int num_threads_; const fsutils::StringType model_name_; AVRational in_time_base_; AVRational out_time_base_; AVPixelFormat out_pix_fmt_; }; } // namespace processors } // namespace video2x