#ifndef X264_INPUT_H
#define X264_INPUT_H
#include "x264cli.h"
typedef struct
{
char *index_file;
char *format;
char *resolution;
char *colorspace;
int bit_depth;
char *timebase;
int seek;
int progress;
int output_csp;
int output_range;
int input_range;
} cli_input_opt_t;
typedef struct
{
int csp;
uint32_t fps_num;
uint32_t fps_den;
int fullrange;
int width;
int height;
int interlaced;
int num_frames;
uint32_t sar_width;
uint32_t sar_height;
int tff;
int thread_safe;
uint32_t timebase_num;
uint32_t timebase_den;
int vfr;
} video_info_t;
typedef struct
{
int csp;
int width;
int height;
int planes;
uint8_t *plane[4];
int stride[4];
} cli_image_t;
typedef struct
{
cli_image_t img;
int64_t pts;
int64_t duration;
void *opaque;
} cli_pic_t;
typedef struct
{
int (*open_file)( char *psz_filename, hnd_t *p_handle, video_info_t *info, cli_input_opt_t *opt );
int (*picture_alloc)( cli_pic_t *pic, hnd_t handle, int csp, int width, int height );
int (*read_frame)( cli_pic_t *pic, hnd_t handle, int i_frame );
int (*release_frame)( cli_pic_t *pic, hnd_t handle );
void (*picture_clean)( cli_pic_t *pic, hnd_t handle );
int (*close_file)( hnd_t handle );
} cli_input_t;
extern const cli_input_t raw_input;
extern const cli_input_t y4m_input;
extern const cli_input_t avs_input;
extern const cli_input_t thread_input;
extern const cli_input_t lavf_input;
extern const cli_input_t ffms_input;
extern const cli_input_t timecode_input;
extern cli_input_t cli_input;
#define X264_CSP_CLI_MAX X264_CSP_MAX
#define X264_CSP_OTHER 0x4000
typedef struct
{
const char *name;
int planes;
float width[4];
float height[4];
int mod_width;
int mod_height;
} x264_cli_csp_t;
extern const x264_cli_csp_t x264_cli_csps[];
int x264_cli_csp_is_invalid( int csp );
int x264_cli_csp_depth_factor( int csp );
int x264_cli_pic_alloc( cli_pic_t *pic, int csp, int width, int height );
int x264_cli_pic_alloc_aligned( cli_pic_t *pic, int csp, int width, int height );
int x264_cli_pic_init_noalloc( cli_pic_t *pic, int csp, int width, int height );
void x264_cli_pic_clean( cli_pic_t *pic );
uint64_t x264_cli_pic_plane_size( int csp, int width, int height, int plane );
uint64_t x264_cli_pic_size( int csp, int width, int height );
const x264_cli_csp_t *x264_cli_get_csp( int csp );
typedef struct
{
int align_mask;
#ifdef _WIN32
void *map_handle;
#elif HAVE_MMAP
int fd;
#endif
} cli_mmap_t;
int x264_cli_mmap_init( cli_mmap_t *h, FILE *fh );
void *x264_cli_mmap( cli_mmap_t *h, int64_t offset, size_t size );
int x264_cli_munmap( cli_mmap_t *h, void *addr, size_t size );
void x264_cli_mmap_close( cli_mmap_t *h );
#endif