mirror of
https://github.com/k4yt3x/video2x.git
synced 2024-12-29 07:39:09 +00:00
37c2c4c647
* feat: added Makefile target for debian * fix: fixed Dockerfile installing the wrong package * feat: added hwaccel for encoder and decoder * feat: added benchmark mode * feat: removed hard-coded keyframe info * chore: cleaned up headers and organized code * style: cleaned up headers and includes * feat: added a progress bar for CLI * feat: removed atomicity requirements on processed frames * feat: added pause and abort for CLI * chore: updated default preset and crf settings * feat: added support for copying audio and subtitle streams * fix: fixed syntax issues for MSVC * fix: fixed audio/subtitle timestamp rescaling Signed-off-by: k4yt3x <i@k4yt3x.com>
93 lines
1.8 KiB
C
93 lines
1.8 KiB
C
#ifndef LIBVIDEO2X_H
|
|
#define LIBVIDEO2X_H
|
|
|
|
#include <stdbool.h>
|
|
#include <stdint.h>
|
|
#include <time.h>
|
|
|
|
#ifdef _WIN32
|
|
#ifdef LIBVIDEO2X_EXPORTS
|
|
#define LIBVIDEO2X_API __declspec(dllexport)
|
|
#else
|
|
#define LIBVIDEO2X_API __declspec(dllimport)
|
|
#endif
|
|
#else
|
|
#define LIBVIDEO2X_API
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#include <libavcodec/avcodec.h>
|
|
#include <libavformat/avformat.h>
|
|
|
|
// Enum to specify filter type
|
|
enum FilterType {
|
|
FILTER_LIBPLACEBO,
|
|
FILTER_REALESRGAN
|
|
};
|
|
|
|
// Configuration for Libplacebo filter
|
|
struct LibplaceboConfig {
|
|
int output_width;
|
|
int output_height;
|
|
const char *shader_path;
|
|
};
|
|
|
|
// Configuration for RealESRGAN filter
|
|
struct RealESRGANConfig {
|
|
int gpuid;
|
|
bool tta_mode;
|
|
int scaling_factor;
|
|
const char *model;
|
|
};
|
|
|
|
// Unified filter configuration
|
|
struct FilterConfig {
|
|
enum FilterType filter_type;
|
|
union {
|
|
struct LibplaceboConfig libplacebo;
|
|
struct RealESRGANConfig realesrgan;
|
|
} config;
|
|
};
|
|
|
|
// Encoder configuration
|
|
struct EncoderConfig {
|
|
int output_width;
|
|
int output_height;
|
|
bool copy_streams;
|
|
enum AVCodecID codec;
|
|
enum AVPixelFormat pix_fmt;
|
|
const char *preset;
|
|
int64_t bit_rate;
|
|
float crf;
|
|
};
|
|
|
|
// Video processing context
|
|
struct VideoProcessingContext {
|
|
int64_t processed_frames;
|
|
int64_t total_frames;
|
|
time_t start_time;
|
|
bool pause;
|
|
bool abort;
|
|
bool completed;
|
|
};
|
|
|
|
// C-compatible process_video function
|
|
LIBVIDEO2X_API int process_video(
|
|
const char *input_filename,
|
|
const char *output_filename,
|
|
bool benchmark,
|
|
enum AVHWDeviceType hw_device_type,
|
|
const struct FilterConfig *filter_config,
|
|
struct EncoderConfig *encoder_config,
|
|
struct VideoProcessingContext *proc_ctx
|
|
);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif // LIBVIDEO2X_H
|