Go to the documentation of this file.
54 #ifndef __AVISYNTH_C__
55 #define __AVISYNTH_C__
61 #define AVS_FRAME_ALIGN FRAME_ALIGN
67 #ifndef __AVISYNTH_6_H__
315 #ifdef BUILDING_AVSCORE
316 AVSValue create_c_video_filter(AVSValue
args,
void *
user_data, IScriptEnvironment * e0);
319 IScriptEnvironment * env;
322 : env(e),
error(0) {}
354 {
return (p->
width!=0); }
401 return ((p->
image_type & property) == property);
477 unsigned x=numerator, y=denominator;
479 unsigned t = x%y; x = y; y = t;
485 #ifndef AVSC_NO_DECLSPEC
612 #ifndef AVSC_NO_DECLSPEC
619 #ifndef AVSC_NO_DECLSPEC
626 #ifndef AVSC_NO_DECLSPEC
633 #ifndef AVSC_NO_DECLSPEC
639 #ifndef AVSC_NO_DECLSPEC
645 #ifndef AVSC_NO_DECLSPEC
648 {avs_release_video_frame(
f);}
651 #ifndef AVSC_NO_DECLSPEC
654 {
return avs_copy_video_frame(
f);}
737 #ifndef AVSC_NO_DECLSPEC
740 {
AVS_Value v; avs_set_to_clip(&v,
v0);
return v; }
892 #ifndef AVSC_NO_DECLSPEC
936 #ifdef AVSC_NO_DECLSPEC
953 typedef struct AVS_Library AVS_Library;
955 #define AVSC_DECLARE_FUNC(name) name##_func name
1053 #undef AVSC_DECLARE_FUNC
1096 AVS_Library *library = (AVS_Library *)malloc(
sizeof(AVS_Library));
1097 if (library ==
NULL)
1099 library->handle = LoadLibrary(
"avisynth");
1100 if (library->handle ==
NULL)
1103 #define __AVSC_STRINGIFY(x) #x
1104 #define AVSC_STRINGIFY(x) __AVSC_STRINGIFY(x)
1105 #define AVSC_LOAD_FUNC(name) {\
1106 library->name = (name##_func) GetProcAddress(library->handle, AVSC_STRINGIFY(name));\
1107 if (library->name == NULL)\
1142 #define AVSC_LOAD_FUNC_FALLBACK(name,name2) {\
1143 library->name = (name##_func) GetProcAddress(library->handle, AVSC_STRINGIFY(name));\
1144 if (library->name == NULL)\
1145 library->name = (name##_func) GetProcAddress(library->handle, AVSC_STRINGIFY(name2));\
1146 if (library->name == NULL)\
1151 #define AVSC_LOAD_FUNC_FALLBACK_SIMULATED(name,name2) {\
1152 library->name = (name##_func) GetProcAddress(library->handle, AVSC_STRINGIFY(name));\
1153 if (library->name == NULL)\
1154 library->name = name2;\
1155 if (library->name == NULL)\
1160 AVSC_LOAD_FUNC(avs_add_function);
1161 AVSC_LOAD_FUNC(avs_at_exit);
1162 AVSC_LOAD_FUNC(avs_bit_blt);
1163 AVSC_LOAD_FUNC(avs_check_version);
1164 AVSC_LOAD_FUNC(avs_clip_get_error);
1165 AVSC_LOAD_FUNC(avs_copy_clip);
1166 AVSC_LOAD_FUNC(avs_copy_value);
1167 AVSC_LOAD_FUNC(avs_copy_video_frame);
1168 AVSC_LOAD_FUNC(avs_create_script_environment);
1169 AVSC_LOAD_FUNC(avs_delete_script_environment);
1170 AVSC_LOAD_FUNC(avs_function_exists);
1171 AVSC_LOAD_FUNC(avs_get_audio);
1172 AVSC_LOAD_FUNC(avs_get_cpu_flags);
1173 AVSC_LOAD_FUNC(avs_get_frame);
1174 AVSC_LOAD_FUNC(avs_get_parity);
1175 AVSC_LOAD_FUNC(avs_get_var);
1176 AVSC_LOAD_FUNC(avs_get_version);
1177 AVSC_LOAD_FUNC(avs_get_video_info);
1178 AVSC_LOAD_FUNC(avs_invoke);
1179 AVSC_LOAD_FUNC(avs_make_writable);
1180 AVSC_LOAD_FUNC(avs_new_c_filter);
1181 AVSC_LOAD_FUNC(avs_new_video_frame_a);
1182 AVSC_LOAD_FUNC(avs_release_clip);
1183 AVSC_LOAD_FUNC(avs_release_value);
1184 AVSC_LOAD_FUNC(avs_release_video_frame);
1185 AVSC_LOAD_FUNC(avs_save_string);
1186 AVSC_LOAD_FUNC(avs_set_cache_hints);
1187 AVSC_LOAD_FUNC(avs_set_global_var);
1188 AVSC_LOAD_FUNC(avs_set_memory_max);
1189 AVSC_LOAD_FUNC(avs_set_to_clip);
1190 AVSC_LOAD_FUNC(avs_set_var);
1191 AVSC_LOAD_FUNC(avs_set_working_dir);
1192 AVSC_LOAD_FUNC(avs_sprintf);
1193 AVSC_LOAD_FUNC(avs_subframe);
1194 AVSC_LOAD_FUNC(avs_subframe_planar);
1195 AVSC_LOAD_FUNC(avs_take_clip);
1196 AVSC_LOAD_FUNC(avs_vsprintf);
1198 AVSC_LOAD_FUNC(avs_get_error);
1199 AVSC_LOAD_FUNC(avs_is_yv24);
1200 AVSC_LOAD_FUNC(avs_is_yv16);
1202 AVSC_LOAD_FUNC(avs_is_yv411);
1203 AVSC_LOAD_FUNC(avs_is_y8);
1206 AVSC_LOAD_FUNC(avs_get_plane_width_subsampling);
1207 AVSC_LOAD_FUNC(avs_get_plane_height_subsampling);
1221 AVSC_LOAD_FUNC_FALLBACK_SIMULATED(avs_is_rgb48, avs_is_xx_fallback_return_false);
1222 AVSC_LOAD_FUNC_FALLBACK_SIMULATED(avs_is_rgb64, avs_is_xx_fallback_return_false);
1223 AVSC_LOAD_FUNC_FALLBACK_SIMULATED(avs_is_yuv444p16, avs_is_xx_fallback_return_false);
1224 AVSC_LOAD_FUNC_FALLBACK_SIMULATED(avs_is_yuv422p16, avs_is_xx_fallback_return_false);
1225 AVSC_LOAD_FUNC_FALLBACK_SIMULATED(avs_is_yuv420p16, avs_is_xx_fallback_return_false);
1226 AVSC_LOAD_FUNC_FALLBACK_SIMULATED(avs_is_y16, avs_is_xx_fallback_return_false);
1227 AVSC_LOAD_FUNC_FALLBACK_SIMULATED(avs_is_yuv444ps, avs_is_xx_fallback_return_false);
1228 AVSC_LOAD_FUNC_FALLBACK_SIMULATED(avs_is_yuv422ps, avs_is_xx_fallback_return_false);
1229 AVSC_LOAD_FUNC_FALLBACK_SIMULATED(avs_is_yuv420ps, avs_is_xx_fallback_return_false);
1230 AVSC_LOAD_FUNC_FALLBACK_SIMULATED(avs_is_y32, avs_is_xx_fallback_return_false);
1231 AVSC_LOAD_FUNC_FALLBACK(avs_is_444, avs_is_yv24);
1232 AVSC_LOAD_FUNC_FALLBACK(avs_is_422, avs_is_yv16);
1234 AVSC_LOAD_FUNC_FALLBACK(avs_is_y, avs_is_y8);
1235 AVSC_LOAD_FUNC_FALLBACK_SIMULATED(avs_is_yuva, avs_is_xx_fallback_return_false);
1236 AVSC_LOAD_FUNC_FALLBACK_SIMULATED(avs_is_planar_rgb, avs_is_xx_fallback_return_false);
1237 AVSC_LOAD_FUNC_FALLBACK_SIMULATED(avs_is_planar_rgba, avs_is_xx_fallback_return_false);
1238 AVSC_LOAD_FUNC_FALLBACK_SIMULATED(avs_num_components, avs_num_components_fallback);
1239 AVSC_LOAD_FUNC_FALLBACK_SIMULATED(avs_component_size, avs_component_size_fallback);
1240 AVSC_LOAD_FUNC_FALLBACK_SIMULATED(avs_bits_per_component, avs_bits_per_component_fallback);
1243 #undef __AVSC_STRINGIFY
1244 #undef AVSC_STRINGIFY
1245 #undef AVSC_LOAD_FUNC
1246 #undef AVSC_LOAD_FUNC_FALLBACK
1247 #undef AVSC_LOAD_FUNC_FALLBACK_SIMULATED
1256 AVSC_INLINE void avs_free_library(AVS_Library *library) {
1257 if (library ==
NULL)
1259 FreeLibrary(library->handle);
@ AVS_FILTER_INPUT_COLORSPACE
AVSC_INLINE int avs_is_yv12(const AVS_VideoInfo *p)
AVSC_INLINE int avs_bytes_per_audio_sample(const AVS_VideoInfo *p)
int(AVSC_CC *get_parity)(AVS_FilterInfo *
AVS_FilterInfo AVS_Value child
AVSC_INLINE AVS_VideoFrame * avs_new_frame(AVS_ScriptEnvironment *env, const AVS_VideoInfo *vi)
AVSC_INLINE int avs_is_string(AVS_Value v)
AVSC_INLINE INT64 avs_bytes_from_audio_samples(const AVS_VideoInfo *p, INT64 samples)
@ AVS_CACHE_GET_AUDIO_SIZE
AVSC_INLINE AVS_Value avs_new_value_float(float v0)
AVSC_INLINE int avs_is_error(AVS_Value v)
AVSC_INLINE int avs_as_bool(AVS_Value v)
@ AVS_CACHE_PREFETCH_AUDIO_COUNT
AVSC_INLINE int avs_get_row_size_p(const AVS_VideoFrame *p, int plane)
AVSC_INLINE int avs_is_int(AVS_Value v)
AVSC_INLINE int avs_is_yuy2(const AVS_VideoInfo *p)
@ AVS_CACHE_GETCHILD_COST
AVSC_INLINE int avs_is_rgb(const AVS_VideoInfo *p)
@ AVS_CACHE_PREFETCH_AUDIO_GO
AVS_ScriptEnvironment * env
AVS_Value(AVSC_CC * AVS_ApplyFunc)(AVS_ScriptEnvironment *, AVS_Value args, void *user_data)
AVSC_INLINE void avs_set_property(AVS_VideoInfo *p, int property)
AVSC_INLINE int avs_is_planar(const AVS_VideoInfo *p)
const AVSC_INLINE unsigned char * avs_get_read_ptr_p(const AVS_VideoFrame *p, int plane)
@ AVISYNTH_INTERFACE_VERSION
AVSC_INLINE int avs_get_height_p(const AVS_VideoFrame *p, int plane)
@ AVS_FILTER_ARGS_DESCRIPTION
const AVSC_INLINE AVS_Value * avs_as_array(AVS_Value v)
BYTE int const BYTE * srcp
AVSC_INLINE unsigned char * avs_get_write_ptr_p(const AVS_VideoFrame *p, int plane)
AVSC_INLINE AVS_Value avs_new_value_int(int v0)
AVSC_INLINE int avs_is_bool(AVS_Value v)
AVS_VideoFrame *AVSC_CC * get_frame(AVS_FilterInfo *, int n)
AVSC_INLINE AVS_Value avs_new_value_error(const char *v0)
AVSC_INLINE AVS_Value avs_new_value_string(const char *v0)
AVSC_INLINE AVS_Value avs_new_value_array(AVS_Value *v0, int size)
if it could not because there are no more frames
void(AVSC_CC *free_filter)(AVS_FilterInfo *)
AVSC_INLINE int avs_samples_per_second(const AVS_VideoInfo *p)
AVS_ScriptEnvironment AVS_Clip *AVSC_INLINE int avs_defined(AVS_Value v)
@ AVS_CACHE_PREFETCH_AUDIO_COMMIT
AVSC_INLINE int avs_get_pitch(const AVS_VideoFrame *p)
@ AVS_FILTER_OUTPUT_TYPE_DIFFERENT
AVSC_INLINE int avs_as_int(AVS_Value v)
const char AVS_Value const char ** arg_names
AVSC_INLINE int avs_is_parity_known(const AVS_VideoInfo *p)
AVSC_INLINE int avs_bmp_size(const AVS_VideoInfo *vi)
@ AVS_CACHE_GETCHILD_AUDIO_SIZE
AVSC_INLINE int avs_get_pitch_p(const AVS_VideoFrame *p, int plane)
AVS_VideoFrame int int int int int rel_offsetU
AVSC_INLINE int avs_is_property(const AVS_VideoInfo *p, int property)
AVSC_INLINE int avs_is_rgb24(const AVS_VideoInfo *p)
AVSC_INLINE double avs_as_float(AVS_Value v)
struct AVS_ScriptEnvironment AVS_ScriptEnvironment
AVSC_INLINE AVS_Value avs_array_elt(AVS_Value v, int index)
AVSC_INLINE int avs_get_row_size(const AVS_VideoFrame *p)
AVSC_INLINE int avs_is_float(AVS_Value v)
AVSC_INLINE void avs_clear_property(AVS_VideoInfo *p, int property)
const AVSC_INLINE char * avs_as_string(AVS_Value v)
@ AVS_CACHE_GETCHILD_CACHE_SIZE
AVSC_INLINE int avs_sample_type(const AVS_VideoInfo *p)
AVSC_INLINE int avs_is_rgb32(const AVS_VideoInfo *p)
BYTE int const BYTE int int row_size
AVSC_INLINE int avs_is_writable(const AVS_VideoFrame *p)
@ AVS_CACHE_PREFETCH_AUDIO_STARTLO
AVSC_INLINE int avs_is_yuv(const AVS_VideoInfo *p)
AVSC_INLINE int avs_array_size(AVS_Value v)
AVSC_INLINE void avs_set_fps(AVS_VideoInfo *p, unsigned numerator, unsigned denominator)
AVSC_INLINE int avs_bytes_per_channel_sample(const AVS_VideoInfo *p)
AVSC_INLINE INT64 avs_audio_samples_from_frames(const AVS_VideoInfo *p, INT64 frames)
AVSC_INLINE int avs_get_height(const AVS_VideoFrame *p)
AVS_VideoFrame int rel_offset
static void error(const char *err)
#define AVSC_DECLARE_FUNC(name)
AVS_VideoFrame int int int new_row_size
AVS_FilterInfo AVS_Value int store_child
AVSC_INLINE int avs_is_array(AVS_Value v)
AVSC_INLINE int avs_frames_from_audio_samples(const AVS_VideoInfo *p, INT64 samples)
AVS_VideoFrame int int int int int int rel_offsetV
AVS_VideoFrame int int int int int int int new_pitchUV
@ AVS_CACHE_PREFETCH_AUDIO_STARTHI
AVSC_INLINE int avs_bits_per_pixel(const AVS_VideoInfo *p)
AVSC_INLINE AVS_VideoFrame * avs_new_video_frame(AVS_ScriptEnvironment *env, const AVS_VideoInfo *vi)
const char const char void * val
@ AVS_CS_SHIFT_SAMPLE_BITS
AVSC_INLINE AVS_Value avs_new_value_clip(AVS_Clip *v0)
AVSC_INLINE int avs_row_size(const AVS_VideoInfo *p)
BYTE int const BYTE int src_pitch
AVSC_INLINE int avs_has_video(const AVS_VideoInfo *p)
@ AVS_CS_SHIFT_SUB_HEIGHT
const AVSC_INLINE char * avs_as_error(AVS_Value v)
AVSC_INLINE int avs_bytes_from_pixels(const AVS_VideoInfo *p, int pixels)
const char const char AVS_ApplyFunc apply
@ AVS_CACHE_GETCHILD_CACHE_MODE
AVSC_INLINE void avs_set_field_based(AVS_VideoInfo *p, int isfieldbased)
@ AVS_CACHE_GETCHILD_ACCESS_COST
@ AVS_FILTER_OUTPUT_TYPE_SAME
const char AVS_Value args
AVSC_INLINE void avs_release_frame(AVS_VideoFrame *f)
@ AVS_CACHE_GET_AUDIO_POLICY
@ AVS_CACHE_GETCHILD_THREAD_MODE
const char const char * params
AVSC_INLINE int avs_is_same_colorspace(const AVS_VideoInfo *x, const AVS_VideoInfo *y)
const AVS_VideoInfo int align
AVSC_INLINE int avs_has_audio(const AVS_VideoInfo *p)
void(AVSC_CC * AVS_ShutdownFunc)(void *user_data, AVS_ScriptEnvironment *env)
AVSC_INLINE int avs_is_clip(AVS_Value v)
volatile long sequence_number
AVSC_INLINE int avs_is_bff(const AVS_VideoInfo *p)
@ AVS_CACHE_AUDIO_NOTHING
AVS_VideoFrame int int new_pitch
@ AVS_CACHE_GETCHILD_AUDIO_MODE
Filter the word “frame” indicates either a video frame or a group of audio samples
AVSC_INLINE int avs_audio_channels(const AVS_VideoInfo *p)
AVS_VideoFrameBuffer * vfb
@ AVS_CS_SAMPLE_BITS_MASK
AVSC_API(int, avs_is_yv24)(const AVS_VideoInfo *p)
AVSC_INLINE int avs_is_tff(const AVS_VideoInfo *p)
AVS_VideoFrame int int int int new_height
@ AVS_CACHE_PREFETCH_AUDIO_BEGIN
AVSC_INLINE int avs_is_color_space(const AVS_VideoInfo *p, int c_space)
AVSC_INLINE BYTE * avs_get_write_ptr(const AVS_VideoFrame *p)
AVSC_INLINE AVS_Value avs_new_value_bool(int v0)
AVSC_INLINE AVS_VideoFrame * avs_copy_frame(AVS_VideoFrame *f)
AVSC_INLINE int avs_is_field_based(const AVS_VideoInfo *p)
const AVSC_INLINE BYTE * avs_get_read_ptr(const AVS_VideoFrame *p)
BYTE int const BYTE int int int height
@ AVS_CACHE_PREFETCH_FRAME
@ AVS_CACHE_THREAD_UNSAFE
AVSC_INLINE INT64 avs_audio_samples_from_bytes(const AVS_VideoInfo *p, INT64 bytes)
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf default minimum maximum flags name is the option keep it simple and lowercase description are short
const char const char AVS_ApplyFunc void * user_data
static const AVS_Value avs_void
@ AVS_CACHE_FORCE_GENERIC
int audio_samples_per_second
const AVSC_EXPORT char *AVSC_CC avisynth_c_plugin_init(AVS_ScriptEnvironment *env)