From 0c7b4c6660bc90f5d04946b13a1dae0e77f11178 Mon Sep 17 00:00:00 2001 From: Jonatan Nilsson Date: Wed, 29 Nov 2023 16:13:54 +0000 Subject: [PATCH] Remove doc and sdk --- Programs/doc/.buildinfo | 4 - .../doc/_sources/api/vapoursynth4.h.rst.txt | 2937 ----------------- Programs/doc/_sources/api/vshelper4.h.rst.txt | 272 -- Programs/doc/_sources/api/vsscript4.h.rst.txt | 292 -- Programs/doc/_sources/apireference.rst.txt | 118 - Programs/doc/_sources/applications.rst.txt | 31 - Programs/doc/_sources/functions.rst.txt | 38 - .../functions/audio/assumesamplerate.rst.txt | 5 - .../functions/audio/audiogain.rst.txt | 12 - .../functions/audio/audioloop.rst.txt | 11 - .../_sources/functions/audio/audiomix.rst.txt | 38 - .../functions/audio/audioreverse.rst.txt | 10 - .../functions/audio/audiosplice.rst.txt | 12 - .../functions/audio/audiotrim.rst.txt | 10 - .../functions/audio/blankaudio.rst.txt | 20 - .../functions/audio/setaudiocache.rst.txt | 7 - .../functions/audio/shufflechannels.rst.txt | 48 - .../functions/audio/splitchannels.rst.txt | 8 - .../functions/general/loadallplugins.rst.txt | 19 - .../functions/general/loadplugin.rst.txt | 26 - .../functions/general/loadpluginavs.rst.txt | 44 - .../functions/general/setmaxcpu.rst.txt | 14 - .../functions/video/addborders.rst.txt | 9 - .../functions/video/assumefps.rst.txt | 16 - .../functions/video/averageframes.rst.txt | 21 - .../video/binarize_binarizemask.rst.txt | 34 - .../functions/video/blankclip.rst.txt | 24 - .../_sources/functions/video/boxblur.rst.txt | 8 - .../functions/video/cliptoprop.rst.txt | 15 - .../functions/video/convolution.rst.txt | 85 - .../functions/video/copyframeprops.rst.txt | 10 - .../functions/video/crop_cropabs.rst.txt | 20 - .../functions/video/deflate_inflate.rst.txt | 44 - .../functions/video/deleteframes.rst.txt | 11 - .../functions/video/doubleweave.rst.txt | 23 - .../functions/video/duplicateframes.rst.txt | 11 - .../doc/_sources/functions/video/expr.rst.txt | 118 - .../video/flipvertical_fliphorizontal.rst.txt | 8 - .../functions/video/frameeval.rst.txt | 77 - .../functions/video/freezeframes.rst.txt | 18 - .../functions/video/interleave.rst.txt | 19 - .../functions/video/invert_invertmask.rst.txt | 21 - .../_sources/functions/video/levels.rst.txt | 39 - .../_sources/functions/video/limiter.rst.txt | 23 - .../doc/_sources/functions/video/loop.rst.txt | 11 - .../doc/_sources/functions/video/lut.rst.txt | 39 - .../doc/_sources/functions/video/lut2.rst.txt | 40 - .../_sources/functions/video/makediff.rst.txt | 15 - .../functions/video/makefulldiff.rst.txt | 16 - .../functions/video/maskedmerge.rst.txt | 35 - .../_sources/functions/video/median.rst.txt | 19 - .../_sources/functions/video/merge.rst.txt | 29 - .../functions/video/mergediff.rst.txt | 15 - .../functions/video/mergefulldiff.rst.txt | 15 - .../functions/video/minimum_maximum.rst.txt | 69 - .../functions/video/modifyframe.rst.txt | 49 - .../functions/video/pemverifier.rst.txt | 14 - .../functions/video/planestats.rst.txt | 15 - .../functions/video/premultiply.rst.txt | 14 - .../functions/video/prewitt_sobel.rst.txt | 26 - .../functions/video/proptoclip.rst.txt | 12 - .../functions/video/removeframeprops.rst.txt | 9 - .../_sources/functions/video/resize.rst.txt | 286 -- .../_sources/functions/video/reverse.rst.txt | 10 - .../functions/video/selectevery.rst.txt | 31 - .../functions/video/separatefields.rst.txt | 20 - .../functions/video/setfieldbased.rst.txt | 25 - .../functions/video/setframeprop.rst.txt | 20 - .../functions/video/setframeprops.rst.txt | 13 - .../functions/video/setvideocache.rst.txt | 27 - .../functions/video/shuffleplanes.rst.txt | 48 - .../_sources/functions/video/splice.rst.txt | 12 - .../functions/video/splitplanes.rst.txt | 8 - .../stackvertical_stackhorizontal.rst.txt | 12 - .../functions/video/text/clipinfo.rst.txt | 9 - .../functions/video/text/coreinfo.rst.txt | 10 - .../functions/video/text/framenum.rst.txt | 9 - .../functions/video/text/frameprops.rst.txt | 10 - .../functions/video/text/text.rst.txt | 23 - .../functions/video/transpose.rst.txt | 18 - .../doc/_sources/functions/video/trim.rst.txt | 17 - .../_sources/functions/video/turn180.rst.txt | 7 - Programs/doc/_sources/gettingstarted.rst.txt | 78 - Programs/doc/_sources/index.rst.txt | 23 - Programs/doc/_sources/installation.rst.txt | 341 -- Programs/doc/_sources/introduction.rst.txt | 36 - Programs/doc/_sources/output.rst.txt | 125 - Programs/doc/_sources/pythonreference.rst.txt | 1161 ------- .../_sphinx_javascript_frameworks_compat.js | 123 - Programs/doc/_static/basic.css | 903 ----- Programs/doc/_static/css/badge_only.css | 1 - Programs/doc/_static/css/custom.css | 19 - .../_static/css/fonts/Roboto-Slab-Bold.woff | Bin 87624 -> 0 bytes .../_static/css/fonts/Roboto-Slab-Bold.woff2 | Bin 67312 -> 0 bytes .../css/fonts/Roboto-Slab-Regular.woff | Bin 86288 -> 0 bytes .../css/fonts/Roboto-Slab-Regular.woff2 | Bin 66444 -> 0 bytes .../_static/css/fonts/fontawesome-webfont.eot | Bin 165742 -> 0 bytes .../_static/css/fonts/fontawesome-webfont.svg | 2671 --------------- .../_static/css/fonts/fontawesome-webfont.ttf | Bin 165548 -> 0 bytes .../css/fonts/fontawesome-webfont.woff | Bin 98024 -> 0 bytes .../css/fonts/fontawesome-webfont.woff2 | Bin 77160 -> 0 bytes .../_static/css/fonts/lato-bold-italic.woff | Bin 323344 -> 0 bytes .../_static/css/fonts/lato-bold-italic.woff2 | Bin 193308 -> 0 bytes Programs/doc/_static/css/fonts/lato-bold.woff | Bin 309728 -> 0 bytes .../doc/_static/css/fonts/lato-bold.woff2 | Bin 184912 -> 0 bytes .../_static/css/fonts/lato-normal-italic.woff | Bin 328412 -> 0 bytes .../css/fonts/lato-normal-italic.woff2 | Bin 195704 -> 0 bytes .../doc/_static/css/fonts/lato-normal.woff | Bin 309192 -> 0 bytes .../doc/_static/css/fonts/lato-normal.woff2 | Bin 182708 -> 0 bytes Programs/doc/_static/css/theme.css | 4 - Programs/doc/_static/doctools.js | 156 - Programs/doc/_static/documentation_options.js | 14 - Programs/doc/_static/file.png | Bin 286 -> 0 bytes Programs/doc/_static/jquery.js | 2 - Programs/doc/_static/js/badge_only.js | 1 - .../doc/_static/js/html5shiv-printshiv.min.js | 4 - Programs/doc/_static/js/html5shiv.min.js | 4 - Programs/doc/_static/js/theme.js | 1 - Programs/doc/_static/language_data.js | 199 -- Programs/doc/_static/minus.png | Bin 90 -> 0 bytes Programs/doc/_static/plus.png | Bin 90 -> 0 bytes Programs/doc/_static/pygments.css | 74 - Programs/doc/_static/searchtools.js | 566 ---- Programs/doc/_static/sphinx_highlight.js | 144 - Programs/doc/api/vapoursynth4.h.html | 2611 --------------- Programs/doc/api/vshelper4.h.html | 365 -- Programs/doc/api/vsscript4.h.html | 386 --- Programs/doc/apireference.html | 240 -- Programs/doc/applications.html | 156 - Programs/doc/functions.html | 551 ---- .../doc/functions/audio/assumesamplerate.html | 146 - Programs/doc/functions/audio/audiogain.html | 151 - Programs/doc/functions/audio/audioloop.html | 150 - Programs/doc/functions/audio/audiomix.html | 171 - .../doc/functions/audio/audioreverse.html | 149 - Programs/doc/functions/audio/audiosplice.html | 150 - Programs/doc/functions/audio/audiotrim.html | 149 - Programs/doc/functions/audio/blankaudio.html | 157 - .../doc/functions/audio/setaudiocache.html | 147 - .../doc/functions/audio/shufflechannels.html | 181 - .../doc/functions/audio/splitchannels.html | 148 - .../doc/functions/general/loadallplugins.html | 152 - .../doc/functions/general/loadplugin.html | 157 - .../doc/functions/general/loadpluginavs.html | 177 - Programs/doc/functions/general/setmaxcpu.html | 144 - Programs/doc/functions/video/addborders.html | 194 -- Programs/doc/functions/video/assumefps.html | 198 -- .../doc/functions/video/averageframes.html | 203 -- .../video/binarize_binarizemask.html | 218 -- Programs/doc/functions/video/blankclip.html | 204 -- Programs/doc/functions/video/boxblur.html | 193 -- Programs/doc/functions/video/cliptoprop.html | 198 -- Programs/doc/functions/video/convolution.html | 254 -- .../doc/functions/video/copyframeprops.html | 195 -- .../doc/functions/video/crop_cropabs.html | 204 -- .../doc/functions/video/deflate_inflate.html | 228 -- .../doc/functions/video/deleteframes.html | 194 -- Programs/doc/functions/video/doubleweave.html | 206 -- .../doc/functions/video/duplicateframes.html | 194 -- Programs/doc/functions/video/expr.html | 295 -- .../video/flipvertical_fliphorizontal.html | 195 -- Programs/doc/functions/video/frameeval.html | 258 -- .../doc/functions/video/freezeframes.html | 201 -- Programs/doc/functions/video/interleave.html | 201 -- .../functions/video/invert_invertmask.html | 208 -- Programs/doc/functions/video/levels.html | 224 -- Programs/doc/functions/video/limiter.html | 206 -- Programs/doc/functions/video/loop.html | 195 -- Programs/doc/functions/video/lut.html | 219 -- Programs/doc/functions/video/lut2.html | 219 -- Programs/doc/functions/video/makediff.html | 199 -- .../doc/functions/video/makefulldiff.html | 200 -- Programs/doc/functions/video/maskedmerge.html | 216 -- Programs/doc/functions/video/median.html | 204 -- Programs/doc/functions/video/merge.html | 212 -- Programs/doc/functions/video/mergediff.html | 199 -- .../doc/functions/video/mergefulldiff.html | 199 -- .../doc/functions/video/minimum_maximum.html | 251 -- Programs/doc/functions/video/modifyframe.html | 232 -- Programs/doc/functions/video/pemverifier.html | 198 -- Programs/doc/functions/video/planestats.html | 198 -- Programs/doc/functions/video/premultiply.html | 198 -- .../doc/functions/video/prewitt_sobel.html | 212 -- Programs/doc/functions/video/proptoclip.html | 196 -- .../doc/functions/video/removeframeprops.html | 194 -- Programs/doc/functions/video/resize.html | 475 --- Programs/doc/functions/video/reverse.html | 194 -- Programs/doc/functions/video/selectevery.html | 213 -- .../doc/functions/video/separatefields.html | 201 -- .../doc/functions/video/setfieldbased.html | 208 -- .../doc/functions/video/setframeprop.html | 202 -- .../doc/functions/video/setframeprops.html | 198 -- .../doc/functions/video/setvideocache.html | 209 -- .../doc/functions/video/shuffleplanes.html | 227 -- Programs/doc/functions/video/splice.html | 195 -- Programs/doc/functions/video/splitplanes.html | 193 -- .../video/stackvertical_stackhorizontal.html | 198 -- .../doc/functions/video/text/clipinfo.html | 197 -- .../doc/functions/video/text/coreinfo.html | 198 -- .../doc/functions/video/text/framenum.html | 197 -- .../doc/functions/video/text/frameprops.html | 198 -- Programs/doc/functions/video/text/text.html | 208 -- Programs/doc/functions/video/transpose.html | 203 -- Programs/doc/functions/video/trim.html | 200 -- Programs/doc/functions/video/turn180.html | 192 -- Programs/doc/genindex.html | 990 ------ Programs/doc/gettingstarted.html | 187 -- Programs/doc/index.html | 324 -- Programs/doc/installation.html | 476 --- Programs/doc/introduction.html | 155 - Programs/doc/objects.inv | Bin 5400 -> 0 bytes Programs/doc/output.html | 227 -- Programs/doc/pythonreference.html | 1694 ---------- Programs/doc/search.html | 130 - Programs/doc/searchindex.js | 1 - Programs/sdk/examples/filter_skeleton.c | 58 - Programs/sdk/examples/invert_example.c | 173 - Programs/sdk/examples/vsscript_example.c | 116 - Programs/sdk/include/VSConstants4.h | 93 - Programs/sdk/include/VSHelper.h | 174 - Programs/sdk/include/VSHelper4.h | 217 -- Programs/sdk/include/VSScript.h | 85 - Programs/sdk/include/VSScript4.h | 97 - Programs/sdk/include/VapourSynth.h | 359 -- Programs/sdk/include/VapourSynth4.h | 489 --- Programs/sdk/lib32/VSScript.lib | Bin 6302 -> 0 bytes Programs/sdk/lib32/VapourSynth.lib | Bin 1802 -> 0 bytes 227 files changed, 37738 deletions(-) delete mode 100644 Programs/doc/.buildinfo delete mode 100644 Programs/doc/_sources/api/vapoursynth4.h.rst.txt delete mode 100644 Programs/doc/_sources/api/vshelper4.h.rst.txt delete mode 100644 Programs/doc/_sources/api/vsscript4.h.rst.txt delete mode 100644 Programs/doc/_sources/apireference.rst.txt delete mode 100644 Programs/doc/_sources/applications.rst.txt delete mode 100644 Programs/doc/_sources/functions.rst.txt delete mode 100644 Programs/doc/_sources/functions/audio/assumesamplerate.rst.txt delete mode 100644 Programs/doc/_sources/functions/audio/audiogain.rst.txt delete mode 100644 Programs/doc/_sources/functions/audio/audioloop.rst.txt delete mode 100644 Programs/doc/_sources/functions/audio/audiomix.rst.txt delete mode 100644 Programs/doc/_sources/functions/audio/audioreverse.rst.txt delete mode 100644 Programs/doc/_sources/functions/audio/audiosplice.rst.txt delete mode 100644 Programs/doc/_sources/functions/audio/audiotrim.rst.txt delete mode 100644 Programs/doc/_sources/functions/audio/blankaudio.rst.txt delete mode 100644 Programs/doc/_sources/functions/audio/setaudiocache.rst.txt delete mode 100644 Programs/doc/_sources/functions/audio/shufflechannels.rst.txt delete mode 100644 Programs/doc/_sources/functions/audio/splitchannels.rst.txt delete mode 100644 Programs/doc/_sources/functions/general/loadallplugins.rst.txt delete mode 100644 Programs/doc/_sources/functions/general/loadplugin.rst.txt delete mode 100644 Programs/doc/_sources/functions/general/loadpluginavs.rst.txt delete mode 100644 Programs/doc/_sources/functions/general/setmaxcpu.rst.txt delete mode 100644 Programs/doc/_sources/functions/video/addborders.rst.txt delete mode 100644 Programs/doc/_sources/functions/video/assumefps.rst.txt delete mode 100644 Programs/doc/_sources/functions/video/averageframes.rst.txt delete mode 100644 Programs/doc/_sources/functions/video/binarize_binarizemask.rst.txt delete mode 100644 Programs/doc/_sources/functions/video/blankclip.rst.txt delete mode 100644 Programs/doc/_sources/functions/video/boxblur.rst.txt delete mode 100644 Programs/doc/_sources/functions/video/cliptoprop.rst.txt delete mode 100644 Programs/doc/_sources/functions/video/convolution.rst.txt delete mode 100644 Programs/doc/_sources/functions/video/copyframeprops.rst.txt delete mode 100644 Programs/doc/_sources/functions/video/crop_cropabs.rst.txt delete mode 100644 Programs/doc/_sources/functions/video/deflate_inflate.rst.txt delete mode 100644 Programs/doc/_sources/functions/video/deleteframes.rst.txt delete mode 100644 Programs/doc/_sources/functions/video/doubleweave.rst.txt delete mode 100644 Programs/doc/_sources/functions/video/duplicateframes.rst.txt delete mode 100644 Programs/doc/_sources/functions/video/expr.rst.txt delete mode 100644 Programs/doc/_sources/functions/video/flipvertical_fliphorizontal.rst.txt delete mode 100644 Programs/doc/_sources/functions/video/frameeval.rst.txt delete mode 100644 Programs/doc/_sources/functions/video/freezeframes.rst.txt delete mode 100644 Programs/doc/_sources/functions/video/interleave.rst.txt delete mode 100644 Programs/doc/_sources/functions/video/invert_invertmask.rst.txt delete mode 100644 Programs/doc/_sources/functions/video/levels.rst.txt delete mode 100644 Programs/doc/_sources/functions/video/limiter.rst.txt delete mode 100644 Programs/doc/_sources/functions/video/loop.rst.txt delete mode 100644 Programs/doc/_sources/functions/video/lut.rst.txt delete mode 100644 Programs/doc/_sources/functions/video/lut2.rst.txt delete mode 100644 Programs/doc/_sources/functions/video/makediff.rst.txt delete mode 100644 Programs/doc/_sources/functions/video/makefulldiff.rst.txt delete mode 100644 Programs/doc/_sources/functions/video/maskedmerge.rst.txt delete mode 100644 Programs/doc/_sources/functions/video/median.rst.txt delete mode 100644 Programs/doc/_sources/functions/video/merge.rst.txt delete mode 100644 Programs/doc/_sources/functions/video/mergediff.rst.txt delete mode 100644 Programs/doc/_sources/functions/video/mergefulldiff.rst.txt delete mode 100644 Programs/doc/_sources/functions/video/minimum_maximum.rst.txt delete mode 100644 Programs/doc/_sources/functions/video/modifyframe.rst.txt delete mode 100644 Programs/doc/_sources/functions/video/pemverifier.rst.txt delete mode 100644 Programs/doc/_sources/functions/video/planestats.rst.txt delete mode 100644 Programs/doc/_sources/functions/video/premultiply.rst.txt delete mode 100644 Programs/doc/_sources/functions/video/prewitt_sobel.rst.txt delete mode 100644 Programs/doc/_sources/functions/video/proptoclip.rst.txt delete mode 100644 Programs/doc/_sources/functions/video/removeframeprops.rst.txt delete mode 100644 Programs/doc/_sources/functions/video/resize.rst.txt delete mode 100644 Programs/doc/_sources/functions/video/reverse.rst.txt delete mode 100644 Programs/doc/_sources/functions/video/selectevery.rst.txt delete mode 100644 Programs/doc/_sources/functions/video/separatefields.rst.txt delete mode 100644 Programs/doc/_sources/functions/video/setfieldbased.rst.txt delete mode 100644 Programs/doc/_sources/functions/video/setframeprop.rst.txt delete mode 100644 Programs/doc/_sources/functions/video/setframeprops.rst.txt delete mode 100644 Programs/doc/_sources/functions/video/setvideocache.rst.txt delete mode 100644 Programs/doc/_sources/functions/video/shuffleplanes.rst.txt delete mode 100644 Programs/doc/_sources/functions/video/splice.rst.txt delete mode 100644 Programs/doc/_sources/functions/video/splitplanes.rst.txt delete mode 100644 Programs/doc/_sources/functions/video/stackvertical_stackhorizontal.rst.txt delete mode 100644 Programs/doc/_sources/functions/video/text/clipinfo.rst.txt delete mode 100644 Programs/doc/_sources/functions/video/text/coreinfo.rst.txt delete mode 100644 Programs/doc/_sources/functions/video/text/framenum.rst.txt delete mode 100644 Programs/doc/_sources/functions/video/text/frameprops.rst.txt delete mode 100644 Programs/doc/_sources/functions/video/text/text.rst.txt delete mode 100644 Programs/doc/_sources/functions/video/transpose.rst.txt delete mode 100644 Programs/doc/_sources/functions/video/trim.rst.txt delete mode 100644 Programs/doc/_sources/functions/video/turn180.rst.txt delete mode 100644 Programs/doc/_sources/gettingstarted.rst.txt delete mode 100644 Programs/doc/_sources/index.rst.txt delete mode 100644 Programs/doc/_sources/installation.rst.txt delete mode 100644 Programs/doc/_sources/introduction.rst.txt delete mode 100644 Programs/doc/_sources/output.rst.txt delete mode 100644 Programs/doc/_sources/pythonreference.rst.txt delete mode 100644 Programs/doc/_static/_sphinx_javascript_frameworks_compat.js delete mode 100644 Programs/doc/_static/basic.css delete mode 100644 Programs/doc/_static/css/badge_only.css delete mode 100644 Programs/doc/_static/css/custom.css delete mode 100644 Programs/doc/_static/css/fonts/Roboto-Slab-Bold.woff delete mode 100644 Programs/doc/_static/css/fonts/Roboto-Slab-Bold.woff2 delete mode 100644 Programs/doc/_static/css/fonts/Roboto-Slab-Regular.woff delete mode 100644 Programs/doc/_static/css/fonts/Roboto-Slab-Regular.woff2 delete mode 100644 Programs/doc/_static/css/fonts/fontawesome-webfont.eot delete mode 100644 Programs/doc/_static/css/fonts/fontawesome-webfont.svg delete mode 100644 Programs/doc/_static/css/fonts/fontawesome-webfont.ttf delete mode 100644 Programs/doc/_static/css/fonts/fontawesome-webfont.woff delete mode 100644 Programs/doc/_static/css/fonts/fontawesome-webfont.woff2 delete mode 100644 Programs/doc/_static/css/fonts/lato-bold-italic.woff delete mode 100644 Programs/doc/_static/css/fonts/lato-bold-italic.woff2 delete mode 100644 Programs/doc/_static/css/fonts/lato-bold.woff delete mode 100644 Programs/doc/_static/css/fonts/lato-bold.woff2 delete mode 100644 Programs/doc/_static/css/fonts/lato-normal-italic.woff delete mode 100644 Programs/doc/_static/css/fonts/lato-normal-italic.woff2 delete mode 100644 Programs/doc/_static/css/fonts/lato-normal.woff delete mode 100644 Programs/doc/_static/css/fonts/lato-normal.woff2 delete mode 100644 Programs/doc/_static/css/theme.css delete mode 100644 Programs/doc/_static/doctools.js delete mode 100644 Programs/doc/_static/documentation_options.js delete mode 100644 Programs/doc/_static/file.png delete mode 100644 Programs/doc/_static/jquery.js delete mode 100644 Programs/doc/_static/js/badge_only.js delete mode 100644 Programs/doc/_static/js/html5shiv-printshiv.min.js delete mode 100644 Programs/doc/_static/js/html5shiv.min.js delete mode 100644 Programs/doc/_static/js/theme.js delete mode 100644 Programs/doc/_static/language_data.js delete mode 100644 Programs/doc/_static/minus.png delete mode 100644 Programs/doc/_static/plus.png delete mode 100644 Programs/doc/_static/pygments.css delete mode 100644 Programs/doc/_static/searchtools.js delete mode 100644 Programs/doc/_static/sphinx_highlight.js delete mode 100644 Programs/doc/api/vapoursynth4.h.html delete mode 100644 Programs/doc/api/vshelper4.h.html delete mode 100644 Programs/doc/api/vsscript4.h.html delete mode 100644 Programs/doc/apireference.html delete mode 100644 Programs/doc/applications.html delete mode 100644 Programs/doc/functions.html delete mode 100644 Programs/doc/functions/audio/assumesamplerate.html delete mode 100644 Programs/doc/functions/audio/audiogain.html delete mode 100644 Programs/doc/functions/audio/audioloop.html delete mode 100644 Programs/doc/functions/audio/audiomix.html delete mode 100644 Programs/doc/functions/audio/audioreverse.html delete mode 100644 Programs/doc/functions/audio/audiosplice.html delete mode 100644 Programs/doc/functions/audio/audiotrim.html delete mode 100644 Programs/doc/functions/audio/blankaudio.html delete mode 100644 Programs/doc/functions/audio/setaudiocache.html delete mode 100644 Programs/doc/functions/audio/shufflechannels.html delete mode 100644 Programs/doc/functions/audio/splitchannels.html delete mode 100644 Programs/doc/functions/general/loadallplugins.html delete mode 100644 Programs/doc/functions/general/loadplugin.html delete mode 100644 Programs/doc/functions/general/loadpluginavs.html delete mode 100644 Programs/doc/functions/general/setmaxcpu.html delete mode 100644 Programs/doc/functions/video/addborders.html delete mode 100644 Programs/doc/functions/video/assumefps.html delete mode 100644 Programs/doc/functions/video/averageframes.html delete mode 100644 Programs/doc/functions/video/binarize_binarizemask.html delete mode 100644 Programs/doc/functions/video/blankclip.html delete mode 100644 Programs/doc/functions/video/boxblur.html delete mode 100644 Programs/doc/functions/video/cliptoprop.html delete mode 100644 Programs/doc/functions/video/convolution.html delete mode 100644 Programs/doc/functions/video/copyframeprops.html delete mode 100644 Programs/doc/functions/video/crop_cropabs.html delete mode 100644 Programs/doc/functions/video/deflate_inflate.html delete mode 100644 Programs/doc/functions/video/deleteframes.html delete mode 100644 Programs/doc/functions/video/doubleweave.html delete mode 100644 Programs/doc/functions/video/duplicateframes.html delete mode 100644 Programs/doc/functions/video/expr.html delete mode 100644 Programs/doc/functions/video/flipvertical_fliphorizontal.html delete mode 100644 Programs/doc/functions/video/frameeval.html delete mode 100644 Programs/doc/functions/video/freezeframes.html delete mode 100644 Programs/doc/functions/video/interleave.html delete mode 100644 Programs/doc/functions/video/invert_invertmask.html delete mode 100644 Programs/doc/functions/video/levels.html delete mode 100644 Programs/doc/functions/video/limiter.html delete mode 100644 Programs/doc/functions/video/loop.html delete mode 100644 Programs/doc/functions/video/lut.html delete mode 100644 Programs/doc/functions/video/lut2.html delete mode 100644 Programs/doc/functions/video/makediff.html delete mode 100644 Programs/doc/functions/video/makefulldiff.html delete mode 100644 Programs/doc/functions/video/maskedmerge.html delete mode 100644 Programs/doc/functions/video/median.html delete mode 100644 Programs/doc/functions/video/merge.html delete mode 100644 Programs/doc/functions/video/mergediff.html delete mode 100644 Programs/doc/functions/video/mergefulldiff.html delete mode 100644 Programs/doc/functions/video/minimum_maximum.html delete mode 100644 Programs/doc/functions/video/modifyframe.html delete mode 100644 Programs/doc/functions/video/pemverifier.html delete mode 100644 Programs/doc/functions/video/planestats.html delete mode 100644 Programs/doc/functions/video/premultiply.html delete mode 100644 Programs/doc/functions/video/prewitt_sobel.html delete mode 100644 Programs/doc/functions/video/proptoclip.html delete mode 100644 Programs/doc/functions/video/removeframeprops.html delete mode 100644 Programs/doc/functions/video/resize.html delete mode 100644 Programs/doc/functions/video/reverse.html delete mode 100644 Programs/doc/functions/video/selectevery.html delete mode 100644 Programs/doc/functions/video/separatefields.html delete mode 100644 Programs/doc/functions/video/setfieldbased.html delete mode 100644 Programs/doc/functions/video/setframeprop.html delete mode 100644 Programs/doc/functions/video/setframeprops.html delete mode 100644 Programs/doc/functions/video/setvideocache.html delete mode 100644 Programs/doc/functions/video/shuffleplanes.html delete mode 100644 Programs/doc/functions/video/splice.html delete mode 100644 Programs/doc/functions/video/splitplanes.html delete mode 100644 Programs/doc/functions/video/stackvertical_stackhorizontal.html delete mode 100644 Programs/doc/functions/video/text/clipinfo.html delete mode 100644 Programs/doc/functions/video/text/coreinfo.html delete mode 100644 Programs/doc/functions/video/text/framenum.html delete mode 100644 Programs/doc/functions/video/text/frameprops.html delete mode 100644 Programs/doc/functions/video/text/text.html delete mode 100644 Programs/doc/functions/video/transpose.html delete mode 100644 Programs/doc/functions/video/trim.html delete mode 100644 Programs/doc/functions/video/turn180.html delete mode 100644 Programs/doc/genindex.html delete mode 100644 Programs/doc/gettingstarted.html delete mode 100644 Programs/doc/index.html delete mode 100644 Programs/doc/installation.html delete mode 100644 Programs/doc/introduction.html delete mode 100644 Programs/doc/objects.inv delete mode 100644 Programs/doc/output.html delete mode 100644 Programs/doc/pythonreference.html delete mode 100644 Programs/doc/search.html delete mode 100644 Programs/doc/searchindex.js delete mode 100644 Programs/sdk/examples/filter_skeleton.c delete mode 100644 Programs/sdk/examples/invert_example.c delete mode 100644 Programs/sdk/examples/vsscript_example.c delete mode 100644 Programs/sdk/include/VSConstants4.h delete mode 100644 Programs/sdk/include/VSHelper.h delete mode 100644 Programs/sdk/include/VSHelper4.h delete mode 100644 Programs/sdk/include/VSScript.h delete mode 100644 Programs/sdk/include/VSScript4.h delete mode 100644 Programs/sdk/include/VapourSynth.h delete mode 100644 Programs/sdk/include/VapourSynth4.h delete mode 100644 Programs/sdk/lib32/VSScript.lib delete mode 100644 Programs/sdk/lib32/VapourSynth.lib diff --git a/Programs/doc/.buildinfo b/Programs/doc/.buildinfo deleted file mode 100644 index 0c4df40..0000000 --- a/Programs/doc/.buildinfo +++ /dev/null @@ -1,4 +0,0 @@ -# Sphinx build info version 1 -# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: 632bdf4b310a3f3964e4f568bada4510 -tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/Programs/doc/_sources/api/vapoursynth4.h.rst.txt b/Programs/doc/_sources/api/vapoursynth4.h.rst.txt deleted file mode 100644 index a582d41..0000000 --- a/Programs/doc/_sources/api/vapoursynth4.h.rst.txt +++ /dev/null @@ -1,2937 +0,0 @@ -VapourSynth4.h -============== - -Table of contents -################# - -Introduction_ - - -Macros_ - VS_CC_ - - VS_EXTERNAL_API_ - - VAPOURSYNTH_API_MAJOR_ - - VAPOURSYNTH_API_MINOR_ - - VAPOURSYNTH_API_VERSION_ - - VS_AUDIO_FRAME_SAMPLES_ - - VS_MAKE_VERSION_ - - -Enums_ - VSColorFamily_ - - VSSampleType_ - - VSPresetVideoFormat_ - - VSFilterMode_ - - VSMediaType_ - - VSAudioChannels_ - - VSPropertyType_ - - VSMapPropertyError_ - - VSMapAppendMode_ - - VSActivationReason_ - - VSMessageType_ - - VSCoreCreationFlags_ - - VSPluginConfigFlags_ - - VSDataTypeHint_ - - VSRequestPattern_ - - VSCacheMode_ - - -Structs_ - VSFrame_ - - VSNode_ - - VSCore_ - - VSPlugin_ - - VSPluginFunction_ - - VSFunction_ - - VSMap_ - - VSLogHandle_ - - VSFrameContext_ - - VSVideoFormat_ - - VSVideoInfo_ - - VSAudioFormat_ - - VSAudioInfo_ - - VSCoreInfo_ - - VSFilterDependency_ - - VSPLUGINAPI_ - - VSAPI_ - - * Functions that deal with the core: - - * createCore_ - - * freeCore_ - - * setMaxCacheSize_ - - * setThreadCount_ - - * getCoreInfo_ - - * getAPIVersion_ - - * Functions that deal with logging - - * addLogHandler_ - - * removeLogHandler_ - - * logMessage_ - - * Functions that deal with frames: - - * newVideoFrame_ - - * newVideoFrame2_ - - * newAudioFrame_ - - * newAudioFrame2_ - - * freeFrame_ - - * addFrameRef_ - - * copyFrame_ - - * getFramePropertiesRO_ - - * getFramePropertiesRW_ - - * getStride_ - - * getReadPtr_ - - * getWritePtr_ - - * getVideoFrameFormat_ - - * getAudioFrameFormat_ - - * getFrameType_ - - * getFrameWidth_ - - * getFrameHeight_ - - * getFrameLength_ - - * Functions that deal with filters and nodes: - - * createVideoFilter_ - - * createVideoFilter2_ - - * createAudioFilter_ - - * createAudioFilter2_ - - * setLinearFilter_ - - * setCacheMode_ - - * setCacheOptions_ - - * freeNode_ - - * addNodeRef_ - - * getNodeType_ - - * getVideoInfo_ - - * getAudioInfo_ - - * Functions that deal with formats: - - * getVideoFormatName_ - - * getAudioFormatName_ - - * queryVideoFormat_ - - * queryAudioFormat_ - - * queryVideoFormatID_ - - * getVideoFormatByID_ - - * Functions that deal with maps: - - * createMap_ - - * freeMap_ - - * clearMap_ - - * mapGetError_ - - * mapSetError_ - - * mapNumKeys_ - - * mapGetKey_ - - * mapDeleteKey_ - - * mapNumElements_ - - * mapGetType_ - - * mapSetEmpty_ - - * mapGetInt_ - - * mapGetIntSaturated_ - - * mapGetIntArray_ - - * mapSetInt_ - - * mapSetIntArray_ - - * mapGetFloat_ - - * mapGetFloatSaturated_ - - * mapGetFloatArray_ - - * mapSetFloat_ - - * mapSetFloatArray_ - - * mapGetData_ - - * mapGetDataSize_ - - * mapGetDataTypeHint_ - - * mapSetData_ - - * mapGetNode_ - - * mapSetNode_ - - * mapConsumeNode_ - - * mapGetFrame_ - - * mapSetFrame_ - - * mapConsumeFrame_ - - * mapGetFunction_ - - * mapSetFunction_ - - * mapConsumeFunction_ - - * Functions that deal with plugins and plugin functions: - - * registerFunction_ - - * getPluginByID_ - - * getPluginByNamespace_ - - * getNextPlugin_ - - * getPluginName_ - - * getPluginID_ - - * getPluginNamespace_ - - * getNextPluginFunction_ - - * getPluginFunctionByName_ - - * getPluginFunctionName_ - - * getPluginFunctionArguments_ - - * getPluginFunctionReturnType_ - - * getPluginPath_ - - * getPluginVersion_ - - * invoke_ - - * Functions that deal with wrapped external functions: - - * createFunction_ - - * freeFunction_ - - * addFunctionRef_ - - * callFunction_ - - * Functions that are used to fetch frames and inside filters: - - * getFrame_ - - * getFrameAsync_ - - * getFrameFilter_ - - * requestFrameFilter_ - - * releaseFrameEarly_ - - * cacheFrame_ - - * setFilterError_ - - -Functions_ - getVapourSynthAPI_ - - -`Writing plugins`_ - VSInitPlugin_ - - VSFilterGetFrame_ - - VSFilterFree_ - - -Introduction -############ - -This is VapourSynth's main header file. Plugins and applications that use -the library must include it. - -VapourSynth's public API is all C. - - -Macros -###### - -VapourSynth4.h defines some preprocessor macros that make the programmer's life -easier. The relevant ones are described below. - -VS_CC ------ - -The ``VS_CC`` macro expands to the calling convention used by VapourSynth. -All functions meant to be called by VapourSynth must use this macro (a -filter's "init", "getframe", "free" functions, etc). - -Example: - -.. code-block:: c - - static void VS_CC fooInit(...) { ... } - - -VS_EXTERNAL_API ---------------- - -The ``VS_EXTERNAL_API`` macro expands to the platform-specific magic required -for functions exported by shared libraries. It also takes care of adding -``extern "C"`` when needed, and ``VS_CC``. - -This macro must be used for a plugin's entry point, like so: - -.. code-block:: c - - VS_EXTERNAL_API(void) VapourSynthPluginInit2(...) { ... } - - -VAPOURSYNTH_API_MAJOR ---------------------- - -Major API version. - - -VAPOURSYNTH_API_MINOR ---------------------- - -Minor API version. It is bumped when new functions are added to VSAPI_ or core behavior is noticeably changed. - - -VAPOURSYNTH_API_VERSION ------------------------ - -API version. The high 16 bits are VAPOURSYNTH_API_MAJOR_, the low 16 -bits are VAPOURSYNTH_API_MINOR_. - - -VS_AUDIO_FRAME_SAMPLES ----------------------- - -The number of audio samples in an audio frame. It is a static number to make it possible to calculate which audio frames are needed to retrieve specific samples. - - -VS_MAKE_VERSION ---------------- - -Used to create version numbers. The first argument is the major version and second is the minor. - - -Enums -##### - -.. _VSColorFamily: - -enum VSColorFamily ------------------- - - * cfUndefined - - * cfGray - - * cfRGB - - * cfYUV - - -.. _VSSampleType: - -enum VSSampleType ------------------ - - * stInteger - - * stFloat - - -.. _VSPresetVideoFormat: - -enum VSPresetVideoFormat ------------------------- - - The presets suffixed with H and S have floating point sample type. - The H and S suffixes stand for half precision and single precision, - respectively. All formats are planar. See the header for all currently - defined video format presets. - - * pf\* - - -.. _VSFilterMode: - -enum VSFilterMode ------------------ - - Controls how a filter will be multithreaded, if at all. - - * fmParallel - - Completely parallel execution. - Multiple threads will call a filter's "getframe" function, to fetch several - frames in parallel. - - * fmParallelRequests - - For filters that are serial in nature but can request in advance one or - more frames they need. - A filter's "getframe" function will be called from multiple threads at a - time with activation reason arInitial, but only one thread will call it - with activation reason arAllFramesReady at a time. - - * fmUnordered - - Only one thread can call the filter's "getframe" function at a time. - Useful for filters that modify or examine their internal state to - determine which frames to request. - - While the "getframe" function will only run in one thread at a - time, the calls can happen in any order. For example, it can be - called with reason arInitial for frame 0, then again with reason - arInitial for frame 1, then with reason arAllFramesReady for - frame 0. - - * fmFrameState - - For compatibility with other filtering architectures. DO NOT USE IN NEW FILTERS. - The filter's "getframe" function only ever gets called from one thread at a - time. Unlike fmUnordered, only one frame is processed at a time. - - -.. _VSMediaType: - -enum VSMediaType ----------------- - - Used to indicate the type of a `VSFrame` or `VSNode` object. - - * mtVideo - - * mtAudio - - -.. _VSAudioChannels: - -enum VSAudioChannels --------------------- - - Audio channel positions as an enum. Mirrors the FFmpeg audio channel constants in older api versions. See the header for all available values. - - * ac\* - - -.. _VSPropertyType: - -enum VSPropertyType -------------------- - - Types of properties that can be stored in a VSMap. - - * ptUnset - - * ptInt - - * ptFloat - - * ptData - - * ptFunction - - * ptVideoNode - - * ptAudioNode - - * ptVideoFrame - - * ptAudioFrame - - -.. _VSMapPropertyError: - -enum VSMapPropertyError ------------------------ - - When a mapGet* function fails, it returns one of these in the *err* - parameter. - - All errors are non-zero. - - * peSuccess - - * peUnset - - The requested key was not found in the map. - - * peType - - The wrong function was used to retrieve the property. E.g. - mapGetInt_\ () was used on a property of type ptFloat. - - * peIndex - - The requested index was out of bounds. - - * peError - - The map has the error state set. - - -.. _VSMapAppendMode: - -enum VSMapAppendMode ---------------------- - - Controls the behaviour of mapSetInt_\ () and friends. - - * maReplace - - All existing values associated with the key will be replaced with - the new value. - - * maAppend - - The new value will be appended to the list of existing values - associated with the key. - - -.. _VSActivationReason: - -enum VSActivationReason ------------------------ - - See VSFilterGetFrame_. - - * arInitial - - * arAllFramesReady - - * arError - - -.. _VSMessageType: - -enum VSMessageType ------------------- - - See addLogHandler_\ (). - - * mtDebug - - * mtInformation - - * mtWarning - - * mtCritical - - * mtFatal - - -.. _VSCoreCreationFlags: - -enum VSCoreCreationFlags ------------------------- - - Options when creating a core. - - * ccfEnableGraphInspection - - Required to use the graph inspection api functions. Increases memory usage due to the extra information stored. - - * ccfDisableAutoLoading - - Don't autoload any user plugins. Core plugins are always loaded. - - * ccfDisableLibraryUnloading - - Don't unload plugin libraries when the core is destroyed. Due to a small amount of memory leaking every load - and unload (windows feature, not my fault) of a library this may help in applications with extreme amount of script reloading. - - -.. _VSPluginConfigFlags: - -enum VSPluginConfigFlags ------------------------- - - Options when loading a plugin. - - * pcModifiable - - Allow functions to be added to the plugin object after the plugin loading phase. Mostly useful for - Avisynth compatibility and other foreign plugin loaders. - - -.. _VSDataTypeHint: - -enum VSDataTypeHint -------------------- - - Since the data type can contain both pure binary data and printable strings the type also contains a hint - for whether or not it is human readable. Generally the unknown type should be very rare and is almost only - created as an artifact of API3 compatibility. - - * dtUnknown - - * dtBinary - - * dtUtf8 - - -.. _VSRequestPattern: - -enum VSRequestPattern ---------------------- - - Describes the upstream frame request pattern of a filter. - - * rpGeneral - - Anything goes. Note that filters that may be requesting beyond the end of a VSNode length in frames (repeating the last frame) should use *rpGeneral* and not any of the other modes. - - * rpNoFrameReuse - - Will only request an input frame at most once if all output frames are requested exactly one time. This includes filters such as Trim, Reverse, SelectEvery. - - * rpStrictSpatial - - Only requests frame N to output frame N. The main difference to *rpNoFrameReuse* is that the requested frame is always fixed and known ahead of time. Filter examples Lut, Expr (conditionally, see *rpGeneral* note) and similar. - - -.. _VSCacheMode: - -enum VSCacheMode ----------------- - - Describes how the output of a node is cached. - - * cmAuto - - Cache is enabled or disabled based on the reported request patterns and number of consumers. - - * cmForceDisable - - Never cache anything. - - * cmForceEnable - - * Always use the cache. - - -Structs -####### - -Most structs are opaque and their contents can only be accessed using functions in the API. - - -.. _VSFrame: - -struct VSFrame ------------------ - - A frame that can hold audio or video data. - - Each row of pixels in a frame is guaranteed to have an alignment of at least 32 - bytes. Two frames with the same width and bytes per sample are guaranteed to have the same stride. - - Audio data is also guaranteed to be at least 32 byte aligned. - - Any data can be attached to a frame, using a VSMap_. - - -.. _VSNode: - -struct VSNode ----------------- - - A reference to a node in the constructed filter graph. Its primary use - is as an argument to other filter or to request frames from. - - -.. _VSCore: - -struct VSCore -------------- - - The core represents one instance of VapourSynth. Every core individually - loads plugins and keeps track of memory. - - -.. _VSPlugin: - -struct VSPlugin ---------------- - - A VapourSynth plugin. There are a few of these built into the core, - and therefore available at all times: the basic filters (identifier - ``com.vapoursynth.std``, namespace ``std``), the resizers (identifier - ``com.vapoursynth.resize``, namespace ``resize``), and the Avisynth - compatibility module, if running in Windows (identifier - ``com.vapoursynth.avisynth``, namespace ``avs``). - - The Function Reference describes how to load VapourSynth and Avisynth - plugins. - - A VSPlugin instance is constructed by the core when loading a plugin - (.so / .dylib / .dll), and the pointer is passed to the plugin's - VapourSynthPluginInit2() function. - - A VapourSynth plugin can export any number of filters. - - Plugins have a few attributes: - - - An identifier, which must be unique among all VapourSynth plugins in - existence, because this is what the core uses to make sure a plugin - only gets loaded once. - - - A namespace, also unique. The filters exported by a plugin end up in - the plugin's namespace. - - - A full name, which is used by the core in a few error messages. - - - The version of the plugin. - - - The VapourSynth API version the plugin requires. - - - A file name. - - Things you can do with a VSPlugin: - - - Enumerate all the filters it exports, using getNextPluginFunction_\ (). - - - Invoke one of its filters, using invoke_\ (). - - - Get its location in the file system, using getPluginPath_\ (). - - All loaded plugins (including built-in) can be enumerated with - getNextPlugin_\ (). - - Once loaded, a plugin only gets unloaded when the VapourSynth core is freed. - - -.. _VSPluginFunction: - -struct VSPluginFunction ------------------------ - - A function belonging to a Vapoursynth plugin. This object primarily exists so - a plugin's name, argument list and return type can be queried by editors. - - One peculiarity is that plugin functions cannot be invoked using a `VSPluginFunction` - pointer but is instead done using invoke_\ () which takes a `VSPlugin` and - the function name as a string. - - -.. _VSFunction: - -struct VSFunction ------------------ - - Holds a reference to a function that may be called. This type primarily exists - so functions can be shared between the scripting layer and plugins in the core. - - -.. _VSMap: - -struct VSMap ------------- - - VSMap is a container that stores (key,value) pairs. The keys are strings - and the values can be (arrays of) integers, floating point numbers, - arrays of bytes, VSNode_, VSFrame_, or VSFunction_. - - The pairs in a VSMap are sorted by key. - - In VapourSynth, VSMaps have several uses: - - storing filters' arguments and return values - - - storing user-defined functions' arguments and return values - - - storing the properties attached to frames - - Only alphanumeric characters and the underscore may be used in keys. - - Creating and destroying a map can be done with createMap_\ () and - freeMap_\ (), respectively. - - A map's contents can be retrieved and modified using a number of functions, - all prefixed with "map". - - A map's contents can be erased with clearMap_\ (). - - -.. _VSLogHandle: - -struct VSLogHandle ------------------- - - Opaque type representing a registered logger. - - -.. _VSFrameContext: - -struct VSFrameContext ---------------------- - - Opaque type representing the current frame request in a filter. - - -.. _VSVideoFormat: - -struct VSVideoFormat --------------------- - - Describes the format of a clip. - - Use queryVideoFormat_\ () to fill it in with proper error checking. Manually filling out the struct is allowed but discouraged - since illegal combinations of values will cause undefined behavior. - - .. c:member:: int colorFamily - - See VSColorFamily_. - - .. c:member:: int sampleType - - See VSSampleType_. - - .. c:member:: int bitsPerSample - - Number of significant bits. - - .. c:member:: int bytesPerSample - - Number of bytes needed for a sample. This is always a power of 2 and the - smallest possible that can fit the number of bits used per sample. - - .. c:member:: int subSamplingW - .. c:member:: int subSamplingH - - log2 subsampling factor, applied to second and third plane. - Convenient numbers that can be used like so: - - .. code-block:: c - - uv_width = y_width >> subSamplingW; - - .. c:member:: int numPlanes - - Number of planes. - - -.. _VSVideoInfo: - -struct VSVideoInfo ------------------- - - Contains information about a clip. - - .. c:member:: VSVideoFormat format - - Format of the clip. Will have *colorFamily* set to *cfUndefined* if the format can vary. - - .. c:member:: int64_t fpsNum - - Numerator part of the clip's frame rate. It will be 0 if the frame - rate can vary. Should always be a reduced fraction. - - .. c:member:: int64_t fpsDen - - Denominator part of the clip's frame rate. It will be 0 if the frame - rate can vary. Should always be a reduced fraction. - - .. c:member:: int width - - Width of the clip. Both width and height will be 0 if the clip's dimensions can vary. - - .. c:member:: int height - - Height of the clip. Both width and height will be 0 if the clip's dimensions can vary. - - .. c:member:: int numFrames - - Length of the clip. - - -.. _VSAudioFormat: - -struct VSAudioFormat --------------------- - - Describes the format of a clip. - - Use queryAudioFormat_\ () to fill it in with proper error checking. Manually filling out the struct is allowed but discouraged - since illegal combinations of values will cause undefined behavior. - - .. c:member:: int sampleType - - See VSSampleType_. - - .. c:member:: int bitsPerSample - - Number of significant bits. - - .. c:member:: int bytesPerSample - - Number of bytes needed for a sample. This is always a power of 2 and the - smallest possible that can fit the number of bits used per sample. - - .. c:member:: int numChannels - - Number of audio channels. - - .. c:member:: uint64_t channelLayout - - A bitmask representing the channels present using the constants in 1 left shifted by the constants in VSAudioChannels_. - - -.. _VSAudioInfo: - -struct VSAudioInfo ------------------- - - Contains information about a clip. - - .. c:member:: VSAudioFormat format - - Format of the clip. Unlike video the audio format can never change. - - .. c:member:: int sampleRate - - Sample rate. - - .. c:member:: int64_t numSamples - - Length of the clip in audio samples. - - .. c:member:: int numFrames - - Length of the clip in audio frames. - - -.. _VSCoreInfo: - -struct VSCoreInfo ------------------ - - Contains information about a VSCore_ instance. - - .. c:member:: const char* versionString - - Printable string containing the name of the library, copyright notice, - core and API versions. - - .. c:member:: int core - - Version of the core. - - .. c:member:: int api - - Version of the API. - - .. c:member:: int numThreads - - Number of worker threads. - - .. c:member:: int64_t maxFramebufferSize - - The framebuffer cache will be allowed to grow up to this size (bytes) before memory is aggressively reclaimed. - - .. c:member:: int64_t usedFramebufferSize - - Current size of the framebuffer cache, in bytes. - - -.. _VSFilterDependency: - -struct VSFilterDependency -------------------------- - - Contains information about a VSCore_ instance. - - .. c:member:: VSNode *source - - The node frames are requested from. - - .. c:member:: int requestPattern - - A value from VSRequestPattern_. - - -.. _VSPLUGINAPI: - -struct VSPLUGINAPI ------------------- - - This struct is used to access VapourSynth's API when a plugin is initially loaded. - ----------- - - int getAPIVersion() - - See getAPIVersion_\ () in the struct VSAPI_. - ----------- - - .. _configPlugin: - - int configPlugin(const char \*identifier, const char \*pluginNamespace, const char \*name, int pluginVersion, int apiVersion, int flags, VSPlugin \*plugin) - - Used to provide information about a plugin when loaded. Must be called exactly once from the *VapourSynthPluginInit2* entry point. - It is recommended to use the VS_MAKE_VERSION_ macro when providing the *pluginVersion*. If you don't know the specific *apiVersion* you actually require simply - pass VAPOURSYNTH_API_VERSION_ to match the header version you're compiling against. The *flags* consist of values from VSPluginConfigFlags_ ORed together - but should for most plugins typically be 0. - - Returns non-zero on success. - ----------- - - int registerFunction(const char \*name, const char \*args, const char \*returnType, VSPublicFunction argsFunc, void \*functionData, VSPlugin \*plugin) - - See registerFunction_\ () in the struct VSAPI_. - - -.. _VSAPI: - -struct VSAPI ------------- - - This giant struct is the way to access VapourSynth's public API. - ----------- - - .. _createCore: - - VSCore_ \*createCore(int flags) - - Creates the VapourSynth processing core and returns a pointer to it. It is - possible to create multiple cores but in most cases it shouldn't be needed. - - *flags* - `VSCoreCreationFlags` ORed together if desired. Pass 0 for sane defaults - that should suit most uses. - ----------- - - .. _freeCore: - - void freeCore(VSCore_ \*core) - - Frees a core. Should only be done after all frame requests have completed - and all objects belonging to the core have been released. - ----------- - - .. _setMaxCacheSize: - - int64_t setMaxCacheSize(int64_t bytes, VSCore_ \*core) - - Sets the maximum size of the framebuffer cache. Returns the new maximum - size. - ----------- - - .. _setThreadCount: - - int setThreadCount(int threads, VSCore_ \*core) - - Sets the number of threads used for processing. Pass 0 to automatically detect. - Returns the number of threads that will be used for processing. - ----------- - - .. _getCoreInfo: - - void getCoreInfo(VSCore_ \*core, VSCoreInfo_ \*info) - - Returns information about the VapourSynth core. - ----------- - - .. _getAPIVersion: - - int getAPIVersion() - - Returns the highest VAPOURSYNTH_API_VERSION_ the library support. - ----------- - - .. _logMessage: - - void logMessage(int msgType, const char \*msg, VSCore \*core) - - Send a message through VapourSynth's logging framework. See - addLogHandler_. - - *msgType* - The type of message. One of VSMessageType_. - - If *msgType* is mtFatal, VapourSynth will call abort() after - delivering the message. - - *msg* - The message. - ----------- - - .. _addLogHandler: - - VSLogHandle \*addLogHandler(VSLogHandler handler, VSLogHandlerFree free, void \*userData, VSCore_ \*core) - - Installs a custom handler for the various error messages VapourSynth - emits. The message handler is per VSCore_ instance. Returns a unique handle. - - If no log handler is installed up to a few hundred messages are cached and - will be delivered as soon as a log handler is attached. This behavior exists - mostly so that warnings when auto-loading plugins (default behavior) won't disappear- - - *handler* - typedef void (VS_CC \*VSLogHandler)(int msgType, const char \*msg, void \*userdata) - - Custom message handler. If this is NULL, the default message - handler will be restored. - - *msgType* - The type of message. One of VSMessageType_. - - If *msgType* is mtFatal, VapourSynth will call abort() after the - message handler returns. - - *msg* - The message. - - *free* - typedef void (VS_CC \*VSLogHandlerFree)(void \*userData) - - Called when a handler is removed. - - *userData* - Pointer that gets passed to the message handler. - ----------- - - .. _removeLogHandler: - - int removeLogHandler(VSLogHandle \*handle, VSCore \*core) - - Removes a custom handler. Return non-zero on success and zero if - the handle is invalid. - - *handle* - Handle obtained from addLogHandler_\ (). - ----------- - - .. _newVideoFrame: - - VSFrame_ \*newVideoFrame(const VSVideoFormat_ \*format, int width, int height, const VSFrame_ \*propSrc, VSCore_ \*core) - - Creates a new video frame, optionally copying the properties attached to another - frame. It is a fatal error to pass invalid arguments to this function. - - The new frame contains uninitialised memory. - - *format* - The desired colorspace format. Must not be NULL. - - *width* - - *height* - The desired dimensions of the frame, in pixels. Must be greater than 0 and have a suitable multiple for the subsampling in format. - - *propSrc* - A frame from which properties will be copied. Can be NULL. - - Returns a pointer to the created frame. Ownership of the new frame is - transferred to the caller. - - See also newVideoFrame2_\ (). - ----------- - - .. _newVideoFrame2: - - VSFrame_ \*newVideoFrame2(const VSVideoFormat_ \*format, int width, int height, const VSFrame_ \**planeSrc, const int \*planes, const VSFrame_ \*propSrc, VSCore_ \*core) - - Creates a new video frame from the planes of existing frames, optionally copying - the properties attached to another frame. It is a fatal error to pass invalid arguments to this function. - - *format* - The desired colorspace format. Must not be NULL. - - *width* - - *height* - The desired dimensions of the frame, in pixels. Must be greater than 0 and have a suitable multiple for the subsampling in format. - - *planeSrc* - Array of frames from which planes will be copied. If any elements of - the array are NULL, the corresponding planes in the new frame will - contain uninitialised memory. - - *planes* - Array of plane numbers indicating which plane to copy from the - corresponding source frame. - - *propSrc* - A frame from which properties will be copied. Can be NULL. - - Returns a pointer to the created frame. Ownership of the new frame is - transferred to the caller. - - Example (assume *frameA*, *frameB*, *frameC* are existing frames): - - .. code-block:: c - - const VSFrame * frames[3] = { frameA, frameB, frameC }; - const int planes[3] = { 1, 0, 2 }; - VSFrame * newFrame = vsapi->newVideoFrame2(f, w, h, frames, planes, frameB, core); - - The newFrame's first plane is now a copy of *frameA*'s second plane, - the second plane is a copy of *frameB*'s first plane, - the third plane is a copy of *frameC*'s third plane - and the properties have been copied from *frameB*. - ----------- - - .. _newAudioFrame: - - VSFrame_ \*newAudioFrame(const VSAudioFormat \*format, int numSamples, const VSFrame \*propSrc, VSCore \*core) - - Creates a new audio frame, optionally copying the properties attached to another - frame. It is a fatal error to pass invalid arguments to this function. - - The new frame contains uninitialised memory. - - *format* - The desired audio format. Must not be NULL. - - *numSamples* - The number of samples in the frame. All audio frames apart from the last one returned by a filter must have VS_AUDIO_FRAME_SAMPLES_. - - *propSrc* - A frame from which properties will be copied. Can be NULL. - - Returns a pointer to the created frame. Ownership of the new frame is - transferred to the caller. - - See also newAudioFrame2_\ (). - ----------- - - .. _newAudioFrame2: - - VSFrame_ \*newAudioFrame2(const VSAudioFormat_ \*format, int numSamples, const VSFrame_ \*\*channelSrc, const int \*channels, const VSFrame_ \*propSrc, VSCore \*core) - - Creates a new audio frame, optionally copying the properties attached to another - frame. It is a fatal error to pass invalid arguments to this function. - - The new frame contains uninitialised memory. - - *format* - The desired audio format. Must not be NULL. - - *numSamples* - The number of samples in the frame. All audio frames apart from the last one returned by a filter must have VS_AUDIO_FRAME_SAMPLES_. - - *channelSrc* - Array of frames from which channels will be copied. If any elements of - the array are NULL, the corresponding planes in the new frame will - contain uninitialised memory. - - *channels* - Array of channel numbers indicating which channel to copy from the - corresponding source frame. Note that the number refers to the nth channel - and not a channel name constant. - - *propSrc* - A frame from which properties will be copied. Can be NULL. - - Returns a pointer to the created frame. Ownership of the new frame is - transferred to the caller. - - See also newVideoFrame2_\ (). - ----------- - - .. _freeFrame: - - void freeFrame(const VSFrame_ \*f) - - Decrements the reference count of a frame and deletes it when it reaches 0. - - It is safe to pass NULL. - ----------- - - .. _addFrameRef: - - const VSFrame_ \*addFrameRef(const VSFrame_ \*f) - - Increments the reference count of a frame. Returns *f* as a convenience. - ----------- - - .. _copyFrame: - - VSFrame_ \*copyFrame(const VSFrame_ \*f, VSCore_ \*core) - - Duplicates the frame (not just the reference). As the frame buffer is - shared in a copy-on-write fashion, the frame content is not really - duplicated until a write operation occurs. This is transparent for the user. - - Returns a pointer to the new frame. Ownership is transferred to the caller. - ----------- - - .. _getFramePropertiesRO: - - const VSMap_ \*getFramePropertiesRO(const VSFrame_ \*f) - - Returns a read-only pointer to a frame's properties. The pointer is valid - as long as the frame lives. - ----------- - - .. _getFramePropertiesRW: - - VSMap_ \*getFramePropertiesRW(VSFrame_ \*f) - - Returns a read/write pointer to a frame's properties. The pointer is valid - as long as the frame lives. - ----------- - - .. _getStride: - - ptrdiff_t getStride(const VSFrame_ \*f, int plane) - - Returns the distance in bytes between two consecutive lines of a plane of - a video frame. The stride is always positive. Returns 0 if the requested - *plane* doesn't exist or if it isn't a video frame. - ----------- - - .. _getReadPtr: - - const uint8_t \*getReadPtr(const VSFrame_ \*f, int plane) - - Returns a read-only pointer to a *plane* or channel of a frame. - Returns NULL if an invalid *plane* or channel number is passed. - - .. note:: - Don't assume all three planes of a frame are allocated in one - contiguous chunk (they're not). - ----------- - - .. _getWritePtr: - - uint8_t \*getWritePtr(VSFrame_ \*f, int plane) - - Returns a read-write pointer to a *plane* or channel of a frame. - Returns NULL if an invalid *plane* or channel number is passed. - - .. note:: - Don't assume all three planes of a frame are allocated in one - contiguous chunk (they're not). - ----------- - - .. _getVideoFrameFormat: - - const VSVideoFormat_ \*getVideoFrameFormat(const VSFrame_ \*f) - - Retrieves the format of a video frame. - ----------- - - .. _getAudioFrameFormat: - - const VSAudioFormat_ \*getAudioFrameFormat(const VSFrame_ \*f) - - Retrieves the format of an audio frame. - ----------- - - .. _getFrameType: - - int getFrameType(const VSFrame_ \*f) - - Returns a value from VSMediaType_ to distinguish audio and video frames. - ----------- - - .. _getFrameWidth: - - int getFrameWidth(const VSFrame_ \*f, int plane) - - Returns the width of a *plane* of a given video frame, in pixels. The width - depends on the plane number because of the possible chroma subsampling. Returns 0 - for audio frames. - ----------- - - .. _getFrameHeight: - - int getFrameHeight(const VSFrame_ \*f, int plane) - - Returns the height of a *plane* of a given video frame, in pixels. The height - depends on the plane number because of the possible chroma subsampling. Returns 0 - for audio frames. - ----------- - - .. _getFrameLength: - - int getFrameLength(const VSFrame_ \*f) - - Returns the number of audio samples in a frame. Always returns 1 for video frames. - ----------- - - .. _createVideoFilter: - - void createVideoFilter(VSMap_ \*out, const char \*name, const VSVideoInfo_ \*vi, VSFilterGetFrame_ getFrame, VSFilterFree_ free, int filterMode, const VSFilterDependency_ \*dependencies, int numDeps, void \*instanceData, VSCore_ \*core) - - Creates a new video filter node. - - *out* - Output map for the filter node. - - *name* - Instance name. Please make it the same as the filter's name for easy identification. - - *vi* - The output format of the filter. - - *getFrame* - The filter's "getframe" function. Must not be NULL. - - *free* - The filter's "free" function. Can be NULL. - - *filterMode* - One of VSFilterMode_. Indicates the level of parallelism - supported by the filter. - - *dependencies* - An array of nodes the filter requests frames from and the access pattern. - Used to more efficiently configure caches. - - *numDeps* - Length of the *dependencies* array. - - *instanceData* - A pointer to the private filter data. This pointer will be passed to - the *getFrame* and *free* functions. It should be freed by - the *free* function. - - After this function returns, *out* will contain the new node appended to the - "clip" property, or an error, if something went wrong. - ----------- - - .. _createVideoFilter2: - - VSNode_ \*createVideoFilter2(const char \*name, const VSVideoInfo_ \*vi, VSFilterGetFrame_ getFrame, VSFilterFree_ free, int filterMode, const VSFilterDependency_ \*dependencies, int numDeps, void \*instanceData, VSCore_ \*core) - - Identical to createVideoFilter_ except that the new node is returned - instead of appended to the *out* map. Returns NULL on error. - ----------- - - .. _createAudioFilter: - - void createAudioFilter(VSMap \*out, const char \*name, const VSAudioInfo \*ai, VSFilterGetFrame getFrame, VSFilterFree free, int filterMode, const VSFilterDependency_ \*dependencies, int numDeps, void \*instanceData, VSCore \*core) - - Creates a new video filter node. - - *out* - Output map for the filter node. - - *name* - Instance name. Please make it the same as the filter's name for easy identification. - - *ai* - The output format of the filter. - - *getFrame* - The filter's "getframe" function. Must not be NULL. - - *free* - The filter's "free" function. Can be NULL. - - *filterMode* - One of VSFilterMode_. Indicates the level of parallelism - supported by the filter. - - *dependencies* - An array of nodes the filter requests frames from and the access pattern. - Used to more efficiently configure caches. - - *numDeps* - Length of the *dependencies* array. - - *instanceData* - A pointer to the private filter data. This pointer will be passed to - the *getFrame* and *free* functions. It should be freed by - the *free* function. - - After this function returns, *out* will contain the new node appended to the - "clip" property, or an error, if something went wrong. - ----------- - - .. _createAudioFilter2: - - VSNode \*createAudioFilter2(const char \*name, const VSAudioInfo \*ai, VSFilterGetFrame getFrame, VSFilterFree free, int filterMode, const VSFilterDependency_ \*dependencies, int numDeps, void \*instanceData, VSCore \*core) - - Identical to createAudioFilter_ except that the new node is returned - instead of appended to the *out* map. Returns NULL on error. - ----------- - - .. _setLinearFilter: - - int setLinearFilter(VSNode_ \*node) - - Must be called immediately after audio or video filter creation. - Returns the upper bound of how many additional frames it is - reasonable to pass to cacheFrame_ when trying to make a request - more linear. - ----------- - - .. _setCacheMode: - - void setCacheMode(VSNode_ \*node, int mode) - - Determines the strategy for frame caching. Pass a VSCacheMode_ constant. - Mostly useful for cache debugging since the auto mode should work well - in just about all cases. Calls to this function may also be silently ignored. - - Resets the cache to default options when called, discarding setCacheOptions_ - changes. - ----------- - - .. _setCacheOptions: - - void setCacheOptions(VSNode_ \*node, int fixedSize, int maxSize, int maxHistorySize) - - Call after setCacheMode_ or the changes will be discarded. Sets internal - details of a node's associated cache. Calls to this function may also - be silently ignored. - - *fixedSize* - Set to non-zero to make the cache always hold *maxSize* frames. - - *maxSize* - The maximum number of frames to cache. Note that this value is automatically - adjusted using an internal algorithm unless *fixedSize* is set. - - *maxHistorySize* - How many frames that have been recently evicted from the cache to keep track off. - Used to determine if growing or shrinking the cache is beneficial. Has no effect - when *fixedSize* is set. - ----------- - - .. _freeNode: - - void freeNode(VSNode_ \*node) - - Decreases the reference count of a node and destroys it once it reaches 0. - - It is safe to pass NULL. - ----------- - - .. _addNodeRef: - - VSNode_ \*addNodeRef(VSNode_ \*node) - - Increment the reference count of a node. Returns the same *node* for convenience. - ----------- - - .. _getNodeType: - - int getNodeType(VSNode_ \*node) - - Returns VSMediaType_. Used to determine if a node is of audio or video type. - ----------- - - .. _getVideoInfo: - - const VSVideoInfo_ \*getVideoInfo(VSNode_ \*node) - - Returns a pointer to the video info associated with a node. The pointer is - valid as long as the node lives. It is undefined behavior to pass a non-video - node. - ----------- - - .. _getAudioInfo: - - const VSAudioInfo_ \*getAudioInfo(VSNode_ \*node) - - Returns a pointer to the audio info associated with a node. The pointer is - valid as long as the node lives. It is undefined behavior to pass a non-audio - node. - ----------- - - .. _getVideoFormatName: - - int getVideoFormatName(const VSVideoFormat \*format, char \*buffer) - - Tries to output a fairly human-readable name of a video format. - - *format* - The input video format. - - *buffer* - Destination buffer. At most 32 bytes including terminating NULL - will be written. - - Returns non-zero on success. - ----------- - - .. _getAudioFormatName: - - int getAudioFormatName(const VSAudioFormat \*format, char \*buffer) - - Tries to output a fairly human-readable name of an audio format. - - *format* - The input audio format. - - *buffer* - Destination buffer. At most 32 bytes including terminating NULL - will be written. - - Returns non-zero on success. - ----------- - - .. _queryVideoFormat: - - int queryVideoFormat(VSVideoFormat_ \*format, int colorFamily, int sampleType, int bitsPerSample, int subSamplingW, int subSamplingH, VSCore_ \*core) - - Fills out a VSVideoInfo_ struct based on the provided arguments. Validates the arguments before filling out *format*. - - *format* - The struct to fill out. - - *colorFamily* - One of VSColorFamily_. - - *sampleType* - One of VSSampleType_. - - *bitsPerSample* - Number of meaningful bits for a single component. The valid range is - 8-32. - - For floating point formats only 16 or 32 bits are allowed. - - *subSamplingW* - log2 of the horizontal chroma subsampling. 0 == no subsampling. The valid range is 0-4. - - *subSamplingH* - log2 of the vertical chroma subsampling. 0 == no subsampling. The valid range is 0-4. - - .. note:: - RGB formats are not allowed to be subsampled in VapourSynth. - - Returns non-zero on success. - ----------- - - .. _queryAudioFormat: - - int queryAudioFormat(VSAudioFormat_ \*format, int sampleType, int bitsPerSample, uint64_t channelLayout, VSCore_ \*core) - - Fills out a VSAudioFormat_ struct based on the provided arguments. Validates the arguments before filling out *format*. - - *format* - The struct to fill out. - - *sampleType* - One of VSSampleType_. - - *bitsPerSample* - Number of meaningful bits for a single component. The valid range is - 8-32. - - For floating point formats only 32 bits are allowed. - - *channelLayout* - A bitmask constructed from bitshifted constants in VSAudioChannels_. For example stereo is expressed as (1 << acFrontLeft) | (1 << acFrontRight). - - Returns non-zero on success. - ----------- - - .. _queryVideoFormatID: - - uint32_t queryVideoFormatID(int colorFamily, int sampleType, int bitsPerSample, int subSamplingW, int subSamplingH, VSCore_ \*core) - - Get the id associated with a video format. Similar to queryVideoFormat_\ () except that it returns a format id instead - of filling out a VSVideoInfo_ struct. - - *colorFamily* - One of VSColorFamily_. - - *sampleType* - One of VSSampleType_. - - *bitsPerSample* - Number of meaningful bits for a single component. The valid range is - 8-32. - - For floating point formats, only 16 or 32 bits are allowed. - - *subSamplingW* - log2 of the horizontal chroma subsampling. 0 == no subsampling. The valid range is 0-4. - - *subSamplingH* - log2 of the vertical chroma subsampling. 0 == no subsampling. The valid range is 0-4. - - .. note:: - RGB formats are not allowed to be subsampled in VapourSynth. - - Returns a valid format id if the provided arguments are valid, on error - 0 is returned. - ----------- - - .. _getVideoFormatByID: - - int getVideoFormatByID(VSVideoFormat_ \*format, uint32_t id, VSCore_ \*core) - - Fills out the VSVideoFormat_ struct passed to *format* based - - *format* - The struct to fill out. - - *id* - The format identifier: one of VSPresetVideoFormat_ or a value gotten from queryVideoFormatID_. - - Returns 0 on failure and non-zero on success. - ----------- - - .. _createMap: - - VSMap_ \*createMap(void) - - Creates a new property map. It must be deallocated later with - freeMap_\ (). - ----------- - - .. _freeMap: - - void freeMap(VSMap_ \*map) - - Frees a map and all the objects it contains. - ----------- - - .. _clearMap: - - void clearMap(VSMap_ \*map) - - Deletes all the keys and their associated values from the map, leaving it - empty. - ----------- - - .. _mapGetError: - - const char \*mapGetError(const VSMap_ \*map) - - Returns a pointer to the error message contained in the map, - or NULL if there is no error set. The pointer is valid until - the next modifying operation on the map. - ----------- - - .. _mapSetError: - - void mapSetError(VSMap_ \*map, const char \*errorMessage) - - Adds an error message to a map. The map is cleared first. The error - message is copied. In this state the map may only be freed, cleared - or queried for the error message. - - For errors encountered in a filter's "getframe" function, use - setFilterError_. - ----------- - - .. _mapNumKeys: - - int mapNumKeys(const VSMap_ \*map) - - Returns the number of keys contained in a property map. - ----------- - - .. _mapGetKey: - - const char \*mapGetKey(const VSMap_ \*map, int index) - - Returns the nth key from a property map. - - Passing an invalid *index* will cause a fatal error. - - The pointer is valid as long as the key exists in the map. - ----------- - - .. _mapDeleteKey: - - int mapDeleteKey(VSMap_ \*map, const char \*key) - - Removes the property with the given key. All values associated with the - key are lost. - - Returns 0 if the key isn't in the map. Otherwise it returns 1. - ----------- - - .. _mapNumElements: - - int mapNumElements(const VSMap_ \*map, const char \*key) - - Returns the number of elements associated with a key in a property map. - Returns -1 if there is no such key in the map. - ----------- - - .. _mapGetType: - - int mapGetType(const VSMap_ \*map, const char \*key) - - Returns a value from VSPropertyType_ representing type - of elements in the given key. If there is no such key in the - map, the returned value is ptUnset. Note that also empty - arrays created with mapSetEmpty_ are typed. - ----------- - - .. _mapSetEmpty: - - int mapSetEmpty(const VSMap_ \*map, const char \*key, int type) - - Creates an empty array of *type* in *key*. Returns non-zero - value on failure due to *key* already existing or having an - invalid name. - ----------- - - .. _mapGetInt: - - int64_t mapGetInt(const VSMap_ \*map, const char \*key, int index, int \*error) - - Retrieves an integer from a specified *key* in a *map*. - - Returns the number on success, or 0 in case of error. - - If the map has an error set (i.e. if mapGetError_\ () returns non-NULL), - VapourSynth will die with a fatal error. - - *index* - Zero-based index of the element. - - Use mapNumElements_\ () to know the total number of elements - associated with a key. - - *error* - One of VSMapPropertyError_, peSuccess on success. - - You may pass NULL here, but then any problems encountered while - retrieving the property will cause VapourSynth to die with a fatal - error. - ----------- - - .. _mapGetIntSaturated: - - int mapGetIntSaturated(const VSMap_ \*map, const char \*key, int index, int \*error) - - Works just like mapGetInt_\ () except that the value returned is also - converted to an integer using saturation. - ----------- - - .. _mapGetIntArray: - - const int64_t \*mapGetIntArray(const VSMap_ \*map, const char \*key, int \*error) - - Retrieves an array of integers from a map. Use this function if there - are a lot of numbers associated with a key, because it is faster than - calling mapGetInt_\ () in a loop. - - Returns a pointer to the first element of the array on success, or NULL - in case of error. Use mapNumElements_\ () to know the total number of - elements associated with a key. - - See mapGetInt_\ () for a complete description of the arguments and general behavior. - ----------- - - .. _mapSetInt: - - int mapSetInt(VSMap_ \*map, const char \*key, int64_t i, int append) - - Sets an integer to the specified key in a map. - - Multiple values can be associated with one key, but they must all be the - same type. - - *key* - Name of the property. Alphanumeric characters and underscore - may be used. - - *i* - Value to store. - - *append* - One of VSMapAppendMode_. - - Returns 0 on success, or 1 if trying to append to a property with the - wrong type to an existing key. - ----------- - - .. _mapSetIntArray: - - int mapSetIntArray(VSMap_ \*map, const char \*key, const int64_t \*i, int size) - - Adds an array of integers to a map. Use this function if there are a - lot of numbers to add, because it is faster than calling mapSetInt_\ () - in a loop. - - If *map* already contains a property with this *key*, that property will - be overwritten and all old values will be lost. - - *key* - Name of the property. Alphanumeric characters and underscore - may be used. - - *i* - Pointer to the first element of the array to store. - - *size* - Number of integers to read from the array. It can be 0, in which case - no integers are read from the array, and the property will be created - empty. - - Returns 0 on success, or 1 if *size* is negative. - ----------- - - .. _mapGetFloat: - - double mapGetFloat(const VSMap_ \*map, const char \*key, int index, int \*error) - - Retrieves a floating point number from a map. - - Returns the number on success, or 0 in case of error. - - See mapGetInt_\ () for a complete description of the arguments and general behavior. - ----------- - - .. _mapGetFloatSaturated: - - float mapGetFloatSaturated(const VSMap_ \*map, const char \*key, int index, int \*error) - - Works just like mapGetFloat_\ () except that the value returned is also - converted to a float. - ----------- - - .. _mapGetFloatArray: - - const double \*mapGetFloatArray(const VSMap_ \*map, const char \*key, int \*error) - - Retrieves an array of floating point numbers from a map. Use this function if there - are a lot of numbers associated with a key, because it is faster than - calling mapGetFloat_\ () in a loop. - - Returns a pointer to the first element of the array on success, or NULL - in case of error. Use mapNumElements_\ () to know the total number of - elements associated with a key. - - See mapGetInt_\ () for a complete description of the arguments and general behavior. - ----------- - - .. _mapSetFloat: - - int mapSetFloat(VSMap_ \*map, const char \*key, double d, int append) - - Sets a float to the specified key in a map. - - See mapSetInt_\ () for a complete description of the arguments and general behavior. - ----------- - - .. _mapSetFloatArray: - - int mapSetFloatArray(VSMap_ \*map, const char \*key, const double \*d, int size) - - Adds an array of floating point numbers to a map. Use this function if - there are a lot of numbers to add, because it is faster than calling - mapSetFloat_\ () in a loop. - - If *map* already contains a property with this *key*, that property will - be overwritten and all old values will be lost. - - *key* - Name of the property. Alphanumeric characters and underscore - may be used. - - *d* - Pointer to the first element of the array to store. - - *size* - Number of floating point numbers to read from the array. It can be 0, - in which case no numbers are read from the array, and the property - will be created empty. - - Returns 0 on success, or 1 if *size* is negative. - ----------- - - .. _mapGetData: - - const char \*mapGetData(const VSMap_ \*map, const char \*key, int index, int \*error) - - Retrieves arbitrary binary data from a map. Checking mapGetDataTypeHint_\ () - may provide a hint about whether or not the data is human readable. - - Returns a pointer to the data on success, or NULL in case of error. - - The array returned is guaranteed to be NULL-terminated. The NULL - byte is not considered to be part of the array (mapGetDataSize_ - doesn't count it). - - The pointer is valid until the map is destroyed, or until the - corresponding key is removed from the map or altered. - - See mapGetInt_\ () for a complete description of the arguments and general behavior. - ----------- - - .. _mapGetDataSize: - - int mapGetDataSize(const VSMap_ \*map, const char \*key, int index, int \*error) - - Returns the size in bytes of a property of type ptData (see - VSPropertyType_), or 0 in case of error. The terminating NULL byte - added by mapSetData_\ () is not counted. - - See mapGetInt_\ () for a complete description of the arguments and general behavior. - ----------- - - .. _mapGetDataTypeHint: - - int mapGetDataTypeHint(const VSMap_ \*map, const char \*key, int index, int \*error) - - Returns the size in bytes of a property of type ptData (see - VSPropertyType_), or 0 in case of error. The terminating NULL byte - added by mapSetData_\ () is not counted. - - See mapGetInt_\ () for a complete description of the arguments and general behavior. - ----------- - - .. _mapSetData: - - int mapSetData(VSMap \*map, const char \*key, const char \*data, int size, int type, int append) - - Sets binary data to the specified key in a map. - - Multiple values can be associated with one key, but they must all be the - same type. - - *key* - Name of the property. Alphanumeric characters and the underscore - may be used. - - *data* - Value to store. - - This function copies the data, so the pointer should be freed when - no longer needed. A terminating NULL is always added to the copied data - but not included in the total size to make string handling easier. - - *size* - The number of bytes to copy. If this is negative, everything up to - the first NULL byte will be copied. - - *type* - One of VSDataTypeHint_ to hint whether or not it is human readable data. - - *append* - One of VSMapAppendMode_. - - Returns 0 on success, or 1 if trying to append to a property with the - wrong type. - ----------- - - .. _mapGetNode: - - VSNode_ \*mapGetNode(const VSMap_ \*map, const char \*key, int index, int \*error) - - Retrieves a node from a map. - - Returns a pointer to the node on success, or NULL in case of error. - - This function increases the node's reference count, so freeNode_\ () must - be used when the node is no longer needed. - - See mapGetInt_\ () for a complete description of the arguments and general behavior. - ----------- - - .. _mapSetNode: - - int mapSetNode(VSMap_ \*map, const char \*key, VSNode_ \*node, int append) - - Sets a node to the specified key in a map. - - See mapSetInt_\ () for a complete description of the arguments and general behavior. - ----------- - - .. _mapConsumeNode: - - int mapConsumeNode(VSMap_ \*map, const char \*key, VSNode_ \*node, int append) - - Sets a node to the specified key in a map and decreases the reference count. - - See mapSetInt_\ () for a complete description of the arguments and general behavior. - ----------- - - .. _mapGetFrame: - - const VSFrame_ \*propGetFrame(const VSMap_ \*map, const char \*key, int index, int \*error) - - Retrieves a frame from a map. - - Returns a pointer to the frame on success, or NULL in case of error. - - This function increases the frame's reference count, so freeFrame_\ () must - be used when the frame is no longer needed. - - See mapGetInt_\ () for a complete description of the arguments and general behavior. - ----------- - - .. _mapSetFrame: - - int mapSetFrame(VSMap_ \*map, const char \*key, const VSFrame_ \*f, int append) - - Sets a frame to the specified key in a map. - - See mapSetInt_\ () for a complete description of the arguments and general behavior. - ----------- - - .. _mapConsumeFrame: - - int mapConsumeFrame(VSMap_ \*map, const char \*key, const VSFrame_ \*f, int append) - - Sets a frame to the specified key in a map and decreases the reference count. - - See mapSetInt_\ () for a complete description of the arguments and general behavior. - ----------- - - .. _mapGetFunction: - - VSFunctionRef \*mapGetFunc(const VSMap_ \*map, const char \*key, int index, int \*error) - - Retrieves a function from a map. - - Returns a pointer to the function on success, or NULL in case of error. - - This function increases the function's reference count, so freeFunction_\ () must - be used when the function is no longer needed. - - See mapGetInt_\ () for a complete description of the arguments and general behavior. - ----------- - - .. _mapSetFunction: - - int mapSetFunction(VSMap_ \*map, const char \*key, VSFunction \*func, int append) - - Sets a function object to the specified key in a map. - - See mapSetInt_\ () for a complete description of the arguments and general behavior. - ----------- - - .. _mapConsumeFunction: - - int mapConsumeFunction(VSMap_ \*map, const char \*key, VSFunction \*func, int append) - - Sets a function object to the specified key in a map and decreases the reference count. - - See mapSetInt_\ () for a complete description of the arguments and general behavior. - ----------- - - .. _getPluginByID: - - VSPlugin_ \*getPluginByID(const char \*identifier, VSCore_ \*core) - - Returns a pointer to the plugin with the given identifier, or NULL - if not found. - - *identifier* - Reverse URL that uniquely identifies the plugin. - ----------- - - .. _getPluginByNamespace: - - VSPlugin_ \*getPluginByNamespace(const char \*ns, VSCore_ \*core) - - Returns a pointer to the plugin with the given namespace, or NULL - if not found. - - getPluginByID_ is generally a better option. - - *ns* - Namespace. - ----------- - - .. _getNextPlugin: - - VSPlugin_ \*getNextPlugin(VSPlugin_ \*plugin, VSCore_ \*core) - - Used to enumerate over all currently loaded plugins. The order - is fixed but provides no other guarantees. - - *plugin* - Current plugin. Pass NULL to get the first plugin. - - Returns a pointer to the next plugin in order or NULL if the final - plugin has been reached. - ----------- - - .. _getPluginName: - - const char \*getPluginName(VSPlugin_ \*plugin) - - Returns the name of the plugin that was passed to configPlugin_. - ----------- - - .. _getPluginID: - - const char \*getPluginID(VSPlugin_ \*plugin) - - Returns the identifier of the plugin that was passed to configPlugin_. - ----------- - - .. _getPluginNamespace: - - const char \*getPluginNamespace(VSPlugin_ \*plugin) - - Returns the namespace the plugin currently is loaded in. - ----------- - - .. _getNextPluginFunction: - - VSPluginFunction_ \*getNextPluginFunction(VSPluginFunction_ \*func, VSPlugin \*plugin) - - Used to enumerate over all functions in a plugin. The order - is fixed but provides no other guarantees. - - *func* - Current function. Pass NULL to get the first function. - - *plugin* - The plugin to enumerate functions in. - - Returns a pointer to the next function in order or NULL if the final - function has been reached. - ----------- - - .. _getPluginFunctionByName: - - VSPluginFunction_ \*getPluginFunctionByName(const char \*name, VSPlugin_ \*plugin) - - Get a function belonging to a plugin by its name. - ----------- - - .. _getPluginFunctionName: - - const char \*getPluginFunctionName(VSPluginFunction_ \*func) - - Returns the name of the function that was passed to registerFunction_. - ----------- - - .. _getPluginFunctionArguments: - - const char \*getPluginFunctionArguments(VSPluginFunction_ \*func) - - Returns the argument string of the function that was passed to registerFunction_. - ----------- - - .. _getPluginFunctionReturnType: - - const char \*getPluginFunctionReturnType(VSPluginFunction_ \*func) - - Returns the return type string of the function that was passed to registerFunction_. - ----------- - - .. _getPluginPath: - - const char \*getPluginPath(const VSPlugin_ \*plugin) - - Returns the absolute path to the plugin, including the plugin's file - name. This is the real location of the plugin, i.e. there are no - symbolic links in the path. - - Path elements are always delimited with forward slashes. - - VapourSynth retains ownership of the returned pointer. - ----------- - - .. _getPluginVersion: - - int getPluginVersion(const VSPlugin_ \*plugin) - - Returns the version of the plugin. This is the same as the version number passed to configPlugin_. - ----------- - - .. _invoke: - - VSMap_ \*invoke(VSPlugin_ \*plugin, const char \*name, const VSMap_ \*args) - - Invokes a filter. - - invoke() checks that - the *args* passed to the filter are consistent with the argument list - registered by the plugin that contains the filter, calls the filter's - "create" function, and checks that the filter returns the declared types. - If everything goes smoothly, the filter will be ready to generate - frames after invoke() returns. - - *plugin* - A pointer to the plugin where the filter is located. Must not be NULL. - - See getPluginByID_\ (). - - *name* - Name of the filter to invoke. - - *args* - Arguments for the filter. - - Returns a map containing the filter's return value(s). The caller takes - ownership of the map. Use mapGetError_\ () to check if the filter was invoked - successfully. - - Most filters will either set an error, or one or more clips - with the key "clip". The exception to this are functions, for example - LoadPlugin, which doesn't return any clips for obvious reasons. - ----------- - - .. _createFunction: - - VSFunction_ \*createFunction(VSPublicFunction func, void \*userData, VSFreeFunctionData free, VSCore_ \*core) - - *func* - typedef void (VS_CC \*VSPublicFunction)(const VSMap_ \*in, VSMap_ \*out, void \*userData, VSCore_ \*core, const VSAPI_ \*vsapi) - - User-defined function that may be called in any context. - - *userData* - Pointer passed to *func*. - - *free* - typedef void (VS_CC \*VSFreeFunctionData)(void \*userData) - - Callback tasked with freeing *userData*. Can be NULL. - ----------- - - .. _freeFunction: - - void freeFunction(VSFunction_ \*f) - - Decrements the reference count of a function and deletes it when it reaches 0. - - It is safe to pass NULL. - ----------- - - .. _addFunctionRef: - - VSFunction_ \*addFunctionRef(VSFunction_ \*f) - - Increments the reference count of a function. Returns *f* as a convenience. - ----------- - - .. _callFunction: - - void callFunction(VSFunction_ \*func, const VSMap_ \*in, VSMap_ \*out) - - Calls a function. If the call fails *out* will have an error set. - - *func* - Function to be called. - - *in* - Arguments passed to *func*. - - *out* - Returned values from *func*. - ----------- - - .. _getFrame: - - const VSFrame_ \*getFrame(int n, VSNode_ \*node, char \*errorMsg, int bufSize) - - Fetches a frame synchronously. The frame is available when the function - returns. - - This function is meant for external applications using the core as a - library, or if frame requests are necessary during a filter's - initialization. - - Thread-safe. - - *n* - The frame number. Negative values will cause an error. - - *node* - The node from which the frame is requested. - - *errorMsg* - Pointer to a buffer of *bufSize* bytes to store a possible error - message. Can be NULL if no error message is wanted. - - *bufSize* - Maximum length for the error message, in bytes (including the - trailing '\0'). Can be 0 if no error message is wanted. - - Returns a reference to the generated frame, or NULL in case of failure. - The ownership of the frame is transferred to the caller. - - .. warning:: - Never use inside a filter's "getframe" function. - ----------- - - .. _getFrameAsync: - - void getFrameAsync(int n, VSNode_ \*node, VSFrameDoneCallback callback, void \*userData) - - Requests the generation of a frame. When the frame is ready, - a user-provided function is called. Note that the completion - *callback* will only be called from a single thread at a time. - - This function is meant for applications using VapourSynth as a library. - - Thread-safe. - - *n* - Frame number. Negative values will cause an error. - - *node* - The node from which the frame is requested. - - *callback* - typedef void (VS_CC \*VSFrameDoneCallback)(void \*userData, const VSFrame_ \*f, int n, VSNode_ \*node, const char \*errorMsg) - - Function of the client application called by the core when a requested - frame is ready, after a call to getFrameAsync(). - - If multiple frames were requested, they can be returned in any order. - Client applications must take care of reordering them. - - This function is only ever called from one thread at a time. - - getFrameAsync() may be called from this function to request more - frames. - - *userData* - Pointer to private data from the client application, as passed - previously to getFrameAsync(). - - *f* - Contains a reference to the generated frame, or NULL in case of failure. - The ownership of the frame is transferred to the caller. - - *n* - The frame number. - - *node* - Node the frame belongs to. - - *errorMsg* - String that usually contains an error message if the frame - generation failed. NULL if there is no error. - - *userData* - Pointer passed to the callback. - - .. warning:: - Never use inside a filter's "getframe" function. - ----------- - - .. _getFrameFilter: - - const VSFrame_ \*getFrameFilter(int n, VSNode_ \*node, VSFrameContext_ \*frameCtx) - - Retrieves a frame that was previously requested with - requestFrameFilter_\ (). - - Only use inside a filter's "getframe" function. - - A filter usually calls this function when its activation reason is - arAllFramesReady or arFrameReady. See VSActivationReason_. - - It is safe to retrieve a frame more than once, but each reference - needs to be freed. - - *n* - The frame number. - - *node* - The node from which the frame is retrieved. - - *frameCtx* - The context passed to the filter's "getframe" function. - - Returns a pointer to the requested frame, or NULL if the requested frame - is not available for any reason. The ownership of the frame is - transferred to the caller. - ----------- - - .. _requestFrameFilter: - - void requestFrameFilter(int n, VSNode_ \*node, VSFrameContext_ \*frameCtx) - - Requests a frame from a node and returns immediately. - - Only use inside a filter's "getframe" function. - - A filter usually calls this function when its activation reason is - arInitial. The requested frame can then be retrieved using - getFrameFilter_\ (), when the filter's activation reason is - arAllFramesReady. See VSActivationReason_. - - It is best to request frames in ascending order, i.e. n, n+1, n+2, etc. - - *n* - The frame number. Negative values will cause an error. - - *node* - The node from which the frame is requested. - - *frameCtx* - The context passed to the filter's "getframe" function. - ----------- - - .. _releaseFrameEarly: - - void releaseFrameEarly(VSNode_ \*node, int n, VSFrameContext_ \*frameCtx) - - By default all requested frames are referenced until a filter's frame - request is done. In extreme cases where a filter needs to reduce 20+ - frames into a single output frame it may be beneficial to request - these in batches and incrementally process the data instead. - - Should rarely be needed. - - Only use inside a filter's "getframe" function. - - *node* - The node from which the frame was requested. - - *n* - The frame number. Invalid frame numbers (not cached or negative) will simply be ignored. - - *frameCtx* - The context passed to the filter's "getframe" function. - ----------- - - .. _registerFunction: - - int registerFunction(const char \*name, const char \*args, const char \*returnType, VSPublicFunction argsFunc, void \*functionData, VSPlugin_ \*plugin) - - Function that registers a filter exported by the plugin. A plugin can - export any number of filters. This function may only be called during the plugin - loading phase unless the pcModifiable flag was set by configPlugin_. - - *name* - Filter name. The characters allowed are letters, numbers, and the - underscore. The first character must be a letter. In other words: - ``^[a-zA-Z][a-zA-Z0-9_]*$`` - - Filter names *should be* PascalCase. - - *args* - String containing the filter's list of arguments. - - Arguments are separated by a semicolon. Each argument is made of - several fields separated by a colon. Don't insert additional - whitespace characters, or VapourSynth will die. - - Fields: - The argument name. - The same characters are allowed as for the filter's name. - Argument names *should be* all lowercase and use only letters - and the underscore. - - The type. - "int": int64_t - - "float": double - - "data": const char* - - "anode": const VSNode_\ * (audio type) - - "vnode": const VSNode_\ * (video type) - - "aframe": const VSFrame_\ * (audio type) - - "vframe": const VSFrame_\ * (video type) - - "func": const VSFunctionRef\ * - - It is possible to declare an array by appending "[]" to the type. - - "opt" - If the parameter is optional. - - "empty" - For arrays that are allowed to be empty. - - "any" - Can only be placed last without a semicolon after. Indicates that all remaining arguments that don't match - should also be passed through. - - The following example declares the arguments "blah", "moo", and "asdf":: - - blah:vnode;moo:int[]:opt;asdf:float:opt; - - The following example declares the arguments "blah" and accepts all other arguments no matter the type:: - - blah:vnode;any - - *returnType* - Specifies works similarly to *args* but instead specifies which keys and what type will be returned. Typically this will be:: - - clip:vnode; - - for video filters. It is important to not simply specify "any" for all filters since this information is used for better - auto-completion in many editors. - - *argsFunc* - typedef void (VS_CC \*VSPublicFunction)(const VSMap_ \*in, VSMap_ \*out, void \*userData, VSCore_ \*core, const VSAPI_ \*vsapi) - - User-defined function called by the core to create an instance of the - filter. This function is often named ``fooCreate``. - - In this function, the filter's input parameters should be retrieved - and validated, the filter's private instance data should be - initialised, and createAudioFilter_\ () or createVideoFilter_\ () should be called. This is where - the filter should perform any other initialisation it requires. - - If for some reason you cannot create the filter, you have to free any - created node references using freeNode_\ (), call mapSetError_\ () on - *out*, and return. - - *in* - Input parameter list. - - Use mapGetInt_\ () and friends to retrieve a parameter value. - - The map is guaranteed to exist only until the filter's "init" - function returns. In other words, pointers returned by - mapGetData_\ () will not be usable in the filter's "getframe" and - "free" functions. - - *out* - Output parameter list. createAudioFilter_\ () or createVideoFilter_\ () will add the output - node(s) with the key named "clip", or an error, if something went - wrong. - - *userData* - Pointer that was passed to registerFunction_\ (). - - *functionData* - Pointer to user data that gets passed to *argsFunc* when creating a - filter. Useful to register multiple filters using a single *argsFunc* - function. - - *plugin* - Pointer to the plugin object in the core, as passed to - VapourSynthPluginInit2(). - ----------- - - .. _cacheFrame: - - void cacheFrame(const VSFrame_ \*frame, int n, VSFrameContext_ \*frameCtx) - - Pushes a not requested frame into the cache. This is useful for (source) filters that greatly - benefit from completely linear access and producing all output in linear order. - - This function may only be used in filters that were created with setLinearFilter_. - - Only use inside a filter's "getframe" function. - ----------- - - .. _setFilterError: - - void setFilterError(const char \*errorMessage, VSFrameContext_ \*frameCtx) - - Adds an error message to a frame context, replacing the existing message, - if any. - - This is the way to report errors in a filter's "getframe" function. - Such errors are not necessarily fatal, i.e. the caller can try to - request the same frame again. - -Functions -######### - -.. _getVapourSynthAPI: - -const VSAPI_\* getVapourSynthAPI(int version) - - Returns a pointer to the global VSAPI instance. - - Returns NULL if the requested API version is not supported or if the system - does not meet the minimum requirements to run VapourSynth. It is recommended - to pass VAPOURSYNTH_API_VERSION_. - - -Writing plugins -############### - - -A simple VapourSynth plugin which exports one filter will contain five -functions: an entry point (called ``VapourSynthPluginInit2``), a function tasked -with creating a filter instance (often called ``fooCreate``), an "init" function -(often called ``fooInit``), a "getframe" function (often called ``fooGetframe``), -and a "free" function (often called ``fooFree``). These functions are described -below. - -Another thing a filter requires is an object for storing a filter instance's -private data. This object will usually contain the filter's input nodes (if it -has any) and a VSVideoInfo_ struct describing the video the filter wants to -return. - -The `sdk `_ folder -in the VapourSynth source contains some examples. - ----------- - -.. _VSInitPlugin: - -typedef void (VS_CC \*VSInitPlugin)(VSPlugin_ \*plugin, const VSPLUGINAPI_ \*vspapi) - - A plugin's entry point. It must be called ``VapourSynthPluginInit2``. - This function is called after the core loads the shared library. Its purpose - is to configure the plugin and to register the filters the plugin wants to - export. - - *plugin* - A pointer to the plugin object to be initialized. - - *vspapi* - A pointer to a VSPLUGINAPI_ struct with a subset of the VapourSynth API used for initializing plugins. - The proper way to do things is to call configPlugin_ and then registerFunction_ for each function to export. - ----------- - -.. _VSFilterGetFrame: - -typedef const VSFrame_ \*(VS_CC \*VSFilterGetFrame)(int n, int activationReason, void \*instanceData, void \**frameData, VSFrameContext_ \*frameCtx, VSCore_ \*core, const VSAPI_ \*vsapi) - - A filter's "getframe" function. It is called by the core when it needs - the filter to generate a frame. - - It is possible to allocate local data, persistent during the multiple - calls requesting the output frame. - - In case of error, call setFilterError_\ (), free \*frameData if required, - and return NULL. - - Depending on the VSFilterMode_ set for the filter, multiple output frames - could be requested concurrently. - - It is never called concurrently for the same frame number. - - *n* - Requested frame number. - - *activationReason* - One of VSActivationReason_. - - This function is first called with *activationReason* arInitial. At this - point the function should request the input frames it needs and return - NULL. When one or all of the requested frames are ready, this function - is called again with arAllFramesReady. - The function should only return a frame when called with - *activationReason* arAllFramesReady. - - If a the function is called with arError all processing has to be aborted - and any. - - *instanceData* - The filter's private instance data. - - *frameData* - Optional private data associated with output frame number *n*. - It must be deallocated before the last call for the given frame - (arAllFramesReady or error). - - It points to a void \*[4] array of memory that may be used freely. - See filters like Splice and Trim for examples. - - Return a reference to the output frame number *n* when it is ready, or NULL. - The ownership of the frame is transferred to the caller. - ----------- - -.. _VSFilterFree: - -typedef void (VS_CC \*VSFilterFree)(void \*instanceData, VSCore_ \*core, const VSAPI_ \*vsapi) - - A filter's "free" function. - - This is where the filter should free everything it allocated, - including its instance data. - - *instanceData* - The filter's private instance data. diff --git a/Programs/doc/_sources/api/vshelper4.h.rst.txt b/Programs/doc/_sources/api/vshelper4.h.rst.txt deleted file mode 100644 index ea3456a..0000000 --- a/Programs/doc/_sources/api/vshelper4.h.rst.txt +++ /dev/null @@ -1,272 +0,0 @@ -VSHelper4.h -=========== - -Table of contents -################# - -Introduction_ - - -Macros_ - VSH_STD_PLUGIN_ID_ - - VSH_RESIZE_PLUGIN_ID_ - - VSH_TEXT_PLUGIN_ID_ - - VS_RESTRICT_ - - `VSH_ALIGNED_MALLOC `_ - - `VSH_ALIGNED_FREE `_ - - VSMIN_ - - VSMAX_ - - -Functions_ - `vsh_aligned_malloc `_ - - `vsh_aligned_free `_ - - isConstantFormat_ - - isSameVideoFormat_ - - isSameVideoPresetFormat_ - - isSameVideoInfo_ - - isSameAudioFormat_ - - isSameAudioInfo_ - - muldivRational_ - - addRational_ - - reduceRational_ - - int64ToIntS_ - - doubleToFloatS_ - - bitblt_ - - areValidDimensions_ - - -Introduction -############ - -This is a collection of helpful macros and functions. Note that all functions (not macros) -are either prefixed with `vsh_` in C mode or placed in the `vsh` namespace for C++. This documentation -will use the C++ names for these function. - - -Macros -###### - -VSH_STD_PLUGIN_ID ------------------ -Macro defined to the internal std plugin id provided for convenience. - - -VSH_RESIZE_PLUGIN_ID --------------------- -Macro defined to the internal resizer plugin id provided for convenience. - - -VSH_TEXT_PLUGIN_ID ------------------- -Macro defined to the internal std plugin id provided for convenience. - - -VS_RESTRICT ------------ - -Attempts to provide a portable definition of the C99 ``restrict`` keyword, -or its C++ counterpart. - - -.. _vsh_aligned_malloc_c: - -VSH_ALIGNED_MALLOC ------------------- - -VSH_ALIGNED_MALLOC(pptr, size, alignment) - -Expands to _aligned_malloc() in Windows, and posix_memalign() elsewhere. Note that -the arguments are in the style of posix_memalign(). - -*pptr* is a pointer to a pointer. - - -.. _vsh_aligned_free_c: - -VSH_ALIGNED_FREE ----------------- - -VSH_ALIGNED_FREE(ptr) - -Expands to _aligned_free() in Windows, and free() elsewhere. - -*ptr* is a pointer. - - -VSMIN ------ - -VSMIN(a, b) - -Returns the minimum of the two numbers. - - -VSMAX ------ - -VSMAX(a, b) - -Returns the maximum of the two numbers. - - -Functions -######### - -.. _vsh_aligned_malloc_cpp: - -vsh_aligned_malloc ------------------- - -.. cpp:function:: T* vsh::vsh_aligned_malloc(size_t size, size_t alignment) - - A templated aligned malloc for C++. It uses the same functions as the - `VSH_ALIGNED_MALLOC `_ macro but is easier to use. - - -.. _vsh_aligned_free_cpp: - -vsh_aligned_free ----------------- - -.. cpp:function:: void vsh::vsh_aligned_free(void *ptr) - - This simply uses the `VSH_ALIGNED_FREE `_ macro. - - -isConstantFormat ----------------- - -.. cpp:function:: static inline bool vsh::isConstantFormat(const VSVideoInfo *vi) - - Checks if a clip's format and dimensions are known (and therefore constant). - - -isSameVideoFormat ------------------ - -.. cpp:function:: static inline bool vsh::isSameVideoFormat(const VSVideoInfo *v1, const VSVideoInfo *v2) - - Checks if two clips have the same video format. If the format is - unknown in both, it will be considered the same. - - -isSameVideoPresetFormat ------------------------ - -.. cpp:function:: static inline bool vsh::isSameVideoPresetFormat(unsigned presetFormat, const VSVideoFormat *v, VSCore *core, const VSAPI *vsapi) - - Checks if a clip has the same video format as the preset. - - -isSameVideoInfo ---------------- - -.. cpp:function:: static inline bool vsh::isSameVideoInfo(const VSVideoInfo *v1, const VSVideoInfo *v2) - - Checks if two clips have the same video format and dimensions. If the format is - unknown in both, it will be considered the same. This is also true for the - dimensions. Framerate is not taken into consideration when comparing. - - - -isSameAudioFormat ------------------ - -.. cpp:function:: static inline bool vsh::isSameAudioFormat(const VSAudioInfo *v1, const VSAudioInfo *v2) - - Checks if two clips have the same audio format. - - -isSameAudioInfo ---------------- - -.. cpp:function:: static inline bool vsh::isSameAudioInfo(const VSAudioInfo *v1, const VSAudioInfo *v2) - - Checks if two clips have the same audio format and samplerate. - - -muldivRational --------------- - -.. cpp:function:: static inline void vsh::muldivRational(int64_t *num, int64_t *den, int64_t mul, int64_t div) - - Multiplies two rational numbers and reduces the result, i.e. - *num*\ /\ *den* \* *mul*\ /\ *div*. The result is stored in *num* and *den*. - - The caller must ensure that *div* is not 0. - - -reduceRational --------------- - -.. cpp:function:: static inline void vsh::reduceRational(int64_t *num, int64_t *den) - - Reduces a rational number. - - -addRational ------------ - -.. cpp:function:: static inline void vsh::addRational(int64_t *num, int64_t *den, int64_t addnum, int64_t addden) - - Adds two rational numbers and reduces the result, i.e. - *num*\ /\ *den* + *addnum*\ /\ *addden*. The result is stored in *num* and *den*. - - -int64ToIntS ------------ - -.. cpp:function:: static inline int vsh::int64ToIntS(int64_t i) - - Converts an int64_t to int with signed saturation. It's useful to silence - warnings when reading integer properties from a VSMap and to avoid unexpected behavior on int overflow. - - -doubleToFloatS --------------- - -.. cpp:function:: static inline int vsh::doubleToFloatS(double d) - - Converts a double to float. It's useful to silence - warnings when reading double properties from a VSMap and mostly exists to mirror `int64ToIntS`_. - - -bitblt ------- - -.. cpp:function:: static inline void vsh::bitblt(void *dstp, int dst_stride, const void *srcp, int src_stride, size_t row_size, size_t height) - - Copies bytes from one plane to another. Basically, it is memcpy in a loop. - - *row_size* is in bytes. - - -areValidDimensions ------------------- - -.. cpp:function:: static inline bool vsh::areValidDimensions(const VSFormat *fi, int width, int height) - - Checks if the given dimensions are valid for a particular format, with regards - to chroma subsampling. diff --git a/Programs/doc/_sources/api/vsscript4.h.rst.txt b/Programs/doc/_sources/api/vsscript4.h.rst.txt deleted file mode 100644 index 76a96ce..0000000 --- a/Programs/doc/_sources/api/vsscript4.h.rst.txt +++ /dev/null @@ -1,292 +0,0 @@ -VSScript4.h -=========== - -Table of contents -################# - -Introduction_ - - -Structs_ - VSScript_ - - VSScriptAPI_ - - -Functions_ - getVSScriptAPI_ - - getApiVersion_ - - getVSAPI_ - - createScript_ - - getCore_ - - evaluateBuffer_ - - evaluateFile_ - - getError_ - - getExitCode_ - - getVariable_ - - setVariables_ - - getOutputNode_ - - getOutputAlphaNode_ - - getAltOutputMode_ - - freeScript_ - - evalSetWorkingDir_ - - -Introduction -############ - -VSScript provides a convenient wrapper for VapourSynth's scripting interface(s), allowing the evaluation of VapourSynth scripts and retrieval of output clips. - -For reasons unknown, the VSScript library is called ``VSScript`` in Windows and ``vapoursynth-script`` everywhere else. - -At this time, VapourSynth scripts can be written only in Python (version 3). - -Here are a few users of the VSScript library: - - * `vspipe `_ - - * `vsvfw `_ - - * `an example program `_ - - * the video player `mpv `_ - -.. note:: - If libvapoursynth-script is loaded with dlopen(), the RTLD_GLOBAL flag must be used. If not, Python won't be able to import binary modules. This is due to Python's design. - - -Structs -####### - -VSScript --------- - -A script environment. All evaluation and communication with evaluated scripts happens through a VSScript object. - - -VSScriptAPI ------------ - -This struct is the way to access VSScript's public API. - - -Functions -######### - -getVSScriptAPI --------------- - -.. c:function:: const VSSCRIPTAPI *getVSScriptAPI(int version) - - Returns a struct containing function pointer for the api. Will return NULL is the specified *version* isn't supported. - - It is recommended to always pass *VSSCRIPT_API_VERSION*. - - -getApiVersion -------------- - -.. c:function:: int getApiVersion() - - Returns the api version provided by vsscript. - - -getVSAPI --------- - -.. c:function:: const VSAPI *getVSAPI(int version) - - Retrieves the VSAPI struct. Exists mostly as a convenience so the vapoursynth module doesn't have to be explicitly loaded. - - This could return NULL if the VapourSynth library doesn't provide the requested version. - - -createScript ------------- - -.. c:function:: VSScript *createScript(VSCore *core) - - Creates an empty script environment that can be used to evaluate scripts. Passing a pre-created *core* can be usful to have custom core creation flags, log callbacks or plugins pre-loaded. Passing NULL will automatically create a new core with default settings. - - Takes over ownership of the *core* regardless of success or failure. Returns NULL on error. - - -getCore -------- - -.. c:function:: VSCore *getCore(VSScript *handle) - - Retrieves the VapourSynth core that was created in the script environment. If a VapourSynth core has not been created yet, it will be created now, with the default options (see the :doc:`../pythonreference`). - - VSScript retains ownership of the returned core object. - - Returns NULL on error. - - - - -evaluateBuffer --------------- - -.. c:function:: int evaluateBuffer(VSScript *handle, const char *buffer, const char *scriptFilename) - - Evaluates a script contained in a C string. Can be called multiple times on the same script environment to successively add more processing. - - *handle* - Pointer to a script environment. - - *buffer* - The entire script to evaluate, as a C string. - - *scriptFilename* - A name for the script, which will be displayed in error messages. If this is NULL, the name "" will be used. - - The special ``__file__`` variable will be set to *scriptFilename*'s absolute path if this is not NULL. - - Returns non-zero in case of errors. The error message can be retrieved with getError_\ (). If the script calls *sys.exit(code)* the exit code can be retrieved with getExitCode_\ (). The working directory behavior can be changed by calling evalSetWorkingDir_\ () before this function. - - -evaluateFile ------------- - -.. c:function:: int evaluateFile(VSScript **handle, const char *scriptFilename) - - Evaluates a script contained in a file. This is a convenience function which reads the script from a file for you. It will only read the first 16 MiB which should be enough for everyone. - - Behaves the same as evaluateBuffer\ (). - - -getError --------- - -.. c:function:: const char *getError(VSScript *handle) - - Returns the error message from a script environment, or NULL, if there is no error. - - It is okay to pass NULL. - - VSScript retains ownership of the pointer and it is only guaranteed to be valid until the next vsscript operation on the *handle*. - - -getExitCode ------------ - -.. c:function:: int getExitCode(VSScript *handle) - - Returns the exit code if the script calls *sys.exit(code)*, or 0, if the script fails for other reasons or calls *sys.exit(0)*. - - It is okay to pass NULL. - - -getVariable ------------ - -.. c:function:: int getVariable(VSScript *handle, const char *name, VSMap *dst) - - Retrieves a variable from the script environment. - - If a VapourSynth core has not been created yet in the script environment, one will be created now, with the default options (see the :doc:`../pythonreference`). - - *name* - Name of the variable to retrieve. - - *dst* - Map where the variable's value will be placed, with the key *name*. - - Returns non-zero on error. - - -setVariables ------------- - -.. c:function:: int vsscript_setVariable(VSScript *handle, const VSMap *vars) - - Sets variables in the script environment. - - The variables are now available to the script. - - If a VapourSynth core has not been created yet in the script environment, one will be created now, with the default options (see the :doc:`../pythonreference`). - - *vars* - Map containing the variables to set. - - Returns non-zero on error. - - -getOutputNode -------------- - -.. c:function:: VSNode *getOutputNode(VSScript *handle, int index) - - Retrieves a node from the script environment. A node in the script must have been marked for output with the requested *index*. - - The returned node has its reference count incremented by one. - - Returns NULL if there is no node at the requested index. - - -getOutputAlphaNode ------------------- - -.. c:function:: VSNode *getOutputAlphaNode(VSScript *handle, int index) - - Retrieves an alpha node from the script environment. A node with associated alpha in the script must have been marked for output with the requested *index*. - - The returned node has its reference count incremented by one. - - Returns NULL if there is no alpha node at the requested index. - - -getAltOutputMode ----------------- - -.. c:function:: int getAltOutputMode(VSScript *handle, int index) - - Retrieves the alternative output mode settings from the script. This value has no fixed meaning but in vspipe and vsvfw it - indicates that alternate output formats should be used when multiple ones are available. It is up to the client application to define the exact meaning or simply disregard it completely. - - Returns 0 if there is no alt output mode set. - - -freeScript ----------- - -.. c:function:: void freeScript(VSScript *handle) - - Frees a script environment. *handle* is no longer usable. - - * Cancels any clips set for output in the script environment. - - * Clears any variables set in the script environment. - - * Clears the error message from the script environment, if there is one. - - * Frees the VapourSynth core used in the script environment, if there is one. - - Since this function frees the VapourSynth core, it must be called only after all frame requests are finished and all objects obtained from the script have been freed (frames, nodes, etc). - - It is safe to pass NULL. - - -evalSetWorkingDir ------------------ - -.. c:function:: void evalSetWorkingDir(VSScript *handle, int setCWD) - - Set whether or not the working directory is temporarily changed to the same - location as the script file when evaluateFile is called. Off by default. diff --git a/Programs/doc/_sources/apireference.rst.txt b/Programs/doc/_sources/apireference.rst.txt deleted file mode 100644 index 4e0c7fc..0000000 --- a/Programs/doc/_sources/apireference.rst.txt +++ /dev/null @@ -1,118 +0,0 @@ -VapourSynth C API Reference -=========================== - -See the example filters in the sdk dir. Reading simplefilters.c, which contains -several built-in functions, can also be very helpful. - -Public Headers -############## - -.. toctree:: - :maxdepth: 1 - :glob: - - api/* - -Common Pitfalls -############### - -There are several minor pitfalls related to the threading and design that have to be taken into consideration. Most of them usually aren't a problem but here's a small checklist of things you have to watch out for sometimes. - -General API ------------ -You may not pass objects (clips, functions and so on) owned by one core as arguments to filters in another core. A manual full deep copy of the data you want to pass on is required. This is generally not a problem since you should never need more than one core per filter graph. - -Plugins -------- -Plugin code may run more multithreaded than it initially appears. *VapourSynthPluginInit* is the only function always guaranteed to not run in parallel. This means that the constructor and destructor of a filter may be run in parallel for several instances. Use proper synchronization if you need to initialize shared data. - -The *GetFrame* function is a bit more complicated so see the reference of the constants. Do however note that the parallelism is per instance. Even if a filter is *fmUnordered* or *fmSerial* other instances may enter *GetFrame* simultaneously. - -There are two common misconseptions about which mode should be used. A simple rule is that *fmSerial* should never be used. And source filters (those returning a frame on *arInitial*) that need locking should use *fmUnordered*. - -Reserved Frame Properties -######################### - -All frames contain a map of key--value pairs. It is recommended that these -properties are named using only a-z, A-Z, 0-9 using CamelCase. There is a -special category of keys starting with _ which have strictly defined meanings -specified below. It is acceptable to not set any of these keys if they are -unknown. It is also a fatal error to set them to a value not specified below. - -int _ChromaLocation - - Chroma sample position in YUV formats. - - 0=left, 1=center, 2=topleft, 3=top, 4=bottomleft, 5=bottom. - -int _ColorRange - - Full or limited range (PC/TV range). Primarily used with YUV formats. - - 0=full range, 1=limited range. - -int _Primaries - - Color primaries as specified in ITU-T H.265 Table E.3. - -int _Matrix - - Matrix coefficients as specified in ITU-T H.265 Table E.5. - -int _Transfer - - Transfer characteristics as specified in ITU-T H.265 Table E.4. - -int _FieldBased - - If the frame is composed of two independent fields (interlaced). - - 0=frame based (progressive), 1=bottom field first, 2=top field first. - -float _AbsoluteTime - - The frame's absolute timestamp in seconds if reported by the source filter. - Should only be set by the source filter and not be modified. Use durations - for all operations that depend on frame length. - -int _DurationNum, int _DurationDen - - The frame's duration in seconds as a rational number. Filters that - modify the framerate should also change these values. - - This fraction should always be normalized. - -bint _Combed - - Whether or not the frame needs postprocessing, usually hinted from field - matching filters. - -int _Field - - If the frame was produced by something like core.std.SeparateFields, - this property signals which field was used to generate this frame. - - 0=from bottom field, 1=from top field. - -string _PictType - - A single character describing the frame type. It uses the common - IPB letters but other letters may also be used for formats with - additional frame types. - -int _SARNum, int _SARDen - - Pixel (sample) aspect ratio as a rational number. - -bint _SceneChangeNext - - If 1, this frame is the last frame of the current scene. The next frame starts a new scene. - -bint _SceneChangePrev - - If 1, this frame starts a new scene. - -frame _Alpha - - A clip's alpha channel can be attached to the clip one frame at a - time using this property. diff --git a/Programs/doc/_sources/applications.rst.txt b/Programs/doc/_sources/applications.rst.txt deleted file mode 100644 index 758ef52..0000000 --- a/Programs/doc/_sources/applications.rst.txt +++ /dev/null @@ -1,31 +0,0 @@ -Applications and Libraries -========================== - -Applications -############ - -* `D2V Witch `_ -- creates indexes that can be opened by d2vsource -* `Hybrid `_ `(Doom9) `__ -- encoding GUI with VapourSynth support -* `mpv.net `_ -- a media player with VapourSynth built-in -* `SmoothVideo Project `_ -- a plugin/video player component for realtime frame interpolation -* `StaxRip `_ -- encoding GUI with extended VapourSynth scripting support -* `VapourSynth Editor `_ `(Doom9) `__ -- an editor with syntax completion and fast preview support -* `VapourSynth Editor 2 `_ `(Doom9) `__ -- a spiritual successor to VapourSynth Editor -* `VirtualDub2 `_ `(Doom9) `__ -- VirtualDub with added support for high bitdepth colorspaces, useful for previewing -* `vsmkv `_ -- a FUSE-based virtual filesystem for exporting VapourSynth scripts as uncompressed videos in the Matroska (MKV) file format -* `vspreview `_ -- an advanced standalone previewer written in python with too many features to list -* `vspreview-rs `_ `(Doom9) `__ -- minimal VapourSynth script previewer -* `Wobbly `_ `(Doom9) `__ -- IVTC assistant similar to YATTA -* `Yuuno `_ -- incorporates VapourSynth into Jupyter - -Libraries -######### - -* `VapourSynth.nim `_ -- Bindings for the Nim programming language -* `vapoursynth-rs `_ -- VapourSynth Rust wrapper -* `vsxx `_ -- VapourSynth C++ API wrapper - -Tools -##### - -* GitHub Action `install-vapoursynth `_ -- Installs vapoursynth in your GitHub Action. diff --git a/Programs/doc/_sources/functions.rst.txt b/Programs/doc/_sources/functions.rst.txt deleted file mode 100644 index 2f796fd..0000000 --- a/Programs/doc/_sources/functions.rst.txt +++ /dev/null @@ -1,38 +0,0 @@ -Function Reference -================== - -General Functions -################# - -.. toctree:: - :maxdepth: 2 - :glob: - - functions/general/* - -Video Functions -############### - -.. toctree:: - :maxdepth: 2 - :glob: - - functions/video/* - -Text -**** - -.. toctree:: - :maxdepth: 2 - :glob: - - functions/video/text/* - -Audio Functions -############### - -.. toctree:: - :maxdepth: 2 - :glob: - - functions/audio/* diff --git a/Programs/doc/_sources/functions/audio/assumesamplerate.rst.txt b/Programs/doc/_sources/functions/audio/assumesamplerate.rst.txt deleted file mode 100644 index f4fc2da..0000000 --- a/Programs/doc/_sources/functions/audio/assumesamplerate.rst.txt +++ /dev/null @@ -1,5 +0,0 @@ -AssumeSampleRate -================ - -.. function:: AssumeSampleRate(anode clip[, anode src, int samplerate]) - :module: std diff --git a/Programs/doc/_sources/functions/audio/audiogain.rst.txt b/Programs/doc/_sources/functions/audio/audiogain.rst.txt deleted file mode 100644 index 45680f6..0000000 --- a/Programs/doc/_sources/functions/audio/audiogain.rst.txt +++ /dev/null @@ -1,12 +0,0 @@ -AudioGain -========= - -.. function:: AudioGain(anode clip, float[] gain) - :module: std - - AudioGain can either change the volume of individual channels - if a separate *gain* for each channel is given or if only a single - *gain* value is supplied it's applied to all channels. - - Negative *gain* values are allowed. Applying a too large gain will - lead to clipping in integer formats. \ No newline at end of file diff --git a/Programs/doc/_sources/functions/audio/audioloop.rst.txt b/Programs/doc/_sources/functions/audio/audioloop.rst.txt deleted file mode 100644 index 68ce1d4..0000000 --- a/Programs/doc/_sources/functions/audio/audioloop.rst.txt +++ /dev/null @@ -1,11 +0,0 @@ -AudioLoop -========= - -.. function:: AudioLoop(anode clip[, int times=0]) - :module: std - - Returns a clip with the frames or samples repeated over and over again. If *times* is - less than 1 the clip will be repeated until the maximum clip length is - reached, otherwise it will be repeated *times* times. - - In Python, std.AudioLoop can also be invoked :ref:`using the multiplication operator `. diff --git a/Programs/doc/_sources/functions/audio/audiomix.rst.txt b/Programs/doc/_sources/functions/audio/audiomix.rst.txt deleted file mode 100644 index ad02af0..0000000 --- a/Programs/doc/_sources/functions/audio/audiomix.rst.txt +++ /dev/null @@ -1,38 +0,0 @@ -AudioMix -======== - -.. function:: AudioMix(anode[] clips, float[] matrix, int[] channels_out) - :module: std - - AudioMix can mix and combine channels from different clips in the most - general way possible. - - Most of the returned clip's properties are implicitly determined from the - first clip given to *clips*. - - The *clips* parameter takes one or more clips with the same format. If the clips - are different lengths they'll be zero extended to that of the longest. - - The argument *matrix* applies the coefficients to each channel of each input clip where - the channels are in the numerical order of their channel constants. For example a stereo clip - will have its channels presented in the order FRONT_LEFT and then FRONT_RIGHT. - - Output channels and order is determined by the *channels_out* array - between input index and output channel happens on the order of lowest output channel - identifier to the highest. - - - - Below are some examples of useful operations. - - Downmix stereo audio to mono:: - - AudioMix(clips=clip, matrix=[0.5, 0.5], channels_out=[vs.FRONT_CENTER]) - - Downmix 5.1 audio:: - - AudioMix(clips=clip, matrix=[1, 0, 0.7071, 0, 0.7071, 0, 0, 1, 0.7071, 0, 0, 0.7071], channels_out=[vs.FRONT_LEFT, vs.FRONT_RIGHT]) - - Copy stereo audio to 5.1 and zero the other channels:: - - AudioMix(clips=c, matrix=[1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], channels_out=[vs.FRONT_LEFT, vs.FRONT_RIGHT, vs.FRONT_CENTER, vs.LOW_FREQUENCY, vs.BACK_LEFT, vs.BACK_RIGHT]) diff --git a/Programs/doc/_sources/functions/audio/audioreverse.rst.txt b/Programs/doc/_sources/functions/audio/audioreverse.rst.txt deleted file mode 100644 index 48a49f5..0000000 --- a/Programs/doc/_sources/functions/audio/audioreverse.rst.txt +++ /dev/null @@ -1,10 +0,0 @@ -AudioReverse -============ - -.. function:: AudioReverse(anode clip) - :module: std - - Returns a clip with the frame or sample order reversed. For example, a clip with 3 - frames would have the frame order 2, 1, 0. - - In Python, std.AudioReverse can also be invoked by :ref:`slicing a clip `. diff --git a/Programs/doc/_sources/functions/audio/audiosplice.rst.txt b/Programs/doc/_sources/functions/audio/audiosplice.rst.txt deleted file mode 100644 index 507a452..0000000 --- a/Programs/doc/_sources/functions/audio/audiosplice.rst.txt +++ /dev/null @@ -1,12 +0,0 @@ -AudioSplice -=========== - -.. function:: AudioSplice(anode[] clips) - :module: std - - Returns a clip with all *clips* appended in the given order. - - Splicing clips with different formats or dimensions is - considered an error unless *mismatch* is true. - - In Python, std.AudioSplice can also be invoked :ref:`using the addition operator `. diff --git a/Programs/doc/_sources/functions/audio/audiotrim.rst.txt b/Programs/doc/_sources/functions/audio/audiotrim.rst.txt deleted file mode 100644 index 08b867f..0000000 --- a/Programs/doc/_sources/functions/audio/audiotrim.rst.txt +++ /dev/null @@ -1,10 +0,0 @@ -AudioTrim -========= - -.. function:: AudioTrim(anode clip[, int first=0, int last, int length]) - :module: std - - AudioTrim performs exactly the same operation on audio clips but the unit is - obviously samples instead of frames. - - In Python, std.AudioTrim can also be invoked by :ref:`slicing a clip `. diff --git a/Programs/doc/_sources/functions/audio/blankaudio.rst.txt b/Programs/doc/_sources/functions/audio/blankaudio.rst.txt deleted file mode 100644 index 836b079..0000000 --- a/Programs/doc/_sources/functions/audio/blankaudio.rst.txt +++ /dev/null @@ -1,20 +0,0 @@ -BlankAudio -========== - -.. function:: BlankAudio([anode clip, int[] channels=[FRONT_LEFT, FRONT_RIGHT], int bits=16, int sampletype=INTEGER, int samplerate=44100, int length=(10*samplerate), bint keep=0]) - :module: std - - Generates a new empty clip. This can be useful to have when editing audio - or for testing. The default is a 10 second long 44.1kHz 16 bit stereo clip. - Instead of specifying every property individually, BlankAudio can also copy - the properties from *clip*. If both an argument such as *sampletype*, and *clip* - are set, then *sampletype* will take precedence. - - The *channels* argument is a list of channel constants. Specifying the same channel twice - is not allowed. - - The possible *sampletype* values are currently INTEGER (0) and FLOAT (1). - - If *keep* is set, a reference to the same frame is returned on every request. - Otherwise a new frame is generated every time. There should usually be no - reason to change this setting. diff --git a/Programs/doc/_sources/functions/audio/setaudiocache.rst.txt b/Programs/doc/_sources/functions/audio/setaudiocache.rst.txt deleted file mode 100644 index 475d897..0000000 --- a/Programs/doc/_sources/functions/audio/setaudiocache.rst.txt +++ /dev/null @@ -1,7 +0,0 @@ -SetAudioCache -============= - -.. function:: SetAudioCache(anode clip[, int mode, int fixedsize, int maxsize, int historysize]) - :module: std - - see SetVideoCache diff --git a/Programs/doc/_sources/functions/audio/shufflechannels.rst.txt b/Programs/doc/_sources/functions/audio/shufflechannels.rst.txt deleted file mode 100644 index 75edd1e..0000000 --- a/Programs/doc/_sources/functions/audio/shufflechannels.rst.txt +++ /dev/null @@ -1,48 +0,0 @@ -ShuffleChannels -=============== - -.. function:: ShuffleChannels(anode[] clips, int[] channels_in, int[] channels_out) - :module: std - - ShuffleChannels can extract and combine channels from different clips in the most - general way possible. - - Most of the returned clip's properties are implicitly determined from the - first clip given to *clips*. - - The *clips* parameter takes one or more clips with the same format. If the clips - are different lengths they'll be zero extended to that of the longest. - - The argument *channels_in* controls which of the input clips' channels to use and - takes a channel constants as its argument. Specifying a non-existent channel - is an error. If more *channels_in* than *clips* values are specified then the last - clip in the *clips* list is reused as a source. In addition to the channel constant - it's also possible to specify the nth channel by using negative numbers. - - The output channel mapping is determined by *channels_out* and corresponds to the - input channel order. The number of *channels_out* entries must be the same as the - number of *channels_in* entries. Specifying the same output channel twice is an error. - - - - Below are some examples of useful operations. - - Extract the left channel (assuming it exists):: - - ShuffleChannels(clips=clip, channels_in=vs.FRONT_LEFT, channels_out=vs.FRONT_LEFT) - - Swap left and right audio channels in a stereo clip:: - - ShuffleChannels(clips=clip, channels_in=[vs.FRONT_RIGHT, vs.FRONT_LEFT], channels_out=[vs.FRONT_LEFT, vs.FRONT_RIGHT]) - - Swap left and right audio channels in a stereo clip (alternate ordering of arguments):: - - ShuffleChannels(clips=clip, channels_in=[vs.FRONT_LEFT, vs.FRONT_RIGHT], channels_out=[vs.FRONT_RIGHT, vs.FRONT_LEFT]) - - Swap left and right audio channels in a stereo clip (alternate indexing):: - - ShuffleChannels(clips=clip, channels_in=[-2, -1], channels_out=[vs.FRONT_LEFT, vs.FRONT_RIGHT]) - - Merge 2 mono audio clips into a single stereo clip:: - - ShuffleChannels(clips=[clipa, clipb], channels_in=[vs.FRONT_LEFT, vs.FRONT_LEFT], channels_out=[vs.FRONT_LEFT, vs.FRONT_RIGHT]) diff --git a/Programs/doc/_sources/functions/audio/splitchannels.rst.txt b/Programs/doc/_sources/functions/audio/splitchannels.rst.txt deleted file mode 100644 index 02b6513..0000000 --- a/Programs/doc/_sources/functions/audio/splitchannels.rst.txt +++ /dev/null @@ -1,8 +0,0 @@ -SplitChannels -============= - -.. function:: SplitChannels(anode clip) - :module: std - - SplitChannels returns each audio channel of the input as - a separate clip. diff --git a/Programs/doc/_sources/functions/general/loadallplugins.rst.txt b/Programs/doc/_sources/functions/general/loadallplugins.rst.txt deleted file mode 100644 index 6cdd9d3..0000000 --- a/Programs/doc/_sources/functions/general/loadallplugins.rst.txt +++ /dev/null @@ -1,19 +0,0 @@ -LoadAllPlugins -============== - -.. function:: LoadAllPlugins(string path) - :module: std - - Loads all native VapourSynth plugins found in the - specified *path*. Plugins that fail to load are - silently skipped. - - Beware of Python's escape character, this will fail:: - - LoadPlugin(path='c:\plugins') - - Correct ways:: - - LoadPlugin(path='c:/plugins') - LoadPlugin(path=r'c:\plugins') - LoadPlugin(path='c:\\plugins\\') diff --git a/Programs/doc/_sources/functions/general/loadplugin.rst.txt b/Programs/doc/_sources/functions/general/loadplugin.rst.txt deleted file mode 100644 index aee85df..0000000 --- a/Programs/doc/_sources/functions/general/loadplugin.rst.txt +++ /dev/null @@ -1,26 +0,0 @@ -LoadPlugin -========== - -.. function:: LoadPlugin(string path, bint altsearchpath = False) - :module: std - - Load a native VapourSynth plugin. If successful, the loaded plugin's - functions will end up in their own namespace. - - Returns an error if a plugin with the same identifier or namespace already - has been loaded. This is to prevent naming collisions or multiple versions - of the same plugin being loaded at once. - - Plugins are normally loaded with a very specific search order for - dependencies. Setting *altsearchpath* modifies this behavior to also - include dlls in the PATH. - - Beware of Python's escape character, this will fail:: - - LoadPlugin(path='c:\plugins\filter.dll') - - Correct ways:: - - LoadPlugin(path='c:/plugins/filter.dll') - LoadPlugin(path=r'c:\plugins\filter.dll') - LoadPlugin(path='c:\\plugins\\filter.dll') diff --git a/Programs/doc/_sources/functions/general/loadpluginavs.rst.txt b/Programs/doc/_sources/functions/general/loadpluginavs.rst.txt deleted file mode 100644 index 578de51..0000000 --- a/Programs/doc/_sources/functions/general/loadpluginavs.rst.txt +++ /dev/null @@ -1,44 +0,0 @@ -LoadPlugin (Avisynth Compatibility) -=================================== - -.. function:: LoadPlugin(string path) - :module: avs - - Load an Avisynth 2.5 (32 bit only), 2.6 (32 and 64 bit) or Avisynth+ (32 and 64 bit) plugin. - If successful, the loaded plugin's functions will end up in the avs namespace. Note that - in the case of Avisynth+ there's no way to use the formats combined with alpha or - higher bitdepth packed RGB. Coincidentally there are no plugins that use this in a - meaningful way yet. - - The compatibility module can work with a large number of Avisynth's plugins. - However, the wrapping is not complete, so the following things will cause - problems: - - * The plugin expects YUY2 or RGB32 input. In this case provide input in - either YUV422P8 or RGB24 format pass compatpack=True as an argument - to the Avisynth function. - * The plugin tries to call env->invoke(). - These calls are ignored when it is safe to do so, but otherwise they - will most likely trigger a fatal error. - * Plugins trying to read global variables. - There are no global variables. - - If there are function name collisions functions will have a number appended - to them to make them distinct. For example if three functions are named - *func* then they will be named *func*, *func_2* and *func_3*. This means - that Avisynth functions that have multiple overloads (rare) will give - each overload a different name. - - Note that if you are really insane you can load Avisynth's VirtualDub plugin - loader and use VirtualDub plugins as well. Function overloads are very common - when dealing with VirtualDub. - - Beware of Python's escape character, this will fail:: - - LoadPlugin(path='c:\plugins\filter.dll') - - Correct ways:: - - LoadPlugin(path='c:/plugins/filter.dll') - LoadPlugin(path=r'c:\plugins\filter.dll') - LoadPlugin(path='c:\\plugins\\filter.dll') diff --git a/Programs/doc/_sources/functions/general/setmaxcpu.rst.txt b/Programs/doc/_sources/functions/general/setmaxcpu.rst.txt deleted file mode 100644 index bca78dc..0000000 --- a/Programs/doc/_sources/functions/general/setmaxcpu.rst.txt +++ /dev/null @@ -1,14 +0,0 @@ -SetMaxCPU -========= - -.. function:: SetMaxCPU(string cpu) - :module: std - - This function is only intended for testing and debugging purposes - and sets the maximum used instruction set for optimized functions. - - Possible values for x86: "avx2", "sse2", "none" - - Other platforms: "none" - - By default all supported cpu features are used. \ No newline at end of file diff --git a/Programs/doc/_sources/functions/video/addborders.rst.txt b/Programs/doc/_sources/functions/video/addborders.rst.txt deleted file mode 100644 index e68816f..0000000 --- a/Programs/doc/_sources/functions/video/addborders.rst.txt +++ /dev/null @@ -1,9 +0,0 @@ -AddBorders -========== - -.. function:: AddBorders(vnode clip[, int left=0, int right=0, int top=0, int bottom=0, float[] color=]) - :module: std - - Adds borders to frames. The arguments specify the number of pixels to add on - each side. They must obey the subsampling restrictions. - The newly added borders will be set to *color*. diff --git a/Programs/doc/_sources/functions/video/assumefps.rst.txt b/Programs/doc/_sources/functions/video/assumefps.rst.txt deleted file mode 100644 index 18b7262..0000000 --- a/Programs/doc/_sources/functions/video/assumefps.rst.txt +++ /dev/null @@ -1,16 +0,0 @@ -AssumeFPS -========= - -.. function:: AssumeFPS(vnode clip[, vnode src, int fpsnum, int fpsden=1]) - :module: std - - Returns a clip with the framerate changed. This does not in any way modify - the frames, only their metadata. - - The framerate to assign can either be read from another clip, *src*, or given - as a rational number with *fpsnum* and *fpsden*. - - It is an error to specify both *src* and *fpsnum*. - - AssumeFPS overwrites the frame properties ``_DurationNum`` and - ``_DurationDen`` with the frame duration computed from the new frame rate. diff --git a/Programs/doc/_sources/functions/video/averageframes.rst.txt b/Programs/doc/_sources/functions/video/averageframes.rst.txt deleted file mode 100644 index 1aeced8..0000000 --- a/Programs/doc/_sources/functions/video/averageframes.rst.txt +++ /dev/null @@ -1,21 +0,0 @@ -AverageFrames -============= - -.. function:: AverageFrames(vnode[] clips, float[] weights[, float scale, bint scenechange, int[] planes]) - :module: std - - AverageFrames has two main modes depending on whether one or multiple *clips* are supplied. - The filter is named AverageFrames since using ones for weights is an easy way to average - many frames together but it can also be seen as a temporal or multiple frame convolution. - - If multiple *clips* are supplied then the frames from each of the *clips* are multiplied by - the respective *weights*, summed together and divided by *scale* before being output. Note - that only integer *weights* and *scale* are allowed for integer input formats. - - If a single *clip* is supplied then an odd number of *weights* are needed and they will instead - be temporally centered on the current frame of the *clip*. The rest works as multiple *clip* mode - with the only difference being that *scenechange* can be set to avoid averaging frames over scene - changes. If this happens then all the weights beyond a scene change are instead applied to the frame - right before it. - - At most 31 *weights* can be supplied. \ No newline at end of file diff --git a/Programs/doc/_sources/functions/video/binarize_binarizemask.rst.txt b/Programs/doc/_sources/functions/video/binarize_binarizemask.rst.txt deleted file mode 100644 index 9413324..0000000 --- a/Programs/doc/_sources/functions/video/binarize_binarizemask.rst.txt +++ /dev/null @@ -1,34 +0,0 @@ -Binarize/BinarizeMask -===================== - -.. function:: Binarize(vnode clip[, float[] threshold, float[] v0, float[] v1, int[] planes=[0, 1, 2]]) - BinarizeMask(vnode clip[, float[] threshold, float[] v0, float[] v1, int[] planes=[0, 1, 2]]) - :module: std - - Turns every pixel in the image into either *v0*, if it's below - *threshold*, or *v1*, otherwise. The *BinarizeMask* version is intended - for use on mask clips where all planes have the same value range and - only differs in the default values of *v0* and *v1*. - - *clip* - Clip to process. It must have integer sample type and bit depth - between 8 and 16, or float sample type and bit depth of 32. If - there are any frames with other formats, an error will be - returned. - - *threshold* - Defaults to the middle point of range allowed by the format. - Can be specified for each plane individually. - - *v0* - Value given to pixels that are below *threshold*. Can be specified - for each plane individually. Defaults to the lower bound of the format. - - *v1* - Value given to pixels that are greater than or equal to *threshold*. - Defaults to the maximum value allowed by the format. Can be specified - for each plane individually. Defaults to the upper bound of the format. - - *planes* - Specifies which planes will be processed. Any unprocessed planes - will be simply copied. diff --git a/Programs/doc/_sources/functions/video/blankclip.rst.txt b/Programs/doc/_sources/functions/video/blankclip.rst.txt deleted file mode 100644 index f9e3c64..0000000 --- a/Programs/doc/_sources/functions/video/blankclip.rst.txt +++ /dev/null @@ -1,24 +0,0 @@ -BlankClip -========= - -.. function:: BlankClip([vnode clip, int width=640, int height=480, int format=vs.RGB24, int length=(10*fpsnum)/fpsden, int fpsnum=24, int fpsden=1, float[] color=, bint keep=0, bint varsize=0, bint varformat=0]) - :module: std - - Generates a new empty clip. This can be useful to have when editing video or - for testing. The default is a 640x480 RGB24 24fps 10 second long black clip. - Instead of specifying every property individually, BlankClip can also copy - the properties from *clip*. If both an argument such as *width*, and *clip* - are set, then *width* will take precedence. - - If *keep* is set, a reference to the same frame is returned on every request. - Otherwise a new frame is generated every time. There should usually be no - reason to change this setting. - - If *varsize* is set, a clip with variable size will be returned. The frames - themselves will still have the size given by the width and height arguments. - - If *varformat* is set, a clip with variable format will be returned. - The frames themselves will have the format given by the format argument. - - It is never an error to use BlankClip. - diff --git a/Programs/doc/_sources/functions/video/boxblur.rst.txt b/Programs/doc/_sources/functions/video/boxblur.rst.txt deleted file mode 100644 index d00a913..0000000 --- a/Programs/doc/_sources/functions/video/boxblur.rst.txt +++ /dev/null @@ -1,8 +0,0 @@ -BoxBlur -======= - -.. function:: BoxBlur(vnode clip[, int[] planes, int hradius = 1, int hpasses = 1, int vradius = 1, int vpasses = 1]) - :module: std - - Performs a box blur which is fast even for large radius values. Using multiple *passes* can be used to fairly cheaply - approximate a gaussian blur. A *radius* of 0 means no processing is performed. diff --git a/Programs/doc/_sources/functions/video/cliptoprop.rst.txt b/Programs/doc/_sources/functions/video/cliptoprop.rst.txt deleted file mode 100644 index 5549ad1..0000000 --- a/Programs/doc/_sources/functions/video/cliptoprop.rst.txt +++ /dev/null @@ -1,15 +0,0 @@ -ClipToProp -========== - -.. function:: ClipToProp(vnode clip, vnode mclip[, string prop='_Alpha']) - :module: std - - Stores each frame of *mclip* as a frame property named *prop* in *clip*. This - is primarily intended to attach mask/alpha clips to another clip so that - editing operations will apply to both. Unlike most other filters the output - length is derived from the second argument named *mclip*. - - If the attached *mclip* does not represent the alpha channel, you should set - *prop* to something else. - - It is the inverse of PropToClip(). diff --git a/Programs/doc/_sources/functions/video/convolution.rst.txt b/Programs/doc/_sources/functions/video/convolution.rst.txt deleted file mode 100644 index ca8925c..0000000 --- a/Programs/doc/_sources/functions/video/convolution.rst.txt +++ /dev/null @@ -1,85 +0,0 @@ -Convolution -=========== - -.. function:: Convolution(vnode clip, float[] matrix[, float bias=0.0, float divisor=0.0, int[] planes=[0, 1, 2], bint saturate=True, string mode="s"]) - :module: std - - Performs a spatial convolution. - - Here is how a 3x3 convolution is done. Each pixel in the 3x3 - neighbourhood is multiplied by the corresponding coefficient in - *matrix*. The results of the nine multiplications are added together, - then this sum is divided by *divisor*. Next, *bias* is added, and the - result is rounded to the nearest larger integer. If this integer - result is negative and the *saturate* parameter is False, it is - multiplied by -1. Finally, the result is clamped to the format's range - of valid values. - - *clip* - Clip to process. It must have integer sample type and bit depth - between 8 and 16, or float sample type and bit depth of 32. If - there are any frames with other formats, an error will be - returned. - - *matrix* - Coefficients for the convolution. - - When *mode* is "s", this must be an array of 9 or 25 numbers, for - a 3x3 or 5x5 convolution, respectively. - - When *mode* is not "s", this must be an array of 3 to 25 numbers, - with an odd number of elements. - - The values of the coefficients must be between -1023 and 1023 - (inclusive). The coefficients are rounded to integers when - the input is an integer format. - - This is how the elements of *matrix* correspond to the pixels in - a 3x3 neighbourhood:: - - 1 2 3 - 4 5 6 - 7 8 9 - - It's the same principle for the other types of convolutions. The - middle element of *matrix* always corresponds to the center pixel. - - *bias* - Value to add to the final result of the convolution (before clamping - the result to the format's range of valid values). - - *divisor* - Divide the output of the convolution by this value (before adding - *bias*). - - If this parameter is 0.0 (the default), the output of the convolution - will be divided by the sum of the elements of *matrix*, or by 1.0, - if the sum is 0. - - *planes* - Specifies which planes will be processed. Any unprocessed planes - will be simply copied. - - *saturate* - The final result is clamped to the format's range of valid values - (0 .. (2**bitdepth)-1). Therefore, if this parameter is True, - negative values become 0. If this parameter is False, it's instead - the absolute value that is clamped and returned. - - *mode* - Selects the type of convolution. Possible values are "s", for square, - "h" for horizontal, "v" for vertical, and "hv" or "vh" for both - horizontal and vertical. - - How to apply a simple blur equivalent to Avisynth's Blur(1): - - .. code-block:: python - - Convolution(matrix=[1, 2, 1, 2, 4, 2, 1, 2, 1]) - - How to apply a stronger blur equivalent to Avisynth's Blur(1.58): - - .. code-block:: python - - Convolution(matrix=[1, 1, 1, 1, 1, 1, 1, 1, 1]) - diff --git a/Programs/doc/_sources/functions/video/copyframeprops.rst.txt b/Programs/doc/_sources/functions/video/copyframeprops.rst.txt deleted file mode 100644 index 62ac1cf..0000000 --- a/Programs/doc/_sources/functions/video/copyframeprops.rst.txt +++ /dev/null @@ -1,10 +0,0 @@ -CopyFrameProps -============== - -.. function:: CopyFrameProps(vnode clip, vnode prop_src) - :module: std - - Returns *clip* but with all the frame properties replaced with the - ones from the clip in *prop_src*. Note that if *clip* is longer - than *prop_src* then the last existing frame's properties will be - used instead. diff --git a/Programs/doc/_sources/functions/video/crop_cropabs.rst.txt b/Programs/doc/_sources/functions/video/crop_cropabs.rst.txt deleted file mode 100644 index 63d9cec..0000000 --- a/Programs/doc/_sources/functions/video/crop_cropabs.rst.txt +++ /dev/null @@ -1,20 +0,0 @@ -Crop/CropAbs -=============== - -.. function:: Crop(vnode clip[, int left=0, int right=0, int top=0, int bottom=0]) - CropAbs(vnode clip, int width, int height[, int left=0, int top=0]) - :module: std - - Crops the frames in a clip. - - Crop is the simplest to use of the two. The arguments specify how many - pixels to crop from each side. This function used to be called CropRel - which is still an alias for it. - - CropAbs, on the other hand, is special, because it can accept clips with - variable frame sizes and crop out a fixed size area, thus making it a fixed - size clip. - - Both functions return an error if the whole picture is cropped away, if the - cropped area extends beyond the input or if the subsampling restrictions - aren't met. diff --git a/Programs/doc/_sources/functions/video/deflate_inflate.rst.txt b/Programs/doc/_sources/functions/video/deflate_inflate.rst.txt deleted file mode 100644 index 187efbe..0000000 --- a/Programs/doc/_sources/functions/video/deflate_inflate.rst.txt +++ /dev/null @@ -1,44 +0,0 @@ -Deflate/Inflate -=============== - -.. function:: Deflate(vnode clip[, int[] planes=[0, 1, 2], float threshold]) - :module: std - - Replaces each pixel with the average of the eight pixels in its 3x3 - neighbourhood, but only if that average is less than the center pixel. - - *clip* - Clip to process. It must have integer sample type and bit depth - between 8 and 16, or float sample type and bit depth of 32. If - there are any frames with other formats, an error will be - returned. - - *planes* - Specifies which planes will be processed. Any unprocessed planes - will be simply copied. - - *threshold* - Allows to limit how much pixels are changed. Output pixels will not - become less than ``input - threshold``. The default is no limit. - - -.. function:: Inflate(vnode clip[, int[] planes=[0, 1, 2], int threshold=65535]) - :module: std - - Replaces each pixel with the average of the eight pixels in its 3x3 - neighbourhood, but only if that average is greater than the center - pixel. - - *clip* - Clip to process. It must have integer sample type and bit depth - between 8 and 16, or float sample type and bit depth of 32. If - there are any frames with other formats, an error will be - returned. - - *planes* - Specifies which planes will be processed. Any unprocessed planes - will be simply copied. - - *threshold* - Allows to limit how much pixels are changed. Output pixels will not - become greater than ``input + threshold``. The default is no limit. diff --git a/Programs/doc/_sources/functions/video/deleteframes.rst.txt b/Programs/doc/_sources/functions/video/deleteframes.rst.txt deleted file mode 100644 index 0bd003e..0000000 --- a/Programs/doc/_sources/functions/video/deleteframes.rst.txt +++ /dev/null @@ -1,11 +0,0 @@ -DeleteFrames -============ - -.. function:: DeleteFrames(vnode clip, int[] frames) - :module: std - - Deletes the specified frames. - - All frame numbers apply to the input clip. - - Returns an error if the same frame is deleted twice or if all frames in a clip are deleted. diff --git a/Programs/doc/_sources/functions/video/doubleweave.rst.txt b/Programs/doc/_sources/functions/video/doubleweave.rst.txt deleted file mode 100644 index 1194233..0000000 --- a/Programs/doc/_sources/functions/video/doubleweave.rst.txt +++ /dev/null @@ -1,23 +0,0 @@ -DoubleWeave -=========== - -.. function:: DoubleWeave(vnode clip[, bint tff]) - :module: std - - Weaves the fields back together from a clip with interleaved fields. - - Since VapourSynth only has a weak notion of field order internally, *tff* - may have to be set. Setting *tff* to true means top fields first and false - means bottom fields first. Note that the ``_Field`` frame property, if present - and in a valid combination, takes precedence over *tff*. - - DoubleWeave's output has the same number of frames as the input. One must - use DoubleWeave together with SelectEvery to undo the effect of - SeparateFields:: - - sep = core.std.SeparateFields(source) - ... - woven = core.std.DoubleWeave(sep) - woven = core.std.SelectEvery(woven, 2, 0) - - The ``_Field`` frame property is deleted and ``_FieldBased`` is set accordingly. diff --git a/Programs/doc/_sources/functions/video/duplicateframes.rst.txt b/Programs/doc/_sources/functions/video/duplicateframes.rst.txt deleted file mode 100644 index fc22747..0000000 --- a/Programs/doc/_sources/functions/video/duplicateframes.rst.txt +++ /dev/null @@ -1,11 +0,0 @@ -DuplicateFrames -=============== - -.. function:: DuplicateFrames(vnode clip, int[] frames) - :module: std - - Duplicates the specified frames. - - A frame may be duplicated several times. - - All frame numbers apply to the input clip. diff --git a/Programs/doc/_sources/functions/video/expr.rst.txt b/Programs/doc/_sources/functions/video/expr.rst.txt deleted file mode 100644 index 3c2136e..0000000 --- a/Programs/doc/_sources/functions/video/expr.rst.txt +++ /dev/null @@ -1,118 +0,0 @@ -Expr -==== - -.. function:: Expr(vnode[] clips, string[] expr[, int format]) - :module: std - - Expr evaluates an expression per pixel for up to 26 input *clips*. - The expression, *expr*, is written using reverse polish notation and can be - specified for each plane individually. - The expression given for the previous plane is used if the *expr* array - contains fewer expressions than the input clip has planes. - In practice this means that a single expression will be applied to all planes - by default. - - Specifying an empty string as the expression enables a fast plane copy from - the first specified clip, when possible. If it is not possible due to the - output *format* being incompatible, the plane contents will be undefined. - - Since the expression is evaluated at runtime, there are a few pitfalls. In - order to keep speed up, the input ranges are not normalized to the usual - floating point ranges. Instead they are left as is, meaning that an 8 bit - clip will have values in the 0-255 range and a 10 bit clip will have values - in the 0-1023 range. - Note that floating point clips are even more difficult, as most channels are - stored in the 0-1 range with the exception of U, V, Co and Cg planes, which - are in the -0.5-0.5 range. - If you mix clips with different input formats this must be taken into - consideration. - - When the output format uses integer samples, the result of the expression is - clamped to the [0, 2**bits_per_sample-1] range. - When the output format uses float samples, the result of the expression is - stored without any clamping. - - By default the output *format* is the same as the first input clip's format. - You can override it by setting *format*. The only restriction is that the - output *format* must have the same subsampling as the input *clips* and be - 8..16 bit integer or 32 bit float. 16 bit float is also supported on cpus - with the f16c instructions. - - Logical operators are also a bit special, since everything is done in - floating point arithmetic. - All values greater than 0 are considered true for the purpose of comparisons. - Logical operators return 0.0 for false and 1.0 for true in their operations. - - Since the expression is being evaluated at runtime, there are also the stack - manipulation operators, *swap* and *dup*. The former swaps the topmost and - second topmost values, and the latter duplicates the topmost stack value. - - These operators also have *swapN* and *dupN* forms that allow a value N - steps up in the stack to be swapped or duplicated. The top value of the stack - has index zero meaning that *dup* is equivalent to *dup0* and *swap* is - equivalent to *swap1*. This is because *swapN* always swaps with the topmost - value at index 0. - - Expressions are converted to byte-code or machine-code by an optimizing - compiler and are not guaranteed to evaluate in the order originally written. - The compiler assumes that all input values are finite (i.e neither NaN nor - INF) and that no operator will produce a non-finite value. Such expressions - are invalid. This is especially important for the transcendental operators: - - * exp - expression must not overflow (i.e. x <= 88) - * log - input must be finite and non-negative (i.e. x >= 0 && x <= 3e+38) - * pow - base must be finite and non-negative. Result must not overflow (i.e. x >= 0 && x <= 3e+38; 1e-38 <= result <= 3e+38) - - Clip load operators:: - - x-z, a-w - - The operators taking one argument are:: - - exp log sqrt sin cos abs not dup dupN - - The operators taking two arguments are:: - - + - * / max min pow > < = >= <= and or xor swap swapN - - The operators taking three arguments are:: - - ? - - For example these operations:: - - a b c ? - - d e < - - f abs - - Are equivalent to these operations in C:: - - a ? b : c - - d < e - - abs(f) - - The sin/cos operators are approximated to within 2e-6 absolute error for - inputs with magnitude up to 1e5, and there is no accuracy guarantees for - inputs whose magnitude is larger than 2e5. - - How to average the Y planes of 3 YUV clips and pass through the UV planes - unchanged (assuming same format):: - - std.Expr(clips=[clipa, clipb, clipc], expr=["x y + z + 3 /", "", ""]) - - How to average the Y planes of 3 YUV clips and pass through the UV planes - unchanged (different formats):: - - std.Expr(clips=[clipa16bit, clipb10bit, clipa8bit], - expr=["x y 64 * + z 256 * + 3 /", ""]) - - Setting the output format because the resulting values are illegal in a 10 - bit clip (note that the U and V planes will contain junk since direct copy - isn't possible):: - - std.Expr(clips=[clipa10bit, clipb16bit, clipa8bit], - expr=["x 64 * y + z 256 * + 3 /", ""], format=vs.YUV420P16) diff --git a/Programs/doc/_sources/functions/video/flipvertical_fliphorizontal.rst.txt b/Programs/doc/_sources/functions/video/flipvertical_fliphorizontal.rst.txt deleted file mode 100644 index 13fc62e..0000000 --- a/Programs/doc/_sources/functions/video/flipvertical_fliphorizontal.rst.txt +++ /dev/null @@ -1,8 +0,0 @@ -FlipVertical/FlipHorizontal -=========================== - -.. function:: FlipVertical(vnode clip) - FlipHorizontal(vnode clip) - :module: std - - Flips the *clip* in the vertical or horizontal direction. diff --git a/Programs/doc/_sources/functions/video/frameeval.rst.txt b/Programs/doc/_sources/functions/video/frameeval.rst.txt deleted file mode 100644 index 13d90c6..0000000 --- a/Programs/doc/_sources/functions/video/frameeval.rst.txt +++ /dev/null @@ -1,77 +0,0 @@ -FrameEval -========= - -.. function:: FrameEval(vnode clip, func eval[, vnode[] prop_src, vnode[] clip_src]) - :module: std - - Allows an arbitrary function to be evaluated every frame. The function gets - the frame number, *n*, as input and should return a clip the output frame can - be requested from. - - The *clip* argument is only used to get the output format from since there is - no reliable automatic way to deduce it. - - When using the argument *prop_src* the function will also have an argument, - *f*, containing the current frames. This is mainly so frame properties can be - accessed and used to make decisions. Note that *f* will only be a list if - more than one *prop_src* clip is provided. - - The *clip_src* argument only exists as a way to hint which clips are referenced in the - *eval* function which can improve caching and graph generation. Its use is encouraged - but not required. - - This function can be used to accomplish the same things as Animate, - ScriptClip and all the other conditional filters in Avisynth. Note that to - modify per frame properties you should use *ModifyFrame*. - - How to animate a BlankClip to fade from white to black. This is the simplest - use case without using the *prop_src* argument:: - - import vapoursynth as vs - import functools - - base_clip = vs.core.std.BlankClip(format=vs.YUV420P8, length=1000, color=[255, 128, 128]) - - def animator(n, clip): - if n > 255: - return clip - else: - return vs.core.std.BlankClip(format=vs.YUV420P8, length=1000, color=[n, 128, 128]) - - animated_clip = vs.core.std.FrameEval(base_clip, functools.partial(animator, clip=base_clip)) - animated_clip.set_output() - - How to perform a simple per frame auto white balance. It shows how to access - calculated frame properties and use them for conditional filtering:: - - import vapoursynth as vs - import functools - import math - - def GrayWorld1Adjust(n, f, clip, core): - small_number = 0.000000001 - red = f[0].props['PlaneStatsAverage'] - green = f[1].props['PlaneStatsAverage'] - blue = f[2].props['PlaneStatsAverage'] - max_rgb = max(red, green, blue) - red_corr = max_rgb/max(red, small_number) - green_corr = max_rgb/max(green, small_number) - blue_corr = max_rgb/max(blue, small_number) - norm = max(blue, math.sqrt(red_corr*red_corr + green_corr*green_corr + blue_corr*blue_corr) / math.sqrt(3), small_number) - r_gain = red_corr/norm - g_gain = green_corr/norm - b_gain = blue_corr/norm - return core.std.Expr(clip, expr=['x ' + repr(r_gain) + ' *', 'x ' + repr(g_gain) + ' *', 'x ' + repr(b_gain) + ' *']) - - def GrayWorld1(clip, matrix_s=None): - rgb_clip = vs.core.resize.Bilinear(clip, format=vs.RGB24) - r_avg = vs.core.std.PlaneStats(rgb_clip, plane=0) - g_avg = vs.core.std.PlaneStats(rgb_clip, plane=1) - b_avg = vs.core.std.PlaneStats(rgb_clip, plane=2) - adjusted_clip = vs.core.std.FrameEval(rgb_clip, functools.partial(GrayWorld1Adjust, clip=rgb_clip, core=vs.core), prop_src=[r_avg, g_avg, b_avg]) - return vs.core.resize.Bilinear(adjusted_clip, format=clip.format.id, matrix_s=matrix_s) - - vs.core.std.LoadPlugin(path='BestSource.dll') - main = vs.core.bs.VideoSource(source='...') - main = GrayWorld1(main) - main.set_output() diff --git a/Programs/doc/_sources/functions/video/freezeframes.rst.txt b/Programs/doc/_sources/functions/video/freezeframes.rst.txt deleted file mode 100644 index 944b08f..0000000 --- a/Programs/doc/_sources/functions/video/freezeframes.rst.txt +++ /dev/null @@ -1,18 +0,0 @@ -FreezeFrames -============ - -.. function:: FreezeFrames(vnode clip, int[] first, int[] last, int[] replacement) - :module: std - - FreezeFrames replaces all the frames in the [*first*,\ *last*] range - (inclusive) with *replacement*. - - A single call to FreezeFrames can freeze any number of ranges:: - - core.std.FreezeFrames(input, first=[0, 100, 231], last=[15, 112, 300], replacement=[8, 50, 2]) - - This replaces [0,15] with 8, [100,112] with 50, and [231,300] with 2 (the - original frame number 2, not frame number 2 after it was replaced with - number 8 by the first range). - - The frame ranges must not overlap. diff --git a/Programs/doc/_sources/functions/video/interleave.rst.txt b/Programs/doc/_sources/functions/video/interleave.rst.txt deleted file mode 100644 index 0cb1156..0000000 --- a/Programs/doc/_sources/functions/video/interleave.rst.txt +++ /dev/null @@ -1,19 +0,0 @@ -Interleave -========== - -.. function:: Interleave(vnode[] clips[, bint extend=0, bint mismatch=0, bint modify_duration=True]) - :module: std - - Returns a clip with the frames from all *clips* interleaved. For example, - Interleave(clips=[A, B]) will return A.Frame 0, B.Frame 0, A.Frame 1, - B.Frame... - - The *extend* argument controls whether or not all input clips will be treated - as if they have the same length as the longest clip. - - Interleaving clips with different formats or dimensions is considered an - error unless *mismatch* is true. - - If *modify_duration* is set then the output clip's frame rate is the first - input clip's frame rate multiplied by the number of input clips. The frame durations are divided - by the number of input clips. Otherwise the first input clip's frame rate is used. diff --git a/Programs/doc/_sources/functions/video/invert_invertmask.rst.txt b/Programs/doc/_sources/functions/video/invert_invertmask.rst.txt deleted file mode 100644 index 6342db8..0000000 --- a/Programs/doc/_sources/functions/video/invert_invertmask.rst.txt +++ /dev/null @@ -1,21 +0,0 @@ -Invert/InvertMask -================= - -.. function:: Invert(vnode clip[, int[] planes=[0, 1, 2]]) - InvertMask(vnode clip[, int[] planes=[0, 1, 2]]) - :module: std - - Inverts the pixel values. Specifically, it subtracts the value of the - input pixel from the format's maximum allowed value. The *InvertMask* - version is intended for use on mask clips where all planes have the - same maximum value regardless of the colorspace. - - *clip* - Clip to process. It must have integer sample type and bit depth - between 8 and 16, or float sample type and bit depth of 32. If - there are any frames with other formats, an error will be - returned. - - *planes* - Specifies which planes will be processed. Any unprocessed planes - will be simply copied. diff --git a/Programs/doc/_sources/functions/video/levels.rst.txt b/Programs/doc/_sources/functions/video/levels.rst.txt deleted file mode 100644 index a6a8347..0000000 --- a/Programs/doc/_sources/functions/video/levels.rst.txt +++ /dev/null @@ -1,39 +0,0 @@ -Levels -====== - -.. function:: Levels(vnode clip[, float min_in, float max_in, float gamma=1.0, float min_out, float max_out, int[] planes=[0, 1, 2]]) - :module: std - - Adjusts brightness, contrast, and gamma. - - The range [*min_in*, *max_in*] is remapped into [*min_out*, *max_out*]. Note that the - range behavior is unintuitive for YUV float formats since the assumed range will be - 0-1 even for the UV-planes. - - For example, to convert from limited range YUV to full range (8 bit):: - - clip = std.Levels(clip, min_in=16, max_in=235, min_out=0, max_out=255, planes=0) - clip = std.Levels(clip, min_in=16, max_in=240, min_out=0, max_out=255, planes=[1,2]) - - The default value of *max_in* and *max_out* is the format's minimum and maximum - allowed values respectively. Note that all input is clamped to the input range - to prevent out of range output. - - .. warning:: - The default ranges are 0-1 for floating point formats. This may have an undesired - effect on YUV formats. - - *clip* - Clip to process. It must have integer sample type and bit depth - between 8 and 16, or float sample type and bit depth of 32. If - there are any frames with other formats, an error will be - returned. - - *gamma* - Controls the degree of non-linearity of the conversion. Values - greater than 1.0 brighten the output, while values less than 1.0 - darken it. - - *planes* - Specifies which planes will be processed. Any unprocessed planes - will be simply copied. diff --git a/Programs/doc/_sources/functions/video/limiter.rst.txt b/Programs/doc/_sources/functions/video/limiter.rst.txt deleted file mode 100644 index 09854d5..0000000 --- a/Programs/doc/_sources/functions/video/limiter.rst.txt +++ /dev/null @@ -1,23 +0,0 @@ -Limiter -======= - -.. function:: Limiter(vnode clip[, float[] min, float[] max, int[] planes=[0, 1, 2]]) - :module: std - - Limits the pixel values to the range [*min*, *max*]. - - *clip* - Clip to process. It must have integer sample type and bit depth - between 8 and 16, or float sample type and bit depth of 32. If - there are any frames with other formats, an error will be - returned. - - *min* - Lower bound. Defaults to the lowest allowed value for the input. Can be specified for each plane individually. - - *max* - Upper bound. Defaults to the highest allowed value for the input. Can be specified for each plane individually. - - *planes* - Specifies which planes will be processed. Any unprocessed planes - will be simply copied. diff --git a/Programs/doc/_sources/functions/video/loop.rst.txt b/Programs/doc/_sources/functions/video/loop.rst.txt deleted file mode 100644 index 3932250..0000000 --- a/Programs/doc/_sources/functions/video/loop.rst.txt +++ /dev/null @@ -1,11 +0,0 @@ -Loop -==== - -.. function:: Loop(vnode clip[, int times=0]) - :module: std - - Returns a clip with the frames or samples repeated over and over again. If *times* is - less than 1 the clip will be repeated until the maximum clip length is - reached, otherwise it will be repeated *times* times. - - In Python, std.Loop can also be invoked :ref:`using the multiplication operator `. diff --git a/Programs/doc/_sources/functions/video/lut.rst.txt b/Programs/doc/_sources/functions/video/lut.rst.txt deleted file mode 100644 index 017bdaa..0000000 --- a/Programs/doc/_sources/functions/video/lut.rst.txt +++ /dev/null @@ -1,39 +0,0 @@ -Lut -=== - -.. function:: Lut(vnode clip[, int[] planes, int[] lut, float[] lutf, func function, int bits, bint floatout]) - :module: std - - Applies a look-up table to the given clip. The lut can be specified as either an array - of 2^bits_per_sample values or given as a *function* having an argument named - *x* to be evaluated. Either *lut*, *lutf* or *function* must be used. The lut will be - applied to the planes listed in *planes* and the other planes will simply be - passed through unchanged. By default all *planes* are processed. - - If *floatout* is set then the output will be floating point instead, and either - *lutf* needs to be set or *function* always needs to return floating point - values. - - How to limit YUV range (by passing an array): - - .. code-block:: python - - luty = [] - for x in range(2**clip.format.bits_per_sample): - luty.append(max(min(x, 235), 16)) - lutuv = [] - for x in range(2**clip.format.bits_per_sample): - lutuv.append(max(min(x, 240), 16)) - ret = Lut(clip=clip, planes=0, lut=luty) - limited_clip = Lut(clip=ret, planes=[1, 2], lut=lutuv) - - How to limit YUV range (using a function): - - .. code-block:: python - - def limity(x): - return max(min(x, 235), 16) - def limituv(x): - return max(min(x, 240), 16) - ret = Lut(clip=clip, planes=0, function=limity) - limited_clip = Lut(clip=ret, planes=[1, 2], function=limituv) diff --git a/Programs/doc/_sources/functions/video/lut2.rst.txt b/Programs/doc/_sources/functions/video/lut2.rst.txt deleted file mode 100644 index 459ba81..0000000 --- a/Programs/doc/_sources/functions/video/lut2.rst.txt +++ /dev/null @@ -1,40 +0,0 @@ -Lut2 -==== - -.. function:: Lut2(vnode clipa, vnode clipb[, int[] planes, int[] lut, float[] lutf, func function, int bits, bint floatout]) - :module: std - - Applies a look-up table that takes into account the pixel values of two clips. The - *lut* needs to contain 2^(clip1.bits_per_sample + clip2.bits_per_sample) - entries and will be applied to the planes listed in *planes*. Alternatively - a *function* taking *x* and *y* as arguments can be used to make the lut. - The other planes will be passed through unchanged. By default all *planes* - are processed. - - Lut2 also takes an optional bit depth parameter, *bits*, which defaults to - the bit depth of the first input clip, and specifies the bit depth of the - output clip. The user is responsible for understanding the effects of bit - depth conversion, specifically from higher bit depths to lower bit depths, - as no scaling or clamping is applied. - - If *floatout* is set then the output will be floating point instead, and either - *lutf* needs to be set or *function* always needs to return floating point - values. - - How to average 2 clips: - - .. code-block:: python - - lut = [] - for y in range(2 ** clipy.format.bits_per_sample): - for x in range(2 ** clipx.format.bits_per_sample): - lut.append((x + y)//2) - Lut2(clipa=clipa, clipb=clipb, lut=lut) - - How to average 2 clips with a 10-bit output: - - .. code-block:: python - - def f(x, y): - return (x*4 + y)//2 - Lut2(clipa=clipa8bit, clipb=clipb10bit, function=f, bits=10) diff --git a/Programs/doc/_sources/functions/video/makediff.rst.txt b/Programs/doc/_sources/functions/video/makediff.rst.txt deleted file mode 100644 index c8d7f84..0000000 --- a/Programs/doc/_sources/functions/video/makediff.rst.txt +++ /dev/null @@ -1,15 +0,0 @@ -MakeDiff -======== - -.. function:: MakeDiff(vnode clipa, vnode clipb[, int[] planes]) - :module: std - - Calculates the difference between *clipa* and *clipb* and clamps the result. - By default all *planes* are processed. This function is usually used together with *MergeDiff*, which can be used to add back the difference. - - Unsharp masking of luma:: - - blur_clip = core.std.Convolution(clip, matrix=[1, 2, 1, 2, 4, 2, 1, 2, 1], planes=[0]) - diff_clip = core.std.MakeDiff(clip, blur_clip, planes=[0]) - sharpened_clip = core.std.MergeDiff(clip, diff_clip, planes=[0]) - diff --git a/Programs/doc/_sources/functions/video/makefulldiff.rst.txt b/Programs/doc/_sources/functions/video/makefulldiff.rst.txt deleted file mode 100644 index c758514..0000000 --- a/Programs/doc/_sources/functions/video/makefulldiff.rst.txt +++ /dev/null @@ -1,16 +0,0 @@ -MakeFullDiff -============ - -.. function:: MakeFullDiff(vnode clipa, vnode clipb) - :module: std - - Calculates the difference between *clipa* and *clipb* and outputs a clip with a one higher bitdepth to avoid the clamping or wraparound issues - that would otherwise happen with filters like *MakeDiff* when forming a difference. - This function is usually used together with *MergeFullDiff*, which can be used to add back the difference. - - Unsharp mask:: - - blur_clip = core.std.Convolution(clip, matrix=[1, 2, 1, 2, 4, 2, 1, 2, 1]) - diff_clip = core.std.MakeFullDiff(clip, blur_clip) - sharpened_clip = core.std.MergeFullDiff(clip, diff_clip) - diff --git a/Programs/doc/_sources/functions/video/maskedmerge.rst.txt b/Programs/doc/_sources/functions/video/maskedmerge.rst.txt deleted file mode 100644 index 5518d91..0000000 --- a/Programs/doc/_sources/functions/video/maskedmerge.rst.txt +++ /dev/null @@ -1,35 +0,0 @@ -MaskedMerge -=========== - -.. function:: MaskedMerge(vnode clipa, vnode clipb, vnode mask[, int[] planes, bint first_plane=0, bint premultiplied=0]) - :module: std - - MaskedMerge merges *clipa* with *clipb* using the per pixel weights in the *mask*, - where 0 means that *clipa* is returned unchanged. - The *mask* clip is assumed to be full range for all planes and in the - 0-1 interval for float formats regardless of the colorspace. - If *mask* is a grayscale clip or if *first_plane* is true, the mask's first - plane will be used as the mask for merging all planes. The mask will be - bilinearly resized if necessary. - - If *premultiplied* is set the blending is performed as if *clipb* has been pre-multiplied - with alpha. In pre-multiplied mode it is an error to try to merge two frames with - mismatched full and limited range since it will most likely cause horrible unintended - color shifts. In the other mode it's just a very, very bad idea. - - By default all planes will be - processed, but it is also possible to specify a list of the *planes* to merge - in the output. The unprocessed planes will be copied from the first clip. - - *clipa* and *clipb* must have the same dimensions and format, and the *mask* must be the - same format as the clips or the grayscale equivalent. - - How to apply a mask to the first plane:: - - MaskedMerge(clipa=A, clipb=B, mask=Mask, planes=0) - - How to apply the first plane of a mask to the second and third plane:: - - MaskedMerge(clipa=A, clipb=B, mask=Mask, planes=[1, 2], first_plane=True) - - The frame properties are copied from *clipa*. diff --git a/Programs/doc/_sources/functions/video/median.rst.txt b/Programs/doc/_sources/functions/video/median.rst.txt deleted file mode 100644 index aa51798..0000000 --- a/Programs/doc/_sources/functions/video/median.rst.txt +++ /dev/null @@ -1,19 +0,0 @@ -Median -====== - -.. function:: Median(vnode clip[, int[] planes=[0, 1, 2]]) - :module: std - - Replaces each pixel with the median of the nine pixels in its 3x3 - neighbourhood. In other words, the nine pixels are sorted from lowest - to highest, and the middle value is picked. - - *clip* - Clip to process. It must have integer sample type and bit depth - between 8 and 16, or float sample type and bit depth of 32. If - there are any frames with other formats, an error will be - returned. - - *planes* - Specifies which planes will be processed. Any unprocessed planes - will be simply copied. diff --git a/Programs/doc/_sources/functions/video/merge.rst.txt b/Programs/doc/_sources/functions/video/merge.rst.txt deleted file mode 100644 index 876ae88..0000000 --- a/Programs/doc/_sources/functions/video/merge.rst.txt +++ /dev/null @@ -1,29 +0,0 @@ -Merge -===== - -.. function:: Merge(vnode clipa, vnode clipb[, float[] weight = 0.5]) - :module: std - - Merges *clipa* and *clipb* using the specified *weight* for each plane. The default - is to use a 0.5 *weight* for all planes. A zero *weight* means that *clipa* - is returned unchanged and 1 means that *clipb* is returned unchanged. If a - single *weight* is specified, it will be used for all planes. If two weights - are given then the second value will be used for the third plane as well. - - Values outside the 0-1 range are considered to be an error. Specifying more - weights than planes in the clips is also an error. The clips must have the - same dimensions and format. - - How to merge luma:: - - Merge(clipa=A, clipb=B, weight=[1, 0]) - - How to merge chroma:: - - Merge(clipa=A, clipb=B, weight=[0, 1]) - - The average of two clips:: - - Merge(clipa=A, clipb=B) - - The frame properties are copied from *clipa*. diff --git a/Programs/doc/_sources/functions/video/mergediff.rst.txt b/Programs/doc/_sources/functions/video/mergediff.rst.txt deleted file mode 100644 index abe12be..0000000 --- a/Programs/doc/_sources/functions/video/mergediff.rst.txt +++ /dev/null @@ -1,15 +0,0 @@ -MergeDiff -========= - -.. function:: MergeDiff(vnode clipa, vnode clipb[, int[] planes]) - :module: std - - Merges back the difference in *clipb* to *clipa* and clamps the result. - By default all *planes* are processed. This function is usually used together with *MakeDiff*, which is normally used to calculate the difference. - - Unsharp masking of luma:: - - blur_clip = core.std.Convolution(clip, matrix=[1, 2, 1, 2, 4, 2, 1, 2, 1], planes=[0]) - diff_clip = core.std.MakeDiff(clip, blur_clip, planes=[0]) - sharpened_clip = core.std.MergeDiff(clip, diff_clip, planes=[0]) - diff --git a/Programs/doc/_sources/functions/video/mergefulldiff.rst.txt b/Programs/doc/_sources/functions/video/mergefulldiff.rst.txt deleted file mode 100644 index 8590333..0000000 --- a/Programs/doc/_sources/functions/video/mergefulldiff.rst.txt +++ /dev/null @@ -1,15 +0,0 @@ -MergeFullDiff -============= - -.. function:: MergeFullDiff(vnode clipa, vnode clipb) - :module: std - - Merges back the difference in *clipb* to *clipa*. Note that the bitdepth of *clipb* has to be one higher than that of *clip*. - This function is usually used together with *MakeFullDiff*, which is normally used to calculate the difference. - - Unsharp mask:: - - blur_clip = core.std.Convolution(clip, matrix=[1, 2, 1, 2, 4, 2, 1, 2, 1]) - diff_clip = core.std.MakeFullDiff(clip, blur_clip) - sharpened_clip = core.std.MergeFullDiff(clip, diff_clip) - diff --git a/Programs/doc/_sources/functions/video/minimum_maximum.rst.txt b/Programs/doc/_sources/functions/video/minimum_maximum.rst.txt deleted file mode 100644 index fa96496..0000000 --- a/Programs/doc/_sources/functions/video/minimum_maximum.rst.txt +++ /dev/null @@ -1,69 +0,0 @@ -Minimum/Maximum -=============== - -.. function:: Minimum(vnode clip[, int[] planes=[0, 1, 2], float threshold, bint[] coordinates=[1, 1, 1, 1, 1, 1, 1, 1]]) - :module: std - - Replaces each pixel with the smallest value in its 3x3 neighbourhood. - This operation is also known as erosion. - - *clip* - Clip to process. It must have integer sample type and bit depth - between 8 and 16, or float sample type and bit depth of 32. If - there are any frames with other formats, an error will be - returned. - - *planes* - Specifies which planes will be processed. Any unprocessed planes - will be simply copied. - - *threshold* - Allows to limit how much pixels are changed. Output pixels will not - become less than ``input - threshold``. The default is no limit. - - *coordinates* - Specifies which pixels from the 3x3 neighbourhood are considered. - If an element of this array is 0, the corresponding pixel is not - considered when finding the minimum value. This must contain exactly - 8 numbers. - - Here is how each number corresponds to a pixel in the 3x3 - neighbourhood:: - - 1 2 3 - 4 5 - 6 7 8 - - -.. function:: Maximum(vnode clip[, int[] planes=[0, 1, 2], float threshold, bint[] coordinates=[1, 1, 1, 1, 1, 1, 1, 1]]) - :module: std - - Replaces each pixel with the largest value in its 3x3 neighbourhood. - This operation is also known as dilation. - - *clip* - Clip to process. It must have integer sample type and bit depth - between 8 and 16, or float sample type and bit depth of 32. If - there are any frames with other formats, an error will be - returned. - - *planes* - Specifies which planes will be processed. Any unprocessed planes - will be simply copied. - - *threshold* - Allows to limit how much pixels are changed. Output pixels will not - become less than ``input - threshold``. The default is no limit. - - *coordinates* - Specifies which pixels from the 3x3 neighbourhood are considered. - If an element of this array is 0, the corresponding pixel is not - considered when finding the maximum value. This must contain exactly - 8 numbers. - - Here is how each number corresponds to a pixel in the 3x3 - neighbourhood:: - - 1 2 3 - 4 5 - 6 7 8 diff --git a/Programs/doc/_sources/functions/video/modifyframe.rst.txt b/Programs/doc/_sources/functions/video/modifyframe.rst.txt deleted file mode 100644 index e2a0040..0000000 --- a/Programs/doc/_sources/functions/video/modifyframe.rst.txt +++ /dev/null @@ -1,49 +0,0 @@ -ModifyFrame -=========== - -.. function:: ModifyFrame(vnode clip, clip[] clips, func selector) - :module: std - - The *selector* function is called for every single frame and can modify the - properties of one of the frames gotten from *clips*. The additional *clips*' - properties should only be read and not modified because only one modified - frame can be returned. - - You must first copy the input frame to make it modifiable. Any frame may be - returned as long as it has the same format as the *clip*. - Failure to do so will produce an error. If for conditional reasons you do not - need to modify the current frame's properties, you can simply pass it through. - The selector function is passed *n*, the current frame number, and *f*, which - is a frame or a list of frames if there is more than one clip specified. - - If you do not need to modify frame properties but only read them, you should - probably be using *FrameEval* instead. - - How to set the property FrameNumber to the current frame number:: - - def set_frame_number(n, f): - fout = f.copy() - fout.props['FrameNumber'] = n - return fout - ... - ModifyFrame(clip=clip, clips=clip, selector=set_frame_number) - - How to remove a property:: - - def remove_property(n, f): - fout = f.copy() - del fout.props['FrameNumber'] - return fout - ... - ModifyFrame(clip=clip, clips=clip, selector=remove_property) - - An example of how to copy certain properties from one clip to another - (clip1 and clip2 have the same format):: - - def transfer_property(n, f): - fout = f[1].copy() - fout.props['FrameNumber'] = f[0].props['FrameNumber'] - fout.props['_Combed'] = f[0].props['_Combed'] - return fout - ... - ModifyFrame(clip=clip1, clips=[clip1, clip2], selector=transfer_property) diff --git a/Programs/doc/_sources/functions/video/pemverifier.rst.txt b/Programs/doc/_sources/functions/video/pemverifier.rst.txt deleted file mode 100644 index f71a369..0000000 --- a/Programs/doc/_sources/functions/video/pemverifier.rst.txt +++ /dev/null @@ -1,14 +0,0 @@ -PEMVerifier -=========== - -.. function:: PEMVerifier(vnode clip[, float[] upper, float[] lower]) - :module: std - - The *PEMVerifier* is used to check for out-of-bounds pixel values during filter - development. It is a public function so badly coded filters won't go - unnoticed. - - If no values are set, then *upper* and *lower* default to the max and min values - allowed in the current format. If an out of bounds value is - encountered a frame error is set and the coordinates of the first bad pixel - are included in the error message. diff --git a/Programs/doc/_sources/functions/video/planestats.rst.txt b/Programs/doc/_sources/functions/video/planestats.rst.txt deleted file mode 100644 index ccdf247..0000000 --- a/Programs/doc/_sources/functions/video/planestats.rst.txt +++ /dev/null @@ -1,15 +0,0 @@ -PlaneStats -========== - -.. function:: PlaneStats(vnode clipa[, vnode clipb, int plane=0, string prop='PlaneStats']) - :module: std - - This function calculates the min, max and average normalized value of all - the pixels in the specified *plane* and stores the values in the frame properties - named *prop*\ Min, *prop*\ Max and *prop*\ Average. - - If *clipb* is supplied, the absolute normalized difference between the two clips - will be stored in *prop*\ Diff as well. - - The normalization means that the average and the diff will always be floats - between 0 and 1, no matter what the input format is. diff --git a/Programs/doc/_sources/functions/video/premultiply.rst.txt b/Programs/doc/_sources/functions/video/premultiply.rst.txt deleted file mode 100644 index bcbe1ab..0000000 --- a/Programs/doc/_sources/functions/video/premultiply.rst.txt +++ /dev/null @@ -1,14 +0,0 @@ -PreMultiply -=========== - -.. function:: PreMultiply(vnode clip, vnode alpha) - :module: std - - PreMultiply simply multiplies *clip* and *alpha* in order to make it more suitable for - later operations. This will yield much better results when resizing and a clip with an - alpha channel and :doc:`MaskedMerge ` can use it as input. The *alpha* clip - must be the grayscale format equivalent of *clip*. - - Note that limited range pre-multiplied contents excludes the offset. For example with - 8 bit input 60 luma and 128 alpha would be calculated as ((60 - 16) * 128)/255 + 16 - and not (60 * 128)/255. \ No newline at end of file diff --git a/Programs/doc/_sources/functions/video/prewitt_sobel.rst.txt b/Programs/doc/_sources/functions/video/prewitt_sobel.rst.txt deleted file mode 100644 index 0a25513..0000000 --- a/Programs/doc/_sources/functions/video/prewitt_sobel.rst.txt +++ /dev/null @@ -1,26 +0,0 @@ -Prewitt/Sobel -=================== - -.. function:: Prewitt(vnode clip[, int[] planes=[0, 1, 2], float scale=1]) - :module: std - - Creates an edge mask using the Prewitt operator. - -.. function:: Sobel(vnode clip[, int[] planes=[0, 1, 2], float scale=1]) - :module: std - - Creates an edge mask using the Sobel operator. - - *clip* - Clip to process. It must have integer sample type and bit depth - between 8 and 16, or float sample type and bit depth of 32. If - there are any frames with other formats, an error will be - returned. - - *planes* - Specifies which planes will be processed. Any unprocessed planes - will be simply copied. - - *scale* - Multiply all pixels by scale before outputting. This can be used to - increase or decrease the intensity of edges in the output. diff --git a/Programs/doc/_sources/functions/video/proptoclip.rst.txt b/Programs/doc/_sources/functions/video/proptoclip.rst.txt deleted file mode 100644 index 701e8d1..0000000 --- a/Programs/doc/_sources/functions/video/proptoclip.rst.txt +++ /dev/null @@ -1,12 +0,0 @@ -PropToClip -========== - -.. function:: PropToClip(vnode clip[, string prop='_Alpha']) - :module: std - - Extracts a clip from the frames attached to the frame property *prop* in - *clip*. - This function is mainly used to extract a mask/alpha clip that was stored in - another one. - - It is the inverse of ClipToProp(). diff --git a/Programs/doc/_sources/functions/video/removeframeprops.rst.txt b/Programs/doc/_sources/functions/video/removeframeprops.rst.txt deleted file mode 100644 index c315aed..0000000 --- a/Programs/doc/_sources/functions/video/removeframeprops.rst.txt +++ /dev/null @@ -1,9 +0,0 @@ -RemoveFrameProps -================ - -.. function:: RemoveFrameProps(vnode clip[, string props[]]) - :module: std - - Returns *clip* but with all the frame properties named in - *props* removed. If *props* is unset them all frame properties - are removed. diff --git a/Programs/doc/_sources/functions/video/resize.rst.txt b/Programs/doc/_sources/functions/video/resize.rst.txt deleted file mode 100644 index 8e5e413..0000000 --- a/Programs/doc/_sources/functions/video/resize.rst.txt +++ /dev/null @@ -1,286 +0,0 @@ -Resize -====== - -.. function:: Bilinear(vnode clip[, int width, int height, int format, enum matrix, enum transfer, enum primaries, enum range, enum chromaloc, enum matrix_in, enum transfer_in, enum primaries_in, enum range_in, enum chromaloc_in, float filter_param_a, float filter_param_b, string resample_filter_uv, float filter_param_a_uv, float filter_param_b_uv, string dither_type="none", string cpu_type, float src_left, float src_top, float src_width, float src_height, float nominal_luminance]) - Bicubic(vnode clip[, ...]) - Point(vnode clip[, ...]) - Lanczos(vnode clip[, ...]) - Spline16(vnode clip[, ...]) - Spline36(vnode clip[, ...]) - Spline64(vnode clip[, ...]) - Bob(vnode clip, string filter="bicubic", bint tff[, ...]) - :module: resize - - In VapourSynth the resizers have several functions. In addition to scaling, - they also do colorspace conversions and conversions to and from the compat - formats. Resize converts a clip of known or unknown format to another clip - of known or unknown format, changing only the parameters specified by the - user. The resize filters can handle varying size and format input clips - and turn them into constant format clips. - - If you do not know which resizer to choose, then try Bicubic. It usually - makes a good neutral default. - - *Bob* can be used as a rudimentary deinterlacer. - - Arguments denoted as type *enum* may be specified by numerical index (see - ITU-T H.265 Annex E.3) or by name. Enums specified by name have their - argument name suffixed with "_s". For example, a destination matrix of - BT 709 can be specified either with ``matrix=1`` or with ``matrix_s="709"``. - - Note that *matrix* is not an optional argument when converting to YUV. - Also note that if no matrix is specified in an input YUV frame's properties - then *matrix_in* also needs to be set. - - The function will return an error if the subsampling restrictions aren't - followed. - - If you get an error like:: - - Resize error 3074: no path between colorspaces (2/2/2 => 1/1/1). - May need to specify additional colorspace parameters. - - It usually means the matrix/transfer/primaries are unknown and you have to - specify the input colorspace parameters yourself. Note: 2 means "unspecified" - according to the ITU-T recommendation. - - Resizing is performed per-field for interlaced images, as indicated by the - *_FieldBased* frame property. Source filters may sometimes mark progressive - video as interlaced, which can result in sub-optimal resampling quality - unless *_FieldBased* is cleared. - - *clip*: - - Accepts all kinds of input. - - *width*, *height*: - - Output image dimensions. - - *filter*: - - Scaling method for deinterlacing. See *resample_filter_uv* for accepted values. - - *tff*: - - Field order for deinterlacing. Used when the *_FieldBased* property is not set. - - *format*: - - Output format id. - - *matrix*, *transfer*, *primaries*: - - Output colorspace specification. If not provided, the corresponding attributes from - the input clip will be selected, except for YCoCg and RGB color families, where the - corresponding matrix is set by default. - - *range*: - - Output pixel range. For integer formats, this allows selection of the legal code - values. Even when set, out of range values (BTB/WTW) may be generated. If the input - format is of a different color family, the default range is studio/limited for YUV - and full-range for RGB. - - *chromaloc*: - - Output chroma location. For subsampled formats, specifies the chroma location. If - the input format is 4:4:4 or RGB and the output is subsampled, the default location - is left-aligned, as per MPEG. Possible chroma locations (ITU-T H.265 Figure E.1): - *left*, *center*, *top_left*, *top*, *bottom_left*, *bottom* - - *matrix_in*, *transfer_in*, *primaries_in*, *range_in*, *chromaloc_in*: - - Input colorspace/format specification. If the corresponding frame property is set - to a value other than unspecified, the frame property is used instead of this parameter. - Default values are set for certain color families. See the equivalent output arguments - for more information. - - *filter_param_a*, *filter_param_b*: - - Parameters for the scaler used for RGB and Y-channel. For the bicubic filter, - filter_param_a/b represent the "b" and "c" parameters. For the lanczos filter, - filter_param_a represents the number of taps. - - *resample_filter_uv*: - - Scaling method for UV channels. It defaults to the same as for the Y-channel. The - following values can be used with *resample_filter_uv*: *point*, *bilinear*, *bicubic*, - *spline16*, *spline36*, *lanczos*. - - *filter_param_a_uv*, *filter_param_b_uv*: - - Parameters for the scaler used for UV channels. - - *dither_type*: - - Dithering method. Dithering is used only for conversions resulting in an integer - format. The following dithering methods are available: *none*, *ordered*, *random*, - *error_diffusion*. - - *cpu_type*: - - Only used for testing. - - *src_left*, *src_top*, *src_width*, *src_height*: - - Used to select the source region of the input to use. Can also be used to shift the image. - Defaults to the whole image. - - *nominal_luminance*: - - Determines the physical brightness of the value 1.0. The unit is in cd/m^2. - - To convert to YV12:: - - Bicubic(clip=clip, format=vs.YUV420P8, matrix_s="709") - - To resize and convert YUV with color information frame properties to planar RGB:: - - Bicubic(clip=clip, width=1920, height=1080, format=vs.RGB24) - - To resize and convert YUV without color information frame properties to planar RGB:: - - Bicubic(clip=clip, width=1920, height=1080, format=vs.RGB24, matrix_in_s="709") - - The following tables list values of selected colorspace enumerations and - their abbreviated names. (Numerical value in parentheses.) For all possible values, - see ITU-T H.265. - - Matrix coefficients (ITU-T H.265 Table E.5):: - - rgb (0) Identity - The identity matrix. - Typically used for GBR (often referred to as RGB); - however, may also be used for YZX (often referred to as - XYZ); - 709 (1) KR = 0.2126; KB = 0.0722 - ITU-R Rec. BT.709-5 - unspec (2) Unspecified - Image characteristics are unknown or are determined by the - application. - fcc (4) - 470bg (5) KR = 0.299; KB = 0.114 - ITU-R Rec. BT.470-6 System B, G (historical) - (functionally the same as the value 6 (170m)) - 170m (6) KR = 0.299; KB = 0.114 - SMPTE 170M (2004) - (functionally the same as the value 5 (470bg)) - 240m (7) SMPTE 240M - ycgco (8) YCgCo - 2020ncl (9) KR = 0.2627; KB = 0.0593 - Rec. ITU-R BT.2020 non-constant luminance system - 2020cl (10) KR = 0.2627; KB = 0.0593 - Rec. ITU-R BT.2020 constant luminance system - chromancl (12) Chromaticity derived non-constant luminance system - chromacl (13) Chromaticity derived constant luminance system - ictcp (14) ICtCp - - Transfer characteristics (ITU-T H.265 Table E.4):: - - 709 (1) V = a * Lc0.45 - ( a - 1 ) for 1 >= Lc >= b - V = 4.500 * Lc for b > Lc >= 0 - Rec. ITU-R BT.709-5 - (functionally the same as the values 6 (601), - 14 (2020_10) and 15 (2020_12)) - unspec (2) Unspecified - Image characteristics are unknown or are determined by the - application. - 470m (4) ITU-R Rec. BT.470-6 System M - 470bg (5) ITU-R Rec. BT.470-6 System B, G (historical) - 601 (6) V = a * Lc0.45 - ( a - 1 ) for 1 >= Lc >= b - V = 4.500 * Lc for b > Lc >= 0 - Rec. ITU-R BT.601-6 525 or 625 - (functionally the same as the values 1 (709), - 14 (2020_10) and 15 (2020_12)) - 240m (7) SMPTE 240M - linear (8) V = Lc for all values of Lc - Linear transfer characteristics - log100 (9) Log 1:100 contrast - log316 (10) Log 1:316 contrast - xvycc (11) IEC 61966-2-4 - srgb (13) IEC 61966-2-1 - 2020_10 (14) V = a * Lc0.45 - ( a - 1 ) for 1 >= Lc >= b - V = 4.500 * Lc for b > Lc >= 0 - Rec. ITU-R BT.2020 - (functionally the same as the values 1 (709), - 6 (601) and 15 (2020_12)) - 2020_12 (15) V = a * Lc0.45 - ( a - 1 ) for 1 >= Lc >= b - V = 4.500 * Lc for b > Lc >= 0 - Rec. ITU-R BT.2020 - (functionally the same as the values 1 (709), - 6 (601) and 14 (2020_10)) - st2084 (16) SMPTE ST 2084 - std-b67 (18) ARIB std-b67 - - Color primaries (ITU-T H.265 Table E.3):: - - 709 (1) primary x y - green 0.300 0.600 - blue 0.150 0.060 - red 0.640 0.330 - white D65 0.3127 0.3290 - Rec. ITU-R BT.709-5 - unspec (2) Unspecified - Image characteristics are unknown or are determined by the - application. - 470m (4) ITU-R Rec. BT.470-6 System M - 470bg (5) ITU-R Rec. BT.470-6 System B, G (historical) - 170m (6) primary x y - green 0.310 0.595 - blue 0.155 0.070 - red 0.630 0.340 - white D65 0.3127 0.3290 - SMPTE 170M (2004) - (functionally the same as the value 7 (240m)) - 240m (7) primary x y - green 0.310 0.595 - blue 0.155 0.070 - red 0.630 0.340 - white D65 0.3127 0.3290 - SMPTE 240M (1999) - (functionally the same as the value 6 (170m)) - film (8) - 2020 (9) primary x y - green 0.170 0.797 - blue 0.131 0.046 - red 0.708 0.292 - white D65 0.3127 0.3290 - Rec. ITU-R BT.2020 - st428 (10) Commonly known as xyz - xyz (10) Alias for st428 - st431-2 (11) DCI-P3 with traditional white point - st432-1 (12) DCI-P3 - jedec-p22 (22) E.B.U. STANDARD FOR CHROMATICITY TOLERANCES FOR STUDIO MONITORS (3213-E) - Also known as JEDEC P22 - - Pixel range (ITU-T H.265 Eq E-4 to E-15):: - - limited (0) Studio (TV) legal range, 16-235 in 8 bits. - Y = Clip1Y( Round( ( 1 << ( BitDepthY - 8 ) ) * - ( 219 * E'Y + 16 ) ) ) - Cb = Clip1C( Round( ( 1 << ( BitDepthC - 8 ) ) * - ( 224 * E'PB + 128 ) ) ) - Cr = Clip1C( Round( ( 1 << ( BitDepthC - 8 ) ) * - ( 224 * E'PR + 128 ) ) ) - - R = Clip1Y( ( 1 << ( BitDepthY - 8 ) ) * - ( 219 * E'R + 16 ) ) - G = Clip1Y( ( 1 << ( BitDepthY - 8 ) ) * - ( 219 * E'G + 16 ) ) - B = Clip1Y( ( 1 << ( BitDepthY - 8 ) ) * - ( 219 * E'B + 16 ) ) - full (1) Full (PC) dynamic range, 0-255 in 8 bits. - Y = Clip1Y( Round( ( ( 1 << BitDepthY ) - 1 ) * E'Y ) ) - Cb = Clip1C( Round( ( ( 1 << BitDepthC ) - 1 ) * E'PB + - ( 1 << ( BitDepthC - 1 ) ) ) ) - Cr = Clip1C( Round( ( ( 1 << BitDepthC ) - 1 ) * E'PR + - ( 1 << ( BitDepthC - 1 ) ) ) ) - - R = Clip1Y( ( ( 1 << BitDepthY ) - 1 ) * E'R ) - G = Clip1Y( ( ( 1 << BitDepthY ) - 1 ) * E'G ) - B = Clip1Y( ( ( 1 << BitDepthY ) - 1 ) * E'B ) - - - - diff --git a/Programs/doc/_sources/functions/video/reverse.rst.txt b/Programs/doc/_sources/functions/video/reverse.rst.txt deleted file mode 100644 index 4f8c249..0000000 --- a/Programs/doc/_sources/functions/video/reverse.rst.txt +++ /dev/null @@ -1,10 +0,0 @@ -Reverse -======= - -.. function:: Reverse(vnode clip) - :module: std - - Returns a clip with the frame or sample order reversed. For example, a clip with 3 - frames would have the frame order 2, 1, 0. - - In Python, std.Reverse can also be invoked by :ref:`slicing a clip `. diff --git a/Programs/doc/_sources/functions/video/selectevery.rst.txt b/Programs/doc/_sources/functions/video/selectevery.rst.txt deleted file mode 100644 index b520337..0000000 --- a/Programs/doc/_sources/functions/video/selectevery.rst.txt +++ /dev/null @@ -1,31 +0,0 @@ -SelectEvery -=========== - -.. function:: SelectEvery(vnode clip, int cycle, int[] offsets[, bint modify_duration=True]) - :module: std - - Returns a clip with only some of the frames in every *cycle* selected. The - *offsets* given must be between 0 and *cycle* - 1. - - Below are some examples of useful operations. - - Return even numbered frames, starting with 0:: - - SelectEvery(clip=clip, cycle=2, offsets=0) - - Return odd numbered frames, starting with 1:: - - SelectEvery(clip=clip, cycle=2, offsets=1) - - Fixed pattern 1 in 5 decimation, first frame in every cycle removed:: - - SelectEvery(clip=clip, cycle=5, offsets=[1, 2, 3, 4]) - - Duplicate every fourth frame:: - - SelectEvery(clip=clip, cycle=4, offsets=[0, 1, 2, 3, 3]) - - In Python, std.SelectEvery can also be invoked by :ref:`slicing a clip `. - - If *modify_duration* is set the clip's frame rate is multiplied by the number - of offsets and divided by *cycle*. The frame durations are adjusted in the same manner. diff --git a/Programs/doc/_sources/functions/video/separatefields.rst.txt b/Programs/doc/_sources/functions/video/separatefields.rst.txt deleted file mode 100644 index 189427b..0000000 --- a/Programs/doc/_sources/functions/video/separatefields.rst.txt +++ /dev/null @@ -1,20 +0,0 @@ -SeparateFields -============== - -.. function:: SeparateFields(vnode clip[, bint tff, bint modify_duration=True]) - :module: std - - Returns a clip with the fields separated and interleaved. - - The *tff* argument only has an effect when the field order isn't set for a frame. - Setting *tff* to true means top field first and false means bottom field - first. - - If *modify_duration* is set then the output clip's frame rate is double that of the input clip. - The frame durations will also be halved. - - The ``_FieldBased`` frame property is deleted. The ``_Field`` frame - property is added. - - If no field order is specified in ``_FieldBased`` or *tff* an error - will be returned. diff --git a/Programs/doc/_sources/functions/video/setfieldbased.rst.txt b/Programs/doc/_sources/functions/video/setfieldbased.rst.txt deleted file mode 100644 index 09834b1..0000000 --- a/Programs/doc/_sources/functions/video/setfieldbased.rst.txt +++ /dev/null @@ -1,25 +0,0 @@ -SetFieldBased -============= - -.. function:: SetFieldBased(vnode clip, int value) - :module: std - - This is a convenience function. See *SetFrameProps* if you want to - set other properties. - - SetFieldBased sets ``_FieldBased`` to *value* and deletes - the ``_Field`` frame property. The possible values are: - - 0 = Frame Based - - 1 = Bottom Field First - - 2 = Top Field First - - For example, if you have source material that's progressive but has - been encoded as interlaced you can set it to be treated as frame based - (not interlaced) to improve resizing quality:: - - clip = core.bs.VideoSource("rule6.mkv") - clip = core.std.SetFieldBased(clip, 0) - clip = clip.resize.Bilinear(clip, width=320, height=240) diff --git a/Programs/doc/_sources/functions/video/setframeprop.rst.txt b/Programs/doc/_sources/functions/video/setframeprop.rst.txt deleted file mode 100644 index 7200d60..0000000 --- a/Programs/doc/_sources/functions/video/setframeprop.rst.txt +++ /dev/null @@ -1,20 +0,0 @@ -SetFrameProp -============ - -.. function:: SetFrameProp(vnode clip, string prop[, int[] intval, float[] floatval, string[] data]) - :module: std - - Adds a frame property to every frame in *clip*. - - If there is already a property with the name *prop* in the frames, - it will be overwritten. - - The type of the property added depends on which of the *intval*, - *floatval*, or *data* parameters is used. - - The *data* parameter can only be used to add NULL-terminated strings, - not arbitrary binary data. - - For example, to set the field order to top field first:: - - clip = c.std.SetFrameProp(clip, prop="_FieldBased", intval=2) diff --git a/Programs/doc/_sources/functions/video/setframeprops.rst.txt b/Programs/doc/_sources/functions/video/setframeprops.rst.txt deleted file mode 100644 index e5e9116..0000000 --- a/Programs/doc/_sources/functions/video/setframeprops.rst.txt +++ /dev/null @@ -1,13 +0,0 @@ -SetFrameProps -============= - -.. function:: SetFrameProps(vnode clip, ...) - :module: std - - Adds the specified values as a frame property of every frame - in *clip*. If a frame property with the same key already exists - it will be replaced. - - For example, to set the field order to top field first:: - - clip = c.std.SetFrameProps(clip, _FieldBased=2) diff --git a/Programs/doc/_sources/functions/video/setvideocache.rst.txt b/Programs/doc/_sources/functions/video/setvideocache.rst.txt deleted file mode 100644 index 4edcf46..0000000 --- a/Programs/doc/_sources/functions/video/setvideocache.rst.txt +++ /dev/null @@ -1,27 +0,0 @@ -SetVideoCache -============= - -.. function:: SetVideoCache(vnode clip[, int mode, int fixedsize, int maxsize, int historysize]) - :module: std - - Every filter node has a cache associated with it that - may or may not be enabled depending on the dependencies - and request patterns. This function allows all automatic - behavior to be overridden. - - The *mode* option has 3 possible options where 0 always - disables caching, 1 always enables the cache and -1 - uses the automatically calculated settings. Note that - setting *mode* to -1 will reset the other values to - their defaults as well. - - The other options are fairly self-explanatory where - setting *fixedsize* prevents the cache from over time - altering its *maxsize* based on request history. The - final *historysize* argument controls how many previous - and no longer cached requests should be considered when - adjusting *maxsize*, generally this value should not - be touched at all. - - Note that setting *mode* will reset all other options - to their defaults. \ No newline at end of file diff --git a/Programs/doc/_sources/functions/video/shuffleplanes.rst.txt b/Programs/doc/_sources/functions/video/shuffleplanes.rst.txt deleted file mode 100644 index d50c06e..0000000 --- a/Programs/doc/_sources/functions/video/shuffleplanes.rst.txt +++ /dev/null @@ -1,48 +0,0 @@ -ShufflePlanes -============= - -.. function:: ShufflePlanes(vnode[] clips, int[] planes, int colorfamily) - :module: std - - ShufflePlanes can extract and combine planes from different clips in the most - general way possible. - This is both good and bad, as there are almost no error checks. - - Most of the returned clip's properties are implicitly determined from the - first clip given to *clips*. - - The *clips* parameter takes between one and three clips for color families - with three planes. In this case clips=[A] is equivalent to clips=[A, A, A] - and clips=[A, B] is equivalent to clips=[A, B, B]. For the GRAY color - family, which has one plane, it takes exactly one clip. - - The argument *planes* controls which of the input clips' planes to use. - Zero indexed. The first number refers to the first input clip, the second - number to the second clip, the third number to the third clip. - - The only thing that needs to be specified is *colorfamily*, which controls which - color family (YUV, RGB, GRAY) the output clip will be. - Properties such as subsampling are determined from the relative size of the - given planes to combine. - - ShufflePlanes accepts clips with variable format and dimensions only when - extracting a single plane. - - Below are some examples of useful operations. - - Extract plane with index X. X=0 will mean luma in a YUV clip and R in an RGB - clip. Likewise 1 will return the U and G channels, respectively:: - - ShufflePlanes(clips=clip, planes=X, colorfamily=vs.GRAY) - - Swap U and V in a YUV clip:: - - ShufflePlanes(clips=clip, planes=[0, 2, 1], colorfamily=vs.YUV) - - Merge 3 grayscale clips into a YUV clip:: - - ShufflePlanes(clips=[Yclip, Uclip, Vclip], planes=[0, 0, 0], colorfamily=vs.YUV) - - Cast a YUV clip to RGB:: - - ShufflePlanes(clips=[YUVclip], planes=[0, 1, 2], colorfamily=vs.RGB) diff --git a/Programs/doc/_sources/functions/video/splice.rst.txt b/Programs/doc/_sources/functions/video/splice.rst.txt deleted file mode 100644 index df7e020..0000000 --- a/Programs/doc/_sources/functions/video/splice.rst.txt +++ /dev/null @@ -1,12 +0,0 @@ -Splice -====== - -.. function:: Splice(vnode[] clips[, bint mismatch=0]) - :module: std - - Returns a clip with all *clips* appended in the given order. - - Splicing clips with different formats or dimensions is - considered an error unless *mismatch* is true. - - In Python, std.Splice can also be invoked :ref:`using the addition operator `. diff --git a/Programs/doc/_sources/functions/video/splitplanes.rst.txt b/Programs/doc/_sources/functions/video/splitplanes.rst.txt deleted file mode 100644 index 049d7b4..0000000 --- a/Programs/doc/_sources/functions/video/splitplanes.rst.txt +++ /dev/null @@ -1,8 +0,0 @@ -SplitPlanes -=========== - -.. function:: SplitPlanes(vnode clip) - :module: std - - SplitPlanes returns each plane of the input as - separate clips. diff --git a/Programs/doc/_sources/functions/video/stackvertical_stackhorizontal.rst.txt b/Programs/doc/_sources/functions/video/stackvertical_stackhorizontal.rst.txt deleted file mode 100644 index cdd7f5f..0000000 --- a/Programs/doc/_sources/functions/video/stackvertical_stackhorizontal.rst.txt +++ /dev/null @@ -1,12 +0,0 @@ -StackVertical/StackHorizontal -============================= - -.. function:: StackVertical(vnode[] clips) - StackHorizontal(vnode[] clips) - :module: std - - Stacks all given *clips* together. The same format is a requirement. For - StackVertical all clips also need to be the same width and for - StackHorizontal all clips need to be the same height. - - The frame properties are copied from the first clip. diff --git a/Programs/doc/_sources/functions/video/text/clipinfo.rst.txt b/Programs/doc/_sources/functions/video/text/clipinfo.rst.txt deleted file mode 100644 index ab2a767..0000000 --- a/Programs/doc/_sources/functions/video/text/clipinfo.rst.txt +++ /dev/null @@ -1,9 +0,0 @@ -ClipInfo -======== - -.. function:: ClipInfo(vnode clip[, int alignment=7, int scale=1]]) - :module: text - - Prints information about the *clip*, such as the format and framerate. - - This is a convenience function for *Text*. diff --git a/Programs/doc/_sources/functions/video/text/coreinfo.rst.txt b/Programs/doc/_sources/functions/video/text/coreinfo.rst.txt deleted file mode 100644 index 18eb56c..0000000 --- a/Programs/doc/_sources/functions/video/text/coreinfo.rst.txt +++ /dev/null @@ -1,10 +0,0 @@ -CoreInfo -======== - -.. function:: CoreInfo([vnode clip=std.BlankClip(), int alignment=7, int scale=1]) - :module: text - - Prints information about the VapourSynth core, such as version and memory - use. If no *clip* is supplied, a default blank one is used. - - This is a convenience function for *Text*. diff --git a/Programs/doc/_sources/functions/video/text/framenum.rst.txt b/Programs/doc/_sources/functions/video/text/framenum.rst.txt deleted file mode 100644 index cb48463..0000000 --- a/Programs/doc/_sources/functions/video/text/framenum.rst.txt +++ /dev/null @@ -1,9 +0,0 @@ -FrameNum -======== - -.. function:: FrameNum(vnode clip[, int alignment=7, int scale=1]) - :module: text - - Prints the current frame number. - - This is a convenience function for *Text*. diff --git a/Programs/doc/_sources/functions/video/text/frameprops.rst.txt b/Programs/doc/_sources/functions/video/text/frameprops.rst.txt deleted file mode 100644 index 2a2a8e2..0000000 --- a/Programs/doc/_sources/functions/video/text/frameprops.rst.txt +++ /dev/null @@ -1,10 +0,0 @@ -FrameProps -========== - -.. function:: FrameProps(vnode clip[, string props=[], int alignment=7, int scale=1]) - :module: text - - Prints all properties attached to the frames, or if the *props* array is - given only those properties. - - This is a convenience function for *Text*. diff --git a/Programs/doc/_sources/functions/video/text/text.rst.txt b/Programs/doc/_sources/functions/video/text/text.rst.txt deleted file mode 100644 index 2722425..0000000 --- a/Programs/doc/_sources/functions/video/text/text.rst.txt +++ /dev/null @@ -1,23 +0,0 @@ -Text -==== - -.. function:: Text(vnode clip, string text[, int alignment=7, int scale=1]) - :module: text - - Text is a simple text printing filter. It doesn't use any external libraries - for drawing the text. It uses a built-in bitmap font: the not-bold, 8×16 - version of Terminus. The font was not modified, only converted from PCF to an - array of bytes. - - The font covers Windows-1252, which is a superset of ISO-8859-1 (aka latin1). - Unprintable characters get turned into underscores. Long lines get wrapped in - a dumb way. Lines that end up too low to fit in the frame are silently - dropped. - - The *alignment* parameter takes a number from 1 to 9, corresponding to the - positions of the keys on a numpad. - - The *scale* parameter sets an integer scaling factor for the bitmap font. - - *ClipInfo*, *CoreInfo*, *FrameNum*, and *FrameProps* are convenience functions - based on *Text*. diff --git a/Programs/doc/_sources/functions/video/transpose.rst.txt b/Programs/doc/_sources/functions/video/transpose.rst.txt deleted file mode 100644 index c03f042..0000000 --- a/Programs/doc/_sources/functions/video/transpose.rst.txt +++ /dev/null @@ -1,18 +0,0 @@ -Transpose -========= - -.. function:: Transpose(vnode clip) - :module: std - - Flips the contents of the frames in the same way as a matrix transpose would - do. Combine it with FlipVertical or FlipHorizontal to synthesize a left or - right rotation. Calling Transpose twice in a row is the same as doing nothing - (but slower). - - Here is a picture to illustrate what Transpose does:: - - 0 5 55 - 0 1 1 2 3 1 8 89 - 5 8 13 21 34 => 1 13 144 - 55 89 144 233 377 2 21 233 - 3 34 377 diff --git a/Programs/doc/_sources/functions/video/trim.rst.txt b/Programs/doc/_sources/functions/video/trim.rst.txt deleted file mode 100644 index 5b6dfaa..0000000 --- a/Programs/doc/_sources/functions/video/trim.rst.txt +++ /dev/null @@ -1,17 +0,0 @@ -Trim -==== - -.. function:: Trim(vnode clip[, int first=0, int last, int length]) - :module: std - - Trim returns a clip with only the frames between the arguments *first* and - *last*, or a clip of *length* frames, starting at *first*. - Trim is inclusive so Trim(clip, first=3, last=3) will return one frame. If - neither *last* nor *length* is specified, no frames are removed from the end - of the clip. - - Specifying both *last* and *length* is considered to be an error. - Likewise is calling Trim in a way that returns no frames, as 0 frame clips are - not allowed in VapourSynth. - - In Python, std.Trim can also be invoked by :ref:`slicing a clip `. diff --git a/Programs/doc/_sources/functions/video/turn180.rst.txt b/Programs/doc/_sources/functions/video/turn180.rst.txt deleted file mode 100644 index 11d7780..0000000 --- a/Programs/doc/_sources/functions/video/turn180.rst.txt +++ /dev/null @@ -1,7 +0,0 @@ -Turn180 -======= - -.. function:: Turn180(vnode clip) - :module: std - - Turns the frames in a clip 180 degrees (to the left, not to the right). diff --git a/Programs/doc/_sources/gettingstarted.rst.txt b/Programs/doc/_sources/gettingstarted.rst.txt deleted file mode 100644 index e5f77d1..0000000 --- a/Programs/doc/_sources/gettingstarted.rst.txt +++ /dev/null @@ -1,78 +0,0 @@ -Getting Started -=============== - -So you managed to install VapourSynth. Now what? - -If you don't know the basics of Python, you may want to check out a -`tutorial `_. - -You can "play around" in the python interpreter if you want, but that's not how -most scripts are created. - -Example Script -############## - -It all starts with a *.vpy* script. -Here's a sample script to be inspired by, it assumes that `BestSource `_ -is installed and :doc:`auto-loaded `. - -.. code-block:: python - - from vapoursynth import core # Get an instance of the core - clip = core.bs.VideoSource(source='filename.mkv') # Load a video track in mkv file - clip = core.std.FlipHorizontal(clip) # Flip the video clip in the horizontal direction - clip.set_output() # Set the video clip to be accessible for output - -Audio is also supported, use `BestSource `_ to load your audio file. - -.. code-block:: python - - from vapoursynth import core # Get an instance of the core - clip = core.bs.AudioSource(source='filename.mkv') # Load an audio track in mkv file - clip = core.std.AudioGain(clip,gain=2.0) # Gain all channels 2x - clip.set_output() # Set the audio clip to be accessible for output - -You can combine 2 operations in one script. - -.. code-block:: python - - from vapoursynth import core - video = core.bs.VideoSource(source='filename.mkv') - audio = core.bs.AudioSource(source='filename.mkv') - video = core.std.FlipHorizontal(video) - audio = core.std.AudioGain(audio,gain=2.0) - video.set_output(index=0) - audio.set_output(index=1) - -Remember that most VapourSynth objects have a quite nice string representation -in Python, so if you want to know more about an instance just call ``print()``. - -Preview -####### - -It's possible to directly open the script in `VapourSynth Editor `_ -or `VirtualDub FilterMod `_ for previewing. - -Output with VSPipe -################## - -VSPipe is very useful to pipe the output to various applications, for example x264 and flac for encoding. - -Here are some examples of command lines that automatically pass on most video and audio attributes. - -For x264:: - - vspipe -c y4m script.vpy - | x264 --demuxer y4m - --output encoded.264 - -For flac:: - - vspipe -c wav script.vpy - | flac - -o encoded.flac - -For FFmpeg:: - - vspipe -c y4m script.vpy - | ffmpeg -i - encoded.mkv - -For mpv:: - - vspipe -c y4m script.vpy - | mpv - - vspipe -c wav script.vpy - | mpv - diff --git a/Programs/doc/_sources/index.rst.txt b/Programs/doc/_sources/index.rst.txt deleted file mode 100644 index b2cb328..0000000 --- a/Programs/doc/_sources/index.rst.txt +++ /dev/null @@ -1,23 +0,0 @@ -Welcome to `VapourSynth `_’s documentation! -======================================================================== - -Contents: - -.. toctree:: - :maxdepth: 3 - - introduction - installation - gettingstarted - pythonreference - functions - output - applications - apireference - - -Indices and tables -================== - -* :ref:`genindex` -* :ref:`search` diff --git a/Programs/doc/_sources/installation.rst.txt b/Programs/doc/_sources/installation.rst.txt deleted file mode 100644 index cb14225..0000000 --- a/Programs/doc/_sources/installation.rst.txt +++ /dev/null @@ -1,341 +0,0 @@ -Installation -============ - -Basic Program -############# - -The installation contains two main steps: - -1. Install VapourSynth core library. -2. Install the Python wrapper of VapourSynth. - -After you completed the second step, you can test it by opening a Python command line -and type this:: - - from vapoursynth import core - print(core.version()) - -After pressing return at the final line, you should see the version printed along with a -few other lines describing the options used when instantiating the Core object. -In fact, these lines should be the same as the output result of ``vspipe --version``. - -Windows Installation -******************** - -Prerequisites -------------- - -First download and install the prerequisites: - * `Python 3.11.x `_ or Python 3.8.x -- 32 or 64 bit version depending on which version of VapourSynth you want to install - -Note that VapourSynth and Python have to be matched so both are either installed -for all users or for only for the current user. - -Also note that per user installs will not install the required Visual Studio -2019 runtimes. - -Installation ------------- - -Simply run the `VapourSynth installer `_. -It should automatically detect and install everything, including the Python wrapper. - -If the tests mentioned at the beginning fails, there may be a bug in the installer or there are -old copies of vapoursynth.pyd and vapoursynth.dll lying around. - -Windows Installation (Portable) -******************************* - -First download and decompress the prerequisites: - * `Python 3.11.x `_ or Python 3.8.x -- 32 or 64 bit embeddable version - -Simply decompress the `portable VapourSynth archive `_ -into the Python dir and overwrite all existing files.Run ``vs-detect-python.bat`` -to configure it for the current Python version. Done. - -You can also use the VapourSynth Editor by decompressing it into the same directory. - -OS X Installation -***************** - -First download and install the prerequisites: - * Xcode -- Available from the AppStore - * `Homebrew `_ -- A package manager - -Simply run these commands in a terminal and wait for them to complete:: - - brew install vapoursynth - -Linux installation -****************** - -Several distributions have VapourSynth packages. Note that those packages are usually OUT OF DATE. - -Debian ------- -The VapourSynth packages are provided by `deb-multimedia repository `_. -You need to add the repository first following the guide on the official website. - -Fedora, CentOS and RHEL ------------------------ -For Fedora, the VapourSynth packages can be downloaded from official repository directly. -For CentOS and RHEL, you should install EPEL (Extra Packages for Enterprise Linux) repository first. - -Gentoo ------- -There is an `unofficial Portage tree `_ with all VapourSynth related ebuilds. -Check the Github link for more information and instructions. - -Arch Linux ----------- -`VapourSynth-related packages `_ are provided by the Community repository. - -Nix and NixOS -------------- -``vapoursynth`` is available on nixpkgs, either via ``nixpkgs#vapoursynth`` or via ``nixpkgs#python3Packages.vapoursynth`` (currently on unstable only). -Be aware that the derivation is broken on MacOS. - -VapourSynth releases are not backported to the current stable branch. -To get the newest version use the unstable branch. - -Windows Compilation -******************* - -Preparing the Build Environment on Windows ------------------------------------------- - -Default install paths are assumed in all projects and scripts, be prepared to adjust many things if you changed them - -Required languages and applications: - -* Needs `Visual Studio 2019 `_ -* It also needs both `32bit `_ and `64bit `_ Python 3.8.x and 3.11.x (the msvc project assumes that you installed python for all users.) -* `InnoSetup `_ is needed to create the installer (default installation path assumed) -* `7-zip `_ is needed to compress the portable version (default installation path assumed) - -Preparing the C++ Project -------------------------- - -* Clone VapourSynth -* Clone VSRepo into the VapourSynth dir (``git clone https://github.com/vapoursynth/vsrepo``) -* Clone zimg into the VapourSynth dir (``git clone https://github.com/sekrit-twc/zimg.git --recurse-submodules``) -* Clone avs+ into the VapourSynth dir (``git clone https://github.com/AviSynth/AviSynthPlus.git``) -* Clone libp2p into the VapourSynth dir (``git clone https://github.com/sekrit-twc/libp2p.git``) -* Compile 32 and 64 bit releases using the VapourSynth solution - -Preparing the Python Project ----------------------------- - -* Run ``py -3.11 -m pip install -r python-requirements.txt`` for 64bit. -* Run ``py -3.8 -m pip install -r python-requirements.txt`` for 64bit. -* Run ``cython_build.bat`` to compile the Python modules -* Run ``docs_build.bat`` to compile the documentation - -Distribution ------------- - -All the above steps are necessary to create the installer - -You also need 7z.exe and 7z.dll from `7-zip `_ -Both need to be placed in the "installer" dir. - -You'll also have to grab the file ``pfm-192-vapoursynth-win.exe`` -which is only available from installations/portable releases. - -Run ``make_portable.bat`` and ``make_installers.bat`` to package things. - -.. note:: Note that the Avisynth side of AVFS won't work properly in debug builds (memory allocation and exceptions across module boundaries trolololol) - -Linux and OS X Compilation -************************** - -These are the requirements: - * Autoconf, Automake, and Libtool, probably recent versions - - * pkg-config - - * GCC 4.8 or newer, or Clang - - * `zimg `_ - - * Python 3 - - * Cython 0.28 or later installed in your Python 3 environment - - * Sphinx for the documentation (optional) - -Note: **any version of Python 3 will do.** A specific version is only -required when using the official Windows binaries. - -Required packages (OS X) ------------------------- - -First download and install the prerequisites: - * Xcode -- Available from the AppStore - * `Homebrew `_ -- A package manager - -Installation of the required packages is very easy. Simply run these -commands in a terminal and wait for them to complete:: - - brew install python3 ffmpeg libass zimg imagemagick - pip3 install cython - -If you've already installed all the required packages and instead want -to update them, simply run:: - - brew update && brew upgrade - pip3 install --upgrade cython - -Compilation ------------ - -If you haven't checked out the source code before, use git to do so:: - - git clone https://github.com/vapoursynth/vapoursynth.git - -Or if you already have a copy of the source, update it with:: - - git pull - -Enter the VapourSynth directory and run these commands to compile and install:: - - ./autogen.sh - ./configure - make - make install - -Depending on your operating system's configuration, VapourSynth may not -work out of the box with the default prefix of /usr/local. Two errors -may pop up when running ``vspipe --version``: - -* "vspipe: error while loading shared libraries: libvapoursynth-script.so.0: - cannot open shared object file: No such file or directory" - - This is caused by the non-standard location of libvapoursynth-script.so.0. - Your dynamic loader is not configured to look in /usr/local/lib. One - way to work around this error is to use the LD_LIBRARY_PATH environment - variable:: - - $ LD_LIBRARY_PATH=/usr/local/lib vspipe --version - -* "Failed to initialize VapourSynth environment" - - This is caused by the non-standard location of the Python module, - vapoursynth.so. Your Python is not configured to look in - /usr/local/lib/python3.x/site-packages. One way to work around this - error is to use the PYTHONPATH environment variable:: - - $ PYTHONPATH=/usr/local/lib/python3.x/site-packages vspipe --version - - Replace "x" with the correct number. - - -The documentation can be built using its own Makefile:: - - $ make -C doc/ html - -The documentation can be installed using the standard program ``cp``. - -Plugins and Scripts -################### - -If you're looking for plugins and scripts then one of the most complete lists -available can be found at `vsdb.top `_. - -Installing with VSRepo -********************** - -On windows you can use the included vsrepo.py to install and upgrade plugins and scripts. - -Simply run ``vsrepo.py install `` to install them. - -If you need a list of known plugins and scripts you can run ``vsrepo.py available`` or visit `vsdb.top `_. - -For more reference, visit `vsrepo's repository `_ - -Installing Manually -******************* - -You can put your plugin (``.dll``) and script (``.py``) to where you think it is convenient. - -For plugins, you can use ``std.LoadPlugin`` function to load it. there is also a plugin autoloading mechanism to save your time, see blow. - -For scripts, you should add a relative path to ``python._pth``, then you can import it in your script. - -Plugin Autoloading -****************** - -VapourSynth automatically loads all the native plugins located in certain -folders. Autoloading works just like manual loading, with the exception -that any errors encountered while loading a plugin are silently ignored. - -.. note:: - - Avoid autoloading from folders that other applications might also - use, such as /usr/lib or /usr/local/lib in a Linux system. Several - users reported crashes when VapourSynth attempted to load some - random libraries (\*cough\*wxgtk\*cough\*). - -Windows -------- - -Windows has in total 3 different autoloading directories: user plugins, core plugins and global plugins. They are searched in that order. -User plugins are always loaded first so that the current user can always decide which exact version of a plugin is used. Core plugins follow. -Global plugins are placed last to prevent them from overriding any of the included plugins by accident. - -The searched paths are: - -#. **\\VapourSynth\\plugins32 or **\\VapourSynth\\plugins64 -#. **\\core\\plugins -#. **\\plugins - -Note that the per user path is not created by default. -On modern Windows versions the *AppData* directory is located in **\\AppData\\Roaming by default. - -Shortcuts to the global autoload directory are located in the start menu. - -Avisynth plugins are never autoloaded. Support for this may be added in the future. - -User plugins should never be put into the *core\\plugins* directory. - -Windows Portable ----------------- - -The searched paths are: - -#. **\\vapoursynth32\\coreplugins or **\\vapoursynth64\\coreplugins -#. **\\vapoursynth32\\plugins or **\\vapoursynth64\\plugins - -User plugins should never be put into the *coreplugins* directory. - -Linux ------ - -Autoloading can be configured using the file -$XDG_CONFIG_HOME/vapoursynth/vapoursynth.conf, -or $HOME/.config/vapoursynth/vapoursynth.conf if XDG_CONFIG_HOME is not -defined. - -To provide your own path to the config file, you can use $VAPOURSYNTH_CONF_PATH. - -Two configuration options may be used: **UserPluginDir**, empty by default, -and **SystemPluginDir**, whose default value is set at compile time to -``$libdir/vapoursynth``, or to the location passed to the ``--with-plugindir`` -argument to ``configure``. - -UserPluginDir is tried first, then SystemPluginDir. - -Example vapoursynth.conf:: - - UserPluginDir=/home/asdf/vapoursynth/plugins - SystemPluginDir=/special/non/default/location - - -OS X ----- - -Autoloading can be configured using the file -$HOME/Library/Application Support/VapourSynth/vapoursynth.conf. Everything else is -the same as in Linux. - -Like on linux, you can use $VAPOURSYNTH_CONF_PATH to provide your own configuration. diff --git a/Programs/doc/_sources/introduction.rst.txt b/Programs/doc/_sources/introduction.rst.txt deleted file mode 100644 index 45245e1..0000000 --- a/Programs/doc/_sources/introduction.rst.txt +++ /dev/null @@ -1,36 +0,0 @@ -Introduction -============ - -VapourSynth is an application for video manipulation. Or a plugin. Or a library. -It's hard to tell because it has a core library written in C++ and a Python -module to allow video scripts to be created. It came to be when I started -thinking about alternative designs for Avisynth and most of it was written -over a 3 month period. - -The software has been heavily inspired by `Avisynth `_ -and aims to be a 21st century rewrite, taking advantage of the advancements -computers have made since the late 90s. -The main features compared to Avisynth are: - - * Multithreaded - Frame level multithreading that scales well - * Generalized Colorspaces - New colorspaces can be specified at runtime - * Per Frame Properties - Additional metadata can be attached to frames - * Python Based - The scripting part is implemented as a Python module so you - don't have to learn a special language - * Support for video with format changes - Some video just can't stick to one - format or frame size. VapourSynth can handle any kind of change - * Compatible with a large number of already existing Avisynth plugins - -About the author -################ - -Fredrik Mellbin majored in electrical engineering with a focus on image analysis -and processing with medical applications. He has previously worked with digital -electronics and likes to plan his own software projects in his spare time. -When he one day found himself out of work he needed something to do between -sending out job applications and waiting for a reply. The natural choice for -the author was to try to improve Avisynth, the software that once made him -interested in video editing. VapourSynth is the result of all that time waiting. - -Feel free to contact me at fredrik.mellbin that round thingy with an a gmail.com -if you need help to port a filter or want to sponsor the development. diff --git a/Programs/doc/_sources/output.rst.txt b/Programs/doc/_sources/output.rst.txt deleted file mode 100644 index 7bd71cc..0000000 --- a/Programs/doc/_sources/output.rst.txt +++ /dev/null @@ -1,125 +0,0 @@ -Output -====== - -VSPipe -###### - -Synopsis -******** - -**vspipe** - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

VapourSynth4.h

-
-

Table of contents

-

Introduction

-
-
Macros

VS_CC

-

VS_EXTERNAL_API

-

VAPOURSYNTH_API_MAJOR

-

VAPOURSYNTH_API_MINOR

-

VAPOURSYNTH_API_VERSION

-

VS_AUDIO_FRAME_SAMPLES

-

VS_MAKE_VERSION

-
-
Enums

VSColorFamily

-

VSSampleType

-

VSPresetVideoFormat

-

VSFilterMode

-

VSMediaType

-

VSAudioChannels

-

VSPropertyType

-

VSMapPropertyError

-

VSMapAppendMode

-

VSActivationReason

-

VSMessageType

-

VSCoreCreationFlags

-

VSPluginConfigFlags

-

VSDataTypeHint

-

VSRequestPattern

-

VSCacheMode

-
-
Structs

VSFrame

-

VSNode

-

VSCore

-

VSPlugin

-

VSPluginFunction

-

VSFunction

-

VSMap

-

VSLogHandle

-

VSFrameContext

-

VSVideoFormat

-

VSVideoInfo

-

VSAudioFormat

-

VSAudioInfo

-

VSCoreInfo

-

VSFilterDependency

-

VSPLUGINAPI

-

VSAPI

-
-
-
-
-
Functions

getVapourSynthAPI

-
-
Writing plugins

VSInitPlugin

-

VSFilterGetFrame

-

VSFilterFree

-
-
-
-
-

Introduction

-

This is VapourSynth’s main header file. Plugins and applications that use -the library must include it.

-

VapourSynth’s public API is all C.

-
-
-

Macros

-

VapourSynth4.h defines some preprocessor macros that make the programmer’s life -easier. The relevant ones are described below.

-
-

VS_CC

-

The VS_CC macro expands to the calling convention used by VapourSynth. -All functions meant to be called by VapourSynth must use this macro (a -filter’s “init”, “getframe”, “free” functions, etc).

-

Example:

-
static void VS_CC fooInit(...) { ... }
-
-
-
-
-

VS_EXTERNAL_API

-

The VS_EXTERNAL_API macro expands to the platform-specific magic required -for functions exported by shared libraries. It also takes care of adding -extern "C" when needed, and VS_CC.

-

This macro must be used for a plugin’s entry point, like so:

-
VS_EXTERNAL_API(void) VapourSynthPluginInit2(...) { ... }
-
-
-
-
-

VAPOURSYNTH_API_MAJOR

-

Major API version.

-
-
-

VAPOURSYNTH_API_MINOR

-

Minor API version. It is bumped when new functions are added to VSAPI or core behavior is noticeably changed.

-
-
-

VAPOURSYNTH_API_VERSION

-

API version. The high 16 bits are VAPOURSYNTH_API_MAJOR, the low 16 -bits are VAPOURSYNTH_API_MINOR.

-
-
-

VS_AUDIO_FRAME_SAMPLES

-

The number of audio samples in an audio frame. It is a static number to make it possible to calculate which audio frames are needed to retrieve specific samples.

-
-
-

VS_MAKE_VERSION

-

Used to create version numbers. The first argument is the major version and second is the minor.

-
-
-
-

Enums

-
-

enum VSColorFamily

-
-
    -
  • cfUndefined

  • -
  • cfGray

  • -
  • cfRGB

  • -
  • cfYUV

  • -
-
-
-
-

enum VSSampleType

-
-
    -
  • stInteger

  • -
  • stFloat

  • -
-
-
-
-

enum VSPresetVideoFormat

-
-

The presets suffixed with H and S have floating point sample type. -The H and S suffixes stand for half precision and single precision, -respectively. All formats are planar. See the header for all currently -defined video format presets.

-
    -
  • pf*

  • -
-
-
-
-

enum VSFilterMode

-
-

Controls how a filter will be multithreaded, if at all.

-
    -
  • fmParallel

    -

    Completely parallel execution. -Multiple threads will call a filter’s “getframe” function, to fetch several -frames in parallel.

    -
  • -
  • fmParallelRequests

    -

    For filters that are serial in nature but can request in advance one or -more frames they need. -A filter’s “getframe” function will be called from multiple threads at a -time with activation reason arInitial, but only one thread will call it -with activation reason arAllFramesReady at a time.

    -
  • -
  • fmUnordered

    -

    Only one thread can call the filter’s “getframe” function at a time. -Useful for filters that modify or examine their internal state to -determine which frames to request.

    -

    While the “getframe” function will only run in one thread at a -time, the calls can happen in any order. For example, it can be -called with reason arInitial for frame 0, then again with reason -arInitial for frame 1, then with reason arAllFramesReady for -frame 0.

    -
  • -
  • fmFrameState

    -

    For compatibility with other filtering architectures. DO NOT USE IN NEW FILTERS. -The filter’s “getframe” function only ever gets called from one thread at a -time. Unlike fmUnordered, only one frame is processed at a time.

    -
  • -
-
-
-
-

enum VSMediaType

-
-

Used to indicate the type of a VSFrame or VSNode object.

-
    -
  • mtVideo

  • -
  • mtAudio

  • -
-
-
-
-

enum VSAudioChannels

-
-

Audio channel positions as an enum. Mirrors the FFmpeg audio channel constants in older api versions. See the header for all available values.

-
    -
  • ac*

  • -
-
-
-
-

enum VSPropertyType

-
-

Types of properties that can be stored in a VSMap.

-
    -
  • ptUnset

  • -
  • ptInt

  • -
  • ptFloat

  • -
  • ptData

  • -
  • ptFunction

  • -
  • ptVideoNode

  • -
  • ptAudioNode

  • -
  • ptVideoFrame

  • -
  • ptAudioFrame

  • -
-
-
-
-

enum VSMapPropertyError

-
-

When a mapGet* function fails, it returns one of these in the err -parameter.

-

All errors are non-zero.

-
    -
  • peSuccess

  • -
  • peUnset

    -

    The requested key was not found in the map.

    -
  • -
  • peType

    -

    The wrong function was used to retrieve the property. E.g. -mapGetInt() was used on a property of type ptFloat.

    -
  • -
  • peIndex

    -

    The requested index was out of bounds.

    -
  • -
  • peError

    -

    The map has the error state set.

    -
  • -
-
-
-
-

enum VSMapAppendMode

-
-

Controls the behaviour of mapSetInt() and friends.

-
    -
  • maReplace

    -

    All existing values associated with the key will be replaced with -the new value.

    -
  • -
  • maAppend

    -

    The new value will be appended to the list of existing values -associated with the key.

    -
  • -
-
-
-
-

enum VSActivationReason

-
-

See VSFilterGetFrame.

-
    -
  • arInitial

  • -
  • arAllFramesReady

  • -
  • arError

  • -
-
-
-
-

enum VSMessageType

-
-

See addLogHandler().

-
    -
  • mtDebug

  • -
  • mtInformation

  • -
  • mtWarning

  • -
  • mtCritical

  • -
  • mtFatal

  • -
-
-
-
-

enum VSCoreCreationFlags

-
-

Options when creating a core.

-
    -
  • ccfEnableGraphInspection

    -
    -

    Required to use the graph inspection api functions. Increases memory usage due to the extra information stored.

    -
    -
  • -
  • ccfDisableAutoLoading

    -
    -

    Don’t autoload any user plugins. Core plugins are always loaded.

    -
    -
  • -
  • ccfDisableLibraryUnloading

    -
    -

    Don’t unload plugin libraries when the core is destroyed. Due to a small amount of memory leaking every load -and unload (windows feature, not my fault) of a library this may help in applications with extreme amount of script reloading.

    -
    -
  • -
-
-
-
-

enum VSPluginConfigFlags

-
-

Options when loading a plugin.

-
    -
  • pcModifiable

    -
    -

    Allow functions to be added to the plugin object after the plugin loading phase. Mostly useful for -Avisynth compatibility and other foreign plugin loaders.

    -
    -
  • -
-
-
-
-

enum VSDataTypeHint

-
-

Since the data type can contain both pure binary data and printable strings the type also contains a hint -for whether or not it is human readable. Generally the unknown type should be very rare and is almost only -created as an artifact of API3 compatibility.

-
    -
  • dtUnknown

  • -
  • dtBinary

  • -
  • dtUtf8

  • -
-
-
-
-

enum VSRequestPattern

-
-

Describes the upstream frame request pattern of a filter.

-
    -
  • rpGeneral

    -
    -

    Anything goes. Note that filters that may be requesting beyond the end of a VSNode length in frames (repeating the last frame) should use rpGeneral and not any of the other modes.

    -
    -
  • -
  • rpNoFrameReuse

    -

    Will only request an input frame at most once if all output frames are requested exactly one time. This includes filters such as Trim, Reverse, SelectEvery.

    -
  • -
  • rpStrictSpatial

    -

    Only requests frame N to output frame N. The main difference to rpNoFrameReuse is that the requested frame is always fixed and known ahead of time. Filter examples Lut, Expr (conditionally, see rpGeneral note) and similar.

    -
  • -
-
-
-
-

enum VSCacheMode

-
-

Describes how the output of a node is cached.

-
    -
  • cmAuto

    -
    -

    Cache is enabled or disabled based on the reported request patterns and number of consumers.

    -
    -
  • -
  • cmForceDisable

    -
    -

    Never cache anything.

    -
    -
  • -
  • cmForceEnable

    -
    -
      -
    • Always use the cache.

    • -
    -
    -
  • -
-
-
-
-
-

Structs

-

Most structs are opaque and their contents can only be accessed using functions in the API.

-
-

struct VSFrame

-
-

A frame that can hold audio or video data.

-

Each row of pixels in a frame is guaranteed to have an alignment of at least 32 -bytes. Two frames with the same width and bytes per sample are guaranteed to have the same stride.

-

Audio data is also guaranteed to be at least 32 byte aligned.

-

Any data can be attached to a frame, using a VSMap.

-
-
-
-

struct VSNode

-
-

A reference to a node in the constructed filter graph. Its primary use -is as an argument to other filter or to request frames from.

-
-
-
-

struct VSCore

-
-

The core represents one instance of VapourSynth. Every core individually -loads plugins and keeps track of memory.

-
-
-
-

struct VSPlugin

-
-

A VapourSynth plugin. There are a few of these built into the core, -and therefore available at all times: the basic filters (identifier -com.vapoursynth.std, namespace std), the resizers (identifier -com.vapoursynth.resize, namespace resize), and the Avisynth -compatibility module, if running in Windows (identifier -com.vapoursynth.avisynth, namespace avs).

-

The Function Reference describes how to load VapourSynth and Avisynth -plugins.

-

A VSPlugin instance is constructed by the core when loading a plugin -(.so / .dylib / .dll), and the pointer is passed to the plugin’s -VapourSynthPluginInit2() function.

-

A VapourSynth plugin can export any number of filters.

-

Plugins have a few attributes:

-
-
    -
  • An identifier, which must be unique among all VapourSynth plugins in -existence, because this is what the core uses to make sure a plugin -only gets loaded once.

  • -
  • A namespace, also unique. The filters exported by a plugin end up in -the plugin’s namespace.

  • -
  • A full name, which is used by the core in a few error messages.

  • -
  • The version of the plugin.

  • -
  • The VapourSynth API version the plugin requires.

  • -
  • A file name.

  • -
-
-

Things you can do with a VSPlugin:

-
-
-
-

All loaded plugins (including built-in) can be enumerated with -getNextPlugin().

-

Once loaded, a plugin only gets unloaded when the VapourSynth core is freed.

-
-
-
-

struct VSPluginFunction

-
-

A function belonging to a Vapoursynth plugin. This object primarily exists so -a plugin’s name, argument list and return type can be queried by editors.

-

One peculiarity is that plugin functions cannot be invoked using a VSPluginFunction -pointer but is instead done using invoke() which takes a VSPlugin and -the function name as a string.

-
-
-
-

struct VSFunction

-
-

Holds a reference to a function that may be called. This type primarily exists -so functions can be shared between the scripting layer and plugins in the core.

-
-
-
-

struct VSMap

-
-

VSMap is a container that stores (key,value) pairs. The keys are strings -and the values can be (arrays of) integers, floating point numbers, -arrays of bytes, VSNode, VSFrame, or VSFunction.

-

The pairs in a VSMap are sorted by key.

-
-
In VapourSynth, VSMaps have several uses:
    -
  • storing filters’ arguments and return values

  • -
  • storing user-defined functions’ arguments and return values

  • -
  • storing the properties attached to frames

  • -
-
-
-

Only alphanumeric characters and the underscore may be used in keys.

-

Creating and destroying a map can be done with createMap() and -freeMap(), respectively.

-

A map’s contents can be retrieved and modified using a number of functions, -all prefixed with “map”.

-

A map’s contents can be erased with clearMap().

-
-
-
-

struct VSLogHandle

-
-

Opaque type representing a registered logger.

-
-
-
-

struct VSFrameContext

-
-

Opaque type representing the current frame request in a filter.

-
-
-
-

struct VSVideoFormat

-
-

Describes the format of a clip.

-

Use queryVideoFormat() to fill it in with proper error checking. Manually filling out the struct is allowed but discouraged -since illegal combinations of values will cause undefined behavior.

-
-
-int colorFamily
-

See VSColorFamily.

-
- -
-
-int sampleType
-

See VSSampleType.

-
- -
-
-int bitsPerSample
-

Number of significant bits.

-
- -
-
-int bytesPerSample
-

Number of bytes needed for a sample. This is always a power of 2 and the -smallest possible that can fit the number of bits used per sample.

-
- -
-
-int subSamplingW
-
- -
-
-int subSamplingH
-

log2 subsampling factor, applied to second and third plane. -Convenient numbers that can be used like so:

-
uv_width = y_width >> subSamplingW;
-
-
-
- -
-
-int numPlanes
-

Number of planes.

-
- -
-
-
-

struct VSVideoInfo

-
-

Contains information about a clip.

-
-
-VSVideoFormat format
-

Format of the clip. Will have colorFamily set to cfUndefined if the format can vary.

-
- -
-
-int64_t fpsNum
-

Numerator part of the clip’s frame rate. It will be 0 if the frame -rate can vary. Should always be a reduced fraction.

-
- -
-
-int64_t fpsDen
-

Denominator part of the clip’s frame rate. It will be 0 if the frame -rate can vary. Should always be a reduced fraction.

-
- -
-
-int width
-

Width of the clip. Both width and height will be 0 if the clip’s dimensions can vary.

-
- -
-
-int height
-

Height of the clip. Both width and height will be 0 if the clip’s dimensions can vary.

-
- -
-
-int numFrames
-

Length of the clip.

-
- -
-
-
-

struct VSAudioFormat

-
-

Describes the format of a clip.

-

Use queryAudioFormat() to fill it in with proper error checking. Manually filling out the struct is allowed but discouraged -since illegal combinations of values will cause undefined behavior.

-
-
-int sampleType
-

See VSSampleType.

-
- -
-
-int bitsPerSample
-

Number of significant bits.

-
- -
-
-int bytesPerSample
-

Number of bytes needed for a sample. This is always a power of 2 and the -smallest possible that can fit the number of bits used per sample.

-
- -
-
-int numChannels
-

Number of audio channels.

-
- -
-
-uint64_t channelLayout
-

A bitmask representing the channels present using the constants in 1 left shifted by the constants in VSAudioChannels.

-
- -
-
-
-

struct VSAudioInfo

-
-

Contains information about a clip.

-
-
-VSAudioFormat format
-

Format of the clip. Unlike video the audio format can never change.

-
- -
-
-int sampleRate
-

Sample rate.

-
- -
-
-int64_t numSamples
-

Length of the clip in audio samples.

-
- -
-
-int numFrames
-

Length of the clip in audio frames.

-
- -
-
-
-

struct VSCoreInfo

-
-

Contains information about a VSCore instance.

-
-
-const char *versionString
-

Printable string containing the name of the library, copyright notice, -core and API versions.

-
- -
-
-int core
-

Version of the core.

-
- -
-
-int api
-

Version of the API.

-
- -
-
-int numThreads
-

Number of worker threads.

-
- -
-
-int64_t maxFramebufferSize
-

The framebuffer cache will be allowed to grow up to this size (bytes) before memory is aggressively reclaimed.

-
- -
-
-int64_t usedFramebufferSize
-

Current size of the framebuffer cache, in bytes.

-
- -
-
-
-

struct VSFilterDependency

-
-

Contains information about a VSCore instance.

-
-
-VSNode *source
-

The node frames are requested from.

-
- -
-
-int requestPattern
-

A value from VSRequestPattern.

-
- -
-
-
-

struct VSPLUGINAPI

-
-

This struct is used to access VapourSynth’s API when a plugin is initially loaded.

-
-
-
-

int getAPIVersion()

-
-

See getAPIVersion() in the struct VSAPI.

-
-
-
-
-

int configPlugin(const char *identifier, const char *pluginNamespace, const char *name, int pluginVersion, int apiVersion, int flags, VSPlugin *plugin)

-
-

Used to provide information about a plugin when loaded. Must be called exactly once from the VapourSynthPluginInit2 entry point. -It is recommended to use the VS_MAKE_VERSION macro when providing the pluginVersion. If you don’t know the specific apiVersion you actually require simply -pass VAPOURSYNTH_API_VERSION to match the header version you’re compiling against. The flags consist of values from VSPluginConfigFlags ORed together -but should for most plugins typically be 0.

-

Returns non-zero on success.

-
-
-
-
-

int registerFunction(const char *name, const char *args, const char *returnType, VSPublicFunction argsFunc, void *functionData, VSPlugin *plugin)

-
-

See registerFunction() in the struct VSAPI.

-
-
-
-
-

struct VSAPI

-
-

This giant struct is the way to access VapourSynth’s public API.

-
-
-
-

VSCore *createCore(int flags)

-
-

Creates the VapourSynth processing core and returns a pointer to it. It is -possible to create multiple cores but in most cases it shouldn’t be needed.

-
-
flags

VSCoreCreationFlags ORed together if desired. Pass 0 for sane defaults -that should suit most uses.

-
-
-
-
-
-
-

void freeCore(VSCore *core)

-
-

Frees a core. Should only be done after all frame requests have completed -and all objects belonging to the core have been released.

-
-
-
-
-

int64_t setMaxCacheSize(int64_t bytes, VSCore *core)

-
-

Sets the maximum size of the framebuffer cache. Returns the new maximum -size.

-
-
-
-
-

int setThreadCount(int threads, VSCore *core)

-
-

Sets the number of threads used for processing. Pass 0 to automatically detect. -Returns the number of threads that will be used for processing.

-
-
-
-
-

void getCoreInfo(VSCore *core, VSCoreInfo *info)

-
-

Returns information about the VapourSynth core.

-
-
-
-
-

int getAPIVersion()

-
-

Returns the highest VAPOURSYNTH_API_VERSION the library support.

-
-
-
-
-

void logMessage(int msgType, const char *msg, VSCore *core)

-
-

Send a message through VapourSynth’s logging framework. See -addLogHandler.

-
-
msgType

The type of message. One of VSMessageType.

-

If msgType is mtFatal, VapourSynth will call abort() after -delivering the message.

-
-
msg

The message.

-
-
-
-
-
-
-

VSLogHandle *addLogHandler(VSLogHandler handler, VSLogHandlerFree free, void *userData, VSCore *core)

-
-

Installs a custom handler for the various error messages VapourSynth -emits. The message handler is per VSCore instance. Returns a unique handle.

-

If no log handler is installed up to a few hundred messages are cached and -will be delivered as soon as a log handler is attached. This behavior exists -mostly so that warnings when auto-loading plugins (default behavior) won’t disappear-

-
-
handler

typedef void (VS_CC *VSLogHandler)(int msgType, const char *msg, void *userdata)

-

Custom message handler. If this is NULL, the default message -handler will be restored.

-
-
msgType

The type of message. One of VSMessageType.

-

If msgType is mtFatal, VapourSynth will call abort() after the -message handler returns.

-
-
msg

The message.

-
-
-
-
free

typedef void (VS_CC *VSLogHandlerFree)(void *userData)

-

Called when a handler is removed.

-
-
userData

Pointer that gets passed to the message handler.

-
-
-
-
-
-
-

int removeLogHandler(VSLogHandle *handle, VSCore *core)

-
-

Removes a custom handler. Return non-zero on success and zero if -the handle is invalid.

-
-
handle

Handle obtained from addLogHandler().

-
-
-
-
-
-
-

VSFrame *newVideoFrame(const VSVideoFormat *format, int width, int height, const VSFrame *propSrc, VSCore *core)

-
-

Creates a new video frame, optionally copying the properties attached to another -frame. It is a fatal error to pass invalid arguments to this function.

-

The new frame contains uninitialised memory.

-
-
format

The desired colorspace format. Must not be NULL.

-
-
-

width

-
-
height

The desired dimensions of the frame, in pixels. Must be greater than 0 and have a suitable multiple for the subsampling in format.

-
-
propSrc

A frame from which properties will be copied. Can be NULL.

-
-
-

Returns a pointer to the created frame. Ownership of the new frame is -transferred to the caller.

-

See also newVideoFrame2().

-
-
-
-
-

VSFrame *newVideoFrame2(const VSVideoFormat *format, int width, int height, const VSFrame **planeSrc, const int *planes, const VSFrame *propSrc, VSCore *core)

-
-

Creates a new video frame from the planes of existing frames, optionally copying -the properties attached to another frame. It is a fatal error to pass invalid arguments to this function.

-
-
format

The desired colorspace format. Must not be NULL.

-
-
-

width

-
-
height

The desired dimensions of the frame, in pixels. Must be greater than 0 and have a suitable multiple for the subsampling in format.

-
-
planeSrc

Array of frames from which planes will be copied. If any elements of -the array are NULL, the corresponding planes in the new frame will -contain uninitialised memory.

-
-
planes

Array of plane numbers indicating which plane to copy from the -corresponding source frame.

-
-
propSrc

A frame from which properties will be copied. Can be NULL.

-
-
-

Returns a pointer to the created frame. Ownership of the new frame is -transferred to the caller.

-

Example (assume frameA, frameB, frameC are existing frames):

-
const VSFrame * frames[3] = { frameA, frameB, frameC };
-const int planes[3] = { 1, 0, 2 };
-VSFrame * newFrame = vsapi->newVideoFrame2(f, w, h, frames, planes, frameB, core);
-
-
-

The newFrame’s first plane is now a copy of frameA’s second plane, -the second plane is a copy of frameB’s first plane, -the third plane is a copy of frameC’s third plane -and the properties have been copied from frameB.

-
-
-
-
-

VSFrame *newAudioFrame(const VSAudioFormat *format, int numSamples, const VSFrame *propSrc, VSCore *core)

-
-

Creates a new audio frame, optionally copying the properties attached to another -frame. It is a fatal error to pass invalid arguments to this function.

-

The new frame contains uninitialised memory.

-
-
format

The desired audio format. Must not be NULL.

-
-
numSamples

The number of samples in the frame. All audio frames apart from the last one returned by a filter must have VS_AUDIO_FRAME_SAMPLES.

-
-
propSrc

A frame from which properties will be copied. Can be NULL.

-
-
-

Returns a pointer to the created frame. Ownership of the new frame is -transferred to the caller.

-

See also newAudioFrame2().

-
-
-
-
-

VSFrame *newAudioFrame2(const VSAudioFormat *format, int numSamples, const VSFrame **channelSrc, const int *channels, const VSFrame *propSrc, VSCore *core)

-
-

Creates a new audio frame, optionally copying the properties attached to another -frame. It is a fatal error to pass invalid arguments to this function.

-

The new frame contains uninitialised memory.

-
-
format

The desired audio format. Must not be NULL.

-
-
numSamples

The number of samples in the frame. All audio frames apart from the last one returned by a filter must have VS_AUDIO_FRAME_SAMPLES.

-
-
channelSrc

Array of frames from which channels will be copied. If any elements of -the array are NULL, the corresponding planes in the new frame will -contain uninitialised memory.

-
-
channels

Array of channel numbers indicating which channel to copy from the -corresponding source frame. Note that the number refers to the nth channel -and not a channel name constant.

-
-
propSrc

A frame from which properties will be copied. Can be NULL.

-
-
-

Returns a pointer to the created frame. Ownership of the new frame is -transferred to the caller.

-

See also newVideoFrame2().

-
-
-
-
-

void freeFrame(const VSFrame *f)

-
-

Decrements the reference count of a frame and deletes it when it reaches 0.

-

It is safe to pass NULL.

-
-
-
-
-

const VSFrame *addFrameRef(const VSFrame *f)

-
-

Increments the reference count of a frame. Returns f as a convenience.

-
-
-
-
-

VSFrame *copyFrame(const VSFrame *f, VSCore *core)

-
-

Duplicates the frame (not just the reference). As the frame buffer is -shared in a copy-on-write fashion, the frame content is not really -duplicated until a write operation occurs. This is transparent for the user.

-

Returns a pointer to the new frame. Ownership is transferred to the caller.

-
-
-
-
-

const VSMap *getFramePropertiesRO(const VSFrame *f)

-
-

Returns a read-only pointer to a frame’s properties. The pointer is valid -as long as the frame lives.

-
-
-
-
-

VSMap *getFramePropertiesRW(VSFrame *f)

-
-

Returns a read/write pointer to a frame’s properties. The pointer is valid -as long as the frame lives.

-
-
-
-
-

ptrdiff_t getStride(const VSFrame *f, int plane)

-
-

Returns the distance in bytes between two consecutive lines of a plane of -a video frame. The stride is always positive. Returns 0 if the requested -plane doesn’t exist or if it isn’t a video frame.

-
-
-
-
-

const uint8_t *getReadPtr(const VSFrame *f, int plane)

-
-

Returns a read-only pointer to a plane or channel of a frame. -Returns NULL if an invalid plane or channel number is passed.

-
-

Note

-

Don’t assume all three planes of a frame are allocated in one -contiguous chunk (they’re not).

-
-
-
-
-
-

uint8_t *getWritePtr(VSFrame *f, int plane)

-
-

Returns a read-write pointer to a plane or channel of a frame. -Returns NULL if an invalid plane or channel number is passed.

-
-

Note

-

Don’t assume all three planes of a frame are allocated in one -contiguous chunk (they’re not).

-
-
-
-
-
-

const VSVideoFormat *getVideoFrameFormat(const VSFrame *f)

-
-

Retrieves the format of a video frame.

-
-
-
-
-

const VSAudioFormat *getAudioFrameFormat(const VSFrame *f)

-
-

Retrieves the format of an audio frame.

-
-
-
-
-

int getFrameType(const VSFrame *f)

-
-

Returns a value from VSMediaType to distinguish audio and video frames.

-
-
-
-
-

int getFrameWidth(const VSFrame *f, int plane)

-
-

Returns the width of a plane of a given video frame, in pixels. The width -depends on the plane number because of the possible chroma subsampling. Returns 0 -for audio frames.

-
-
-
-
-

int getFrameHeight(const VSFrame *f, int plane)

-
-

Returns the height of a plane of a given video frame, in pixels. The height -depends on the plane number because of the possible chroma subsampling. Returns 0 -for audio frames.

-
-
-
-
-

int getFrameLength(const VSFrame *f)

-
-

Returns the number of audio samples in a frame. Always returns 1 for video frames.

-
-
-
-
-

void createVideoFilter(VSMap *out, const char *name, const VSVideoInfo *vi, VSFilterGetFrame getFrame, VSFilterFree free, int filterMode, const VSFilterDependency *dependencies, int numDeps, void *instanceData, VSCore *core)

-
-

Creates a new video filter node.

-
-
out

Output map for the filter node.

-
-
name

Instance name. Please make it the same as the filter’s name for easy identification.

-
-
vi

The output format of the filter.

-
-
getFrame

The filter’s “getframe” function. Must not be NULL.

-
-
free

The filter’s “free” function. Can be NULL.

-
-
filterMode

One of VSFilterMode. Indicates the level of parallelism -supported by the filter.

-
-
dependencies

An array of nodes the filter requests frames from and the access pattern. -Used to more efficiently configure caches.

-
-
numDeps

Length of the dependencies array.

-
-
instanceData

A pointer to the private filter data. This pointer will be passed to -the getFrame and free functions. It should be freed by -the free function.

-
-
-

After this function returns, out will contain the new node appended to the -“clip” property, or an error, if something went wrong.

-
-
-
-
-

VSNode *createVideoFilter2(const char *name, const VSVideoInfo *vi, VSFilterGetFrame getFrame, VSFilterFree free, int filterMode, const VSFilterDependency *dependencies, int numDeps, void *instanceData, VSCore *core)

-
-

Identical to createVideoFilter except that the new node is returned -instead of appended to the out map. Returns NULL on error.

-
-
-
-
-

void createAudioFilter(VSMap *out, const char *name, const VSAudioInfo *ai, VSFilterGetFrame getFrame, VSFilterFree free, int filterMode, const VSFilterDependency *dependencies, int numDeps, void *instanceData, VSCore *core)

-
-

Creates a new video filter node.

-
-
out

Output map for the filter node.

-
-
name

Instance name. Please make it the same as the filter’s name for easy identification.

-
-
ai

The output format of the filter.

-
-
getFrame

The filter’s “getframe” function. Must not be NULL.

-
-
free

The filter’s “free” function. Can be NULL.

-
-
filterMode

One of VSFilterMode. Indicates the level of parallelism -supported by the filter.

-
-
dependencies

An array of nodes the filter requests frames from and the access pattern. -Used to more efficiently configure caches.

-
-
numDeps

Length of the dependencies array.

-
-
instanceData

A pointer to the private filter data. This pointer will be passed to -the getFrame and free functions. It should be freed by -the free function.

-
-
-

After this function returns, out will contain the new node appended to the -“clip” property, or an error, if something went wrong.

-
-
-
-
-

VSNode *createAudioFilter2(const char *name, const VSAudioInfo *ai, VSFilterGetFrame getFrame, VSFilterFree free, int filterMode, const VSFilterDependency *dependencies, int numDeps, void *instanceData, VSCore *core)

-
-

Identical to createAudioFilter except that the new node is returned -instead of appended to the out map. Returns NULL on error.

-
-
-
-
-

int setLinearFilter(VSNode *node)

-
-

Must be called immediately after audio or video filter creation. -Returns the upper bound of how many additional frames it is -reasonable to pass to cacheFrame when trying to make a request -more linear.

-
-
-
-
-

void setCacheMode(VSNode *node, int mode)

-
-

Determines the strategy for frame caching. Pass a VSCacheMode constant. -Mostly useful for cache debugging since the auto mode should work well -in just about all cases. Calls to this function may also be silently ignored.

-

Resets the cache to default options when called, discarding setCacheOptions -changes.

-
-
-
-
-

void setCacheOptions(VSNode *node, int fixedSize, int maxSize, int maxHistorySize)

-
-

Call after setCacheMode or the changes will be discarded. Sets internal -details of a node’s associated cache. Calls to this function may also -be silently ignored.

-
-
fixedSize

Set to non-zero to make the cache always hold maxSize frames.

-
-
maxSize

The maximum number of frames to cache. Note that this value is automatically -adjusted using an internal algorithm unless fixedSize is set.

-
-
maxHistorySize

How many frames that have been recently evicted from the cache to keep track off. -Used to determine if growing or shrinking the cache is beneficial. Has no effect -when fixedSize is set.

-
-
-
-
-
-
-

void freeNode(VSNode *node)

-
-

Decreases the reference count of a node and destroys it once it reaches 0.

-

It is safe to pass NULL.

-
-
-
-
-

VSNode *addNodeRef(VSNode *node)

-
-

Increment the reference count of a node. Returns the same node for convenience.

-
-
-
-
-

int getNodeType(VSNode *node)

-
-

Returns VSMediaType. Used to determine if a node is of audio or video type.

-
-
-
-
-

const VSVideoInfo *getVideoInfo(VSNode *node)

-
-

Returns a pointer to the video info associated with a node. The pointer is -valid as long as the node lives. It is undefined behavior to pass a non-video -node.

-
-
-
-
-

const VSAudioInfo *getAudioInfo(VSNode *node)

-
-

Returns a pointer to the audio info associated with a node. The pointer is -valid as long as the node lives. It is undefined behavior to pass a non-audio -node.

-
-
-
-
-

int getVideoFormatName(const VSVideoFormat *format, char *buffer)

-
-

Tries to output a fairly human-readable name of a video format.

-
-
format

The input video format.

-
-
buffer

Destination buffer. At most 32 bytes including terminating NULL -will be written.

-
-
-

Returns non-zero on success.

-
-
-
-
-

int getAudioFormatName(const VSAudioFormat *format, char *buffer)

-
-

Tries to output a fairly human-readable name of an audio format.

-
-
format

The input audio format.

-
-
buffer

Destination buffer. At most 32 bytes including terminating NULL -will be written.

-
-
-

Returns non-zero on success.

-
-
-
-
-

int queryVideoFormat(VSVideoFormat *format, int colorFamily, int sampleType, int bitsPerSample, int subSamplingW, int subSamplingH, VSCore *core)

-
-

Fills out a VSVideoInfo struct based on the provided arguments. Validates the arguments before filling out format.

-
-
format

The struct to fill out.

-
-
colorFamily

One of VSColorFamily.

-
-
sampleType

One of VSSampleType.

-
-
bitsPerSample

Number of meaningful bits for a single component. The valid range is -8-32.

-

For floating point formats only 16 or 32 bits are allowed.

-
-
subSamplingW

log2 of the horizontal chroma subsampling. 0 == no subsampling. The valid range is 0-4.

-
-
subSamplingH

log2 of the vertical chroma subsampling. 0 == no subsampling. The valid range is 0-4.

-
-

Note

-

RGB formats are not allowed to be subsampled in VapourSynth.

-
-
-
-

Returns non-zero on success.

-
-
-
-
-

int queryAudioFormat(VSAudioFormat *format, int sampleType, int bitsPerSample, uint64_t channelLayout, VSCore *core)

-
-

Fills out a VSAudioFormat struct based on the provided arguments. Validates the arguments before filling out format.

-
-
format

The struct to fill out.

-
-
sampleType

One of VSSampleType.

-
-
bitsPerSample

Number of meaningful bits for a single component. The valid range is -8-32.

-

For floating point formats only 32 bits are allowed.

-
-
channelLayout

A bitmask constructed from bitshifted constants in VSAudioChannels. For example stereo is expressed as (1 << acFrontLeft) | (1 << acFrontRight).

-
-
-

Returns non-zero on success.

-
-
-
-
-

uint32_t queryVideoFormatID(int colorFamily, int sampleType, int bitsPerSample, int subSamplingW, int subSamplingH, VSCore *core)

-
-

Get the id associated with a video format. Similar to queryVideoFormat() except that it returns a format id instead -of filling out a VSVideoInfo struct.

-
-
colorFamily

One of VSColorFamily.

-
-
sampleType

One of VSSampleType.

-
-
bitsPerSample

Number of meaningful bits for a single component. The valid range is -8-32.

-

For floating point formats, only 16 or 32 bits are allowed.

-
-
subSamplingW

log2 of the horizontal chroma subsampling. 0 == no subsampling. The valid range is 0-4.

-
-
subSamplingH

log2 of the vertical chroma subsampling. 0 == no subsampling. The valid range is 0-4.

-
-

Note

-

RGB formats are not allowed to be subsampled in VapourSynth.

-
-
-
-

Returns a valid format id if the provided arguments are valid, on error -0 is returned.

-
-
-
-
-

int getVideoFormatByID(VSVideoFormat *format, uint32_t id, VSCore *core)

-
-

Fills out the VSVideoFormat struct passed to format based

-
-
format

The struct to fill out.

-
-
id

The format identifier: one of VSPresetVideoFormat or a value gotten from queryVideoFormatID.

-
-
-

Returns 0 on failure and non-zero on success.

-
-
-
-
-

VSMap *createMap(void)

-
-

Creates a new property map. It must be deallocated later with -freeMap().

-
-
-
-
-

void freeMap(VSMap *map)

-
-

Frees a map and all the objects it contains.

-
-
-
-
-

void clearMap(VSMap *map)

-
-

Deletes all the keys and their associated values from the map, leaving it -empty.

-
-
-
-
-

const char *mapGetError(const VSMap *map)

-
-

Returns a pointer to the error message contained in the map, -or NULL if there is no error set. The pointer is valid until -the next modifying operation on the map.

-
-
-
-
-

void mapSetError(VSMap *map, const char *errorMessage)

-
-

Adds an error message to a map. The map is cleared first. The error -message is copied. In this state the map may only be freed, cleared -or queried for the error message.

-

For errors encountered in a filter’s “getframe” function, use -setFilterError.

-
-
-
-
-

int mapNumKeys(const VSMap *map)

-
-

Returns the number of keys contained in a property map.

-
-
-
-
-

const char *mapGetKey(const VSMap *map, int index)

-
-

Returns the nth key from a property map.

-

Passing an invalid index will cause a fatal error.

-

The pointer is valid as long as the key exists in the map.

-
-
-
-
-

int mapDeleteKey(VSMap *map, const char *key)

-
-

Removes the property with the given key. All values associated with the -key are lost.

-

Returns 0 if the key isn’t in the map. Otherwise it returns 1.

-
-
-
-
-

int mapNumElements(const VSMap *map, const char *key)

-
-

Returns the number of elements associated with a key in a property map. -Returns -1 if there is no such key in the map.

-
-
-
-
-

int mapGetType(const VSMap *map, const char *key)

-
-

Returns a value from VSPropertyType representing type -of elements in the given key. If there is no such key in the -map, the returned value is ptUnset. Note that also empty -arrays created with mapSetEmpty are typed.

-
-
-
-
-

int mapSetEmpty(const VSMap *map, const char *key, int type)

-
-

Creates an empty array of type in key. Returns non-zero -value on failure due to key already existing or having an -invalid name.

-
-
-
-
-

int64_t mapGetInt(const VSMap *map, const char *key, int index, int *error)

-
-

Retrieves an integer from a specified key in a map.

-

Returns the number on success, or 0 in case of error.

-

If the map has an error set (i.e. if mapGetError() returns non-NULL), -VapourSynth will die with a fatal error.

-
-
index

Zero-based index of the element.

-

Use mapNumElements() to know the total number of elements -associated with a key.

-
-
error

One of VSMapPropertyError, peSuccess on success.

-

You may pass NULL here, but then any problems encountered while -retrieving the property will cause VapourSynth to die with a fatal -error.

-
-
-
-
-
-
-

int mapGetIntSaturated(const VSMap *map, const char *key, int index, int *error)

-
-

Works just like mapGetInt() except that the value returned is also -converted to an integer using saturation.

-
-
-
-
-

const int64_t *mapGetIntArray(const VSMap *map, const char *key, int *error)

-
-

Retrieves an array of integers from a map. Use this function if there -are a lot of numbers associated with a key, because it is faster than -calling mapGetInt() in a loop.

-

Returns a pointer to the first element of the array on success, or NULL -in case of error. Use mapNumElements() to know the total number of -elements associated with a key.

-

See mapGetInt() for a complete description of the arguments and general behavior.

-
-
-
-
-

int mapSetInt(VSMap *map, const char *key, int64_t i, int append)

-
-

Sets an integer to the specified key in a map.

-

Multiple values can be associated with one key, but they must all be the -same type.

-
-
key

Name of the property. Alphanumeric characters and underscore -may be used.

-
-
i

Value to store.

-
-
append

One of VSMapAppendMode.

-
-
-

Returns 0 on success, or 1 if trying to append to a property with the -wrong type to an existing key.

-
-
-
-
-

int mapSetIntArray(VSMap *map, const char *key, const int64_t *i, int size)

-
-

Adds an array of integers to a map. Use this function if there are a -lot of numbers to add, because it is faster than calling mapSetInt() -in a loop.

-

If map already contains a property with this key, that property will -be overwritten and all old values will be lost.

-
-
key

Name of the property. Alphanumeric characters and underscore -may be used.

-
-
i

Pointer to the first element of the array to store.

-
-
size

Number of integers to read from the array. It can be 0, in which case -no integers are read from the array, and the property will be created -empty.

-
-
-

Returns 0 on success, or 1 if size is negative.

-
-
-
-
-

double mapGetFloat(const VSMap *map, const char *key, int index, int *error)

-
-

Retrieves a floating point number from a map.

-

Returns the number on success, or 0 in case of error.

-

See mapGetInt() for a complete description of the arguments and general behavior.

-
-
-
-
-

float mapGetFloatSaturated(const VSMap *map, const char *key, int index, int *error)

-
-

Works just like mapGetFloat() except that the value returned is also -converted to a float.

-
-
-
-
-

const double *mapGetFloatArray(const VSMap *map, const char *key, int *error)

-
-

Retrieves an array of floating point numbers from a map. Use this function if there -are a lot of numbers associated with a key, because it is faster than -calling mapGetFloat() in a loop.

-

Returns a pointer to the first element of the array on success, or NULL -in case of error. Use mapNumElements() to know the total number of -elements associated with a key.

-

See mapGetInt() for a complete description of the arguments and general behavior.

-
-
-
-
-

int mapSetFloat(VSMap *map, const char *key, double d, int append)

-
-

Sets a float to the specified key in a map.

-

See mapSetInt() for a complete description of the arguments and general behavior.

-
-
-
-
-

int mapSetFloatArray(VSMap *map, const char *key, const double *d, int size)

-
-

Adds an array of floating point numbers to a map. Use this function if -there are a lot of numbers to add, because it is faster than calling -mapSetFloat() in a loop.

-

If map already contains a property with this key, that property will -be overwritten and all old values will be lost.

-
-
key

Name of the property. Alphanumeric characters and underscore -may be used.

-
-
d

Pointer to the first element of the array to store.

-
-
size

Number of floating point numbers to read from the array. It can be 0, -in which case no numbers are read from the array, and the property -will be created empty.

-
-
-

Returns 0 on success, or 1 if size is negative.

-
-
-
-
-

const char *mapGetData(const VSMap *map, const char *key, int index, int *error)

-
-

Retrieves arbitrary binary data from a map. Checking mapGetDataTypeHint() -may provide a hint about whether or not the data is human readable.

-

Returns a pointer to the data on success, or NULL in case of error.

-

The array returned is guaranteed to be NULL-terminated. The NULL -byte is not considered to be part of the array (mapGetDataSize -doesn’t count it).

-

The pointer is valid until the map is destroyed, or until the -corresponding key is removed from the map or altered.

-

See mapGetInt() for a complete description of the arguments and general behavior.

-
-
-
-
-

int mapGetDataSize(const VSMap *map, const char *key, int index, int *error)

-
-

Returns the size in bytes of a property of type ptData (see -VSPropertyType), or 0 in case of error. The terminating NULL byte -added by mapSetData() is not counted.

-

See mapGetInt() for a complete description of the arguments and general behavior.

-
-
-
-
-

int mapGetDataTypeHint(const VSMap *map, const char *key, int index, int *error)

-
-

Returns the size in bytes of a property of type ptData (see -VSPropertyType), or 0 in case of error. The terminating NULL byte -added by mapSetData() is not counted.

-

See mapGetInt() for a complete description of the arguments and general behavior.

-
-
-
-
-

int mapSetData(VSMap *map, const char *key, const char *data, int size, int type, int append)

-
-

Sets binary data to the specified key in a map.

-

Multiple values can be associated with one key, but they must all be the -same type.

-
-
key

Name of the property. Alphanumeric characters and the underscore -may be used.

-
-
data

Value to store.

-

This function copies the data, so the pointer should be freed when -no longer needed. A terminating NULL is always added to the copied data -but not included in the total size to make string handling easier.

-
-
size

The number of bytes to copy. If this is negative, everything up to -the first NULL byte will be copied.

-
-
type

One of VSDataTypeHint to hint whether or not it is human readable data.

-
-
append

One of VSMapAppendMode.

-
-
-

Returns 0 on success, or 1 if trying to append to a property with the -wrong type.

-
-
-
-
-

VSNode *mapGetNode(const VSMap *map, const char *key, int index, int *error)

-
-

Retrieves a node from a map.

-

Returns a pointer to the node on success, or NULL in case of error.

-

This function increases the node’s reference count, so freeNode() must -be used when the node is no longer needed.

-

See mapGetInt() for a complete description of the arguments and general behavior.

-
-
-
-
-

int mapSetNode(VSMap *map, const char *key, VSNode *node, int append)

-
-

Sets a node to the specified key in a map.

-

See mapSetInt() for a complete description of the arguments and general behavior.

-
-
-
-
-

int mapConsumeNode(VSMap *map, const char *key, VSNode *node, int append)

-
-

Sets a node to the specified key in a map and decreases the reference count.

-

See mapSetInt() for a complete description of the arguments and general behavior.

-
-
-
-
-

const VSFrame *propGetFrame(const VSMap *map, const char *key, int index, int *error)

-
-

Retrieves a frame from a map.

-

Returns a pointer to the frame on success, or NULL in case of error.

-

This function increases the frame’s reference count, so freeFrame() must -be used when the frame is no longer needed.

-

See mapGetInt() for a complete description of the arguments and general behavior.

-
-
-
-
-

int mapSetFrame(VSMap *map, const char *key, const VSFrame *f, int append)

-
-

Sets a frame to the specified key in a map.

-

See mapSetInt() for a complete description of the arguments and general behavior.

-
-
-
-
-

int mapConsumeFrame(VSMap *map, const char *key, const VSFrame *f, int append)

-
-

Sets a frame to the specified key in a map and decreases the reference count.

-

See mapSetInt() for a complete description of the arguments and general behavior.

-
-
-
-
-

VSFunctionRef *mapGetFunc(const VSMap *map, const char *key, int index, int *error)

-
-

Retrieves a function from a map.

-

Returns a pointer to the function on success, or NULL in case of error.

-

This function increases the function’s reference count, so freeFunction() must -be used when the function is no longer needed.

-

See mapGetInt() for a complete description of the arguments and general behavior.

-
-
-
-
-

int mapSetFunction(VSMap *map, const char *key, VSFunction *func, int append)

-
-

Sets a function object to the specified key in a map.

-

See mapSetInt() for a complete description of the arguments and general behavior.

-
-
-
-
-

int mapConsumeFunction(VSMap *map, const char *key, VSFunction *func, int append)

-
-

Sets a function object to the specified key in a map and decreases the reference count.

-

See mapSetInt() for a complete description of the arguments and general behavior.

-
-
-
-
-

VSPlugin *getPluginByID(const char *identifier, VSCore *core)

-
-

Returns a pointer to the plugin with the given identifier, or NULL -if not found.

-
-
identifier

Reverse URL that uniquely identifies the plugin.

-
-
-
-
-
-
-

VSPlugin *getPluginByNamespace(const char *ns, VSCore *core)

-
-

Returns a pointer to the plugin with the given namespace, or NULL -if not found.

-

getPluginByID is generally a better option.

-
-
ns

Namespace.

-
-
-
-
-
-
-

VSPlugin *getNextPlugin(VSPlugin *plugin, VSCore *core)

-
-

Used to enumerate over all currently loaded plugins. The order -is fixed but provides no other guarantees.

-
-
plugin

Current plugin. Pass NULL to get the first plugin.

-
-
-

Returns a pointer to the next plugin in order or NULL if the final -plugin has been reached.

-
-
-
-
-

const char *getPluginName(VSPlugin *plugin)

-
-

Returns the name of the plugin that was passed to configPlugin.

-
-
-
-
-

const char *getPluginID(VSPlugin *plugin)

-
-

Returns the identifier of the plugin that was passed to configPlugin.

-
-
-
-
-

const char *getPluginNamespace(VSPlugin *plugin)

-
-

Returns the namespace the plugin currently is loaded in.

-
-
-
-
-

VSPluginFunction *getNextPluginFunction(VSPluginFunction *func, VSPlugin *plugin)

-
-

Used to enumerate over all functions in a plugin. The order -is fixed but provides no other guarantees.

-
-
func

Current function. Pass NULL to get the first function.

-
-
plugin

The plugin to enumerate functions in.

-
-
-

Returns a pointer to the next function in order or NULL if the final -function has been reached.

-
-
-
-
-

VSPluginFunction *getPluginFunctionByName(const char *name, VSPlugin *plugin)

-
-

Get a function belonging to a plugin by its name.

-
-
-
-
-

const char *getPluginFunctionName(VSPluginFunction *func)

-
-

Returns the name of the function that was passed to registerFunction.

-
-
-
-
-

const char *getPluginFunctionArguments(VSPluginFunction *func)

-
-

Returns the argument string of the function that was passed to registerFunction.

-
-
-
-
-

const char *getPluginFunctionReturnType(VSPluginFunction *func)

-
-

Returns the return type string of the function that was passed to registerFunction.

-
-
-
-
-

const char *getPluginPath(const VSPlugin *plugin)

-
-

Returns the absolute path to the plugin, including the plugin’s file -name. This is the real location of the plugin, i.e. there are no -symbolic links in the path.

-

Path elements are always delimited with forward slashes.

-

VapourSynth retains ownership of the returned pointer.

-
-
-
-
-

int getPluginVersion(const VSPlugin *plugin)

-
-

Returns the version of the plugin. This is the same as the version number passed to configPlugin.

-
-
-
-
-

VSMap *invoke(VSPlugin *plugin, const char *name, const VSMap *args)

-
-

Invokes a filter.

-

invoke() checks that -the args passed to the filter are consistent with the argument list -registered by the plugin that contains the filter, calls the filter’s -“create” function, and checks that the filter returns the declared types. -If everything goes smoothly, the filter will be ready to generate -frames after invoke() returns.

-
-
plugin

A pointer to the plugin where the filter is located. Must not be NULL.

-

See getPluginByID().

-
-
name

Name of the filter to invoke.

-
-
args

Arguments for the filter.

-
-
-

Returns a map containing the filter’s return value(s). The caller takes -ownership of the map. Use mapGetError() to check if the filter was invoked -successfully.

-

Most filters will either set an error, or one or more clips -with the key “clip”. The exception to this are functions, for example -LoadPlugin, which doesn’t return any clips for obvious reasons.

-
-
-
-
-

VSFunction *createFunction(VSPublicFunction func, void *userData, VSFreeFunctionData free, VSCore *core)

-
-
-
func

typedef void (VS_CC *VSPublicFunction)(const VSMap *in, VSMap *out, void *userData, VSCore *core, const VSAPI *vsapi)

-

User-defined function that may be called in any context.

-
-
userData

Pointer passed to func.

-
-
free

typedef void (VS_CC *VSFreeFunctionData)(void *userData)

-

Callback tasked with freeing userData. Can be NULL.

-
-
-
-
-
-
-

void freeFunction(VSFunction *f)

-
-

Decrements the reference count of a function and deletes it when it reaches 0.

-

It is safe to pass NULL.

-
-
-
-
-

VSFunction *addFunctionRef(VSFunction *f)

-
-

Increments the reference count of a function. Returns f as a convenience.

-
-
-
-
-

void callFunction(VSFunction *func, const VSMap *in, VSMap *out)

-
-

Calls a function. If the call fails out will have an error set.

-
-
func

Function to be called.

-
-
in

Arguments passed to func.

-
-
out

Returned values from func.

-
-
-
-
-
-
-

const VSFrame *getFrame(int n, VSNode *node, char *errorMsg, int bufSize)

-
-

Fetches a frame synchronously. The frame is available when the function -returns.

-

This function is meant for external applications using the core as a -library, or if frame requests are necessary during a filter’s -initialization.

-

Thread-safe.

-
-
n

The frame number. Negative values will cause an error.

-
-
node

The node from which the frame is requested.

-
-
errorMsg

Pointer to a buffer of bufSize bytes to store a possible error -message. Can be NULL if no error message is wanted.

-
-
bufSize

Maximum length for the error message, in bytes (including the -trailing ‘0’). Can be 0 if no error message is wanted.

-
-
-

Returns a reference to the generated frame, or NULL in case of failure. -The ownership of the frame is transferred to the caller.

-
-

Warning

-

Never use inside a filter’s “getframe” function.

-
-
-
-
-
-

void getFrameAsync(int n, VSNode *node, VSFrameDoneCallback callback, void *userData)

-
-

Requests the generation of a frame. When the frame is ready, -a user-provided function is called. Note that the completion -callback will only be called from a single thread at a time.

-

This function is meant for applications using VapourSynth as a library.

-

Thread-safe.

-
-
n

Frame number. Negative values will cause an error.

-
-
node

The node from which the frame is requested.

-
-
callback

typedef void (VS_CC *VSFrameDoneCallback)(void *userData, const VSFrame *f, int n, VSNode *node, const char *errorMsg)

-

Function of the client application called by the core when a requested -frame is ready, after a call to getFrameAsync().

-

If multiple frames were requested, they can be returned in any order. -Client applications must take care of reordering them.

-

This function is only ever called from one thread at a time.

-

getFrameAsync() may be called from this function to request more -frames.

-
-
userData

Pointer to private data from the client application, as passed -previously to getFrameAsync().

-
-
f

Contains a reference to the generated frame, or NULL in case of failure. -The ownership of the frame is transferred to the caller.

-
-
n

The frame number.

-
-
node

Node the frame belongs to.

-
-
errorMsg

String that usually contains an error message if the frame -generation failed. NULL if there is no error.

-
-
-
-
userData

Pointer passed to the callback.

-
-
-
-

Warning

-

Never use inside a filter’s “getframe” function.

-
-
-
-
-
-

const VSFrame *getFrameFilter(int n, VSNode *node, VSFrameContext *frameCtx)

-
-

Retrieves a frame that was previously requested with -requestFrameFilter().

-

Only use inside a filter’s “getframe” function.

-

A filter usually calls this function when its activation reason is -arAllFramesReady or arFrameReady. See VSActivationReason.

-

It is safe to retrieve a frame more than once, but each reference -needs to be freed.

-
-
n

The frame number.

-
-
node

The node from which the frame is retrieved.

-
-
frameCtx

The context passed to the filter’s “getframe” function.

-
-
-

Returns a pointer to the requested frame, or NULL if the requested frame -is not available for any reason. The ownership of the frame is -transferred to the caller.

-
-
-
-
-

void requestFrameFilter(int n, VSNode *node, VSFrameContext *frameCtx)

-
-

Requests a frame from a node and returns immediately.

-

Only use inside a filter’s “getframe” function.

-

A filter usually calls this function when its activation reason is -arInitial. The requested frame can then be retrieved using -getFrameFilter(), when the filter’s activation reason is -arAllFramesReady. See VSActivationReason.

-

It is best to request frames in ascending order, i.e. n, n+1, n+2, etc.

-
-
n

The frame number. Negative values will cause an error.

-
-
node

The node from which the frame is requested.

-
-
frameCtx

The context passed to the filter’s “getframe” function.

-
-
-
-
-
-
-

void releaseFrameEarly(VSNode *node, int n, VSFrameContext *frameCtx)

-
-

By default all requested frames are referenced until a filter’s frame -request is done. In extreme cases where a filter needs to reduce 20+ -frames into a single output frame it may be beneficial to request -these in batches and incrementally process the data instead.

-

Should rarely be needed.

-

Only use inside a filter’s “getframe” function.

-
-
node

The node from which the frame was requested.

-
-
n

The frame number. Invalid frame numbers (not cached or negative) will simply be ignored.

-
-
frameCtx

The context passed to the filter’s “getframe” function.

-
-
-
-
-
-
-

int registerFunction(const char *name, const char *args, const char *returnType, VSPublicFunction argsFunc, void *functionData, VSPlugin *plugin)

-
-

Function that registers a filter exported by the plugin. A plugin can -export any number of filters. This function may only be called during the plugin -loading phase unless the pcModifiable flag was set by configPlugin.

-
-
name

Filter name. The characters allowed are letters, numbers, and the -underscore. The first character must be a letter. In other words: -^[a-zA-Z][a-zA-Z0-9_]*$

-

Filter names should be PascalCase.

-
-
args

String containing the filter’s list of arguments.

-

Arguments are separated by a semicolon. Each argument is made of -several fields separated by a colon. Don’t insert additional -whitespace characters, or VapourSynth will die.

-
-
Fields:
-
The argument name.

The same characters are allowed as for the filter’s name. -Argument names should be all lowercase and use only letters -and the underscore.

-
-
The type.

“int”: int64_t

-

“float”: double

-

“data”: const char*

-

“anode”: const VSNode* (audio type)

-

“vnode”: const VSNode* (video type)

-

“aframe”: const VSFrame* (audio type)

-

“vframe”: const VSFrame* (video type)

-

“func”: const VSFunctionRef*

-

It is possible to declare an array by appending “[]” to the type.

-
-
“opt”

If the parameter is optional.

-
-
“empty”

For arrays that are allowed to be empty.

-
-
“any”

Can only be placed last without a semicolon after. Indicates that all remaining arguments that don’t match -should also be passed through.

-
-
-
-
-

The following example declares the arguments “blah”, “moo”, and “asdf”:

-
blah:vnode;moo:int[]:opt;asdf:float:opt;
-
-
-

The following example declares the arguments “blah” and accepts all other arguments no matter the type:

-
blah:vnode;any
-
-
-
-
returnType

Specifies works similarly to args but instead specifies which keys and what type will be returned. Typically this will be:

-
clip:vnode;
-
-
-

for video filters. It is important to not simply specify “any” for all filters since this information is used for better -auto-completion in many editors.

-
-
argsFunc

typedef void (VS_CC *VSPublicFunction)(const VSMap *in, VSMap *out, void *userData, VSCore *core, const VSAPI *vsapi)

-

User-defined function called by the core to create an instance of the -filter. This function is often named fooCreate.

-

In this function, the filter’s input parameters should be retrieved -and validated, the filter’s private instance data should be -initialised, and createAudioFilter() or createVideoFilter() should be called. This is where -the filter should perform any other initialisation it requires.

-

If for some reason you cannot create the filter, you have to free any -created node references using freeNode(), call mapSetError() on -out, and return.

-
-
in

Input parameter list.

-

Use mapGetInt() and friends to retrieve a parameter value.

-

The map is guaranteed to exist only until the filter’s “init” -function returns. In other words, pointers returned by -mapGetData() will not be usable in the filter’s “getframe” and -“free” functions.

-
-
out

Output parameter list. createAudioFilter() or createVideoFilter() will add the output -node(s) with the key named “clip”, or an error, if something went -wrong.

-
-
userData

Pointer that was passed to registerFunction().

-
-
-
-
functionData

Pointer to user data that gets passed to argsFunc when creating a -filter. Useful to register multiple filters using a single argsFunc -function.

-
-
plugin

Pointer to the plugin object in the core, as passed to -VapourSynthPluginInit2().

-
-
-
-
-
-
-

void cacheFrame(const VSFrame *frame, int n, VSFrameContext *frameCtx)

-
-

Pushes a not requested frame into the cache. This is useful for (source) filters that greatly -benefit from completely linear access and producing all output in linear order.

-

This function may only be used in filters that were created with setLinearFilter.

-

Only use inside a filter’s “getframe” function.

-
-
-
-
-

void setFilterError(const char *errorMessage, VSFrameContext *frameCtx)

-
-

Adds an error message to a frame context, replacing the existing message, -if any.

-

This is the way to report errors in a filter’s “getframe” function. -Such errors are not necessarily fatal, i.e. the caller can try to -request the same frame again.

-
-
-
-
-
-

Functions

-

const VSAPI* getVapourSynthAPI(int version)

-
-

Returns a pointer to the global VSAPI instance.

-

Returns NULL if the requested API version is not supported or if the system -does not meet the minimum requirements to run VapourSynth. It is recommended -to pass VAPOURSYNTH_API_VERSION.

-
-
-
-

Writing plugins

-

A simple VapourSynth plugin which exports one filter will contain five -functions: an entry point (called VapourSynthPluginInit2), a function tasked -with creating a filter instance (often called fooCreate), an “init” function -(often called fooInit), a “getframe” function (often called fooGetframe), -and a “free” function (often called fooFree). These functions are described -below.

-

Another thing a filter requires is an object for storing a filter instance’s -private data. This object will usually contain the filter’s input nodes (if it -has any) and a VSVideoInfo struct describing the video the filter wants to -return.

-

The sdk folder -in the VapourSynth source contains some examples.

-
-

typedef void (VS_CC *VSInitPlugin)(VSPlugin *plugin, const VSPLUGINAPI *vspapi)

-
-

A plugin’s entry point. It must be called VapourSynthPluginInit2. -This function is called after the core loads the shared library. Its purpose -is to configure the plugin and to register the filters the plugin wants to -export.

-
-
plugin

A pointer to the plugin object to be initialized.

-
-
vspapi

A pointer to a VSPLUGINAPI struct with a subset of the VapourSynth API used for initializing plugins. -The proper way to do things is to call configPlugin and then registerFunction for each function to export.

-
-
-
-
-

typedef const VSFrame *(VS_CC *VSFilterGetFrame)(int n, int activationReason, void *instanceData, void **frameData, VSFrameContext *frameCtx, VSCore *core, const VSAPI *vsapi)

-
-

A filter’s “getframe” function. It is called by the core when it needs -the filter to generate a frame.

-

It is possible to allocate local data, persistent during the multiple -calls requesting the output frame.

-

In case of error, call setFilterError(), free *frameData if required, -and return NULL.

-

Depending on the VSFilterMode set for the filter, multiple output frames -could be requested concurrently.

-

It is never called concurrently for the same frame number.

-
-
n

Requested frame number.

-
-
activationReason

One of VSActivationReason.

-

This function is first called with activationReason arInitial. At this -point the function should request the input frames it needs and return -NULL. When one or all of the requested frames are ready, this function -is called again with arAllFramesReady. -The function should only return a frame when called with -activationReason arAllFramesReady.

-

If a the function is called with arError all processing has to be aborted -and any.

-
-
instanceData

The filter’s private instance data.

-
-
frameData

Optional private data associated with output frame number n. -It must be deallocated before the last call for the given frame -(arAllFramesReady or error).

-

It points to a void *[4] array of memory that may be used freely. -See filters like Splice and Trim for examples.

-
-
-

Return a reference to the output frame number n when it is ready, or NULL. -The ownership of the frame is transferred to the caller.

-
-
-

typedef void (VS_CC *VSFilterFree)(void *instanceData, VSCore *core, const VSAPI *vsapi)

-
-

A filter’s “free” function.

-

This is where the filter should free everything it allocated, -including its instance data.

-
-
instanceData

The filter’s private instance data.

-
-
-
-
-
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/api/vshelper4.h.html b/Programs/doc/api/vshelper4.h.html deleted file mode 100644 index 01a9805..0000000 --- a/Programs/doc/api/vshelper4.h.html +++ /dev/null @@ -1,365 +0,0 @@ - - - - - - - VSHelper4.h — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

VSHelper4.h

-
-

Table of contents

-

Introduction

-
-
Macros

VSH_STD_PLUGIN_ID

-

VSH_RESIZE_PLUGIN_ID

-

VSH_TEXT_PLUGIN_ID

-

VS_RESTRICT

-

VSH_ALIGNED_MALLOC

-

VSH_ALIGNED_FREE

-

VSMIN

-

VSMAX

-
-
Functions

vsh_aligned_malloc

-

vsh_aligned_free

-

isConstantFormat

-

isSameVideoFormat

-

isSameVideoPresetFormat

-

isSameVideoInfo

-

isSameAudioFormat

-

isSameAudioInfo

-

muldivRational

-

addRational

-

reduceRational

-

int64ToIntS

-

doubleToFloatS

-

bitblt

-

areValidDimensions

-
-
-
-
-

Introduction

-

This is a collection of helpful macros and functions. Note that all functions (not macros) -are either prefixed with vsh_ in C mode or placed in the vsh namespace for C++. This documentation -will use the C++ names for these function.

-
-
-

Macros

-
-

VSH_STD_PLUGIN_ID

-

Macro defined to the internal std plugin id provided for convenience.

-
-
-

VSH_RESIZE_PLUGIN_ID

-

Macro defined to the internal resizer plugin id provided for convenience.

-
-
-

VSH_TEXT_PLUGIN_ID

-

Macro defined to the internal std plugin id provided for convenience.

-
-
-

VS_RESTRICT

-

Attempts to provide a portable definition of the C99 restrict keyword, -or its C++ counterpart.

-
-
-

VSH_ALIGNED_MALLOC

-

VSH_ALIGNED_MALLOC(pptr, size, alignment)

-

Expands to _aligned_malloc() in Windows, and posix_memalign() elsewhere. Note that -the arguments are in the style of posix_memalign().

-

pptr is a pointer to a pointer.

-
-
-

VSH_ALIGNED_FREE

-

VSH_ALIGNED_FREE(ptr)

-

Expands to _aligned_free() in Windows, and free() elsewhere.

-

ptr is a pointer.

-
-
-

VSMIN

-

VSMIN(a, b)

-

Returns the minimum of the two numbers.

-
-
-

VSMAX

-

VSMAX(a, b)

-

Returns the maximum of the two numbers.

-
-
-
-

Functions

-
-

vsh_aligned_malloc

-
-
-T *vsh::vsh_aligned_malloc(size_t size, size_t alignment)
-

A templated aligned malloc for C++. It uses the same functions as the -VSH_ALIGNED_MALLOC macro but is easier to use.

-
- -
-
-

vsh_aligned_free

-
-
-void vsh::vsh_aligned_free(void *ptr)
-

This simply uses the VSH_ALIGNED_FREE macro.

-
- -
-
-

isConstantFormat

-
-
-static inline bool vsh::isConstantFormat(const VSVideoInfo *vi)
-

Checks if a clip’s format and dimensions are known (and therefore constant).

-
- -
-
-

isSameVideoFormat

-
-
-static inline bool vsh::isSameVideoFormat(const VSVideoInfo *v1, const VSVideoInfo *v2)
-

Checks if two clips have the same video format. If the format is -unknown in both, it will be considered the same.

-
- -
-
-

isSameVideoPresetFormat

-
-
-static inline bool vsh::isSameVideoPresetFormat(unsigned presetFormat, const VSVideoFormat *v, VSCore *core, const VSAPI *vsapi)
-

Checks if a clip has the same video format as the preset.

-
- -
-
-

isSameVideoInfo

-
-
-static inline bool vsh::isSameVideoInfo(const VSVideoInfo *v1, const VSVideoInfo *v2)
-

Checks if two clips have the same video format and dimensions. If the format is -unknown in both, it will be considered the same. This is also true for the -dimensions. Framerate is not taken into consideration when comparing.

-
- -
-
-

isSameAudioFormat

-
-
-static inline bool vsh::isSameAudioFormat(const VSAudioInfo *v1, const VSAudioInfo *v2)
-

Checks if two clips have the same audio format.

-
- -
-
-

isSameAudioInfo

-
-
-static inline bool vsh::isSameAudioInfo(const VSAudioInfo *v1, const VSAudioInfo *v2)
-

Checks if two clips have the same audio format and samplerate.

-
- -
-
-

muldivRational

-
-
-static inline void vsh::muldivRational(int64_t *num, int64_t *den, int64_t mul, int64_t div)
-

Multiplies two rational numbers and reduces the result, i.e. -num/den * mul/div. The result is stored in num and den.

-

The caller must ensure that div is not 0.

-
- -
-
-

reduceRational

-
-
-static inline void vsh::reduceRational(int64_t *num, int64_t *den)
-

Reduces a rational number.

-
- -
-
-

addRational

-
-
-static inline void vsh::addRational(int64_t *num, int64_t *den, int64_t addnum, int64_t addden)
-

Adds two rational numbers and reduces the result, i.e. -num/den + addnum/addden. The result is stored in num and den.

-
- -
-
-

int64ToIntS

-
-
-static inline int vsh::int64ToIntS(int64_t i)
-

Converts an int64_t to int with signed saturation. It’s useful to silence -warnings when reading integer properties from a VSMap and to avoid unexpected behavior on int overflow.

-
- -
-
-

doubleToFloatS

-
-
-static inline int vsh::doubleToFloatS(double d)
-

Converts a double to float. It’s useful to silence -warnings when reading double properties from a VSMap and mostly exists to mirror int64ToIntS.

-
- -
-
-

bitblt

-
-
-static inline void vsh::bitblt(void *dstp, int dst_stride, const void *srcp, int src_stride, size_t row_size, size_t height)
-

Copies bytes from one plane to another. Basically, it is memcpy in a loop.

-

row_size is in bytes.

-
- -
-
-

areValidDimensions

-
-
-static inline bool vsh::areValidDimensions(const VSFormat *fi, int width, int height)
-

Checks if the given dimensions are valid for a particular format, with regards -to chroma subsampling.

-
- -
-
-
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/api/vsscript4.h.html b/Programs/doc/api/vsscript4.h.html deleted file mode 100644 index 7abae53..0000000 --- a/Programs/doc/api/vsscript4.h.html +++ /dev/null @@ -1,386 +0,0 @@ - - - - - - - VSScript4.h — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

VSScript4.h

-
-

Table of contents

-

Introduction

-
-
Structs

VSScript

-

VSScriptAPI

-
-
Functions

getVSScriptAPI

-

getApiVersion

-

getVSAPI

-

createScript

-

getCore

-

evaluateBuffer

-

evaluateFile

-

getError

-

getExitCode

-

getVariable

-

setVariables

-

getOutputNode

-

getOutputAlphaNode

-

getAltOutputMode

-

freeScript

-

evalSetWorkingDir

-
-
-
-
-

Introduction

-

VSScript provides a convenient wrapper for VapourSynth’s scripting interface(s), allowing the evaluation of VapourSynth scripts and retrieval of output clips.

-

For reasons unknown, the VSScript library is called VSScript in Windows and vapoursynth-script everywhere else.

-

At this time, VapourSynth scripts can be written only in Python (version 3).

-

Here are a few users of the VSScript library:

-
-
-
-
-

Note

-

If libvapoursynth-script is loaded with dlopen(), the RTLD_GLOBAL flag must be used. If not, Python won’t be able to import binary modules. This is due to Python’s design.

-
-
-
-

Structs

-
-

VSScript

-

A script environment. All evaluation and communication with evaluated scripts happens through a VSScript object.

-
-
-

VSScriptAPI

-

This struct is the way to access VSScript’s public API.

-
-
-
-

Functions

-
-

getVSScriptAPI

-
-
-const VSSCRIPTAPI *getVSScriptAPI(int version)
-

Returns a struct containing function pointer for the api. Will return NULL is the specified version isn’t supported.

-

It is recommended to always pass VSSCRIPT_API_VERSION.

-
- -
-
-

getApiVersion

-
-
-int getApiVersion()
-

Returns the api version provided by vsscript.

-
- -
-
-

getVSAPI

-
-
-const VSAPI *getVSAPI(int version)
-

Retrieves the VSAPI struct. Exists mostly as a convenience so the vapoursynth module doesn’t have to be explicitly loaded.

-

This could return NULL if the VapourSynth library doesn’t provide the requested version.

-
- -
-
-

createScript

-
-
-VSScript *createScript(VSCore *core)
-

Creates an empty script environment that can be used to evaluate scripts. Passing a pre-created core can be usful to have custom core creation flags, log callbacks or plugins pre-loaded. Passing NULL will automatically create a new core with default settings.

-

Takes over ownership of the core regardless of success or failure. Returns NULL on error.

-
- -
-
-

getCore

-
-
-VSCore *getCore(VSScript *handle)
-

Retrieves the VapourSynth core that was created in the script environment. If a VapourSynth core has not been created yet, it will be created now, with the default options (see the Python Reference).

-

VSScript retains ownership of the returned core object.

-

Returns NULL on error.

-
- -
-
-

evaluateBuffer

-
-
-int evaluateBuffer(VSScript *handle, const char *buffer, const char *scriptFilename)
-

Evaluates a script contained in a C string. Can be called multiple times on the same script environment to successively add more processing.

-
-
handle

Pointer to a script environment.

-
-
buffer

The entire script to evaluate, as a C string.

-
-
scriptFilename

A name for the script, which will be displayed in error messages. If this is NULL, the name “<string>” will be used.

-

The special __file__ variable will be set to scriptFilename’s absolute path if this is not NULL.

-
-
-

Returns non-zero in case of errors. The error message can be retrieved with getError(). If the script calls sys.exit(code) the exit code can be retrieved with getExitCode(). The working directory behavior can be changed by calling evalSetWorkingDir() before this function.

-
- -
-
-

evaluateFile

-
-
-int evaluateFile(VSScript **handle, const char *scriptFilename)
-

Evaluates a script contained in a file. This is a convenience function which reads the script from a file for you. It will only read the first 16 MiB which should be enough for everyone.

-

Behaves the same as evaluateBuffer().

-
- -
-
-

getError

-
-
-const char *getError(VSScript *handle)
-

Returns the error message from a script environment, or NULL, if there is no error.

-

It is okay to pass NULL.

-

VSScript retains ownership of the pointer and it is only guaranteed to be valid until the next vsscript operation on the handle.

-
- -
-
-

getExitCode

-
-
-int getExitCode(VSScript *handle)
-

Returns the exit code if the script calls sys.exit(code), or 0, if the script fails for other reasons or calls sys.exit(0).

-

It is okay to pass NULL.

-
- -
-
-

getVariable

-
-
-int getVariable(VSScript *handle, const char *name, VSMap *dst)
-

Retrieves a variable from the script environment.

-

If a VapourSynth core has not been created yet in the script environment, one will be created now, with the default options (see the Python Reference).

-
-
name

Name of the variable to retrieve.

-
-
dst

Map where the variable’s value will be placed, with the key name.

-
-
-

Returns non-zero on error.

-
- -
-
-

setVariables

-
-
-int vsscript_setVariable(VSScript *handle, const VSMap *vars)
-

Sets variables in the script environment.

-

The variables are now available to the script.

-

If a VapourSynth core has not been created yet in the script environment, one will be created now, with the default options (see the Python Reference).

-
-
vars

Map containing the variables to set.

-
-
-

Returns non-zero on error.

-
- -
-
-

getOutputNode

-
-
-VSNode *getOutputNode(VSScript *handle, int index)
-

Retrieves a node from the script environment. A node in the script must have been marked for output with the requested index.

-

The returned node has its reference count incremented by one.

-

Returns NULL if there is no node at the requested index.

-
- -
-
-

getOutputAlphaNode

-
-
-VSNode *getOutputAlphaNode(VSScript *handle, int index)
-

Retrieves an alpha node from the script environment. A node with associated alpha in the script must have been marked for output with the requested index.

-

The returned node has its reference count incremented by one.

-

Returns NULL if there is no alpha node at the requested index.

-
- -
-
-

getAltOutputMode

-
-
-int getAltOutputMode(VSScript *handle, int index)
-

Retrieves the alternative output mode settings from the script. This value has no fixed meaning but in vspipe and vsvfw it -indicates that alternate output formats should be used when multiple ones are available. It is up to the client application to define the exact meaning or simply disregard it completely.

-

Returns 0 if there is no alt output mode set.

-
- -
-
-

freeScript

-
-
-void freeScript(VSScript *handle)
-

Frees a script environment. handle is no longer usable.

-
    -
  • Cancels any clips set for output in the script environment.

  • -
  • Clears any variables set in the script environment.

  • -
  • Clears the error message from the script environment, if there is one.

  • -
  • Frees the VapourSynth core used in the script environment, if there is one.

  • -
-

Since this function frees the VapourSynth core, it must be called only after all frame requests are finished and all objects obtained from the script have been freed (frames, nodes, etc).

-

It is safe to pass NULL.

-
- -
-
-

evalSetWorkingDir

-
-
-void evalSetWorkingDir(VSScript *handle, int setCWD)
-

Set whether or not the working directory is temporarily changed to the same -location as the script file when evaluateFile is called. Off by default.

-
- -
-
-
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/apireference.html b/Programs/doc/apireference.html deleted file mode 100644 index c7ae4cb..0000000 --- a/Programs/doc/apireference.html +++ /dev/null @@ -1,240 +0,0 @@ - - - - - - - VapourSynth C API Reference — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

VapourSynth C API Reference

-

See the example filters in the sdk dir. Reading simplefilters.c, which contains -several built-in functions, can also be very helpful.

-
-

Public Headers

- -
-
-

Common Pitfalls

-

There are several minor pitfalls related to the threading and design that have to be taken into consideration. Most of them usually aren’t a problem but here’s a small checklist of things you have to watch out for sometimes.

-
-

General API

-

You may not pass objects (clips, functions and so on) owned by one core as arguments to filters in another core. A manual full deep copy of the data you want to pass on is required. This is generally not a problem since you should never need more than one core per filter graph.

-
-
-

Plugins

-

Plugin code may run more multithreaded than it initially appears. VapourSynthPluginInit is the only function always guaranteed to not run in parallel. This means that the constructor and destructor of a filter may be run in parallel for several instances. Use proper synchronization if you need to initialize shared data.

-

The GetFrame function is a bit more complicated so see the reference of the constants. Do however note that the parallelism is per instance. Even if a filter is fmUnordered or fmSerial other instances may enter GetFrame simultaneously.

-

There are two common misconseptions about which mode should be used. A simple rule is that fmSerial should never be used. And source filters (those returning a frame on arInitial) that need locking should use fmUnordered.

-
-
-
-

Reserved Frame Properties

-

All frames contain a map of key–value pairs. It is recommended that these -properties are named using only a-z, A-Z, 0-9 using CamelCase. There is a -special category of keys starting with _ which have strictly defined meanings -specified below. It is acceptable to not set any of these keys if they are -unknown. It is also a fatal error to set them to a value not specified below.

-

int _ChromaLocation

-
-

Chroma sample position in YUV formats.

-

0=left, 1=center, 2=topleft, 3=top, 4=bottomleft, 5=bottom.

-
-

int _ColorRange

-
-

Full or limited range (PC/TV range). Primarily used with YUV formats.

-

0=full range, 1=limited range.

-
-

int _Primaries

-
-

Color primaries as specified in ITU-T H.265 Table E.3.

-
-

int _Matrix

-
-

Matrix coefficients as specified in ITU-T H.265 Table E.5.

-
-

int _Transfer

-
-

Transfer characteristics as specified in ITU-T H.265 Table E.4.

-
-

int _FieldBased

-
-

If the frame is composed of two independent fields (interlaced).

-

0=frame based (progressive), 1=bottom field first, 2=top field first.

-
-

float _AbsoluteTime

-
-

The frame’s absolute timestamp in seconds if reported by the source filter. -Should only be set by the source filter and not be modified. Use durations -for all operations that depend on frame length.

-
-

int _DurationNum, int _DurationDen

-
-

The frame’s duration in seconds as a rational number. Filters that -modify the framerate should also change these values.

-

This fraction should always be normalized.

-
-

bint _Combed

-
-

Whether or not the frame needs postprocessing, usually hinted from field -matching filters.

-
-

int _Field

-
-

If the frame was produced by something like core.std.SeparateFields, -this property signals which field was used to generate this frame.

-

0=from bottom field, 1=from top field.

-
-

string _PictType

-
-

A single character describing the frame type. It uses the common -IPB letters but other letters may also be used for formats with -additional frame types.

-
-

int _SARNum, int _SARDen

-
-

Pixel (sample) aspect ratio as a rational number.

-
-

bint _SceneChangeNext

-
-

If 1, this frame is the last frame of the current scene. The next frame starts a new scene.

-
-

bint _SceneChangePrev

-
-

If 1, this frame starts a new scene.

-
-

frame _Alpha

-
-

A clip’s alpha channel can be attached to the clip one frame at a -time using this property.

-
-
-
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/applications.html b/Programs/doc/applications.html deleted file mode 100644 index 9d8c10e..0000000 --- a/Programs/doc/applications.html +++ /dev/null @@ -1,156 +0,0 @@ - - - - - - - Applications and Libraries — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

Applications and Libraries

-
-

Applications

-
    -
  • D2V Witch – creates indexes that can be opened by d2vsource

  • -
  • Hybrid (Doom9) – encoding GUI with VapourSynth support

  • -
  • mpv.net – a media player with VapourSynth built-in

  • -
  • SmoothVideo Project – a plugin/video player component for realtime frame interpolation

  • -
  • StaxRip – encoding GUI with extended VapourSynth scripting support

  • -
  • VapourSynth Editor (Doom9) – an editor with syntax completion and fast preview support

  • -
  • VapourSynth Editor 2 (Doom9) – a spiritual successor to VapourSynth Editor

  • -
  • VirtualDub2 (Doom9) – VirtualDub with added support for high bitdepth colorspaces, useful for previewing

  • -
  • vsmkv – a FUSE-based virtual filesystem for exporting VapourSynth scripts as uncompressed videos in the Matroska (MKV) file format

  • -
  • vspreview – an advanced standalone previewer written in python with too many features to list

  • -
  • vspreview-rs (Doom9) – minimal VapourSynth script previewer

  • -
  • Wobbly (Doom9) – IVTC assistant similar to YATTA

  • -
  • Yuuno – incorporates VapourSynth into Jupyter

  • -
-
-
-

Libraries

- -
-
-

Tools

- -
-
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions.html b/Programs/doc/functions.html deleted file mode 100644 index aabf06e..0000000 --- a/Programs/doc/functions.html +++ /dev/null @@ -1,551 +0,0 @@ - - - - - - - Function Reference — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

Function Reference

-
-

General Functions

- -
-
-

Video Functions

-
- -
-
-

Text

- -
-
-
-

Audio Functions

- -
-
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/audio/assumesamplerate.html b/Programs/doc/functions/audio/assumesamplerate.html deleted file mode 100644 index 0c7dac4..0000000 --- a/Programs/doc/functions/audio/assumesamplerate.html +++ /dev/null @@ -1,146 +0,0 @@ - - - - - - - AssumeSampleRate — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

AssumeSampleRate

-
-
-std.AssumeSampleRate(anode clip[, anode src, int samplerate])
-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/audio/audiogain.html b/Programs/doc/functions/audio/audiogain.html deleted file mode 100644 index 4683eb4..0000000 --- a/Programs/doc/functions/audio/audiogain.html +++ /dev/null @@ -1,151 +0,0 @@ - - - - - - - AudioGain — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

AudioGain

-
-
-std.AudioGain(anode clip, float[] gain)
-

AudioGain can either change the volume of individual channels -if a separate gain for each channel is given or if only a single -gain value is supplied it’s applied to all channels.

-

Negative gain values are allowed. Applying a too large gain will -lead to clipping in integer formats.

-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/audio/audioloop.html b/Programs/doc/functions/audio/audioloop.html deleted file mode 100644 index 8c03fca..0000000 --- a/Programs/doc/functions/audio/audioloop.html +++ /dev/null @@ -1,150 +0,0 @@ - - - - - - - AudioLoop — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

AudioLoop

-
-
-std.AudioLoop(anode clip[, int times=0])
-

Returns a clip with the frames or samples repeated over and over again. If times is -less than 1 the clip will be repeated until the maximum clip length is -reached, otherwise it will be repeated times times.

-

In Python, std.AudioLoop can also be invoked using the multiplication operator.

-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/audio/audiomix.html b/Programs/doc/functions/audio/audiomix.html deleted file mode 100644 index 5457b74..0000000 --- a/Programs/doc/functions/audio/audiomix.html +++ /dev/null @@ -1,171 +0,0 @@ - - - - - - - AudioMix — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

AudioMix

-
-
-std.AudioMix(anode[] clips, float[] matrix, int[] channels_out)
-

AudioMix can mix and combine channels from different clips in the most -general way possible.

-

Most of the returned clip’s properties are implicitly determined from the -first clip given to clips.

-

The clips parameter takes one or more clips with the same format. If the clips -are different lengths they’ll be zero extended to that of the longest.

-

The argument matrix applies the coefficients to each channel of each input clip where -the channels are in the numerical order of their channel constants. For example a stereo clip -will have its channels presented in the order FRONT_LEFT and then FRONT_RIGHT.

-

Output channels and order is determined by the channels_out array -between input index and output channel happens on the order of lowest output channel -identifier to the highest.

-

Below are some examples of useful operations.

-

Downmix stereo audio to mono:

-
AudioMix(clips=clip, matrix=[0.5, 0.5], channels_out=[vs.FRONT_CENTER])
-
-
-

Downmix 5.1 audio:

-
AudioMix(clips=clip, matrix=[1, 0, 0.7071, 0, 0.7071, 0, 0, 1, 0.7071, 0, 0, 0.7071], channels_out=[vs.FRONT_LEFT, vs.FRONT_RIGHT])
-
-
-

Copy stereo audio to 5.1 and zero the other channels:

-
AudioMix(clips=c, matrix=[1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], channels_out=[vs.FRONT_LEFT, vs.FRONT_RIGHT, vs.FRONT_CENTER, vs.LOW_FREQUENCY, vs.BACK_LEFT, vs.BACK_RIGHT])
-
-
-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/audio/audioreverse.html b/Programs/doc/functions/audio/audioreverse.html deleted file mode 100644 index 2702cb8..0000000 --- a/Programs/doc/functions/audio/audioreverse.html +++ /dev/null @@ -1,149 +0,0 @@ - - - - - - - AudioReverse — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

AudioReverse

-
-
-std.AudioReverse(anode clip)
-

Returns a clip with the frame or sample order reversed. For example, a clip with 3 -frames would have the frame order 2, 1, 0.

-

In Python, std.AudioReverse can also be invoked by slicing a clip.

-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/audio/audiosplice.html b/Programs/doc/functions/audio/audiosplice.html deleted file mode 100644 index f6f8abe..0000000 --- a/Programs/doc/functions/audio/audiosplice.html +++ /dev/null @@ -1,150 +0,0 @@ - - - - - - - AudioSplice — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

AudioSplice

-
-
-std.AudioSplice(anode[] clips)
-

Returns a clip with all clips appended in the given order.

-

Splicing clips with different formats or dimensions is -considered an error unless mismatch is true.

-

In Python, std.AudioSplice can also be invoked using the addition operator.

-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/audio/audiotrim.html b/Programs/doc/functions/audio/audiotrim.html deleted file mode 100644 index 3ca0c2b..0000000 --- a/Programs/doc/functions/audio/audiotrim.html +++ /dev/null @@ -1,149 +0,0 @@ - - - - - - - AudioTrim — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

AudioTrim

-
-
-std.AudioTrim(anode clip[, int first=0, int last, int length])
-

AudioTrim performs exactly the same operation on audio clips but the unit is -obviously samples instead of frames.

-

In Python, std.AudioTrim can also be invoked by slicing a clip.

-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/audio/blankaudio.html b/Programs/doc/functions/audio/blankaudio.html deleted file mode 100644 index c0e4c62..0000000 --- a/Programs/doc/functions/audio/blankaudio.html +++ /dev/null @@ -1,157 +0,0 @@ - - - - - - - BlankAudio — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

BlankAudio

-
-
-std.BlankAudio([anode clip, int[] channels=[FRONT_LEFT, FRONT_RIGHT], int bits=16, int sampletype=INTEGER, int samplerate=44100, int length=(10*samplerate), bint keep=0])
-

Generates a new empty clip. This can be useful to have when editing audio -or for testing. The default is a 10 second long 44.1kHz 16 bit stereo clip. -Instead of specifying every property individually, BlankAudio can also copy -the properties from clip. If both an argument such as sampletype, and clip -are set, then sampletype will take precedence.

-

The channels argument is a list of channel constants. Specifying the same channel twice -is not allowed.

-

The possible sampletype values are currently INTEGER (0) and FLOAT (1).

-

If keep is set, a reference to the same frame is returned on every request. -Otherwise a new frame is generated every time. There should usually be no -reason to change this setting.

-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/audio/setaudiocache.html b/Programs/doc/functions/audio/setaudiocache.html deleted file mode 100644 index 476c039..0000000 --- a/Programs/doc/functions/audio/setaudiocache.html +++ /dev/null @@ -1,147 +0,0 @@ - - - - - - - SetAudioCache — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

SetAudioCache

-
-
-std.SetAudioCache(anode clip[, int mode, int fixedsize, int maxsize, int historysize])
-

see SetVideoCache

-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/audio/shufflechannels.html b/Programs/doc/functions/audio/shufflechannels.html deleted file mode 100644 index 2f53bf4..0000000 --- a/Programs/doc/functions/audio/shufflechannels.html +++ /dev/null @@ -1,181 +0,0 @@ - - - - - - - ShuffleChannels — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

ShuffleChannels

-
-
-std.ShuffleChannels(anode[] clips, int[] channels_in, int[] channels_out)
-

ShuffleChannels can extract and combine channels from different clips in the most -general way possible.

-

Most of the returned clip’s properties are implicitly determined from the -first clip given to clips.

-

The clips parameter takes one or more clips with the same format. If the clips -are different lengths they’ll be zero extended to that of the longest.

-

The argument channels_in controls which of the input clips’ channels to use and -takes a channel constants as its argument. Specifying a non-existent channel -is an error. If more channels_in than clips values are specified then the last -clip in the clips list is reused as a source. In addition to the channel constant -it’s also possible to specify the nth channel by using negative numbers.

-

The output channel mapping is determined by channels_out and corresponds to the -input channel order. The number of channels_out entries must be the same as the -number of channels_in entries. Specifying the same output channel twice is an error.

-

Below are some examples of useful operations.

-

Extract the left channel (assuming it exists):

-
ShuffleChannels(clips=clip, channels_in=vs.FRONT_LEFT, channels_out=vs.FRONT_LEFT)
-
-
-

Swap left and right audio channels in a stereo clip:

-
ShuffleChannels(clips=clip, channels_in=[vs.FRONT_RIGHT, vs.FRONT_LEFT], channels_out=[vs.FRONT_LEFT, vs.FRONT_RIGHT])
-
-
-

Swap left and right audio channels in a stereo clip (alternate ordering of arguments):

-
ShuffleChannels(clips=clip, channels_in=[vs.FRONT_LEFT, vs.FRONT_RIGHT], channels_out=[vs.FRONT_RIGHT, vs.FRONT_LEFT])
-
-
-

Swap left and right audio channels in a stereo clip (alternate indexing):

-
ShuffleChannels(clips=clip, channels_in=[-2, -1], channels_out=[vs.FRONT_LEFT, vs.FRONT_RIGHT])
-
-
-

Merge 2 mono audio clips into a single stereo clip:

-
ShuffleChannels(clips=[clipa, clipb], channels_in=[vs.FRONT_LEFT, vs.FRONT_LEFT], channels_out=[vs.FRONT_LEFT, vs.FRONT_RIGHT])
-
-
-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/audio/splitchannels.html b/Programs/doc/functions/audio/splitchannels.html deleted file mode 100644 index 1ef737a..0000000 --- a/Programs/doc/functions/audio/splitchannels.html +++ /dev/null @@ -1,148 +0,0 @@ - - - - - - - SplitChannels — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

SplitChannels

-
-
-std.SplitChannels(anode clip)
-

SplitChannels returns each audio channel of the input as -a separate clip.

-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/general/loadallplugins.html b/Programs/doc/functions/general/loadallplugins.html deleted file mode 100644 index 06ca792..0000000 --- a/Programs/doc/functions/general/loadallplugins.html +++ /dev/null @@ -1,152 +0,0 @@ - - - - - - - LoadAllPlugins — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

LoadAllPlugins

-
-
-std.LoadAllPlugins(string path)
-

Loads all native VapourSynth plugins found in the -specified path. Plugins that fail to load are -silently skipped.

-

Beware of Python’s escape character, this will fail:

-
LoadPlugin(path='c:\plugins')
-
-
-

Correct ways:

-
LoadPlugin(path='c:/plugins')
-LoadPlugin(path=r'c:\plugins')
-LoadPlugin(path='c:\\plugins\\')
-
-
-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/general/loadplugin.html b/Programs/doc/functions/general/loadplugin.html deleted file mode 100644 index 6cba183..0000000 --- a/Programs/doc/functions/general/loadplugin.html +++ /dev/null @@ -1,157 +0,0 @@ - - - - - - - LoadPlugin — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

LoadPlugin

-
-
-std.LoadPlugin(string path, bint altsearchpath = False)
-

Load a native VapourSynth plugin. If successful, the loaded plugin’s -functions will end up in their own namespace.

-

Returns an error if a plugin with the same identifier or namespace already -has been loaded. This is to prevent naming collisions or multiple versions -of the same plugin being loaded at once.

-

Plugins are normally loaded with a very specific search order for -dependencies. Setting altsearchpath modifies this behavior to also -include dlls in the PATH.

-

Beware of Python’s escape character, this will fail:

-
LoadPlugin(path='c:\plugins\filter.dll')
-
-
-

Correct ways:

-
LoadPlugin(path='c:/plugins/filter.dll')
-LoadPlugin(path=r'c:\plugins\filter.dll')
-LoadPlugin(path='c:\\plugins\\filter.dll')
-
-
-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/general/loadpluginavs.html b/Programs/doc/functions/general/loadpluginavs.html deleted file mode 100644 index 6fb4a80..0000000 --- a/Programs/doc/functions/general/loadpluginavs.html +++ /dev/null @@ -1,177 +0,0 @@ - - - - - - - LoadPlugin (Avisynth Compatibility) — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

LoadPlugin (Avisynth Compatibility)

-
-
-avs.LoadPlugin(string path)
-

Load an Avisynth 2.5 (32 bit only), 2.6 (32 and 64 bit) or Avisynth+ (32 and 64 bit) plugin. -If successful, the loaded plugin’s functions will end up in the avs namespace. Note that -in the case of Avisynth+ there’s no way to use the formats combined with alpha or -higher bitdepth packed RGB. Coincidentally there are no plugins that use this in a -meaningful way yet.

-

The compatibility module can work with a large number of Avisynth’s plugins. -However, the wrapping is not complete, so the following things will cause -problems:

-
-
    -
  • The plugin expects YUY2 or RGB32 input. In this case provide input in -either YUV422P8 or RGB24 format pass compatpack=True as an argument -to the Avisynth function.

  • -
  • The plugin tries to call env->invoke(). -These calls are ignored when it is safe to do so, but otherwise they -will most likely trigger a fatal error.

  • -
  • Plugins trying to read global variables. -There are no global variables.

  • -
-
-

If there are function name collisions functions will have a number appended -to them to make them distinct. For example if three functions are named -func then they will be named func, func_2 and func_3. This means -that Avisynth functions that have multiple overloads (rare) will give -each overload a different name.

-

Note that if you are really insane you can load Avisynth’s VirtualDub plugin -loader and use VirtualDub plugins as well. Function overloads are very common -when dealing with VirtualDub.

-

Beware of Python’s escape character, this will fail:

-
LoadPlugin(path='c:\plugins\filter.dll')
-
-
-

Correct ways:

-
LoadPlugin(path='c:/plugins/filter.dll')
-LoadPlugin(path=r'c:\plugins\filter.dll')
-LoadPlugin(path='c:\\plugins\\filter.dll')
-
-
-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/general/setmaxcpu.html b/Programs/doc/functions/general/setmaxcpu.html deleted file mode 100644 index af9d550..0000000 --- a/Programs/doc/functions/general/setmaxcpu.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - - SetMaxCPU — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

SetMaxCPU

-
-
-std.SetMaxCPU(string cpu)
-

This function is only intended for testing and debugging purposes -and sets the maximum used instruction set for optimized functions.

-

Possible values for x86: “avx2”, “sse2”, “none”

-

Other platforms: “none”

-

By default all supported cpu features are used.

-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/video/addborders.html b/Programs/doc/functions/video/addborders.html deleted file mode 100644 index 0d711f2..0000000 --- a/Programs/doc/functions/video/addborders.html +++ /dev/null @@ -1,194 +0,0 @@ - - - - - - - AddBorders — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

AddBorders

-
-
-std.AddBorders(vnode clip[, int left=0, int right=0, int top=0, int bottom=0, float[] color=<black>])
-

Adds borders to frames. The arguments specify the number of pixels to add on -each side. They must obey the subsampling restrictions. -The newly added borders will be set to color.

-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/video/assumefps.html b/Programs/doc/functions/video/assumefps.html deleted file mode 100644 index 5f42340..0000000 --- a/Programs/doc/functions/video/assumefps.html +++ /dev/null @@ -1,198 +0,0 @@ - - - - - - - AssumeFPS — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

AssumeFPS

-
-
-std.AssumeFPS(vnode clip[, vnode src, int fpsnum, int fpsden=1])
-

Returns a clip with the framerate changed. This does not in any way modify -the frames, only their metadata.

-

The framerate to assign can either be read from another clip, src, or given -as a rational number with fpsnum and fpsden.

-

It is an error to specify both src and fpsnum.

-

AssumeFPS overwrites the frame properties _DurationNum and -_DurationDen with the frame duration computed from the new frame rate.

-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/video/averageframes.html b/Programs/doc/functions/video/averageframes.html deleted file mode 100644 index da06bfe..0000000 --- a/Programs/doc/functions/video/averageframes.html +++ /dev/null @@ -1,203 +0,0 @@ - - - - - - - AverageFrames — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

AverageFrames

-
-
-std.AverageFrames(vnode[] clips, float[] weights[, float scale, bint scenechange, int[] planes])
-

AverageFrames has two main modes depending on whether one or multiple clips are supplied. -The filter is named AverageFrames since using ones for weights is an easy way to average -many frames together but it can also be seen as a temporal or multiple frame convolution.

-

If multiple clips are supplied then the frames from each of the clips are multiplied by -the respective weights, summed together and divided by scale before being output. Note -that only integer weights and scale are allowed for integer input formats.

-

If a single clip is supplied then an odd number of weights are needed and they will instead -be temporally centered on the current frame of the clip. The rest works as multiple clip mode -with the only difference being that scenechange can be set to avoid averaging frames over scene -changes. If this happens then all the weights beyond a scene change are instead applied to the frame -right before it.

-

At most 31 weights can be supplied.

-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/video/binarize_binarizemask.html b/Programs/doc/functions/video/binarize_binarizemask.html deleted file mode 100644 index 5f1d12b..0000000 --- a/Programs/doc/functions/video/binarize_binarizemask.html +++ /dev/null @@ -1,218 +0,0 @@ - - - - - - - Binarize/BinarizeMask — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

Binarize/BinarizeMask

-
-
-std.Binarize(vnode clip[, float[] threshold, float[] v0, float[] v1, int[] planes=[0, 1, 2]])
-
-std.BinarizeMask(vnode clip[, float[] threshold, float[] v0, float[] v1, int[] planes=[0, 1, 2]])
-

Turns every pixel in the image into either v0, if it’s below -threshold, or v1, otherwise. The BinarizeMask version is intended -for use on mask clips where all planes have the same value range and -only differs in the default values of v0 and v1.

-
-
clip

Clip to process. It must have integer sample type and bit depth -between 8 and 16, or float sample type and bit depth of 32. If -there are any frames with other formats, an error will be -returned.

-
-
threshold

Defaults to the middle point of range allowed by the format. -Can be specified for each plane individually.

-
-
v0

Value given to pixels that are below threshold. Can be specified -for each plane individually. Defaults to the lower bound of the format.

-
-
v1

Value given to pixels that are greater than or equal to threshold. -Defaults to the maximum value allowed by the format. Can be specified -for each plane individually. Defaults to the upper bound of the format.

-
-
planes

Specifies which planes will be processed. Any unprocessed planes -will be simply copied.

-
-
-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/video/blankclip.html b/Programs/doc/functions/video/blankclip.html deleted file mode 100644 index a30f882..0000000 --- a/Programs/doc/functions/video/blankclip.html +++ /dev/null @@ -1,204 +0,0 @@ - - - - - - - BlankClip — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

BlankClip

-
-
-std.BlankClip([vnode clip, int width=640, int height=480, int format=vs.RGB24, int length=(10*fpsnum)/fpsden, int fpsnum=24, int fpsden=1, float[] color=<black>, bint keep=0, bint varsize=0, bint varformat=0])
-

Generates a new empty clip. This can be useful to have when editing video or -for testing. The default is a 640x480 RGB24 24fps 10 second long black clip. -Instead of specifying every property individually, BlankClip can also copy -the properties from clip. If both an argument such as width, and clip -are set, then width will take precedence.

-

If keep is set, a reference to the same frame is returned on every request. -Otherwise a new frame is generated every time. There should usually be no -reason to change this setting.

-

If varsize is set, a clip with variable size will be returned. The frames -themselves will still have the size given by the width and height arguments.

-

If varformat is set, a clip with variable format will be returned. -The frames themselves will have the format given by the format argument.

-

It is never an error to use BlankClip.

-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/video/boxblur.html b/Programs/doc/functions/video/boxblur.html deleted file mode 100644 index faaf411..0000000 --- a/Programs/doc/functions/video/boxblur.html +++ /dev/null @@ -1,193 +0,0 @@ - - - - - - - BoxBlur — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

BoxBlur

-
-
-std.BoxBlur(vnode clip[, int[] planes, int hradius = 1, int hpasses = 1, int vradius = 1, int vpasses = 1])
-

Performs a box blur which is fast even for large radius values. Using multiple passes can be used to fairly cheaply -approximate a gaussian blur. A radius of 0 means no processing is performed.

-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/video/cliptoprop.html b/Programs/doc/functions/video/cliptoprop.html deleted file mode 100644 index 05952cb..0000000 --- a/Programs/doc/functions/video/cliptoprop.html +++ /dev/null @@ -1,198 +0,0 @@ - - - - - - - ClipToProp — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

ClipToProp

-
-
-std.ClipToProp(vnode clip, vnode mclip[, string prop='_Alpha'])
-

Stores each frame of mclip as a frame property named prop in clip. This -is primarily intended to attach mask/alpha clips to another clip so that -editing operations will apply to both. Unlike most other filters the output -length is derived from the second argument named mclip.

-

If the attached mclip does not represent the alpha channel, you should set -prop to something else.

-

It is the inverse of PropToClip().

-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/video/convolution.html b/Programs/doc/functions/video/convolution.html deleted file mode 100644 index d38fe68..0000000 --- a/Programs/doc/functions/video/convolution.html +++ /dev/null @@ -1,254 +0,0 @@ - - - - - - - Convolution — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

Convolution

-
-
-std.Convolution(vnode clip, float[] matrix[, float bias=0.0, float divisor=0.0, int[] planes=[0, 1, 2], bint saturate=True, string mode="s"])
-

Performs a spatial convolution.

-

Here is how a 3x3 convolution is done. Each pixel in the 3x3 -neighbourhood is multiplied by the corresponding coefficient in -matrix. The results of the nine multiplications are added together, -then this sum is divided by divisor. Next, bias is added, and the -result is rounded to the nearest larger integer. If this integer -result is negative and the saturate parameter is False, it is -multiplied by -1. Finally, the result is clamped to the format’s range -of valid values.

-
-
clip

Clip to process. It must have integer sample type and bit depth -between 8 and 16, or float sample type and bit depth of 32. If -there are any frames with other formats, an error will be -returned.

-
-
matrix

Coefficients for the convolution.

-

When mode is “s”, this must be an array of 9 or 25 numbers, for -a 3x3 or 5x5 convolution, respectively.

-

When mode is not “s”, this must be an array of 3 to 25 numbers, -with an odd number of elements.

-

The values of the coefficients must be between -1023 and 1023 -(inclusive). The coefficients are rounded to integers when -the input is an integer format.

-

This is how the elements of matrix correspond to the pixels in -a 3x3 neighbourhood:

-
1 2 3
-4 5 6
-7 8 9
-
-
-

It’s the same principle for the other types of convolutions. The -middle element of matrix always corresponds to the center pixel.

-
-
bias

Value to add to the final result of the convolution (before clamping -the result to the format’s range of valid values).

-
-
divisor

Divide the output of the convolution by this value (before adding -bias).

-

If this parameter is 0.0 (the default), the output of the convolution -will be divided by the sum of the elements of matrix, or by 1.0, -if the sum is 0.

-
-
planes

Specifies which planes will be processed. Any unprocessed planes -will be simply copied.

-
-
saturate

The final result is clamped to the format’s range of valid values -(0 .. (2**bitdepth)-1). Therefore, if this parameter is True, -negative values become 0. If this parameter is False, it’s instead -the absolute value that is clamped and returned.

-
-
mode

Selects the type of convolution. Possible values are “s”, for square, -“h” for horizontal, “v” for vertical, and “hv” or “vh” for both -horizontal and vertical.

-
-
-

How to apply a simple blur equivalent to Avisynth’s Blur(1):

-
Convolution(matrix=[1, 2, 1, 2, 4, 2, 1, 2, 1])
-
-
-

How to apply a stronger blur equivalent to Avisynth’s Blur(1.58):

-
Convolution(matrix=[1, 1, 1, 1, 1, 1, 1, 1, 1])
-
-
-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/video/copyframeprops.html b/Programs/doc/functions/video/copyframeprops.html deleted file mode 100644 index 3394be5..0000000 --- a/Programs/doc/functions/video/copyframeprops.html +++ /dev/null @@ -1,195 +0,0 @@ - - - - - - - CopyFrameProps — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

CopyFrameProps

-
-
-std.CopyFrameProps(vnode clip, vnode prop_src)
-

Returns clip but with all the frame properties replaced with the -ones from the clip in prop_src. Note that if clip is longer -than prop_src then the last existing frame’s properties will be -used instead.

-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/video/crop_cropabs.html b/Programs/doc/functions/video/crop_cropabs.html deleted file mode 100644 index b2811e2..0000000 --- a/Programs/doc/functions/video/crop_cropabs.html +++ /dev/null @@ -1,204 +0,0 @@ - - - - - - - Crop/CropAbs — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

Crop/CropAbs

-
-
-std.Crop(vnode clip[, int left=0, int right=0, int top=0, int bottom=0])
-
-std.CropAbs(vnode clip, int width, int height[, int left=0, int top=0])
-

Crops the frames in a clip.

-

Crop is the simplest to use of the two. The arguments specify how many -pixels to crop from each side. This function used to be called CropRel -which is still an alias for it.

-

CropAbs, on the other hand, is special, because it can accept clips with -variable frame sizes and crop out a fixed size area, thus making it a fixed -size clip.

-

Both functions return an error if the whole picture is cropped away, if the -cropped area extends beyond the input or if the subsampling restrictions -aren’t met.

-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/video/deflate_inflate.html b/Programs/doc/functions/video/deflate_inflate.html deleted file mode 100644 index 6f960bb..0000000 --- a/Programs/doc/functions/video/deflate_inflate.html +++ /dev/null @@ -1,228 +0,0 @@ - - - - - - - Deflate/Inflate — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

Deflate/Inflate

-
-
-std.Deflate(vnode clip[, int[] planes=[0, 1, 2], float threshold])
-

Replaces each pixel with the average of the eight pixels in its 3x3 -neighbourhood, but only if that average is less than the center pixel.

-
-
clip

Clip to process. It must have integer sample type and bit depth -between 8 and 16, or float sample type and bit depth of 32. If -there are any frames with other formats, an error will be -returned.

-
-
planes

Specifies which planes will be processed. Any unprocessed planes -will be simply copied.

-
-
threshold

Allows to limit how much pixels are changed. Output pixels will not -become less than input - threshold. The default is no limit.

-
-
-
- -
-
-std.Inflate(vnode clip[, int[] planes=[0, 1, 2], int threshold=65535])
-

Replaces each pixel with the average of the eight pixels in its 3x3 -neighbourhood, but only if that average is greater than the center -pixel.

-
-
clip

Clip to process. It must have integer sample type and bit depth -between 8 and 16, or float sample type and bit depth of 32. If -there are any frames with other formats, an error will be -returned.

-
-
planes

Specifies which planes will be processed. Any unprocessed planes -will be simply copied.

-
-
threshold

Allows to limit how much pixels are changed. Output pixels will not -become greater than input + threshold. The default is no limit.

-
-
-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/video/deleteframes.html b/Programs/doc/functions/video/deleteframes.html deleted file mode 100644 index 72f3066..0000000 --- a/Programs/doc/functions/video/deleteframes.html +++ /dev/null @@ -1,194 +0,0 @@ - - - - - - - DeleteFrames — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

DeleteFrames

-
-
-std.DeleteFrames(vnode clip, int[] frames)
-

Deletes the specified frames.

-

All frame numbers apply to the input clip.

-

Returns an error if the same frame is deleted twice or if all frames in a clip are deleted.

-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/video/doubleweave.html b/Programs/doc/functions/video/doubleweave.html deleted file mode 100644 index 1af70d4..0000000 --- a/Programs/doc/functions/video/doubleweave.html +++ /dev/null @@ -1,206 +0,0 @@ - - - - - - - DoubleWeave — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

DoubleWeave

-
-
-std.DoubleWeave(vnode clip[, bint tff])
-

Weaves the fields back together from a clip with interleaved fields.

-

Since VapourSynth only has a weak notion of field order internally, tff -may have to be set. Setting tff to true means top fields first and false -means bottom fields first. Note that the _Field frame property, if present -and in a valid combination, takes precedence over tff.

-

DoubleWeave’s output has the same number of frames as the input. One must -use DoubleWeave together with SelectEvery to undo the effect of -SeparateFields:

-
sep = core.std.SeparateFields(source)
-...
-woven = core.std.DoubleWeave(sep)
-woven = core.std.SelectEvery(woven, 2, 0)
-
-
-

The _Field frame property is deleted and _FieldBased is set accordingly.

-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/video/duplicateframes.html b/Programs/doc/functions/video/duplicateframes.html deleted file mode 100644 index ef08c0f..0000000 --- a/Programs/doc/functions/video/duplicateframes.html +++ /dev/null @@ -1,194 +0,0 @@ - - - - - - - DuplicateFrames — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Programs/doc/functions/video/expr.html b/Programs/doc/functions/video/expr.html deleted file mode 100644 index 3059d31..0000000 --- a/Programs/doc/functions/video/expr.html +++ /dev/null @@ -1,295 +0,0 @@ - - - - - - - Expr — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

Expr

-
-
-std.Expr(vnode[] clips, string[] expr[, int format])
-

Expr evaluates an expression per pixel for up to 26 input clips. -The expression, expr, is written using reverse polish notation and can be -specified for each plane individually. -The expression given for the previous plane is used if the expr array -contains fewer expressions than the input clip has planes. -In practice this means that a single expression will be applied to all planes -by default.

-

Specifying an empty string as the expression enables a fast plane copy from -the first specified clip, when possible. If it is not possible due to the -output format being incompatible, the plane contents will be undefined.

-

Since the expression is evaluated at runtime, there are a few pitfalls. In -order to keep speed up, the input ranges are not normalized to the usual -floating point ranges. Instead they are left as is, meaning that an 8 bit -clip will have values in the 0-255 range and a 10 bit clip will have values -in the 0-1023 range. -Note that floating point clips are even more difficult, as most channels are -stored in the 0-1 range with the exception of U, V, Co and Cg planes, which -are in the -0.5-0.5 range. -If you mix clips with different input formats this must be taken into -consideration.

-

When the output format uses integer samples, the result of the expression is -clamped to the [0, 2**bits_per_sample-1] range. -When the output format uses float samples, the result of the expression is -stored without any clamping.

-

By default the output format is the same as the first input clip’s format. -You can override it by setting format. The only restriction is that the -output format must have the same subsampling as the input clips and be -8..16 bit integer or 32 bit float. 16 bit float is also supported on cpus -with the f16c instructions.

-

Logical operators are also a bit special, since everything is done in -floating point arithmetic. -All values greater than 0 are considered true for the purpose of comparisons. -Logical operators return 0.0 for false and 1.0 for true in their operations.

-

Since the expression is being evaluated at runtime, there are also the stack -manipulation operators, swap and dup. The former swaps the topmost and -second topmost values, and the latter duplicates the topmost stack value.

-

These operators also have swapN and dupN forms that allow a value N -steps up in the stack to be swapped or duplicated. The top value of the stack -has index zero meaning that dup is equivalent to dup0 and swap is -equivalent to swap1. This is because swapN always swaps with the topmost -value at index 0.

-

Expressions are converted to byte-code or machine-code by an optimizing -compiler and are not guaranteed to evaluate in the order originally written. -The compiler assumes that all input values are finite (i.e neither NaN nor -INF) and that no operator will produce a non-finite value. Such expressions -are invalid. This is especially important for the transcendental operators:

-
    -
  • exp - expression must not overflow (i.e. x <= 88)

  • -
  • log - input must be finite and non-negative (i.e. x >= 0 && x <= 3e+38)

  • -
  • pow - base must be finite and non-negative. Result must not overflow (i.e. x >= 0 && x <= 3e+38; 1e-38 <= result <= 3e+38)

  • -
-

Clip load operators:

-
x-z, a-w
-
-
-

The operators taking one argument are:

-
exp log sqrt sin cos abs not dup dupN
-
-
-

The operators taking two arguments are:

-
+ - * / max min pow > < = >= <= and or xor swap swapN
-
-
-

The operators taking three arguments are:

-
?
-
-
-

For example these operations:

-
a b c ?
-
-d e <
-
-f abs
-
-
-

Are equivalent to these operations in C:

-
a ? b : c
-
-d < e
-
-abs(f)
-
-
-

The sin/cos operators are approximated to within 2e-6 absolute error for -inputs with magnitude up to 1e5, and there is no accuracy guarantees for -inputs whose magnitude is larger than 2e5.

-

How to average the Y planes of 3 YUV clips and pass through the UV planes -unchanged (assuming same format):

-
std.Expr(clips=[clipa, clipb, clipc], expr=["x y + z + 3 /", "", ""])
-
-
-

How to average the Y planes of 3 YUV clips and pass through the UV planes -unchanged (different formats):

-
std.Expr(clips=[clipa16bit, clipb10bit, clipa8bit],
-   expr=["x y 64 * + z 256 * + 3 /", ""])
-
-
-

Setting the output format because the resulting values are illegal in a 10 -bit clip (note that the U and V planes will contain junk since direct copy -isn’t possible):

-
std.Expr(clips=[clipa10bit, clipb16bit, clipa8bit],
-   expr=["x 64 * y + z 256 * + 3 /", ""], format=vs.YUV420P16)
-
-
-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/video/flipvertical_fliphorizontal.html b/Programs/doc/functions/video/flipvertical_fliphorizontal.html deleted file mode 100644 index 67633f0..0000000 --- a/Programs/doc/functions/video/flipvertical_fliphorizontal.html +++ /dev/null @@ -1,195 +0,0 @@ - - - - - - - FlipVertical/FlipHorizontal — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Programs/doc/functions/video/frameeval.html b/Programs/doc/functions/video/frameeval.html deleted file mode 100644 index f76c5d7..0000000 --- a/Programs/doc/functions/video/frameeval.html +++ /dev/null @@ -1,258 +0,0 @@ - - - - - - - FrameEval — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

FrameEval

-
-
-std.FrameEval(vnode clip, func eval[, vnode[] prop_src, vnode[] clip_src])
-

Allows an arbitrary function to be evaluated every frame. The function gets -the frame number, n, as input and should return a clip the output frame can -be requested from.

-

The clip argument is only used to get the output format from since there is -no reliable automatic way to deduce it.

-

When using the argument prop_src the function will also have an argument, -f, containing the current frames. This is mainly so frame properties can be -accessed and used to make decisions. Note that f will only be a list if -more than one prop_src clip is provided.

-

The clip_src argument only exists as a way to hint which clips are referenced in the -eval function which can improve caching and graph generation. Its use is encouraged -but not required.

-

This function can be used to accomplish the same things as Animate, -ScriptClip and all the other conditional filters in Avisynth. Note that to -modify per frame properties you should use ModifyFrame.

-

How to animate a BlankClip to fade from white to black. This is the simplest -use case without using the prop_src argument:

-
import vapoursynth as vs
-import functools
-
-base_clip = vs.core.std.BlankClip(format=vs.YUV420P8, length=1000, color=[255, 128, 128])
-
-def animator(n, clip):
-   if n > 255:
-      return clip
-   else:
-      return vs.core.std.BlankClip(format=vs.YUV420P8, length=1000, color=[n, 128, 128])
-
-animated_clip = vs.core.std.FrameEval(base_clip, functools.partial(animator, clip=base_clip))
-animated_clip.set_output()
-
-
-

How to perform a simple per frame auto white balance. It shows how to access -calculated frame properties and use them for conditional filtering:

-
import vapoursynth as vs
-import functools
-import math
-
-def GrayWorld1Adjust(n, f, clip, core):
-   small_number = 0.000000001
-   red   = f[0].props['PlaneStatsAverage']
-   green = f[1].props['PlaneStatsAverage']
-   blue  = f[2].props['PlaneStatsAverage']
-   max_rgb = max(red, green, blue)
-   red_corr   = max_rgb/max(red, small_number)
-   green_corr = max_rgb/max(green, small_number)
-   blue_corr  = max_rgb/max(blue, small_number)
-   norm = max(blue, math.sqrt(red_corr*red_corr + green_corr*green_corr + blue_corr*blue_corr) / math.sqrt(3), small_number)
-   r_gain = red_corr/norm
-   g_gain = green_corr/norm
-   b_gain = blue_corr/norm
-   return core.std.Expr(clip, expr=['x ' + repr(r_gain) + ' *', 'x ' + repr(g_gain) + ' *', 'x ' + repr(b_gain) + ' *'])
-
-def GrayWorld1(clip, matrix_s=None):
-   rgb_clip = vs.core.resize.Bilinear(clip, format=vs.RGB24)
-   r_avg = vs.core.std.PlaneStats(rgb_clip, plane=0)
-   g_avg = vs.core.std.PlaneStats(rgb_clip, plane=1)
-   b_avg = vs.core.std.PlaneStats(rgb_clip, plane=2)
-   adjusted_clip = vs.core.std.FrameEval(rgb_clip, functools.partial(GrayWorld1Adjust, clip=rgb_clip, core=vs.core), prop_src=[r_avg, g_avg, b_avg])
-   return vs.core.resize.Bilinear(adjusted_clip, format=clip.format.id, matrix_s=matrix_s)
-
-vs.core.std.LoadPlugin(path='BestSource.dll')
-main = vs.core.bs.VideoSource(source='...')
-main = GrayWorld1(main)
-main.set_output()
-
-
-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/video/freezeframes.html b/Programs/doc/functions/video/freezeframes.html deleted file mode 100644 index 13cc0d0..0000000 --- a/Programs/doc/functions/video/freezeframes.html +++ /dev/null @@ -1,201 +0,0 @@ - - - - - - - FreezeFrames — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

FreezeFrames

-
-
-std.FreezeFrames(vnode clip, int[] first, int[] last, int[] replacement)
-

FreezeFrames replaces all the frames in the [first,last] range -(inclusive) with replacement.

-

A single call to FreezeFrames can freeze any number of ranges:

-
core.std.FreezeFrames(input, first=[0, 100, 231], last=[15, 112, 300], replacement=[8, 50, 2])
-
-
-

This replaces [0,15] with 8, [100,112] with 50, and [231,300] with 2 (the -original frame number 2, not frame number 2 after it was replaced with -number 8 by the first range).

-

The frame ranges must not overlap.

-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/video/interleave.html b/Programs/doc/functions/video/interleave.html deleted file mode 100644 index 3cc84fe..0000000 --- a/Programs/doc/functions/video/interleave.html +++ /dev/null @@ -1,201 +0,0 @@ - - - - - - - Interleave — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

Interleave

-
-
-std.Interleave(vnode[] clips[, bint extend=0, bint mismatch=0, bint modify_duration=True])
-

Returns a clip with the frames from all clips interleaved. For example, -Interleave(clips=[A, B]) will return A.Frame 0, B.Frame 0, A.Frame 1, -B.Frame…

-

The extend argument controls whether or not all input clips will be treated -as if they have the same length as the longest clip.

-

Interleaving clips with different formats or dimensions is considered an -error unless mismatch is true.

-

If modify_duration is set then the output clip’s frame rate is the first -input clip’s frame rate multiplied by the number of input clips. The frame durations are divided -by the number of input clips. Otherwise the first input clip’s frame rate is used.

-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/video/invert_invertmask.html b/Programs/doc/functions/video/invert_invertmask.html deleted file mode 100644 index 8c98a74..0000000 --- a/Programs/doc/functions/video/invert_invertmask.html +++ /dev/null @@ -1,208 +0,0 @@ - - - - - - - Invert/InvertMask — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

Invert/InvertMask

-
-
-std.Invert(vnode clip[, int[] planes=[0, 1, 2]])
-
-std.InvertMask(vnode clip[, int[] planes=[0, 1, 2]])
-

Inverts the pixel values. Specifically, it subtracts the value of the -input pixel from the format’s maximum allowed value. The InvertMask -version is intended for use on mask clips where all planes have the -same maximum value regardless of the colorspace.

-
-
clip

Clip to process. It must have integer sample type and bit depth -between 8 and 16, or float sample type and bit depth of 32. If -there are any frames with other formats, an error will be -returned.

-
-
planes

Specifies which planes will be processed. Any unprocessed planes -will be simply copied.

-
-
-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/video/levels.html b/Programs/doc/functions/video/levels.html deleted file mode 100644 index e2f336c..0000000 --- a/Programs/doc/functions/video/levels.html +++ /dev/null @@ -1,224 +0,0 @@ - - - - - - - Levels — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

Levels

-
-
-std.Levels(vnode clip[, float min_in, float max_in, float gamma=1.0, float min_out, float max_out, int[] planes=[0, 1, 2]])
-

Adjusts brightness, contrast, and gamma.

-

The range [min_in, max_in] is remapped into [min_out, max_out]. Note that the -range behavior is unintuitive for YUV float formats since the assumed range will be -0-1 even for the UV-planes.

-

For example, to convert from limited range YUV to full range (8 bit):

-
clip = std.Levels(clip, min_in=16, max_in=235, min_out=0, max_out=255, planes=0)
-clip = std.Levels(clip, min_in=16, max_in=240, min_out=0, max_out=255, planes=[1,2])
-
-
-

The default value of max_in and max_out is the format’s minimum and maximum -allowed values respectively. Note that all input is clamped to the input range -to prevent out of range output.

-
-

Warning

-
-
The default ranges are 0-1 for floating point formats. This may have an undesired

effect on YUV formats.

-
-
-
-
-
clip

Clip to process. It must have integer sample type and bit depth -between 8 and 16, or float sample type and bit depth of 32. If -there are any frames with other formats, an error will be -returned.

-
-
gamma

Controls the degree of non-linearity of the conversion. Values -greater than 1.0 brighten the output, while values less than 1.0 -darken it.

-
-
planes

Specifies which planes will be processed. Any unprocessed planes -will be simply copied.

-
-
-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/video/limiter.html b/Programs/doc/functions/video/limiter.html deleted file mode 100644 index 73f4886..0000000 --- a/Programs/doc/functions/video/limiter.html +++ /dev/null @@ -1,206 +0,0 @@ - - - - - - - Limiter — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

Limiter

-
-
-std.Limiter(vnode clip[, float[] min, float[] max, int[] planes=[0, 1, 2]])
-

Limits the pixel values to the range [min, max].

-
-
clip

Clip to process. It must have integer sample type and bit depth -between 8 and 16, or float sample type and bit depth of 32. If -there are any frames with other formats, an error will be -returned.

-
-
min

Lower bound. Defaults to the lowest allowed value for the input. Can be specified for each plane individually.

-
-
max

Upper bound. Defaults to the highest allowed value for the input. Can be specified for each plane individually.

-
-
planes

Specifies which planes will be processed. Any unprocessed planes -will be simply copied.

-
-
-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/video/loop.html b/Programs/doc/functions/video/loop.html deleted file mode 100644 index 60f4a5b..0000000 --- a/Programs/doc/functions/video/loop.html +++ /dev/null @@ -1,195 +0,0 @@ - - - - - - - Loop — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

Loop

-
-
-std.Loop(vnode clip[, int times=0])
-

Returns a clip with the frames or samples repeated over and over again. If times is -less than 1 the clip will be repeated until the maximum clip length is -reached, otherwise it will be repeated times times.

-

In Python, std.Loop can also be invoked using the multiplication operator.

-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/video/lut.html b/Programs/doc/functions/video/lut.html deleted file mode 100644 index f762ec8..0000000 --- a/Programs/doc/functions/video/lut.html +++ /dev/null @@ -1,219 +0,0 @@ - - - - - - - Lut — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

Lut

-
-
-std.Lut(vnode clip[, int[] planes, int[] lut, float[] lutf, func function, int bits, bint floatout])
-

Applies a look-up table to the given clip. The lut can be specified as either an array -of 2^bits_per_sample values or given as a function having an argument named -x to be evaluated. Either lut, lutf or function must be used. The lut will be -applied to the planes listed in planes and the other planes will simply be -passed through unchanged. By default all planes are processed.

-

If floatout is set then the output will be floating point instead, and either -lutf needs to be set or function always needs to return floating point -values.

-

How to limit YUV range (by passing an array):

-
luty = []
-for x in range(2**clip.format.bits_per_sample):
-   luty.append(max(min(x, 235), 16))
-lutuv = []
-for x in range(2**clip.format.bits_per_sample):
-   lutuv.append(max(min(x, 240), 16))
-ret = Lut(clip=clip, planes=0, lut=luty)
-limited_clip = Lut(clip=ret, planes=[1, 2], lut=lutuv)
-
-
-

How to limit YUV range (using a function):

-
def limity(x):
-   return max(min(x, 235), 16)
-def limituv(x):
-   return max(min(x, 240), 16)
-ret = Lut(clip=clip, planes=0, function=limity)
-limited_clip = Lut(clip=ret, planes=[1, 2], function=limituv)
-
-
-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/video/lut2.html b/Programs/doc/functions/video/lut2.html deleted file mode 100644 index bd21a03..0000000 --- a/Programs/doc/functions/video/lut2.html +++ /dev/null @@ -1,219 +0,0 @@ - - - - - - - Lut2 — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

Lut2

-
-
-std.Lut2(vnode clipa, vnode clipb[, int[] planes, int[] lut, float[] lutf, func function, int bits, bint floatout])
-

Applies a look-up table that takes into account the pixel values of two clips. The -lut needs to contain 2^(clip1.bits_per_sample + clip2.bits_per_sample) -entries and will be applied to the planes listed in planes. Alternatively -a function taking x and y as arguments can be used to make the lut. -The other planes will be passed through unchanged. By default all planes -are processed.

-

Lut2 also takes an optional bit depth parameter, bits, which defaults to -the bit depth of the first input clip, and specifies the bit depth of the -output clip. The user is responsible for understanding the effects of bit -depth conversion, specifically from higher bit depths to lower bit depths, -as no scaling or clamping is applied.

-

If floatout is set then the output will be floating point instead, and either -lutf needs to be set or function always needs to return floating point -values.

-

How to average 2 clips:

-
lut = []
-for y in range(2 ** clipy.format.bits_per_sample):
-   for x in range(2 ** clipx.format.bits_per_sample):
-      lut.append((x + y)//2)
-Lut2(clipa=clipa, clipb=clipb, lut=lut)
-
-
-

How to average 2 clips with a 10-bit output:

-
def f(x, y):
-   return (x*4 + y)//2
-Lut2(clipa=clipa8bit, clipb=clipb10bit, function=f, bits=10)
-
-
-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/video/makediff.html b/Programs/doc/functions/video/makediff.html deleted file mode 100644 index c23c622..0000000 --- a/Programs/doc/functions/video/makediff.html +++ /dev/null @@ -1,199 +0,0 @@ - - - - - - - MakeDiff — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

MakeDiff

-
-
-std.MakeDiff(vnode clipa, vnode clipb[, int[] planes])
-

Calculates the difference between clipa and clipb and clamps the result. -By default all planes are processed. This function is usually used together with MergeDiff, which can be used to add back the difference.

-

Unsharp masking of luma:

-
blur_clip = core.std.Convolution(clip, matrix=[1, 2, 1, 2, 4, 2, 1, 2, 1], planes=[0])
-diff_clip = core.std.MakeDiff(clip, blur_clip, planes=[0])
-sharpened_clip = core.std.MergeDiff(clip, diff_clip, planes=[0])
-
-
-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/video/makefulldiff.html b/Programs/doc/functions/video/makefulldiff.html deleted file mode 100644 index c5ed2e4..0000000 --- a/Programs/doc/functions/video/makefulldiff.html +++ /dev/null @@ -1,200 +0,0 @@ - - - - - - - MakeFullDiff — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

MakeFullDiff

-
-
-std.MakeFullDiff(vnode clipa, vnode clipb)
-

Calculates the difference between clipa and clipb and outputs a clip with a one higher bitdepth to avoid the clamping or wraparound issues -that would otherwise happen with filters like MakeDiff when forming a difference. -This function is usually used together with MergeFullDiff, which can be used to add back the difference.

-

Unsharp mask:

-
blur_clip = core.std.Convolution(clip, matrix=[1, 2, 1, 2, 4, 2, 1, 2, 1])
-diff_clip = core.std.MakeFullDiff(clip, blur_clip)
-sharpened_clip = core.std.MergeFullDiff(clip, diff_clip)
-
-
-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/video/maskedmerge.html b/Programs/doc/functions/video/maskedmerge.html deleted file mode 100644 index 2a4dee5..0000000 --- a/Programs/doc/functions/video/maskedmerge.html +++ /dev/null @@ -1,216 +0,0 @@ - - - - - - - MaskedMerge — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

MaskedMerge

-
-
-std.MaskedMerge(vnode clipa, vnode clipb, vnode mask[, int[] planes, bint first_plane=0, bint premultiplied=0])
-

MaskedMerge merges clipa with clipb using the per pixel weights in the mask, -where 0 means that clipa is returned unchanged. -The mask clip is assumed to be full range for all planes and in the -0-1 interval for float formats regardless of the colorspace. -If mask is a grayscale clip or if first_plane is true, the mask’s first -plane will be used as the mask for merging all planes. The mask will be -bilinearly resized if necessary.

-

If premultiplied is set the blending is performed as if clipb has been pre-multiplied -with alpha. In pre-multiplied mode it is an error to try to merge two frames with -mismatched full and limited range since it will most likely cause horrible unintended -color shifts. In the other mode it’s just a very, very bad idea.

-

By default all planes will be -processed, but it is also possible to specify a list of the planes to merge -in the output. The unprocessed planes will be copied from the first clip.

-

clipa and clipb must have the same dimensions and format, and the mask must be the -same format as the clips or the grayscale equivalent.

-

How to apply a mask to the first plane:

-
MaskedMerge(clipa=A, clipb=B, mask=Mask, planes=0)
-
-
-

How to apply the first plane of a mask to the second and third plane:

-
MaskedMerge(clipa=A, clipb=B, mask=Mask, planes=[1, 2], first_plane=True)
-
-
-

The frame properties are copied from clipa.

-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/video/median.html b/Programs/doc/functions/video/median.html deleted file mode 100644 index fee3f85..0000000 --- a/Programs/doc/functions/video/median.html +++ /dev/null @@ -1,204 +0,0 @@ - - - - - - - Median — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

Median

-
-
-std.Median(vnode clip[, int[] planes=[0, 1, 2]])
-

Replaces each pixel with the median of the nine pixels in its 3x3 -neighbourhood. In other words, the nine pixels are sorted from lowest -to highest, and the middle value is picked.

-
-
clip

Clip to process. It must have integer sample type and bit depth -between 8 and 16, or float sample type and bit depth of 32. If -there are any frames with other formats, an error will be -returned.

-
-
planes

Specifies which planes will be processed. Any unprocessed planes -will be simply copied.

-
-
-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/video/merge.html b/Programs/doc/functions/video/merge.html deleted file mode 100644 index 9312c4d..0000000 --- a/Programs/doc/functions/video/merge.html +++ /dev/null @@ -1,212 +0,0 @@ - - - - - - - Merge — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

Merge

-
-
-std.Merge(vnode clipa, vnode clipb[, float[] weight = 0.5])
-

Merges clipa and clipb using the specified weight for each plane. The default -is to use a 0.5 weight for all planes. A zero weight means that clipa -is returned unchanged and 1 means that clipb is returned unchanged. If a -single weight is specified, it will be used for all planes. If two weights -are given then the second value will be used for the third plane as well.

-

Values outside the 0-1 range are considered to be an error. Specifying more -weights than planes in the clips is also an error. The clips must have the -same dimensions and format.

-

How to merge luma:

-
Merge(clipa=A, clipb=B, weight=[1, 0])
-
-
-

How to merge chroma:

-
Merge(clipa=A, clipb=B, weight=[0, 1])
-
-
-

The average of two clips:

-
Merge(clipa=A, clipb=B)
-
-
-

The frame properties are copied from clipa.

-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/video/mergediff.html b/Programs/doc/functions/video/mergediff.html deleted file mode 100644 index 4db8930..0000000 --- a/Programs/doc/functions/video/mergediff.html +++ /dev/null @@ -1,199 +0,0 @@ - - - - - - - MergeDiff — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

MergeDiff

-
-
-std.MergeDiff(vnode clipa, vnode clipb[, int[] planes])
-

Merges back the difference in clipb to clipa and clamps the result. -By default all planes are processed. This function is usually used together with MakeDiff, which is normally used to calculate the difference.

-

Unsharp masking of luma:

-
blur_clip = core.std.Convolution(clip, matrix=[1, 2, 1, 2, 4, 2, 1, 2, 1], planes=[0])
-diff_clip = core.std.MakeDiff(clip, blur_clip, planes=[0])
-sharpened_clip = core.std.MergeDiff(clip, diff_clip, planes=[0])
-
-
-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/video/mergefulldiff.html b/Programs/doc/functions/video/mergefulldiff.html deleted file mode 100644 index a4dc258..0000000 --- a/Programs/doc/functions/video/mergefulldiff.html +++ /dev/null @@ -1,199 +0,0 @@ - - - - - - - MergeFullDiff — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

MergeFullDiff

-
-
-std.MergeFullDiff(vnode clipa, vnode clipb)
-

Merges back the difference in clipb to clipa. Note that the bitdepth of clipb has to be one higher than that of clip. -This function is usually used together with MakeFullDiff, which is normally used to calculate the difference.

-

Unsharp mask:

-
blur_clip = core.std.Convolution(clip, matrix=[1, 2, 1, 2, 4, 2, 1, 2, 1])
-diff_clip = core.std.MakeFullDiff(clip, blur_clip)
-sharpened_clip = core.std.MergeFullDiff(clip, diff_clip)
-
-
-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/video/minimum_maximum.html b/Programs/doc/functions/video/minimum_maximum.html deleted file mode 100644 index 7b1e930..0000000 --- a/Programs/doc/functions/video/minimum_maximum.html +++ /dev/null @@ -1,251 +0,0 @@ - - - - - - - Minimum/Maximum — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

Minimum/Maximum

-
-
-std.Minimum(vnode clip[, int[] planes=[0, 1, 2], float threshold, bint[] coordinates=[1, 1, 1, 1, 1, 1, 1, 1]])
-

Replaces each pixel with the smallest value in its 3x3 neighbourhood. -This operation is also known as erosion.

-
-
clip

Clip to process. It must have integer sample type and bit depth -between 8 and 16, or float sample type and bit depth of 32. If -there are any frames with other formats, an error will be -returned.

-
-
planes

Specifies which planes will be processed. Any unprocessed planes -will be simply copied.

-
-
threshold

Allows to limit how much pixels are changed. Output pixels will not -become less than input - threshold. The default is no limit.

-
-
coordinates

Specifies which pixels from the 3x3 neighbourhood are considered. -If an element of this array is 0, the corresponding pixel is not -considered when finding the minimum value. This must contain exactly -8 numbers.

-

Here is how each number corresponds to a pixel in the 3x3 -neighbourhood:

-
1 2 3
-4   5
-6 7 8
-
-
-
-
-
- -
-
-std.Maximum(vnode clip[, int[] planes=[0, 1, 2], float threshold, bint[] coordinates=[1, 1, 1, 1, 1, 1, 1, 1]])
-

Replaces each pixel with the largest value in its 3x3 neighbourhood. -This operation is also known as dilation.

-
-
clip

Clip to process. It must have integer sample type and bit depth -between 8 and 16, or float sample type and bit depth of 32. If -there are any frames with other formats, an error will be -returned.

-
-
planes

Specifies which planes will be processed. Any unprocessed planes -will be simply copied.

-
-
threshold

Allows to limit how much pixels are changed. Output pixels will not -become less than input - threshold. The default is no limit.

-
-
coordinates

Specifies which pixels from the 3x3 neighbourhood are considered. -If an element of this array is 0, the corresponding pixel is not -considered when finding the maximum value. This must contain exactly -8 numbers.

-

Here is how each number corresponds to a pixel in the 3x3 -neighbourhood:

-
1 2 3
-4   5
-6 7 8
-
-
-
-
-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/video/modifyframe.html b/Programs/doc/functions/video/modifyframe.html deleted file mode 100644 index 8471acc..0000000 --- a/Programs/doc/functions/video/modifyframe.html +++ /dev/null @@ -1,232 +0,0 @@ - - - - - - - ModifyFrame — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

ModifyFrame

-
-
-std.ModifyFrame(vnode clip, clip[] clips, func selector)
-

The selector function is called for every single frame and can modify the -properties of one of the frames gotten from clips. The additional clips’ -properties should only be read and not modified because only one modified -frame can be returned.

-

You must first copy the input frame to make it modifiable. Any frame may be -returned as long as it has the same format as the clip. -Failure to do so will produce an error. If for conditional reasons you do not -need to modify the current frame’s properties, you can simply pass it through. -The selector function is passed n, the current frame number, and f, which -is a frame or a list of frames if there is more than one clip specified.

-

If you do not need to modify frame properties but only read them, you should -probably be using FrameEval instead.

-

How to set the property FrameNumber to the current frame number:

-
def set_frame_number(n, f):
-   fout = f.copy()
-   fout.props['FrameNumber'] = n
-   return fout
-...
-ModifyFrame(clip=clip, clips=clip, selector=set_frame_number)
-
-
-

How to remove a property:

-
def remove_property(n, f):
-   fout = f.copy()
-   del fout.props['FrameNumber']
-   return fout
-...
-ModifyFrame(clip=clip, clips=clip, selector=remove_property)
-
-
-

An example of how to copy certain properties from one clip to another -(clip1 and clip2 have the same format):

-
def transfer_property(n, f):
-   fout = f[1].copy()
-   fout.props['FrameNumber'] = f[0].props['FrameNumber']
-   fout.props['_Combed'] = f[0].props['_Combed']
-   return fout
-...
-ModifyFrame(clip=clip1, clips=[clip1, clip2], selector=transfer_property)
-
-
-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/video/pemverifier.html b/Programs/doc/functions/video/pemverifier.html deleted file mode 100644 index f333f66..0000000 --- a/Programs/doc/functions/video/pemverifier.html +++ /dev/null @@ -1,198 +0,0 @@ - - - - - - - PEMVerifier — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

PEMVerifier

-
-
-std.PEMVerifier(vnode clip[, float[] upper, float[] lower])
-

The PEMVerifier is used to check for out-of-bounds pixel values during filter -development. It is a public function so badly coded filters won’t go -unnoticed.

-

If no values are set, then upper and lower default to the max and min values -allowed in the current format. If an out of bounds value is -encountered a frame error is set and the coordinates of the first bad pixel -are included in the error message.

-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/video/planestats.html b/Programs/doc/functions/video/planestats.html deleted file mode 100644 index 3a18eaa..0000000 --- a/Programs/doc/functions/video/planestats.html +++ /dev/null @@ -1,198 +0,0 @@ - - - - - - - PlaneStats — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

PlaneStats

-
-
-std.PlaneStats(vnode clipa[, vnode clipb, int plane=0, string prop='PlaneStats'])
-

This function calculates the min, max and average normalized value of all -the pixels in the specified plane and stores the values in the frame properties -named propMin, propMax and propAverage.

-

If clipb is supplied, the absolute normalized difference between the two clips -will be stored in propDiff as well.

-

The normalization means that the average and the diff will always be floats -between 0 and 1, no matter what the input format is.

-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/video/premultiply.html b/Programs/doc/functions/video/premultiply.html deleted file mode 100644 index f72bc10..0000000 --- a/Programs/doc/functions/video/premultiply.html +++ /dev/null @@ -1,198 +0,0 @@ - - - - - - - PreMultiply — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

PreMultiply

-
-
-std.PreMultiply(vnode clip, vnode alpha)
-

PreMultiply simply multiplies clip and alpha in order to make it more suitable for -later operations. This will yield much better results when resizing and a clip with an -alpha channel and MaskedMerge can use it as input. The alpha clip -must be the grayscale format equivalent of clip.

-

Note that limited range pre-multiplied contents excludes the offset. For example with -8 bit input 60 luma and 128 alpha would be calculated as ((60 - 16) * 128)/255 + 16 -and not (60 * 128)/255.

-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/video/prewitt_sobel.html b/Programs/doc/functions/video/prewitt_sobel.html deleted file mode 100644 index b56d810..0000000 --- a/Programs/doc/functions/video/prewitt_sobel.html +++ /dev/null @@ -1,212 +0,0 @@ - - - - - - - Prewitt/Sobel — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

Prewitt/Sobel

-
-
-std.Prewitt(vnode clip[, int[] planes=[0, 1, 2], float scale=1])
-

Creates an edge mask using the Prewitt operator.

-
- -
-
-std.Sobel(vnode clip[, int[] planes=[0, 1, 2], float scale=1])
-

Creates an edge mask using the Sobel operator.

-
-
clip

Clip to process. It must have integer sample type and bit depth -between 8 and 16, or float sample type and bit depth of 32. If -there are any frames with other formats, an error will be -returned.

-
-
planes

Specifies which planes will be processed. Any unprocessed planes -will be simply copied.

-
-
scale

Multiply all pixels by scale before outputting. This can be used to -increase or decrease the intensity of edges in the output.

-
-
-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/video/proptoclip.html b/Programs/doc/functions/video/proptoclip.html deleted file mode 100644 index 369849d..0000000 --- a/Programs/doc/functions/video/proptoclip.html +++ /dev/null @@ -1,196 +0,0 @@ - - - - - - - PropToClip — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

PropToClip

-
-
-std.PropToClip(vnode clip[, string prop='_Alpha'])
-

Extracts a clip from the frames attached to the frame property prop in -clip. -This function is mainly used to extract a mask/alpha clip that was stored in -another one.

-

It is the inverse of ClipToProp().

-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/video/removeframeprops.html b/Programs/doc/functions/video/removeframeprops.html deleted file mode 100644 index c4baa86..0000000 --- a/Programs/doc/functions/video/removeframeprops.html +++ /dev/null @@ -1,194 +0,0 @@ - - - - - - - RemoveFrameProps — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

RemoveFrameProps

-
-
-std.RemoveFrameProps(vnode clip[, string props[]])
-

Returns clip but with all the frame properties named in -props removed. If props is unset them all frame properties -are removed.

-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/video/resize.html b/Programs/doc/functions/video/resize.html deleted file mode 100644 index 85ba18c..0000000 --- a/Programs/doc/functions/video/resize.html +++ /dev/null @@ -1,475 +0,0 @@ - - - - - - - Resize — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

Resize

-
-
-resize.Bilinear(vnode clip[, int width, int height, int format, enum matrix, enum transfer, enum primaries, enum range, enum chromaloc, enum matrix_in, enum transfer_in, enum primaries_in, enum range_in, enum chromaloc_in, float filter_param_a, float filter_param_b, string resample_filter_uv, float filter_param_a_uv, float filter_param_b_uv, string dither_type="none", string cpu_type, float src_left, float src_top, float src_width, float src_height, float nominal_luminance])
-
-resize.Bicubic(vnode clip[, ...])
-
-resize.Point(vnode clip[, ...])
-
-resize.Lanczos(vnode clip[, ...])
-
-resize.Spline16(vnode clip[, ...])
-
-resize.Spline36(vnode clip[, ...])
-
-resize.Spline64(vnode clip[, ...])
-
-resize.Bob(vnode clip, string filter="bicubic", bint tff[, ...])
-

In VapourSynth the resizers have several functions. In addition to scaling, -they also do colorspace conversions and conversions to and from the compat -formats. Resize converts a clip of known or unknown format to another clip -of known or unknown format, changing only the parameters specified by the -user. The resize filters can handle varying size and format input clips -and turn them into constant format clips.

-

If you do not know which resizer to choose, then try Bicubic. It usually -makes a good neutral default.

-

Bob can be used as a rudimentary deinterlacer.

-

Arguments denoted as type enum may be specified by numerical index (see -ITU-T H.265 Annex E.3) or by name. Enums specified by name have their -argument name suffixed with “_s”. For example, a destination matrix of -BT 709 can be specified either with matrix=1 or with matrix_s="709".

-

Note that matrix is not an optional argument when converting to YUV. -Also note that if no matrix is specified in an input YUV frame’s properties -then matrix_in also needs to be set.

-

The function will return an error if the subsampling restrictions aren’t -followed.

-

If you get an error like:

-
Resize error 3074: no path between colorspaces (2/2/2 => 1/1/1).
-May need to specify additional colorspace parameters.
-
-
-

It usually means the matrix/transfer/primaries are unknown and you have to -specify the input colorspace parameters yourself. Note: 2 means “unspecified” -according to the ITU-T recommendation.

-

Resizing is performed per-field for interlaced images, as indicated by the -_FieldBased frame property. Source filters may sometimes mark progressive -video as interlaced, which can result in sub-optimal resampling quality -unless _FieldBased is cleared.

-

clip:

-
-

Accepts all kinds of input.

-
-

width, height:

-
-

Output image dimensions.

-
-

filter:

-
-

Scaling method for deinterlacing. See resample_filter_uv for accepted values.

-
-

tff:

-
-

Field order for deinterlacing. Used when the _FieldBased property is not set.

-
-

format:

-
-

Output format id.

-
-

matrix, transfer, primaries:

-
-

Output colorspace specification. If not provided, the corresponding attributes from -the input clip will be selected, except for YCoCg and RGB color families, where the -corresponding matrix is set by default.

-
-

range:

-
-

Output pixel range. For integer formats, this allows selection of the legal code -values. Even when set, out of range values (BTB/WTW) may be generated. If the input -format is of a different color family, the default range is studio/limited for YUV -and full-range for RGB.

-
-

chromaloc:

-
-

Output chroma location. For subsampled formats, specifies the chroma location. If -the input format is 4:4:4 or RGB and the output is subsampled, the default location -is left-aligned, as per MPEG. Possible chroma locations (ITU-T H.265 Figure E.1): -left, center, top_left, top, bottom_left, bottom

-
-

matrix_in, transfer_in, primaries_in, range_in, chromaloc_in:

-
-

Input colorspace/format specification. If the corresponding frame property is set -to a value other than unspecified, the frame property is used instead of this parameter. -Default values are set for certain color families. See the equivalent output arguments -for more information.

-
-

filter_param_a, filter_param_b:

-
-

Parameters for the scaler used for RGB and Y-channel. For the bicubic filter, -filter_param_a/b represent the “b” and “c” parameters. For the lanczos filter, -filter_param_a represents the number of taps.

-
-

resample_filter_uv:

-
-

Scaling method for UV channels. It defaults to the same as for the Y-channel. The -following values can be used with resample_filter_uv: point, bilinear, bicubic, -spline16, spline36, lanczos.

-
-

filter_param_a_uv, filter_param_b_uv:

-
-

Parameters for the scaler used for UV channels.

-
-

dither_type:

-
-

Dithering method. Dithering is used only for conversions resulting in an integer -format. The following dithering methods are available: none, ordered, random, -error_diffusion.

-
-

cpu_type:

-
-

Only used for testing.

-
-

src_left, src_top, src_width, src_height:

-
-

Used to select the source region of the input to use. Can also be used to shift the image. -Defaults to the whole image.

-
-

nominal_luminance:

-
-

Determines the physical brightness of the value 1.0. The unit is in cd/m^2.

-
-

To convert to YV12:

-
Bicubic(clip=clip, format=vs.YUV420P8, matrix_s="709")
-
-
-

To resize and convert YUV with color information frame properties to planar RGB:

-
Bicubic(clip=clip, width=1920, height=1080, format=vs.RGB24)
-
-
-

To resize and convert YUV without color information frame properties to planar RGB:

-
Bicubic(clip=clip, width=1920, height=1080, format=vs.RGB24, matrix_in_s="709")
-
-
-

The following tables list values of selected colorspace enumerations and -their abbreviated names. (Numerical value in parentheses.) For all possible values, -see ITU-T H.265.

-
-

Matrix coefficients (ITU-T H.265 Table E.5):

-
rgb (0)        Identity
-               The identity matrix.
-               Typically used for GBR (often referred to as RGB);
-               however, may also be used for YZX (often referred to as
-               XYZ);
-709 (1)        KR = 0.2126; KB = 0.0722
-               ITU-R Rec. BT.709-5
-unspec (2)     Unspecified
-               Image characteristics are unknown or are determined by the
-               application.
-fcc (4)
-470bg (5)      KR = 0.299; KB = 0.114
-               ITU-R Rec. BT.470-6 System B, G (historical)
-               (functionally the same as the value 6 (170m))
-170m (6)       KR = 0.299; KB = 0.114
-               SMPTE 170M (2004)
-               (functionally the same as the value 5 (470bg))
-240m (7)       SMPTE 240M
-ycgco (8)      YCgCo
-2020ncl (9)    KR = 0.2627; KB = 0.0593
-               Rec. ITU-R BT.2020 non-constant luminance system
-2020cl (10)    KR = 0.2627; KB = 0.0593
-               Rec. ITU-R BT.2020 constant luminance system
-chromancl (12) Chromaticity derived non-constant luminance system
-chromacl (13)  Chromaticity derived constant luminance system
-ictcp (14)     ICtCp
-
-
-

Transfer characteristics (ITU-T H.265 Table E.4):

-
709 (1)        V = a * Lc0.45 - ( a - 1 ) for 1 >= Lc >= b
-               V = 4.500 * Lc for b > Lc >= 0
-               Rec. ITU-R BT.709-5
-               (functionally the same as the values 6 (601),
-               14 (2020_10) and 15 (2020_12))
-unspec (2)     Unspecified
-               Image characteristics are unknown or are determined by the
-               application.
-470m (4)       ITU-R Rec. BT.470-6 System M
-470bg (5)      ITU-R Rec. BT.470-6 System B, G (historical)
-601 (6)        V = a * Lc0.45 - ( a - 1 ) for 1 >= Lc >= b
-               V = 4.500 * Lc for b > Lc >= 0
-               Rec. ITU-R BT.601-6 525 or 625
-               (functionally the same as the values 1 (709),
-               14 (2020_10) and 15 (2020_12))
-240m (7)       SMPTE 240M
-linear (8)     V = Lc for all values of Lc
-               Linear transfer characteristics
-log100 (9)     Log 1:100 contrast
-log316 (10)    Log 1:316 contrast
-xvycc (11)     IEC 61966-2-4
-srgb (13)      IEC 61966-2-1
-2020_10 (14)   V = a * Lc0.45 - ( a - 1 ) for 1 >= Lc >= b
-               V = 4.500 * Lc for b > Lc >= 0
-               Rec. ITU-R BT.2020
-               (functionally the same as the values 1 (709),
-               6 (601) and 15 (2020_12))
-2020_12 (15)   V = a * Lc0.45 - ( a - 1 ) for 1 >= Lc >= b
-               V = 4.500 * Lc for b > Lc >= 0
-               Rec. ITU-R BT.2020
-               (functionally the same as the values 1 (709),
-               6 (601) and 14 (2020_10))
-st2084 (16)    SMPTE ST 2084
-std-b67 (18)   ARIB std-b67
-
-
-

Color primaries (ITU-T H.265 Table E.3):

-
709 (1)        primary x y
-               green 0.300 0.600
-               blue 0.150 0.060
-               red 0.640 0.330
-               white D65 0.3127 0.3290
-               Rec. ITU-R BT.709-5
-unspec (2)     Unspecified
-               Image characteristics are unknown or are determined by the
-               application.
-470m (4)       ITU-R Rec. BT.470-6 System M
-470bg (5)      ITU-R Rec. BT.470-6 System B, G (historical)
-170m (6)       primary x y
-               green 0.310 0.595
-               blue 0.155 0.070
-               red 0.630 0.340
-               white D65 0.3127 0.3290
-               SMPTE 170M (2004)
-               (functionally the same as the value 7 (240m))
-240m (7)       primary x y
-               green 0.310 0.595
-               blue 0.155 0.070
-               red 0.630 0.340
-               white D65 0.3127 0.3290
-               SMPTE 240M (1999)
-               (functionally the same as the value 6 (170m))
-film (8)
-2020 (9)       primary x y
-               green 0.170 0.797
-               blue 0.131 0.046
-               red 0.708 0.292
-               white D65 0.3127 0.3290
-               Rec. ITU-R BT.2020
-st428 (10)     Commonly known as xyz
-xyz (10)       Alias for st428
-st431-2 (11)   DCI-P3 with traditional white point
-st432-1 (12)   DCI-P3
-jedec-p22 (22) E.B.U. STANDARD FOR CHROMATICITY TOLERANCES FOR STUDIO MONITORS (3213-E)
-               Also known as JEDEC P22
-
-
-

Pixel range (ITU-T H.265 Eq E-4 to E-15):

-
limited (0) Studio (TV) legal range, 16-235 in 8 bits.
-            Y = Clip1Y( Round( ( 1 << ( BitDepthY - 8 ) ) *
-                                      ( 219 * E'Y + 16 ) ) )
-            Cb = Clip1C( Round( ( 1 << ( BitDepthC - 8 ) ) *
-                                       ( 224 * E'PB + 128 ) ) )
-            Cr = Clip1C( Round( ( 1 << ( BitDepthC - 8 ) ) *
-                                       ( 224 * E'PR + 128 ) ) )
-
-            R = Clip1Y( ( 1 << ( BitDepthY - 8 ) ) *
-                               ( 219 * E'R + 16 ) )
-            G = Clip1Y( ( 1 << ( BitDepthY - 8 ) ) *
-                               ( 219 * E'G + 16 ) )
-            B = Clip1Y( ( 1 << ( BitDepthY - 8 ) ) *
-                               ( 219 * E'B + 16 ) )
-full (1)    Full (PC) dynamic range, 0-255 in 8 bits.
-            Y = Clip1Y( Round( ( ( 1 << BitDepthY ) - 1 ) * E'Y ) )
-            Cb = Clip1C( Round( ( ( 1 << BitDepthC ) - 1 ) * E'PB +
-                                  ( 1 << ( BitDepthC - 1 ) ) ) )
-            Cr = Clip1C( Round( ( ( 1 << BitDepthC ) - 1 ) * E'PR +
-                                  ( 1 << ( BitDepthC - 1 ) ) ) )
-
-            R = Clip1Y( ( ( 1 << BitDepthY ) - 1 ) * E'R )
-            G = Clip1Y( ( ( 1 << BitDepthY ) - 1 ) * E'G )
-            B = Clip1Y( ( ( 1 << BitDepthY ) - 1 ) * E'B )
-
-
-
-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/video/reverse.html b/Programs/doc/functions/video/reverse.html deleted file mode 100644 index 70f9449..0000000 --- a/Programs/doc/functions/video/reverse.html +++ /dev/null @@ -1,194 +0,0 @@ - - - - - - - Reverse — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

Reverse

-
-
-std.Reverse(vnode clip)
-

Returns a clip with the frame or sample order reversed. For example, a clip with 3 -frames would have the frame order 2, 1, 0.

-

In Python, std.Reverse can also be invoked by slicing a clip.

-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/video/selectevery.html b/Programs/doc/functions/video/selectevery.html deleted file mode 100644 index 09a5f68..0000000 --- a/Programs/doc/functions/video/selectevery.html +++ /dev/null @@ -1,213 +0,0 @@ - - - - - - - SelectEvery — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

SelectEvery

-
-
-std.SelectEvery(vnode clip, int cycle, int[] offsets[, bint modify_duration=True])
-

Returns a clip with only some of the frames in every cycle selected. The -offsets given must be between 0 and cycle - 1.

-

Below are some examples of useful operations.

-

Return even numbered frames, starting with 0:

-
SelectEvery(clip=clip, cycle=2, offsets=0)
-
-
-

Return odd numbered frames, starting with 1:

-
SelectEvery(clip=clip, cycle=2, offsets=1)
-
-
-

Fixed pattern 1 in 5 decimation, first frame in every cycle removed:

-
SelectEvery(clip=clip, cycle=5, offsets=[1, 2, 3, 4])
-
-
-

Duplicate every fourth frame:

-
SelectEvery(clip=clip, cycle=4, offsets=[0, 1, 2, 3, 3])
-
-
-

In Python, std.SelectEvery can also be invoked by slicing a clip.

-

If modify_duration is set the clip’s frame rate is multiplied by the number -of offsets and divided by cycle. The frame durations are adjusted in the same manner.

-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/video/separatefields.html b/Programs/doc/functions/video/separatefields.html deleted file mode 100644 index c950470..0000000 --- a/Programs/doc/functions/video/separatefields.html +++ /dev/null @@ -1,201 +0,0 @@ - - - - - - - SeparateFields — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

SeparateFields

-
-
-std.SeparateFields(vnode clip[, bint tff, bint modify_duration=True])
-

Returns a clip with the fields separated and interleaved.

-

The tff argument only has an effect when the field order isn’t set for a frame. -Setting tff to true means top field first and false means bottom field -first.

-

If modify_duration is set then the output clip’s frame rate is double that of the input clip. -The frame durations will also be halved.

-

The _FieldBased frame property is deleted. The _Field frame -property is added.

-

If no field order is specified in _FieldBased or tff an error -will be returned.

-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/video/setfieldbased.html b/Programs/doc/functions/video/setfieldbased.html deleted file mode 100644 index 902c496..0000000 --- a/Programs/doc/functions/video/setfieldbased.html +++ /dev/null @@ -1,208 +0,0 @@ - - - - - - - SetFieldBased — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

SetFieldBased

-
-
-std.SetFieldBased(vnode clip, int value)
-

This is a convenience function. See SetFrameProps if you want to -set other properties.

-

SetFieldBased sets _FieldBased to value and deletes -the _Field frame property. The possible values are:

-
-

0 = Frame Based

-

1 = Bottom Field First

-

2 = Top Field First

-
-

For example, if you have source material that’s progressive but has -been encoded as interlaced you can set it to be treated as frame based -(not interlaced) to improve resizing quality:

-
clip = core.bs.VideoSource("rule6.mkv")
-clip = core.std.SetFieldBased(clip, 0)
-clip = clip.resize.Bilinear(clip, width=320, height=240)
-
-
-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/video/setframeprop.html b/Programs/doc/functions/video/setframeprop.html deleted file mode 100644 index 1d34cb5..0000000 --- a/Programs/doc/functions/video/setframeprop.html +++ /dev/null @@ -1,202 +0,0 @@ - - - - - - - SetFrameProp — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

SetFrameProp

-
-
-std.SetFrameProp(vnode clip, string prop[, int[] intval, float[] floatval, string[] data])
-

Adds a frame property to every frame in clip.

-

If there is already a property with the name prop in the frames, -it will be overwritten.

-

The type of the property added depends on which of the intval, -floatval, or data parameters is used.

-

The data parameter can only be used to add NULL-terminated strings, -not arbitrary binary data.

-

For example, to set the field order to top field first:

-
clip = c.std.SetFrameProp(clip, prop="_FieldBased", intval=2)
-
-
-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/video/setframeprops.html b/Programs/doc/functions/video/setframeprops.html deleted file mode 100644 index 531ca8b..0000000 --- a/Programs/doc/functions/video/setframeprops.html +++ /dev/null @@ -1,198 +0,0 @@ - - - - - - - SetFrameProps — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

SetFrameProps

-
-
-std.SetFrameProps(vnode clip, ...)
-

Adds the specified values as a frame property of every frame -in clip. If a frame property with the same key already exists -it will be replaced.

-

For example, to set the field order to top field first:

-
clip = c.std.SetFrameProps(clip, _FieldBased=2)
-
-
-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/video/setvideocache.html b/Programs/doc/functions/video/setvideocache.html deleted file mode 100644 index 02130cc..0000000 --- a/Programs/doc/functions/video/setvideocache.html +++ /dev/null @@ -1,209 +0,0 @@ - - - - - - - SetVideoCache — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

SetVideoCache

-
-
-std.SetVideoCache(vnode clip[, int mode, int fixedsize, int maxsize, int historysize])
-

Every filter node has a cache associated with it that -may or may not be enabled depending on the dependencies -and request patterns. This function allows all automatic -behavior to be overridden.

-

The mode option has 3 possible options where 0 always -disables caching, 1 always enables the cache and -1 -uses the automatically calculated settings. Note that -setting mode to -1 will reset the other values to -their defaults as well.

-

The other options are fairly self-explanatory where -setting fixedsize prevents the cache from over time -altering its maxsize based on request history. The -final historysize argument controls how many previous -and no longer cached requests should be considered when -adjusting maxsize, generally this value should not -be touched at all.

-

Note that setting mode will reset all other options -to their defaults.

-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/video/shuffleplanes.html b/Programs/doc/functions/video/shuffleplanes.html deleted file mode 100644 index a2bf89c..0000000 --- a/Programs/doc/functions/video/shuffleplanes.html +++ /dev/null @@ -1,227 +0,0 @@ - - - - - - - ShufflePlanes — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

ShufflePlanes

-
-
-std.ShufflePlanes(vnode[] clips, int[] planes, int colorfamily)
-

ShufflePlanes can extract and combine planes from different clips in the most -general way possible. -This is both good and bad, as there are almost no error checks.

-

Most of the returned clip’s properties are implicitly determined from the -first clip given to clips.

-

The clips parameter takes between one and three clips for color families -with three planes. In this case clips=[A] is equivalent to clips=[A, A, A] -and clips=[A, B] is equivalent to clips=[A, B, B]. For the GRAY color -family, which has one plane, it takes exactly one clip.

-

The argument planes controls which of the input clips’ planes to use. -Zero indexed. The first number refers to the first input clip, the second -number to the second clip, the third number to the third clip.

-

The only thing that needs to be specified is colorfamily, which controls which -color family (YUV, RGB, GRAY) the output clip will be. -Properties such as subsampling are determined from the relative size of the -given planes to combine.

-

ShufflePlanes accepts clips with variable format and dimensions only when -extracting a single plane.

-

Below are some examples of useful operations.

-

Extract plane with index X. X=0 will mean luma in a YUV clip and R in an RGB -clip. Likewise 1 will return the U and G channels, respectively:

-
ShufflePlanes(clips=clip, planes=X, colorfamily=vs.GRAY)
-
-
-

Swap U and V in a YUV clip:

-
ShufflePlanes(clips=clip, planes=[0, 2, 1], colorfamily=vs.YUV)
-
-
-

Merge 3 grayscale clips into a YUV clip:

-
ShufflePlanes(clips=[Yclip, Uclip, Vclip], planes=[0, 0, 0], colorfamily=vs.YUV)
-
-
-

Cast a YUV clip to RGB:

-
ShufflePlanes(clips=[YUVclip], planes=[0, 1, 2], colorfamily=vs.RGB)
-
-
-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/video/splice.html b/Programs/doc/functions/video/splice.html deleted file mode 100644 index 41d3a89..0000000 --- a/Programs/doc/functions/video/splice.html +++ /dev/null @@ -1,195 +0,0 @@ - - - - - - - Splice — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

Splice

-
-
-std.Splice(vnode[] clips[, bint mismatch=0])
-

Returns a clip with all clips appended in the given order.

-

Splicing clips with different formats or dimensions is -considered an error unless mismatch is true.

-

In Python, std.Splice can also be invoked using the addition operator.

-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/video/splitplanes.html b/Programs/doc/functions/video/splitplanes.html deleted file mode 100644 index aa5bd07..0000000 --- a/Programs/doc/functions/video/splitplanes.html +++ /dev/null @@ -1,193 +0,0 @@ - - - - - - - SplitPlanes — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Programs/doc/functions/video/stackvertical_stackhorizontal.html b/Programs/doc/functions/video/stackvertical_stackhorizontal.html deleted file mode 100644 index 55519e4..0000000 --- a/Programs/doc/functions/video/stackvertical_stackhorizontal.html +++ /dev/null @@ -1,198 +0,0 @@ - - - - - - - StackVertical/StackHorizontal — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

StackVertical/StackHorizontal

-
-
-std.StackVertical(vnode[] clips)
-
-std.StackHorizontal(vnode[] clips)
-

Stacks all given clips together. The same format is a requirement. For -StackVertical all clips also need to be the same width and for -StackHorizontal all clips need to be the same height.

-

The frame properties are copied from the first clip.

-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/video/text/clipinfo.html b/Programs/doc/functions/video/text/clipinfo.html deleted file mode 100644 index 90e46fa..0000000 --- a/Programs/doc/functions/video/text/clipinfo.html +++ /dev/null @@ -1,197 +0,0 @@ - - - - - - - ClipInfo — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

ClipInfo

-
-
-text.ClipInfo(vnode clip[, int alignment=7, int scale=1]])
-

Prints information about the clip, such as the format and framerate.

-

This is a convenience function for Text.

-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/video/text/coreinfo.html b/Programs/doc/functions/video/text/coreinfo.html deleted file mode 100644 index c16b227..0000000 --- a/Programs/doc/functions/video/text/coreinfo.html +++ /dev/null @@ -1,198 +0,0 @@ - - - - - - - CoreInfo — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

CoreInfo

-
-
-text.CoreInfo([vnode clip=std.BlankClip(), int alignment=7, int scale=1])
-

Prints information about the VapourSynth core, such as version and memory -use. If no clip is supplied, a default blank one is used.

-

This is a convenience function for Text.

-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/video/text/framenum.html b/Programs/doc/functions/video/text/framenum.html deleted file mode 100644 index 18b518e..0000000 --- a/Programs/doc/functions/video/text/framenum.html +++ /dev/null @@ -1,197 +0,0 @@ - - - - - - - FrameNum — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Programs/doc/functions/video/text/frameprops.html b/Programs/doc/functions/video/text/frameprops.html deleted file mode 100644 index 6d1bfc7..0000000 --- a/Programs/doc/functions/video/text/frameprops.html +++ /dev/null @@ -1,198 +0,0 @@ - - - - - - - FrameProps — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

FrameProps

-
-
-text.FrameProps(vnode clip[, string props=[], int alignment=7, int scale=1])
-

Prints all properties attached to the frames, or if the props array is -given only those properties.

-

This is a convenience function for Text.

-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/video/text/text.html b/Programs/doc/functions/video/text/text.html deleted file mode 100644 index b3a6640..0000000 --- a/Programs/doc/functions/video/text/text.html +++ /dev/null @@ -1,208 +0,0 @@ - - - - - - - Text — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

Text

-
-
-text.Text(vnode clip, string text[, int alignment=7, int scale=1])
-

Text is a simple text printing filter. It doesn’t use any external libraries -for drawing the text. It uses a built-in bitmap font: the not-bold, 8×16 -version of Terminus. The font was not modified, only converted from PCF to an -array of bytes.

-

The font covers Windows-1252, which is a superset of ISO-8859-1 (aka latin1). -Unprintable characters get turned into underscores. Long lines get wrapped in -a dumb way. Lines that end up too low to fit in the frame are silently -dropped.

-

The alignment parameter takes a number from 1 to 9, corresponding to the -positions of the keys on a numpad.

-

The scale parameter sets an integer scaling factor for the bitmap font.

-

ClipInfo, CoreInfo, FrameNum, and FrameProps are convenience functions -based on Text.

-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/video/transpose.html b/Programs/doc/functions/video/transpose.html deleted file mode 100644 index 0818873..0000000 --- a/Programs/doc/functions/video/transpose.html +++ /dev/null @@ -1,203 +0,0 @@ - - - - - - - Transpose — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

Transpose

-
-
-std.Transpose(vnode clip)
-

Flips the contents of the frames in the same way as a matrix transpose would -do. Combine it with FlipVertical or FlipHorizontal to synthesize a left or -right rotation. Calling Transpose twice in a row is the same as doing nothing -(but slower).

-

Here is a picture to illustrate what Transpose does:

-
                          0   5  55
- 0   1   1   2   3        1   8  89
- 5   8  13  21  34   =>   1  13 144
-55  89 144 233 377        2  21 233
-                          3  34 377
-
-
-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/video/trim.html b/Programs/doc/functions/video/trim.html deleted file mode 100644 index 90eee99..0000000 --- a/Programs/doc/functions/video/trim.html +++ /dev/null @@ -1,200 +0,0 @@ - - - - - - - Trim — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

Trim

-
-
-std.Trim(vnode clip[, int first=0, int last, int length])
-

Trim returns a clip with only the frames between the arguments first and -last, or a clip of length frames, starting at first. -Trim is inclusive so Trim(clip, first=3, last=3) will return one frame. If -neither last nor length is specified, no frames are removed from the end -of the clip.

-

Specifying both last and length is considered to be an error. -Likewise is calling Trim in a way that returns no frames, as 0 frame clips are -not allowed in VapourSynth.

-

In Python, std.Trim can also be invoked by slicing a clip.

-
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/functions/video/turn180.html b/Programs/doc/functions/video/turn180.html deleted file mode 100644 index ef5ca9f..0000000 --- a/Programs/doc/functions/video/turn180.html +++ /dev/null @@ -1,192 +0,0 @@ - - - - - - - Turn180 — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Programs/doc/genindex.html b/Programs/doc/genindex.html deleted file mode 100644 index c2e9ce2..0000000 --- a/Programs/doc/genindex.html +++ /dev/null @@ -1,990 +0,0 @@ - - - - - - Index — VapourSynth R64 documentation - - - - - - - - - - - - - - - - -
- - -
- -
-
-
-
    -
  • - -
  • -
  • -
-
-
-
-
- - -

Index

- -
- _ - | A - | B - | C - | D - | E - | F - | G - | H - | I - | L - | M - | N - | O - | P - | Q - | R - | S - | T - | U - | V - | W - -
-

_

- - -
- -

A

- - - -
- -

B

- - - -
- -

C

- - - -
- -

D

- - - -
- -

E

- - - -
- -

F

- - - -
- -

G

- - - -
- -

H

- - - -
- -

I

- - - -
- -

L

- - - -
- -

M

- - - -
- -

N

- - - -
- -

O

- - - -
- -

P

- - - -
- -

Q

- - -
- -

R

- - - -
- -

S

- - - -
- -

T

- - - -
- -

U

- - - -
- -

V

- - - -
- -

W

- - - -
- - - -
-
-
- -
- -
-

© Copyright 2012-2023, Fredrik Mellbin.

-
- - Built with Sphinx using a - theme - provided by Read the Docs. - - -
-
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/gettingstarted.html b/Programs/doc/gettingstarted.html deleted file mode 100644 index dd37121..0000000 --- a/Programs/doc/gettingstarted.html +++ /dev/null @@ -1,187 +0,0 @@ - - - - - - - Getting Started — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

Getting Started

-

So you managed to install VapourSynth. Now what?

-

If you don’t know the basics of Python, you may want to check out a -tutorial.

-

You can “play around” in the python interpreter if you want, but that’s not how -most scripts are created.

-
-

Example Script

-

It all starts with a .vpy script. -Here’s a sample script to be inspired by, it assumes that BestSource -is installed and auto-loaded.

-
from vapoursynth import core                     # Get an instance of the core
-clip = core.bs.VideoSource(source='filename.mkv')  # Load a video track in mkv file
-clip = core.std.FlipHorizontal(clip)             # Flip the video clip in the horizontal direction
-clip.set_output()                                # Set the video clip to be accessible for output
-
-
-

Audio is also supported, use BestSource to load your audio file.

-
from vapoursynth import core                     # Get an instance of the core
-clip = core.bs.AudioSource(source='filename.mkv')    # Load an audio track in mkv file
-clip = core.std.AudioGain(clip,gain=2.0)         # Gain all channels 2x
-clip.set_output()                                # Set the audio clip to be accessible for output
-
-
-

You can combine 2 operations in one script.

-
from vapoursynth import core
-video = core.bs.VideoSource(source='filename.mkv')
-audio = core.bs.AudioSource(source='filename.mkv')
-video = core.std.FlipHorizontal(video)
-audio = core.std.AudioGain(audio,gain=2.0)
-video.set_output(index=0)
-audio.set_output(index=1)
-
-
-

Remember that most VapourSynth objects have a quite nice string representation -in Python, so if you want to know more about an instance just call print().

-
-
-

Preview

-

It’s possible to directly open the script in VapourSynth Editor -or VirtualDub FilterMod for previewing.

-
-
-

Output with VSPipe

-

VSPipe is very useful to pipe the output to various applications, for example x264 and flac for encoding.

-

Here are some examples of command lines that automatically pass on most video and audio attributes.

-

For x264:

-
vspipe -c y4m script.vpy - | x264 --demuxer y4m - --output encoded.264
-
-
-

For flac:

-
vspipe -c wav script.vpy - | flac - -o encoded.flac
-
-
-

For FFmpeg:

-
vspipe -c y4m script.vpy - | ffmpeg -i - encoded.mkv
-
-
-

For mpv:

-
vspipe -c y4m script.vpy - | mpv -
-vspipe -c wav script.vpy - | mpv -
-
-
-
-
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/index.html b/Programs/doc/index.html deleted file mode 100644 index 7f25471..0000000 --- a/Programs/doc/index.html +++ /dev/null @@ -1,324 +0,0 @@ - - - - - - - Welcome to VapourSynth’s documentation! — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

Welcome to VapourSynth’s documentation!

-

Contents:

-
- -
-
-
-

Indices and tables

- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/installation.html b/Programs/doc/installation.html deleted file mode 100644 index 5d5b7d1..0000000 --- a/Programs/doc/installation.html +++ /dev/null @@ -1,476 +0,0 @@ - - - - - - - Installation — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

Installation

-
-

Basic Program

-

The installation contains two main steps:

-
    -
  1. Install VapourSynth core library.

  2. -
  3. Install the Python wrapper of VapourSynth.

  4. -
-

After you completed the second step, you can test it by opening a Python command line -and type this:

-
from vapoursynth import core
-print(core.version())
-
-
-

After pressing return at the final line, you should see the version printed along with a -few other lines describing the options used when instantiating the Core object. -In fact, these lines should be the same as the output result of vspipe --version.

-
-

Windows Installation

-
-

Prerequisites

-
-
First download and install the prerequisites:
    -
  • Python 3.11.x or Python 3.8.x – 32 or 64 bit version depending on which version of VapourSynth you want to install

  • -
-
-
-

Note that VapourSynth and Python have to be matched so both are either installed -for all users or for only for the current user.

-

Also note that per user installs will not install the required Visual Studio -2019 runtimes.

-
-
-

Installation

-

Simply run the VapourSynth installer. -It should automatically detect and install everything, including the Python wrapper.

-

If the tests mentioned at the beginning fails, there may be a bug in the installer or there are -old copies of vapoursynth.pyd and vapoursynth.dll lying around.

-
-
-
-

Windows Installation (Portable)

-
-
First download and decompress the prerequisites:
    -
  • Python 3.11.x or Python 3.8.x – 32 or 64 bit embeddable version

  • -
-
-
-

Simply decompress the portable VapourSynth archive -into the Python dir and overwrite all existing files.Run vs-detect-python.bat -to configure it for the current Python version. Done.

-

You can also use the VapourSynth Editor by decompressing it into the same directory.

-
-
-

OS X Installation

-
-
First download and install the prerequisites:
    -
  • Xcode – Available from the AppStore

  • -
  • Homebrew – A package manager

  • -
-
-
-

Simply run these commands in a terminal and wait for them to complete:

-
brew install vapoursynth
-
-
-
-
-

Linux installation

-

Several distributions have VapourSynth packages. Note that those packages are usually OUT OF DATE.

-
-

Debian

-

The VapourSynth packages are provided by deb-multimedia repository. -You need to add the repository first following the guide on the official website.

-
-
-

Fedora, CentOS and RHEL

-

For Fedora, the VapourSynth packages can be downloaded from official repository directly. -For CentOS and RHEL, you should install EPEL (Extra Packages for Enterprise Linux) repository first.

-
-
-

Gentoo

-

There is an unofficial Portage tree with all VapourSynth related ebuilds. -Check the Github link for more information and instructions.

-
-
-

Arch Linux

-

VapourSynth-related packages are provided by the Community repository.

-
-
-

Nix and NixOS

-

vapoursynth is available on nixpkgs, either via nixpkgs#vapoursynth or via nixpkgs#python3Packages.vapoursynth (currently on unstable only). -Be aware that the derivation is broken on MacOS.

-

VapourSynth releases are not backported to the current stable branch. -To get the newest version use the unstable branch.

-
-
-
-

Windows Compilation

-
-

Preparing the Build Environment on Windows

-

Default install paths are assumed in all projects and scripts, be prepared to adjust many things if you changed them

-

Required languages and applications:

-
    -
  • Needs Visual Studio 2019

  • -
  • It also needs both 32bit and 64bit Python 3.8.x and 3.11.x (the msvc project assumes that you installed python for all users.)

  • -
  • InnoSetup is needed to create the installer (default installation path assumed)

  • -
  • 7-zip is needed to compress the portable version (default installation path assumed)

  • -
-
-
-

Preparing the C++ Project

-
    -
  • Clone VapourSynth

  • -
  • Clone VSRepo into the VapourSynth dir (git clone https://github.com/vapoursynth/vsrepo)

  • -
  • Clone zimg into the VapourSynth dir (git clone https://github.com/sekrit-twc/zimg.git --recurse-submodules)

  • -
  • Clone avs+ into the VapourSynth dir (git clone https://github.com/AviSynth/AviSynthPlus.git)

  • -
  • Clone libp2p into the VapourSynth dir (git clone https://github.com/sekrit-twc/libp2p.git)

  • -
  • Compile 32 and 64 bit releases using the VapourSynth solution

  • -
-
-
-

Preparing the Python Project

-
    -
  • Run py -3.11 -m pip install -r python-requirements.txt for 64bit.

  • -
  • Run py -3.8 -m pip install -r python-requirements.txt for 64bit.

  • -
  • Run cython_build.bat to compile the Python modules

  • -
  • Run docs_build.bat to compile the documentation

  • -
-
-
-

Distribution

-

All the above steps are necessary to create the installer

-

You also need 7z.exe and 7z.dll from 7-zip -Both need to be placed in the “installer” dir.

-

You’ll also have to grab the file pfm-192-vapoursynth-win.exe -which is only available from installations/portable releases.

-

Run make_portable.bat and make_installers.bat to package things.

-
-

Note

-

Note that the Avisynth side of AVFS won’t work properly in debug builds (memory allocation and exceptions across module boundaries trolololol)

-
-
-
-
-

Linux and OS X Compilation

-
-
These are the requirements:
    -
  • Autoconf, Automake, and Libtool, probably recent versions

  • -
  • pkg-config

  • -
  • GCC 4.8 or newer, or Clang

  • -
  • zimg

  • -
  • Python 3

  • -
  • Cython 0.28 or later installed in your Python 3 environment

  • -
  • Sphinx for the documentation (optional)

  • -
-
-
-

Note: any version of Python 3 will do. A specific version is only -required when using the official Windows binaries.

-
-

Required packages (OS X)

-
-
First download and install the prerequisites:
    -
  • Xcode – Available from the AppStore

  • -
  • Homebrew – A package manager

  • -
-
-
-

Installation of the required packages is very easy. Simply run these -commands in a terminal and wait for them to complete:

-
brew install python3 ffmpeg libass zimg imagemagick
-pip3 install cython
-
-
-

If you’ve already installed all the required packages and instead want -to update them, simply run:

-
brew update && brew upgrade
-pip3 install --upgrade cython
-
-
-
-
-

Compilation

-

If you haven’t checked out the source code before, use git to do so:

-
git clone https://github.com/vapoursynth/vapoursynth.git
-
-
-

Or if you already have a copy of the source, update it with:

-
git pull
-
-
-

Enter the VapourSynth directory and run these commands to compile and install:

-
./autogen.sh
-./configure
-make
-make install
-
-
-

Depending on your operating system’s configuration, VapourSynth may not -work out of the box with the default prefix of /usr/local. Two errors -may pop up when running vspipe --version:

-
    -
  • “vspipe: error while loading shared libraries: libvapoursynth-script.so.0: -cannot open shared object file: No such file or directory”

    -

    This is caused by the non-standard location of libvapoursynth-script.so.0. -Your dynamic loader is not configured to look in /usr/local/lib. One -way to work around this error is to use the LD_LIBRARY_PATH environment -variable:

    -
    $ LD_LIBRARY_PATH=/usr/local/lib vspipe --version
    -
    -
    -
  • -
  • “Failed to initialize VapourSynth environment”

    -

    This is caused by the non-standard location of the Python module, -vapoursynth.so. Your Python is not configured to look in -/usr/local/lib/python3.x/site-packages. One way to work around this -error is to use the PYTHONPATH environment variable:

    -
    $ PYTHONPATH=/usr/local/lib/python3.x/site-packages vspipe --version
    -
    -
    -

    Replace “x” with the correct number.

    -
  • -
-

The documentation can be built using its own Makefile:

-
$ make -C doc/ html
-
-
-

The documentation can be installed using the standard program cp.

-
-
-
-
-

Plugins and Scripts

-

If you’re looking for plugins and scripts then one of the most complete lists -available can be found at vsdb.top.

-
-

Installing with VSRepo

-

On windows you can use the included vsrepo.py to install and upgrade plugins and scripts.

-

Simply run vsrepo.py install <namespace or identifier> to install them.

-

If you need a list of known plugins and scripts you can run vsrepo.py available or visit vsdb.top.

-

For more reference, visit vsrepo’s repository

-
-
-

Installing Manually

-

You can put your plugin (.dll) and script (.py) to where you think it is convenient.

-

For plugins, you can use std.LoadPlugin function to load it. there is also a plugin autoloading mechanism to save your time, see blow.

-

For scripts, you should add a relative path to python<your_python_version>._pth, then you can import it in your script.

-
-
-

Plugin Autoloading

-

VapourSynth automatically loads all the native plugins located in certain -folders. Autoloading works just like manual loading, with the exception -that any errors encountered while loading a plugin are silently ignored.

-
-

Note

-

Avoid autoloading from folders that other applications might also -use, such as /usr/lib or /usr/local/lib in a Linux system. Several -users reported crashes when VapourSynth attempted to load some -random libraries (*cough*wxgtk*cough*).

-
-
-

Windows

-

Windows has in total 3 different autoloading directories: user plugins, core plugins and global plugins. They are searched in that order. -User plugins are always loaded first so that the current user can always decide which exact version of a plugin is used. Core plugins follow. -Global plugins are placed last to prevent them from overriding any of the included plugins by accident.

-

The searched paths are:

-
    -
  1. <AppData>\VapourSynth\plugins32 or <AppData>\VapourSynth\plugins64

  2. -
  3. <VapourSynth path>\core\plugins

  4. -
  5. <VapourSynth path>\plugins

  6. -
-

Note that the per user path is not created by default. -On modern Windows versions the AppData directory is located in <user>\AppData\Roaming by default.

-

Shortcuts to the global autoload directory are located in the start menu.

-

Avisynth plugins are never autoloaded. Support for this may be added in the future.

-

User plugins should never be put into the core\plugins directory.

-
-
-

Windows Portable

-

The searched paths are:

-
    -
  1. <VapourSynth.dll path>\vapoursynth32\coreplugins or <VapourSynth.dll path>\vapoursynth64\coreplugins

  2. -
  3. <VapourSynth.dll path>\vapoursynth32\plugins or <VapourSynth.dll path>\vapoursynth64\plugins

  4. -
-

User plugins should never be put into the coreplugins directory.

-
-
-

Linux

-

Autoloading can be configured using the file -$XDG_CONFIG_HOME/vapoursynth/vapoursynth.conf, -or $HOME/.config/vapoursynth/vapoursynth.conf if XDG_CONFIG_HOME is not -defined.

-

To provide your own path to the config file, you can use $VAPOURSYNTH_CONF_PATH.

-

Two configuration options may be used: UserPluginDir, empty by default, -and SystemPluginDir, whose default value is set at compile time to -$libdir/vapoursynth, or to the location passed to the --with-plugindir -argument to configure.

-

UserPluginDir is tried first, then SystemPluginDir.

-

Example vapoursynth.conf:

-
UserPluginDir=/home/asdf/vapoursynth/plugins
-SystemPluginDir=/special/non/default/location
-
-
-
-
-

OS X

-

Autoloading can be configured using the file -$HOME/Library/Application Support/VapourSynth/vapoursynth.conf. Everything else is -the same as in Linux.

-

Like on linux, you can use $VAPOURSYNTH_CONF_PATH to provide your own configuration.

-
-
-
-
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/introduction.html b/Programs/doc/introduction.html deleted file mode 100644 index cb6b68a..0000000 --- a/Programs/doc/introduction.html +++ /dev/null @@ -1,155 +0,0 @@ - - - - - - - Introduction — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

Introduction

-

VapourSynth is an application for video manipulation. Or a plugin. Or a library. -It’s hard to tell because it has a core library written in C++ and a Python -module to allow video scripts to be created. It came to be when I started -thinking about alternative designs for Avisynth and most of it was written -over a 3 month period.

-

The software has been heavily inspired by Avisynth -and aims to be a 21st century rewrite, taking advantage of the advancements -computers have made since the late 90s. -The main features compared to Avisynth are:

-
-
    -
  • Multithreaded - Frame level multithreading that scales well

  • -
  • Generalized Colorspaces - New colorspaces can be specified at runtime

  • -
  • Per Frame Properties - Additional metadata can be attached to frames

  • -
  • Python Based - The scripting part is implemented as a Python module so you -don’t have to learn a special language

  • -
  • Support for video with format changes - Some video just can’t stick to one -format or frame size. VapourSynth can handle any kind of change

  • -
  • Compatible with a large number of already existing Avisynth plugins

  • -
-
-
-

About the author

-

Fredrik Mellbin majored in electrical engineering with a focus on image analysis -and processing with medical applications. He has previously worked with digital -electronics and likes to plan his own software projects in his spare time. -When he one day found himself out of work he needed something to do between -sending out job applications and waiting for a reply. The natural choice for -the author was to try to improve Avisynth, the software that once made him -interested in video editing. VapourSynth is the result of all that time waiting.

-

Feel free to contact me at fredrik.mellbin that round thingy with an a gmail.com -if you need help to port a filter or want to sponsor the development.

-
-
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/objects.inv b/Programs/doc/objects.inv deleted file mode 100644 index 3efae6370f69ba3894f0fe7dbde50e179d5e91be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5400 zcmV+z73bNERX>N99Zgg*Qc_4OWa&u{KZXhxWBOp+6Z)#;@bUGkbVQ_DC za#MM3bZ81AAXa5^b7^mGIv`RuGzudiRA^-&a%F8{X>Md?av*PJAarPHb0B7EY-J#6 zb0A}HZE$jBb8}^6Aa!$TZf78RY-wUH3V7PhUCVacI+mT|E6}TJ&^?IV@lB=f^33t$ zChIyWt=Q!ZxgZjf*r7-kK`PcA^>6g=^_MhWBteh_aiI9RCW%a)z0U!7@Z2Cp$`r?! zd%9oK3ctmqOwSLbESicP^LqF0YVaJ;OnYegI z@|GwrWMu1H1p z^YDScH;5ic_CV`zMfE++w>N3!9m5ED#_KrA0HKV1Pq8vuUw^wfoweb`{?KeT6jsC@ zcDAgm<>FI-yELOY+5Ze)K?SZX0SYdf^k{LNS}e`EDXKjIw0*FB$!=&4 zvj5WT0rnMzb`w1Wd_xRxZ_t+3S6Th{rY@WMbCLMxgbf6TG4edYndS+7KAEyipJ>HI zi2#MW9(KK6_91m3{YZw}swygoO9=?^sXQr;=ah#4yYDR~$aU*aGO1g2m6bd41sH?{ z4T;6}KFJGDK?iMEAx|scR1CqT>dBrSu2!EQWs!ih!>A=LyH>6=iR!t)zB^c81if2D zNUD^qGtkX!F=q*@VcuJ3Lz;k$m|=nqzC)fJO}9J1Sh^?AcbuN88P`Ml2Vg>-H~VWf z+h-tvdK`@8Wv}yImd9)$fP&J>vsHRO|nS)Vzf- z-p}#QU#t@X$^!LOzPy(cG6LkMDt<&vjk zfp=AJ-#$G&@pR-aH^rQ%%gaMxfdDS~beUc?Nm>M!?r$Rs?Mq$}zN|lIUGw6;4J+HaTX%m1pPe2E^G{};c^5Z(Sacl?WXtS+tIKRpQ9WcB-B+pS?&D3_N?Mh~cz z7mcc%tFC{E=nnsaAu&>>uNKz6$&&OCynXa;hzIN=41p(XqWr`V(!*j5P~<9 z!b7NN(!?}835WOz$J35ZNxEQ{;nnNylK&HtEZycbiNvu8_-f2%;Op%O4m(IeJR9=$P+pA>BuNk$0I`+it;FMd&+GS zPtcauk&r1Pk@6v6y}uR${ZXYg4RXwToG5Mu=76dytD+17imEE|>==Soxe?VuKLx?% zSq|^4md8d;N@~S$Qcg>XQ&L(IY?QX|pB)k*T7$A%I|XSZa#X!BHVk9r+bno}}~1XL(eQBuSJN+eqo$mA?yp%sM)VB?BZQ zBv>SaMyiFMKU74^^Olh<#NnPiM=^^3?jc2?$tb&6X!EAk2R@v^s{? zOhxy_fd<~rs>$ekfPH&@42+0)b*_CwyUh=2Rj6r|Pfi>5XM9p~@W0b0(toTsQ8Yh9 zX%gg+cWx}rx2j(=rmSAz9trl_FbXc`4XFwAUaX2NjgMg{*;m9(#qH{d4)XyNxTfQE z-DO4yo@a0=KSgmy314HKPE^rt%4&K7mlz~YuN$$=6LgQnfl@sl{FErp63S=3#qlSx z$qeFMkpFCWmc}?)6^U)Qa5izvcvropr-anxZSLq?I)Up)MaqB*mxt)NDSeJ^$S9YT+V)U379!!l)3R%_I}Uyg}k9Y}Lf|aQ)*41uS?RyFWg@wu80+LwMK4jxb~S z?Str6?L{8xy$&!G>QQWbpM6N9Y@dpFU53 zzfvK4P#=OynNE<1WQe^un6#Xrc&yUB4*~Cy_ZFN-MYi;=oBy~nLfNXh(vao@AE+uV zy*U`x+AL~6>n=b(LkS{;jwpVlb-fH1RuL=KG_wf`KKt{Sc#6qZU5sa*U*&Nz@5!4wT{bs; zTUzI|91}~N2Rs$WKQe`q}DL9TcMM*08B21bkY>`D7Z=|tJRLix%wKyucupnTx zmLKG?!V!%OmDiV_UP{<)vA-JT@fi;)gf3kqHTt^Ofdd)<8|-@7|MsCak*|y8LTyiY|#g=luZM$BN{vEEc<~y0x?6 z>3$JuZ=*amRsQzZ|60N+s~%d@=UOiG<-^7cU~Vhd`h1;G*c3%Yy(zfu1cmHHzATRa zl0x<(xjFjx6h0kMPhxdNlID^B<3k{gJE(D14!-M7l0=5Xzry@>US>oz`Zx2hTWdj@ z8;Z+{ZF`0r0?Ug87~<$ViA{>wfy7Vp+JnA^tcT1-4A%2!`03$edjVN*yBlMNFT%s^ zJ4iLQyHyr&cni&d@ii9bT)(ykoJH+{$dhjamj1e8xiT&J-NEeTjor zzl6wcDXdluD4ztMtF?c|-%w6P_NqbVWVMcN77Sg7I%AUeBP zm$YhZ>fYx=X&ue#)J~5BF&lRpIC5#$ZbD1j#-=ci=0#{1sU=n8UgJiKg0h=;N`1yk zy*}?nY&0!7yQmFO8Y>kW&8W{#7DJ%MTGK{T`md9uo7r2F`cBq$qP0?t@0)rGd$9n% z=+GBvP8fDk48&vHD$d9y5iijV>3XRcD{UD~>auQ* zKA4#>v^c!TV$@YDJR_%0yvS(X0aK4g3j(r}dqQi*TBbhNIzMtK%T8`ffX0S)jT}<5 zi_=!5u_0!odGXmvIh3ezuWciT7VTuTBx`J_-N-3yEwEY&7}gT_xfIaQylm~J9f;ew zSH;nifbF846uYsln4{_A*lyzPz&587pV5p+?q)IeN5)$tBemScWsB5)?jcXQj4IUXqP$fav95f4;!Y^vu@TIS2k#>A6V(F@=U%$8D)2SPh?3fWHP zk>ZU9f;pPjsGXF?2Ha@xZKN?TG1Y_6dKDXilwqfrMM)VC6zX$J2uDtZ*5!FD<>FQZ zMo!IknbZ__aVrZWr;58sI*@yDD-@#zRo9Q!Xfuum)9Jm7q@5^?g^Y}5HGe13;9vmm z&J&=ia{z9lb_3bkJ02Vda55Mt2CzP4fVMPOKW#bCOWLdLqKAJJPrH#aZC~c)Ew60# z*0Op+ItOV+9ah{;{fIRf+~vA2YS2J@K|nREMW|<+!7!*g*y8k4(O_Ig^KHF@<3x)T zJsxFMaT59m94%k$0Y<6knjx^9_YF|Rd;o*1q5@td@DeJ2>tmV(!TLAqz|n0XNwsan zQ@QK}4i(7>1Si7P+nfSxKd9~l13u-3l?2!h6f9(X5HA%GuTFtr^t)OhkUGt`d}dbF z!zIJ;8#Utnrml%Oo46>@2C;aX8^p0Xl_7^OaN9Gm;3QDkz_C+;!NZ_@4-V*F_OlOt zKa7dTH=4x-FLYg)$FlzKfBu(YZY=u|dBp19I19gjSw?Ij$h_W8X8J2gzF8q@;xVkh z-t8-QS2*lYdNhw~OAe2kk)WQIQ2bLZSJ43^9O8NOtk02CJnMAxL zGyv1>p8#>9-`xcT3pKZrPZ$g<(0b~?^fmQBLd($~Tb&{>LYRD}VMHR|J#Xyl_*aoc z8gtrkBxD}lKFtAdgB9;&2~$%rN~-J#feHyI17Wq)eg7pO`D?Bh93y-W&T7xG-92o^S3yy59pMJiiV^ zZ4waXpJ{UM{ORGUgMXE9q<+EAlSI8`4a* zw`GE?D~CK%f;cd6-s*BmrHl8dRB(tlCF>U@16c&}P9i0b|DzLKVT7EbvGUOke#_On zN1>5a^jhQZ1YUCnRd6Tq99YOgNrxnU_2H32KXNE%QjIpDCFKKH9v{I`-ARI*j-ca| zzdr|Pn+gSA=d{RxbW^eGd;_`di!V=+Xf$7(cghu*YDOheeux=UxzUBAD_M=2{7QmBO9sV;Z6_S*q1qU=D&Tu8Mx*c&Y ztqdJOGl`yVrQz}yDFmZ9NC#Phw^RZr`Z~!WH~4~BBvSK07GYf_e^E69%Zm=JpE+sq zAv2EE{Xc&D^hM1(6pMP4G-OOu;ap36JEnyxWmXA|-b?+IbihKSjZxx_m-$Ohl~n;L z&?cnL0lfeyNzF$O=p6E^0Z+^$VLgGBg&~ieq5MC6>GC C-e$l6 diff --git a/Programs/doc/output.html b/Programs/doc/output.html deleted file mode 100644 index 820c6ba..0000000 --- a/Programs/doc/output.html +++ /dev/null @@ -1,227 +0,0 @@ - - - - - - - Output — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

Output

-
-

VSPipe

-
-

Synopsis

-

vspipe <script> <outfile> [options]

-

vspipe’s main purpose is to evaluate VapourSynth scripts and output the -frames to a file.

-

If outfile is a hyphen (-), vspipe will write to the standard output.

-

If outfile is a dot (.), vspipe will do everything as usual, except it -will not write the video frames anywhere.

-
-
-

Options

-
-
-a, --arg key=value

Argument to pass to the script environment, it a key with this name and value (str typed) will be set in the globals dict

-
-
-s, --start N

Set output frame range (first frame)

-
-
-e, --end N

Set output frame range (last frame)

-
-
-o, --outputindex N

Select output index

-
-
-r, --requests N

Set number of concurrent frame requests

-
-
-c, --container <y4m/wav/w64>

Add headers for the specified format to the output

-
-
-t, --timecodes FILE

Write timecodes v2 file

-
-
-p, --progress

Print progress to stderr

-
-
--filter-time

Records the time spent in each filter and prints it out at the end of processing.

-
-
-i, --info

Show video info and exit

-
-
-g, --graph <simple/full>

Print output node filter graph in dot format to outfile and exit

-
-
-v, --version

Show version info and exit

-
-
-
-
-

Examples

-
-
Show script info:

vspipe --info script.vpy -

-
-
Write to stdout:

vspipe [options] script.vpy -

-
-
Request all frames but don’t output them:

vspipe [options] script.vpy .

-
-
Write frames 5-100 to file:

vspipe --start 5 --end 100 script.vpy output.raw

-
-
Pipe to x264 and write timecodes file:

vspipe script.vpy - --y4m --timecodes timecodes.txt | x264 --demuxer y4m -o script.mkv -

-
-
Pass values to a script:

vspipe --arg deinterlace=yes --arg "message=fluffy kittens" script.vpy output.raw

-
-
-
-
-
-

AVFS

-

AV FileSystem is based on AVFS and shares most of its -source code and functionality. This package has several uses. It can easily make -a script file openable by any application, as it appears like a real, -uncompressed avi file. It can also be used to bridge the 32/64 bit gap, since a -plain file can always be read.

-

To use it simply run avfs in the core32 or core64 directories with the script name as argument. -This will create a virtual file in C:\\Volumes.

-

The alt_output argument of set_output is respected and can be used to get additional compatibility -with professional applications.

-
-

Avisynth Support

-

Note that this AVFS version is also compatible with Avisynth 2.6 and Avisynth+. When using Avisynth+ -higher bitdepth output is also supported. The easiest way to obtain a recent version is to extract -avfs.exe from the portable VapourSynth archives.

-
-
-
-

VFW

-

On windows, you can output video to VFW based programs.

-

If you install VapourSynth by installer, the VSVFW.dll is registered already

-

Else, you could register it manually, use register file below or use theChaosCoder’s batch.

-
Windows Registry Editor Version 5.00
-
-[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{58F74CA0-BD0E-4664-A49B-8D10E6F0C131}]
-@="VapourSynth"
-
-[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{58F74CA0-BD0E-4664-A49B-8D10E6F0C131}\InProcServer32]
-@="<your VSVFW.dll directory>\\VSVFW.dll"
-"ThreadingModel"="Apartment"
-
-[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\AVIFile\Extensions\VPY]
-@="{58F74CA0-BD0E-4664-A49B-8D10E6F0C131}"
-
-
-
-
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/pythonreference.html b/Programs/doc/pythonreference.html deleted file mode 100644 index 50db49d..0000000 --- a/Programs/doc/pythonreference.html +++ /dev/null @@ -1,1694 +0,0 @@ - - - - - - - Python Reference — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

Python Reference

-

VapourSynth is separated into a core library and a Python module. This section -explains how the core library is exposed through Python and some of the -special things unique to Python scripting, such as slicing and output.

-
-

Note

-

Any script executed through the vsscript api (that means vspipe, avfs, vsvfw or -other API users) will have __name__ set to “__vapoursynth__” unlike normal Python -scripts where it usually is “__main__”.

-
-
-

VapourSynth Structure

-

Most operations in the VapourSynth library are performed through the singleton -core object. This core may load plugins, which all end up in their own unit, -or namespace, so to say, to avoid naming conflicts in the contained functions. -For this reason you call a plugin function with core.unit.Function().

-

All arguments to functions have names that are lowercase and all function names -are CamelCase. Unit names are also lowercase and usually short. This is good to -remember as a general rule.

-
-
-

Grammar

-
-

Slicing and Other Syntactic Sugar

-

The VideoNode and AudioNode class (always called “clip” in practice) supports the full -range of indexing and slicing operations in Python. If you do perform a slicing -operation on a clip, you will get a new clip back with the desired frames. -Here are a few examples.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Operation

Description

Equivalent

clip = clip[5]

Make a single frame clip containing frame number 5

clip = clip[5:11]

Make a clip containing frames 5 to 10 [1]

clip = core.std.Trim(clip, first=5, last=10)

-

clip = core.std.AudioTrim(clip, first=5, last=10)

-

clip = clip[::2]

Select even numbered frames

clip = core.std.SelectEvery(clip, cycle=2, offsets=0)

clip = clip[1::2]

Select odd numbered frames

clip = core.std.SelectEvery(clip, cycle=2, offsets=1)

clip = clip[::-1]

Reverses a clip

clip = core.std.Reverse(clip)

-

clip = core.std.AudioReverse(clip)

-

clip = clip1 + clip2

The addition operator can be used to splice clips together

clip = core.std.Splice([clip1, clip2], mismatch=False)

-

clip = core.std.AudioSplice([clip1, clip2])

-

clip = clip * 10

The multiplication operator can be used to loop a clip [2]

clip = core.std.Loop(clip, times=10)

-

clip = core.std.AudioLoop(clip, times=10)

-
- -

Filters can be chained with a dot:

-
clip = clip.std.Trim(first=100, last=2000).std.FlipVertical()
-
-
-

Which is quivalent to:

-
clip = core.std.FlipVertical(core.std.Trim(clip, first=100, last=2000))
-
-
-
-
-

Python Keywords as Filter Arguments

-

If a filter’s argument happens to be a Python keyword, you may append -an underscore to the argument’s name when invoking the filter. The Python -module will strip one trailing underscore (if present) from all filter arguments before -passing them to the filters.

-
clip = core.plugin.Filter(clip, lambda_=1)
-
-
-

Another way to deal with such arguments is to place them in a dictionary:

-
kwargs = { "lambda": 1 }
-clip = core.plugin.Filter(clip, **kwargs)
-
-
-

VapourSynth will also support the PEP8 convention of using a single trailing -underscore to prevent collisions with python keywords.

-
-
-

Windows File Paths

-

If you have a string containing backslashes, you must either prefix the -string with “r”, or duplicate every single backslash. The reason is -that the backslash is an escape character in Python.

-

Use os.path.normcase(path) -to fix Incorrect path string.

-

Correct example:

-
"B:/VapourSynth/VapourSynth.dll"
-"B:\\VapourSynth\\VapourSynth.dll"
-r"B:\VapourSynth\VapourSynth.dll"
-
-
-
-
-

Output

-

The normal way of specifying the clip(s) to output is to call -clip.set_output(). All standard VapourSynth components only use output -index 0, except for vspipe where it’s configurable but defaults to 0. -There are also other variables that can be set to control how a format is -output. For example, setting alt_output=1 changes the packing of the -YUV422P10 format to one that is common in professional software (like Adobe -products). Note that currently alt_output modes only has an effect with -YUV420P8 (I420, IYUV), YUV422P8 (YUY2, UYVY) and YUV422P10 (v210).

-

An example on how to get v210 output:

-
some_clip = core.resize.Bicubic(clip, format=vs.YUV422P10)
-some_clip.set_output(alt_output=1)
-
-
-

An example on how to get UYVY output:

-
some_clip = core.resize.Bicubic(clip, format=vs.YUV422P8)
-some_clip.set_output(alt_output=2)
-
-
-
-
-

Raw Access to Frame Data

-

The VideoFrame and AudioFrame classes contains one picture/audio chunk and all the metadata -associated with it. It is possible to access the raw data using either -get_read_ptr(plane) or get_write_ptr(plane) and get_stride(plane) with ctypes.

-

A more Python friendly wrapping is also available where each plane/channel can be accessed -as a Python array using frame[plane/channel].

-

To get a frame simply call get_frame(n) on a clip. Should you desire to get -all frames in a clip, use this code:

-
for frame in clip.frames():
-    # Do stuff with your frame
-    pass
-
-
-
-
-
-

Classes and Functions

-
-
-core
-

Gets the singleton Core object. If it is the first time the function is called, -the Core will be instantiated with the default options. This is the preferred -way to reference the core.

-
- -
-
-get_outputs()
-

Return a read-only mapping of all outputs registered on the current node.

-

The mapping will automatically update when a new output is registered.

-
- -
-
-get_output([index = 0])
-

Get a previously set output node. Throws an error if the index hasn’t been -set. Will return a VideoOutputTuple containing alpha and the alt_output setting for video output and an AudioNode for audio.

-
- -
-
-clear_output([index = 0])
-

Clears a clip previously set for output.

-
- -
-
-clear_outputs()
-

Clears all clips set for output in the current environment.

-
- -
-
-construct_signature(signature[, injected=None])
-

Creates a inspect.Signature object for the given registration signature.

-

If injected is not None, the default of the first argument of the signature will be replaced with the value supplied with injected.

-
- -
-
-register_on_destroy(callback)
-

Registers a callback that is called when the script is being finalized. -This allows you to release resources at the end of a script.

-

A callback must be registered with every script that is run, -even if the code is being reused in multiple script runs.

-

No new callbacks can be registered when the script is already being finalized.

-
- -
-
-unregister_on_destroy(callback)
-

Unregisters a previously added callback.

-
- -
-
-class Core
-

The Core class uses a singleton pattern. Use the core attribute to obtain an -instance. All loaded plugins are exposed as attributes of the core object. -These attributes in turn hold the functions contained in the plugin. -Use plugins() to obtain a full list of all currently loaded plugins -you may call this way.

-
-
-num_threads
-

The number of concurrent threads used by the core. Can be set to change the number. Setting to a value less than one makes it default to the number of hardware threads.

-
- -
-
-max_cache_size
-

Set the upper framebuffer cache size after which memory is aggressively -freed. The value is in megabytes.

-
- -
-
-plugins()
-

Containing all loaded plugins.

-
- -
-
-get_video_format(id)
-

Retrieve a Format object corresponding to the specified id. Returns None if the id is invalid.

-
- -
-
-query_video_format(color_family, sample_type, bits_per_sample, subsampling_w, subsampling_h)
-

Retrieve a Format object corresponding to the format information, Invalid formats throw an exception.

-
- -
-
-create_video_frame(format, width, height)
-

Creates a new frame with uninitialized planes with the given dimensions and format. -This function is safe to call within a frame callback.

-
- -
-
-add_log_handler(handler_func)
-

Installs a custom handler for the various error messages VapourSynth emits. -The message handler is currently global, i.e. per process, not per VSCore instance. -Returns a LogHandle object. -handler_func is a callback function of the form func(MessageType, message).

-
- -
-
-remove_log_handler(handle)
-

Removes a custom handler.

-
- -
-
-log_message(message_type, message)
-

Send a message through VapourSynth’s logging framework.

-
- -
-
-version()
-

Returns version information as a string.

-
- -
-
-version_number()
-

Returns the core version as a number.

-
-

Note

-

If you are writing a library, you should use vapoursynth.__version__ or vapoursynth.__api_version__ instead.

-
-
- -
-
-rule6()
-

Illegal behavior detection.

-
- -
- -
-
-class Local
-

Internally, there can be more than one core. This is usually the case in previewer-applications. -Use this class to store variables that depend on the currently active core.

-
l = Local()
-l.test = 1
-
-
-
- -
-
-class VideoNode
-

Represents a video clip. The class itself supports indexing and slicing to -perform trim, reverse and selectevery operations. Several operators are also -defined for the VideoNode class: addition appends clips and multiplication -repeats them. Note that slicing and indexing always return a new VideoNode -object and not a VideoFrame.

-
-
-format
-

A Format object describing the frame data. If the format can change -between frames, this value is None.

-
- -
-
-width
-

The width of the video. This value will be 0 if the width and height can -change between frames.

-
- -
-
-height
-

The height of the video. This value will be 0 if the width and height can -change between frames.

-
- -
-
-num_frames
-

The number of frames in the clip.

-
- -
-
-fps
-

The framerate represented as a Fraction. It is 0/1 when the clip has a variable -framerate.

-
-
-numerator
-

The numerator of the framerate. If the clip has variable framerate, the value will be 0.

-
- -
-
-denominator
-

The denominator of the framerate. If the clip has variable framerate, the value will be 0.

-
- -
- -
-
-fps_num
-

Deprecated, use fps.numerator instead

-
- -
-
-fps_den
-

Deprecated, use fps.denominator instead

-
- -
-
-flags
-

Special flags set for this clip. This attribute should normally be -ignored.

-
- -
-
-get_frame(n)
-

Returns a VideoFrame from position n.

-
- -
-
-get_frame_async(n)
-

Returns a concurrent.futures.Future-object which result will be a VideoFrame instance or sets the -exception thrown when rendering the frame.

-

The future will always be in the running or completed state

-
- -
-
-get_frame_async(n, cb: callable)
-

Renders a frame in another thread. When the frame is rendered, it will either call cb(Frame, None) on success -or cb(None, Exception) if something fails.

-

Added: R58

-
- -
-
-set_output(index=0, alpha=None, alt_output=0)
-

Set the clip to be accessible for output. This is the standard way to -specify which clip(s) to output. All VapourSynth tools (vsvfw, vsfs, -vspipe) use the clip in index 0. It’s possible to specify an additional -containing the alpha to output at the same time. Currently only vspipe -takes alpha into consideration when outputting. -The alt_output argument is for optional alternate output modes. Currently -it controls the FOURCCs used for VFW-style output with certain formats.

-
- -
-
-output(fileobj[, y4m = False, prefetch = 0, progress_update = None, backlog=-1])
-

Write the whole clip to the specified file handle. It is possible to pipe to stdout by specifying sys.stdout as the file. -YUV4MPEG2 headers will be added when y4m is true. -The current progress can be reported by passing a callback function of the form func(current_frame, total_frames) to progress_update. -The prefetch argument is only for debugging purposes and should never need to be changed. -The backlog argument is only for debugging purposes and should never need to be changed.

-
- -
-
-frames([prefetch=None, backlog=None, close=False])
-

Returns a generator iterator of all VideoFrames in the clip. It will render multiple frames concurrently.

-

The prefetch argument defines how many frames are rendered concurrently. Is only there for debugging purposes and should never need to be changed. -The backlog argument defines how many unconsumed frames (including those that did not finish rendering yet) vapoursynth buffers at most before it stops rendering additional frames. This argument is there to limit the memory this function uses storing frames. -The close argument determines if the frame should be closed after each iteration step. It defaults to false to remain backward compatible.

-
- -
-
-is_inspectable(version=None)
-

Returns a truthy value if you can use the node inspection API with a given version. -The python inspection-api is versioned, as the underlying API is unstable at the time of writing. -The version number will be incremented every time the python API changes. -There will be no attempt to maintain backwards compatibility as long as the API is marked as unstable.

-

This method may never return a truthy value.

-

This is the only stable function in the current inspection api-implementation.

-
-

Note

-

Be aware that introspection features must be enabled manually by the backing environment. Standalone Python-Scripts, -not running inside vspipe or other editors, have introspection enabled automatically.

-
-
-

Warning

-

The graph-inspection-api is unstable. Omitting the version-argument will therefore always return -None.

-
-

The current version of the unstable python graph-inspection API is 0.

-

Added: R58

-
-
Parameters:
-

version – If None, it will use the version number of the last stable API.

-
-
-
- -
- -
-
-class VideoOutputTuple
-

This class is returned by get_output if the output is video.

-
-
-clip
-

A VideoNode-instance containing the color planes.

-
- -
-
-alpha
-

A VideoNode-instance containing the alpha planes.

-
- -
-
-alt_output
-

An integer with the alternate output mode to be used. May be ignored if no meaningful mapping exists.

-
- -
- -
-
-class VideoFrame
-
-

This class represents a video frame and all metadata attached to it.

-
-
-
-format
-

A Format object describing the frame data.

-
- -
-
-width
-

The width of the frame.

-
- -
-
-height
-

The height of the frame.

-
- -
-
-readonly
-

If readonly is True, the frame data and properties cannot be modified.

-
- -
-
-props
-

This attribute holds all the frame’s properties as a dict. They are also mapped as sub-attributes for -compatibility with older scripts. For more information, see: -API Reference -Note: This includes the data for matrix, transfer and primaries. (_Matrix, -_Transfer, _Primaries) See Resize for more information.

-
- -
-
-copy()
-

Returns a writable copy of the frame.

-
- -
-
-close()
-

Forcefully releases the frame. Once freed, the you cannot call any function on the frame, nor use the associated -FrameProps.

-

To make sure you don’t forget to close the frame, the frame is now a context-manager that automatically calls -this method for you:

-
with core.std.BlankClip().get_frame(0) as f:
-    print(f.props)
-
-
-
- -
-
-closed
-

Tells you if the frame has been closed. It will be False if the close()-method has not been called yet.

-
- -
-
-get_read_ptr(plane)
-

Returns a pointer to the raw frame data. The data may not be modified. -Note that this is a thin wrapper for the underlying -C-api and as such calls to get_write_ptr, including the ones made internally by other functions in the Python bindings, -may invalidate any pointers previously gotten to the frame with -get_read_ptr when called.

-
- -
-
-get_write_ptr(plane)
-

Returns a pointer to the raw frame data. It may be modified using ctypes -or some other similar python package. Note that this is a thin wrapper for the underlying -C-api and as such calls to get_write_ptr, including the ones made internally by other functions in the Python bindings, -may invalidate any pointers previously gotten to the frame with -get_read_ptr when called.

-
- -
-
-get_stride(plane)
-

Returns the stride between lines in a plane.

-
- -
-
-readchunks()
-

This method is usually used to dump the contents of a VideoFrame to disk. -The returned generator yields contiguous chunks of the VideoFrame memory.

-
with open('output.raw', 'wb') as file:
-   with vs.core.std.BlankClip(color=[25, 50, 60]).get_frame(0) as f:
-      for chunk in f.readchunks():
-         file.write(chunk)
-
-
-
-

Note

-

Usually, the frame contents will be held in a contiguous array, -and this method will yield n_planes of data chunks each holding the entire plane. -Don’t, however, take this for granted, as it can’t be the case, -and you will iterate over lines of plane data instead, which are assured to be contiguous.

-

If you want to safely read the whole plane, use frame[plane_idx] to get the plane memoryview.

-
-
- -
- -
-
-class VideoFormat
-

This class represents all information needed to describe a frame format. It -holds the general color type, subsampling, number of planes and so on. -The names map directly to the C API so consult it for more detailed -information.

-
-
-id
-

A unique id identifying the format.

-
- -
-
-name
-

A human readable name of the format.

-
- -
-
-color_family
-

Which group of colorspaces the format describes.

-
- -
-
-sample_type
-

If the format is integer or floating point based.

-
- -
-
-bits_per_sample
-

How many bits are used to store one sample in one plane.

-
- -
-
-bytes_per_sample
-

The actual storage is padded up to 2^n bytes for efficiency.

-
- -
-
-subsampling_w
-

The subsampling for the second and third plane in the horizontal -direction.

-
- -
-
-subsampling_h
-

The subsampling for the second and third plane in the vertical direction.

-
- -
-
-num_planes
-

The number of planes the format has.

-
- -
-
-replace(core=None, **kwargs)
-

Returns a new format with the given modifications.

-

The only supported attributes that can be replaced are color_family, -sample_type, bits_per_sample, subsampling_w, subsampling_h.

-

The optional core-parameter defines on which core the new format -should be registered. This is usually not needed and defaults -to the core of the current environment.

-
- -
- -
-
-class AudioNode
-

Represents an audio clip. The class itself supports indexing and slicing to -perform trim, reverse and selectevery operations. Several operators are also -defined for the AudioNode class: addition appends clips and multiplication -repeats them. Note that slicing and indexing always return a new AudioNode -object and not a AudioFrame.

-
-
-sample_type
-

If the format is integer or floating point based.

-
- -
-
-bits_per_sample
-

How many bits are used to store one sample in one plane.

-
- -
-
-bytes_per_sample
-

The actual storage is padded up to 2^n bytes for efficiency.

-
- -
-
-channel_layout
-

A mask of used channels.

-
- -
-
-num_channels
-

The number of channels the format has.

-
- -
-
-sample_rate
-

Playback sample rate.

-
- -
-
-get_frame(n)
-

Returns an AudioFrame from position n.

-
- -
-
-get_frame_async(n)
-

Returns a concurrent.futures.Future-object which result will be an AudioFrame instance or sets the -exception thrown when rendering the frame.

-

The future will always be in the running or completed state

-
- -
-
-set_output(index=0)
-

Set the clip to be accessible for output.

-
- -
-
-frames([prefetch=None, backlog=None])
-

Returns a generator iterator of all AudioFrames in the clip. It will render multiple frames concurrently.

-

The prefetch argument defines how many frames are rendered concurrently. Is only there for debugging purposes and should never need to be changed. -The backlog argument defines how many unconsumed frames (including those that did not finish rendering yet) vapoursynth buffers at most before it stops rendering additional frames. This argument is there to limit the memory this function uses storing frames.

-
- -
-
-is_inspectable(version=None)
-

Returns a truthy value if you can use the node inspection API with a given version. -The python inspection-api is versioned, as the underlying API is unstable at the time of writing. -The version number will be incremented every time the python API changes. -There will be no attempt to maintain backwards compatibility as long as the API is marked as unstable.

-

This method may never return a truthy value.

-

This is the only stable function in the current inspection api-implementation.

-
-

Note

-

Be aware that introspection features must be enabled manually by the backing environment. Standalone Python-Scripts, -not running inside vspipe or other editors, have introspection enabled automatically.

-
-
-

Warning

-

The graph-inspection-api is unstable. Omitting the version-argument will therefore always return -None.

-
-

The current version of the unstable python graph-inspection API is 0.

-

Added: R58

-
-
Parameters:
-

version – If None, it will use the version number of the last stable API.

-
-
-
- -
- -
-
-class AudioFrame
-
-

This class represents an audio frame and all metadata attached to it.

-
-
-
-sample_type
-

If the format is integer or floating point based.

-
- -
-
-bits_per_sample
-

How many bits are used to store one sample in one plane.

-
- -
-
-bytes_per_sample
-

The actual storage is padded up to 2^n bytes for efficiency.

-
- -
-
-channel_layout
-

A mask of used channels.

-
- -
-
-num_channels
-

The number of channels the format has.

-
- -
-
-readonly
-

If readonly is True, the frame data and properties cannot be modified.

-
- -
-
-props
-

This attribute holds all the frame’s properties as a dict. Note that audio frame properties are fairly -non-sensical as a concept for audio due to an arbitrary number of samples being lumped together and rarely used.

-
- -
-
-copy()
-

Returns a writable copy of the frame.

-
- -
-
-get_read_ptr(plane)
-

Returns a pointer to the raw frame data. The data may not be modified.

-
- -
-
-get_write_ptr(plane)
-

Returns a pointer to the raw frame data. It may be modified using ctypes -or some other similar python package.

-
- -
-
-get_stride(plane)
-

Returns the stride between lines in a plane.

-
- -
- -
-
-class Plugin
-

Plugin is a class that represents a loaded plugin and its namespace.

-
-
-namespace
-

The namespace of the plugin.

-
- -
-
-name
-

The name string of the plugin.

-
- -
-
-identifier
-
- -
-
-functions()
-

Containing all the functions in the plugin, You can access it by calling core.<namespace>.functions().

-
- -
- -
-
-class Function
-

Function is a simple wrapper class for a function provided by a VapourSynth plugin. -Its main purpose is to be called and nothing else.

-
-
-name
-

The function name. Identical to the string used to register the function.

-
- -
-
-plugin
-

The Plugin object the function belongs to.

-
- -
-
-signature
-

Raw function signature string. Identical to the string used to register the function.

-
- -
-
-return_signature
-

Raw function signature string. Identical to the return type string used register the function.

-
- -
- -
-
-class Environment
-

This class represents an environment.

-

Some editors allow multiple vapoursynth-scripts to run in the same process, each of them comes with a different Core-instance and -their own set of outputs. Each core-instance with their associated outputs represent their own environment.

-

At any given time, only one environment can be active (in the same context). This class allows introspection about -environments and allows to switch to them at will.

-
env = get_current_environment()
-# sometime later
-with env.use():
-  # Do stuff inside this env.
-
-
-
-
-is_single()
-

Returns True if the script is _not_ running inside a vsscript-Environment. -If it is running inside a vsscript-Environment, it returns False.

-
- -
-
-env_id
-

Return -1 if the script is not running inside a vsscript-Environment. -Otherwise, it will return the current environment-id.

-
- -
-
-single
-

See is_single()

-
- -
-
-alive
-

Has the environment been destroyed by the underlying application?

-
- -
-
-copy()
-

Creates a copy of the environment-object.

-

Added: R51

-
- -
-
-use()
-

Returns a context-manager that enables the given environment in the block enclosed in the with-statement and restores the environment to the one -defined before the with-block has been encountered.

-
env = get_current_environment()
-with env.use():
-    with env.use():
-        pass
-
-
-

Added: R51

-
- -
- -
-
-get_current_environment()
-

Returns an Environment-object representing the environment the script is currently running in. It will raise an error if we are currently not inside any -script-environment while vsscript is being used.

-

This function is intended for Python-based editors using vsscript.

-

Added: R51

-
- -
-
-class EnvironmentPolicy
-

This class is intended for subclassing by custom Script-Runners and Editors. -Normal users don’t need this class. Most methods implemented here have corresponding APIs in other parts of this module.

-

An instance of this class controls which environment is activated in the current context. -The exact meaning of “context” is defined by the concrete EnvironmentPolicy. A environment is represented by a EnvironmentData-object.

-

To use this class, first create a subclass and then use register_policy() to get VapourSynth to use your policy. This must happen before vapoursynth is first -used. VapourSynth will automatically register an internal policy if it needs one. The subclass must be weak-referenciable!

-

Once the method on_policy_registered() has been called, the policy is responsible for creating and managing environments.

-

Special considerations have been made to ensure the functions of class cannot be abused. You cannot retrieve the current running policy yourself. -The additional API exposed by “on_policy_registered” is only valid if the policy has been registered. -Once the policy is unregistered, all calls to the additional API will fail with a RuntimeError.

-

Added: R51

-
-
-on_policy_registered(special_api)
-

This method is called when the policy has successfully been registered. It proivdes additional internal methods that are hidden as they are useless and or harmful -unless you implement your own policy.

-
-
Parameters:
-

special_api – This is a EnvironmentPolicyAPI-object that exposes additional API

-
-
-
- -
-
-on_policy_cleared()
-

This method is called once the python-process exits or when unregister_policy is called by the environment-policy. This allows the policy to free the resources -used by the policy.

-
- -
-
-get_current_environment()
-

This method is called by the module to detect which environment is currently running in the current context. If None is returned, it means that no environment is currently active.

-
-
Returns:
-

An EnvironmentData-object representing the currently active environment in the current context.

-
-
-
- -
-
-set_environment(environment)
-

This method is called by the module to change the currently active environment. If None is passed to this function the policy may switch to another environment of its choosing.

-

Note: The function is responsible to check whether or not the environment is alive. If a dead environment is passed, it should act like None has been passed instead of the dead environment but must never error.

-
-
Parameters:
-

environment – The EnvironmentData to enable in the current context.

-
-
Returns:
-

The environment that was enabled previously.

-
-
-
- -
-
-is_alive(environment)
-

Is the current environment still active and managed by the policy.

-

The default implementation checks if EnvironmentPolicyAPI.destroy_environment has been called on the environment.

-
- -
- -
-
-class EnvironmentPolicyAPI
-

This class is intended to be used by custom Script-Runners and Editors. An instance of this class exposes an additional API. -The methods are bound to a specific EnvironmentPolicy-instance and will only work if the policy is currently registered.

-

Added: R51

-
-
-wrap_environment(environment)
-

Creates a new Environment-object bound to the passed environment-id.

-
-

Warning

-

This function does not check if the id corresponds to a live environment as the caller is expected to know which environments are active.

-
-
- -
-
-create_environment(flags=0)
-

Returns a Environment that is used by the wrapper for context sensitive data used by VapourSynth. -For example it holds the currently active core object as well as the currently registered outputs.

-
- -
-
-set_logger(environment, callback)
-

This function sets the logger for the given environment.

-

This logger is a callback function that accepts two parameters: Level, which is an instance of vs.MessageType and a string containing the log message.

-
- -
-
-destroy_environment(environment)
-

Marks an environment as destroyed. Older environment-policy implementations that don’t use this function still work.

-

Either EnvironmentPolicy.is_alive must be overridden or this method be used to mark the environment as destroyed.

-

Added: R52

-
- -
-
-unregister_policy()
-

Unregisters the policy it is bound to and allows another policy to be registered.

-
- -
-
-get_vapoursynth_api(version)
-

Exposes getVapoursynthAPI to python. Returns a ctypes.c_void_p.

-

Access to this function is provisional and might be removed if it is abused too much.

-

Added: R62

-
- -
-
-get_core_ptr(environment)
-

Returns a ctypes.c_void_p pointing to the Core*-object that powers the environment.

-

Access to this function is provisional and might be removed if it is abused too much.

-

Added: R62

-
- -
- -
-
-register_policy(policy)
-

This function is intended for use by custom Script-Runners and Editors. It installs your custom EnvironmentPolicy. This function only works if no other policy has been -installed.

-

If no policy is installed, the first environment-sensitive call will automatically register an internal policy.

-

Added: R50

-
-

Note

-

This must be done before VapourSynth is used in any way. Here is a non-exhaustive list that automatically register a policy:

- -
-
- -
-
-_try_enable_introspection(version=None)
-

Tries to enable introspection. Returns true if it succeeds.

-
-
Parameters:
-

version – If not passed it will use the newest stable introspection-api.

-
-
-

Added: R58

-
- -
-
-has_policy()
-

This function is intended for subclassing by custom Script-Runners and Editors. This function checks if a EnvironmentPolicy has been installed.

-

Added: R50

-
- -
-
-class EnvironmentData
-

Internal class that stores the context sensitive data that VapourSynth needs. It is an opaque object whose attributes you cannot access directly.

-

A normal user has no way of getting an instance of this object. You can only encounter EnvironmentData-objects if you work with EnvironmentPolicies.

-

This object is weak-referenciable meaning you can get a callback if the environment-data object is actually being freed (i.e. no other object holds an instance -to the environment data.)

-

Added: R50

-
- -
-
-class Func
-

Func is a simple wrapper class for VapourSynth VSFunc objects. -Its main purpose is to be called and manage reference counting.

-
- -
-
-exception Error
-

The standard exception class. This exception is thrown on most errors -encountered in VapourSynth.

-
- -
-
-

Constants

-
-

Video

-
-

Color Family

-

The color family constants describe groups of formats and the basic way their -color information is stored. You should be familiar with all of them apart from -maybe YCOCG and COMPAT. The latter is a special junk category for non-planar -formats. These are the declared constants in the module:

-
UNDEFINED
-RGB
-YUV
-GRAY
-
-
-
-
-

Format

-

Format constants exactly describe a format. All common and even more uncommon -formats have handy constants predefined so in practice no one should really -need to register one of their own. These values are mostly used by the resizers -to specify which format to convert to. The naming system is quite simple. First -the color family, then the subsampling (only YUV has it) and after that how many -bits per sample in one plane. The exception to this rule is RGB, which has the -bits for all 3 planes added together. The long list of values:

-
NONE
-GRAY8
-GRAY9
-GRAY10
-GRAY12
-GRAY14
-GRAY16
-GRAY32
-GRAYH
-GRAYS
-YUV420P8
-YUV422P8
-YUV444P8
-YUV410P8
-YUV411P8
-YUV440P8
-YUV420P9
-YUV422P9
-YUV444P9
-YUV420P10
-YUV422P10
-YUV444P10
-YUV420P12
-YUV422P12
-YUV444P12
-YUV420P14
-YUV422P14
-YUV444P14
-YUV420P16
-YUV422P16
-YUV444P16
-YUV444PH
-YUV444PS
-RGB24
-RGB27
-RGB30
-RGB36
-RGB42
-RGB48
-RGBH
-RGBS
-
-
-
-
-

Chroma Location

-
CHROMA_LEFT
-CHROMA_CENTER
-CHROMA_TOP_LEFT
-CHROMA_TOP
-CHROMA_BOTTOM_LEFT
-CHROMA_BOTTOM
-
-
-
-
-

Field Based

-
FIELD_PROGRESSIVE
-FIELD_TOP
-FIELD_BOTTOM
-
-
-
-
-

Color Range

-
RANGE_FULL
-RANGE_LIMITED
-
-
-
-
-

Matrix Coefficients

-
MATRIX_RGB
-MATRIX_BT709
-MATRIX_UNSPECIFIED
-MATRIX_FCC
-MATRIX_BT470_BG
-MATRIX_ST170_M
-MATRIX_ST240_M
-MATRIX_YCGCO
-MATRIX_BT2020_NCL
-MATRIX_BT2020_CL
-MATRIX_CHROMATICITY_DERIVED_NCL
-MATRIX_CHROMATICITY_DERIVED_CL
-MATRIX_ICTCP
-
-
-
-
-

TransferCharacteristics

-
TRANSFER_BT709
-TRANSFER_UNSPECIFIED
-TRANSFER_BT470_M
-TRANSFER_BT470_BG
-TRANSFER_BT601
-TRANSFER_ST240_M
-TRANSFER_LINEAR
-TRANSFER_LOG_100
-TRANSFER_LOG_316
-TRANSFER_IEC_61966_2_4
-TRANSFER_IEC_61966_2_1
-TRANSFER_BT2020_10
-TRANSFER_BT2020_12
-TRANSFER_ST2084
-TRANSFER_ARIB_B67
-
-
-
-
-

Color Primaries

-
PRIMARIES_BT709
-PRIMARIES_UNSPECIFIED
-PRIMARIES_BT470_M
-PRIMARIES_BT470_BG
-PRIMARIES_ST170_M
-PRIMARIES_ST240_M
-PRIMARIES_FILM
-PRIMARIES_BT2020
-PRIMARIES_ST428
-PRIMARIES_ST431_2
-PRIMARIES_ST432_1
-PRIMARIES_EBU3213_E
-
-
-
-
-
-

Audio

-
-

Channels

-
FRONT_LEFT
-FRONT_RIGHT
-FRONT_CENTER
-LOW_FREQUENCY
-BACK_LEFT
-BACK_RIGHT
-FRONT_LEFT_OF_CENTER
-FRONT_RIGHT_OF_CENTER
-BACK_CENTER
-SIDE_LEFT
-SIDE_RIGHT
-TOP_CENTER
-TOP_FRONT_LEFT
-TOP_FRONT_CENTER
-TOP_FRONT_RIGHT
-TOP_BACK_LEFT
-TOP_BACK_CENTER
-TOP_BACK_RIGHT
-STEREO_LEFT
-STEREO_RIGHT
-WIDE_LEFT
-WIDE_RIGHT
-SURROUND_DIRECT_LEFT
-SURROUND_DIRECT_RIGHT
-LOW_FREQUENCY2
-
-
-
-
-
-

Sample Type

-
INTEGER
-FLOAT
-
-
-
-
-
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/Programs/doc/search.html b/Programs/doc/search.html deleted file mode 100644 index eb0561f..0000000 --- a/Programs/doc/search.html +++ /dev/null @@ -1,130 +0,0 @@ - - - - - - Search — VapourSynth R64 documentation - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
-
    -
  • - -
  • -
  • -
-
-
-
-
- - - - -
- -
- -
-
-
- -
- -
-

© Copyright 2012-2023, Fredrik Mellbin.

-
- - Built with Sphinx using a - theme - provided by Read the Docs. - - -
-
-
-
-
- - - - - - - - - \ No newline at end of file diff --git a/Programs/doc/searchindex.js b/Programs/doc/searchindex.js deleted file mode 100644 index 4f7c5ad..0000000 --- a/Programs/doc/searchindex.js +++ /dev/null @@ -1 +0,0 @@ -Search.setIndex({"docnames": ["api/vapoursynth4.h", "api/vshelper4.h", "api/vsscript4.h", "apireference", "applications", "functions", "functions/audio/assumesamplerate", "functions/audio/audiogain", "functions/audio/audioloop", "functions/audio/audiomix", "functions/audio/audioreverse", "functions/audio/audiosplice", "functions/audio/audiotrim", "functions/audio/blankaudio", "functions/audio/setaudiocache", "functions/audio/shufflechannels", "functions/audio/splitchannels", "functions/general/loadallplugins", "functions/general/loadplugin", "functions/general/loadpluginavs", "functions/general/setmaxcpu", "functions/video/addborders", "functions/video/assumefps", "functions/video/averageframes", "functions/video/binarize_binarizemask", "functions/video/blankclip", "functions/video/boxblur", "functions/video/cliptoprop", "functions/video/convolution", "functions/video/copyframeprops", "functions/video/crop_cropabs", "functions/video/deflate_inflate", "functions/video/deleteframes", "functions/video/doubleweave", "functions/video/duplicateframes", "functions/video/expr", "functions/video/flipvertical_fliphorizontal", "functions/video/frameeval", "functions/video/freezeframes", "functions/video/interleave", "functions/video/invert_invertmask", "functions/video/levels", "functions/video/limiter", "functions/video/loop", "functions/video/lut", "functions/video/lut2", "functions/video/makediff", "functions/video/makefulldiff", "functions/video/maskedmerge", "functions/video/median", "functions/video/merge", "functions/video/mergediff", "functions/video/mergefulldiff", "functions/video/minimum_maximum", "functions/video/modifyframe", "functions/video/pemverifier", "functions/video/planestats", "functions/video/premultiply", "functions/video/prewitt_sobel", "functions/video/proptoclip", "functions/video/removeframeprops", "functions/video/resize", "functions/video/reverse", "functions/video/selectevery", "functions/video/separatefields", "functions/video/setfieldbased", "functions/video/setframeprop", "functions/video/setframeprops", "functions/video/setvideocache", "functions/video/shuffleplanes", "functions/video/splice", "functions/video/splitplanes", "functions/video/stackvertical_stackhorizontal", "functions/video/text/clipinfo", "functions/video/text/coreinfo", "functions/video/text/framenum", "functions/video/text/frameprops", "functions/video/text/text", "functions/video/transpose", "functions/video/trim", "functions/video/turn180", "gettingstarted", "index", "installation", "introduction", "output", "pythonreference"], "filenames": ["api\\vapoursynth4.h.rst", "api\\vshelper4.h.rst", "api\\vsscript4.h.rst", "apireference.rst", "applications.rst", "functions.rst", "functions\\audio\\assumesamplerate.rst", "functions\\audio\\audiogain.rst", "functions\\audio\\audioloop.rst", "functions\\audio\\audiomix.rst", "functions\\audio\\audioreverse.rst", "functions\\audio\\audiosplice.rst", "functions\\audio\\audiotrim.rst", "functions\\audio\\blankaudio.rst", "functions\\audio\\setaudiocache.rst", "functions\\audio\\shufflechannels.rst", "functions\\audio\\splitchannels.rst", "functions\\general\\loadallplugins.rst", "functions\\general\\loadplugin.rst", "functions\\general\\loadpluginavs.rst", "functions\\general\\setmaxcpu.rst", "functions\\video\\addborders.rst", "functions\\video\\assumefps.rst", "functions\\video\\averageframes.rst", "functions\\video\\binarize_binarizemask.rst", "functions\\video\\blankclip.rst", "functions\\video\\boxblur.rst", "functions\\video\\cliptoprop.rst", "functions\\video\\convolution.rst", "functions\\video\\copyframeprops.rst", "functions\\video\\crop_cropabs.rst", "functions\\video\\deflate_inflate.rst", "functions\\video\\deleteframes.rst", "functions\\video\\doubleweave.rst", "functions\\video\\duplicateframes.rst", "functions\\video\\expr.rst", "functions\\video\\flipvertical_fliphorizontal.rst", "functions\\video\\frameeval.rst", "functions\\video\\freezeframes.rst", "functions\\video\\interleave.rst", "functions\\video\\invert_invertmask.rst", "functions\\video\\levels.rst", "functions\\video\\limiter.rst", "functions\\video\\loop.rst", "functions\\video\\lut.rst", "functions\\video\\lut2.rst", "functions\\video\\makediff.rst", "functions\\video\\makefulldiff.rst", "functions\\video\\maskedmerge.rst", "functions\\video\\median.rst", "functions\\video\\merge.rst", "functions\\video\\mergediff.rst", "functions\\video\\mergefulldiff.rst", "functions\\video\\minimum_maximum.rst", "functions\\video\\modifyframe.rst", "functions\\video\\pemverifier.rst", "functions\\video\\planestats.rst", "functions\\video\\premultiply.rst", "functions\\video\\prewitt_sobel.rst", "functions\\video\\proptoclip.rst", "functions\\video\\removeframeprops.rst", "functions\\video\\resize.rst", "functions\\video\\reverse.rst", "functions\\video\\selectevery.rst", "functions\\video\\separatefields.rst", "functions\\video\\setfieldbased.rst", "functions\\video\\setframeprop.rst", "functions\\video\\setframeprops.rst", "functions\\video\\setvideocache.rst", "functions\\video\\shuffleplanes.rst", "functions\\video\\splice.rst", "functions\\video\\splitplanes.rst", "functions\\video\\stackvertical_stackhorizontal.rst", "functions\\video\\text\\clipinfo.rst", "functions\\video\\text\\coreinfo.rst", "functions\\video\\text\\framenum.rst", "functions\\video\\text\\frameprops.rst", "functions\\video\\text\\text.rst", "functions\\video\\transpose.rst", "functions\\video\\trim.rst", "functions\\video\\turn180.rst", "gettingstarted.rst", "index.rst", "installation.rst", "introduction.rst", "output.rst", "pythonreference.rst"], "titles": ["VapourSynth4.h", "VSHelper4.h", "VSScript4.h", "VapourSynth C API Reference", "Applications and Libraries", "Function Reference", "AssumeSampleRate", "AudioGain", "AudioLoop", "AudioMix", "AudioReverse", "AudioSplice", "AudioTrim", "BlankAudio", "SetAudioCache", "ShuffleChannels", "SplitChannels", "LoadAllPlugins", "LoadPlugin", "LoadPlugin (Avisynth Compatibility)", "SetMaxCPU", "AddBorders", "AssumeFPS", "AverageFrames", "Binarize/BinarizeMask", "BlankClip", "BoxBlur", "ClipToProp", "Convolution", "CopyFrameProps", "Crop/CropAbs", "Deflate/Inflate", "DeleteFrames", "DoubleWeave", "DuplicateFrames", "Expr", "FlipVertical/FlipHorizontal", "FrameEval", "FreezeFrames", "Interleave", "Invert/InvertMask", "Levels", "Limiter", "Loop", "Lut", "Lut2", "MakeDiff", "MakeFullDiff", "MaskedMerge", "Median", "Merge", "MergeDiff", "MergeFullDiff", "Minimum/Maximum", "ModifyFrame", "PEMVerifier", "PlaneStats", "PreMultiply", "Prewitt/Sobel", "PropToClip", "RemoveFrameProps", "Resize", "Reverse", "SelectEvery", "SeparateFields", "SetFieldBased", "SetFrameProp", "SetFrameProps", "SetVideoCache", "ShufflePlanes", "Splice", "SplitPlanes", "StackVertical/StackHorizontal", "ClipInfo", "CoreInfo", "FrameNum", "FrameProps", "Text", "Transpose", "Trim", "Turn180", "Getting Started", "Welcome to VapourSynth\u2019s documentation!", "Installation", "Introduction", "Output", "Python Reference"], "terms": {"deal": [0, 19, 86], "core": [0, 1, 2, 3, 33, 37, 38, 46, 47, 51, 52, 65, 74, 81, 82, 83, 84, 86], "createcor": 0, "freecor": 0, "setmaxcaches": 0, "setthreadcount": 0, "getcoreinfo": 0, "getapivers": 0, "log": [0, 2, 35, 61, 86], "addloghandl": 0, "removeloghandl": 0, "logmessag": 0, "frame": [0, 2, 4, 8, 10, 12, 13, 21, 22, 23, 24, 25, 27, 28, 29, 30, 31, 32, 33, 34, 37, 38, 39, 40, 41, 42, 43, 48, 49, 50, 53, 54, 55, 56, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 72, 75, 76, 77, 78, 79, 80, 82, 84, 85], "newvideofram": 0, "newvideoframe2": 0, "newaudiofram": 0, "newaudioframe2": 0, "freefram": 0, "addframeref": 0, "copyfram": 0, "getframepropertiesro": 0, "getframepropertiesrw": 0, "getstrid": 0, "getreadptr": 0, "getwriteptr": 0, "getvideoframeformat": 0, "getaudioframeformat": 0, "getframetyp": 0, "getframewidth": 0, "getframeheight": 0, "getframelength": 0, "filter": [0, 3, 18, 19, 23, 27, 37, 47, 55, 61, 68, 77, 82, 84, 85], "node": [0, 2, 68, 85, 86], "createvideofilt": 0, "createvideofilter2": 0, "createaudiofilt": 0, "createaudiofilter2": 0, "setlinearfilt": 0, "setcachemod": 0, "setcacheopt": 0, "freenod": 0, "addnoderef": 0, "getnodetyp": 0, "getvideoinfo": 0, "getaudioinfo": 0, "format": [0, 1, 2, 3, 4, 7, 9, 11, 15, 19, 23, 24, 25, 28, 31, 35, 37, 39, 40, 41, 42, 44, 45, 48, 49, 50, 53, 54, 55, 56, 57, 58, 61, 69, 70, 72, 73, 84, 85], "getvideoformatnam": 0, "getaudioformatnam": 0, "queryvideoformat": 0, "queryaudioformat": 0, "queryvideoformatid": 0, "getvideoformatbyid": 0, "map": [0, 2, 3, 15, 86], "createmap": 0, "freemap": 0, "clearmap": 0, "mapgeterror": 0, "mapseterror": 0, "mapnumkei": 0, "mapgetkei": 0, "mapdeletekei": 0, "mapnumel": 0, "mapgettyp": 0, "mapsetempti": 0, "mapgetint": 0, "mapgetintsatur": 0, "mapgetintarrai": 0, "mapsetint": 0, "mapsetintarrai": 0, "mapgetfloat": 0, "mapgetfloatsatur": 0, "mapgetfloatarrai": 0, "mapsetfloat": 0, "mapsetfloatarrai": 0, "mapgetdata": 0, "mapgetdatas": 0, "mapgetdatatypehint": 0, "mapsetdata": 0, "mapgetnod": 0, "mapsetnod": 0, "mapconsumenod": 0, "mapgetfram": 0, "mapsetfram": 0, "mapconsumefram": 0, "mapgetfunct": 0, "mapsetfunct": 0, "mapconsumefunct": 0, "registerfunct": 0, "getpluginbyid": 0, "getpluginbynamespac": 0, "getnextplugin": 0, "getpluginnam": 0, "getpluginid": 0, "getpluginnamespac": 0, "getnextpluginfunct": 0, "getpluginfunctionbynam": 0, "getpluginfunctionnam": 0, "getpluginfunctionargu": 0, "getpluginfunctionreturntyp": 0, "getpluginpath": 0, "getpluginvers": 0, "invok": [0, 8, 10, 11, 12, 19, 43, 62, 63, 70, 79, 86], "wrap": [0, 19, 77, 86], "extern": [0, 77], "createfunct": 0, "freefunct": 0, "addfunctionref": 0, "callfunct": 0, "ar": [0, 1, 2, 3, 7, 9, 13, 15, 17, 18, 19, 20, 23, 24, 25, 28, 31, 32, 35, 37, 39, 40, 41, 42, 44, 45, 46, 48, 49, 50, 51, 53, 55, 58, 60, 61, 63, 65, 68, 69, 72, 77, 79, 81, 83, 84, 86], "us": [0, 1, 2, 3, 4, 8, 9, 11, 13, 15, 19, 20, 23, 24, 25, 26, 29, 30, 33, 35, 37, 39, 40, 43, 44, 45, 46, 47, 48, 50, 51, 52, 54, 55, 57, 58, 59, 61, 63, 66, 68, 69, 70, 74, 77, 81, 83, 85, 86], "fetch": 0, "insid": [0, 86], "getfram": [0, 3], "getframeasync": 0, "getframefilt": 0, "requestframefilt": 0, "releaseframeearli": 0, "cachefram": 0, "setfiltererror": 0, "getvapoursynthapi": [0, 86], "vsinitplugin": 0, "vsfiltergetfram": 0, "vsfilterfre": 0, "thi": [0, 1, 2, 3, 13, 17, 18, 19, 20, 22, 23, 25, 27, 28, 30, 35, 37, 38, 41, 46, 47, 51, 52, 53, 56, 57, 58, 59, 61, 65, 68, 69, 73, 74, 75, 76, 83, 85, 86], "i": [0, 1, 2, 3, 7, 8, 9, 11, 12, 13, 15, 18, 19, 20, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 35, 37, 39, 40, 41, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 59, 60, 61, 63, 64, 65, 66, 69, 70, 72, 73, 74, 75, 76, 77, 78, 79, 81, 83, 84, 85, 86], "": [0, 1, 2, 3, 7, 9, 15, 17, 18, 19, 24, 28, 29, 33, 35, 39, 40, 41, 48, 54, 61, 63, 64, 65, 69, 81, 83, 84, 85, 86], "main": [0, 23, 37, 83, 84, 85, 86], "header": [0, 82, 85, 86], "file": [0, 2, 4, 81, 82, 83, 85], "applic": [0, 2, 61, 81, 82, 83, 84, 85, 86], "librari": [0, 2, 77, 82, 83, 84, 86], "must": [0, 1, 2, 15, 21, 24, 28, 31, 33, 35, 38, 40, 41, 42, 44, 48, 49, 50, 53, 54, 57, 58, 63, 86], "includ": [0, 18, 55, 83, 86], "public": [0, 2, 55, 82], "api": [0, 2, 4, 82, 86], "all": [0, 1, 2, 3, 7, 11, 17, 20, 23, 24, 29, 32, 34, 35, 37, 38, 39, 40, 41, 44, 45, 46, 48, 50, 51, 56, 58, 60, 61, 68, 70, 72, 76, 81, 83, 84, 85, 86], "c": [0, 1, 2, 4, 9, 17, 18, 19, 35, 61, 66, 67, 81, 82, 84, 85, 86], "vapoursynth4": [3, 82], "defin": [0, 1, 2, 3, 83, 86], "some": [0, 9, 15, 63, 69, 81, 83, 84, 86], "preprocessor": 0, "make": [0, 19, 30, 37, 45, 54, 57, 61, 83, 85, 86], "programm": 0, "life": 0, "easier": [0, 1], "The": [0, 1, 2, 3, 9, 13, 15, 19, 21, 22, 23, 24, 25, 28, 30, 31, 33, 35, 37, 38, 39, 40, 41, 44, 45, 48, 50, 53, 54, 55, 56, 57, 61, 63, 64, 65, 66, 68, 69, 72, 77, 83, 84, 85, 86], "relev": 0, "ones": [0, 2, 23, 29, 86], "describ": [0, 3, 83, 86], "below": [0, 3, 9, 15, 24, 63, 69, 85], "expand": [0, 1], "call": [0, 2, 19, 30, 38, 54, 78, 79, 81, 86], "convent": [0, 86], "meant": 0, "init": 0, "free": [0, 1, 2, 84, 86], "etc": [0, 2], "exampl": [0, 2, 3, 9, 10, 15, 19, 35, 39, 41, 54, 57, 61, 62, 63, 65, 66, 67, 69, 82, 83, 86], "static": [0, 1], "void": [0, 1, 2], "fooinit": 0, "platform": [0, 20], "specif": [0, 18, 40, 45, 61, 83, 86], "magic": 0, "requir": [0, 3, 37, 72], "export": [0, 4], "share": [0, 3, 83, 85], "It": [0, 1, 2, 3, 22, 24, 25, 27, 28, 31, 37, 40, 41, 42, 49, 53, 55, 58, 59, 61, 77, 81, 83, 84, 85, 86], "also": [0, 1, 3, 8, 10, 11, 12, 13, 15, 18, 23, 25, 35, 37, 43, 45, 48, 50, 53, 61, 62, 63, 64, 70, 72, 79, 81, 83, 85, 86], "take": [0, 2, 9, 13, 15, 25, 33, 35, 45, 69, 77, 84, 86], "care": 0, "ad": [0, 4, 21, 28, 64, 66, 83, 86], "when": [0, 1, 2, 13, 19, 25, 28, 35, 37, 47, 53, 57, 61, 64, 68, 69, 83, 84, 85, 86], "need": [0, 3, 23, 44, 45, 54, 61, 69, 72, 83, 84, 86], "entri": [0, 15, 45], "point": [0, 5, 24, 35, 41, 44, 45, 61, 86], "like": [0, 3, 19, 47, 48, 61, 83, 84, 85, 86], "so": [0, 2, 3, 19, 27, 37, 54, 55, 79, 81, 83, 84, 86], "vapoursynthplugininit2": 0, "major": [0, 84], "version": [0, 2, 18, 24, 40, 74, 77, 83, 85, 86], "minor": [0, 3], "bump": 0, "new": [0, 2, 3, 13, 22, 25, 84, 86], "behavior": [0, 1, 2, 18, 41, 68, 86], "notic": 0, "chang": [0, 2, 3, 7, 13, 22, 23, 25, 31, 53, 61, 83, 84, 86], "high": [0, 4], "16": [0, 2, 13, 24, 28, 31, 35, 40, 41, 42, 44, 49, 53, 57, 58, 61, 77], "bit": [0, 3, 13, 19, 24, 28, 31, 35, 40, 41, 42, 44, 45, 49, 53, 57, 58, 61, 83, 85, 86], "low": [0, 77], "number": [0, 1, 3, 15, 19, 21, 22, 23, 28, 32, 33, 34, 37, 38, 39, 53, 54, 61, 63, 69, 75, 77, 83, 84, 85, 86], "audio": [0, 1, 9, 12, 13, 15, 16, 81, 82], "sampl": [0, 3, 8, 10, 12, 24, 28, 31, 35, 40, 41, 42, 43, 49, 53, 58, 62, 81, 82], "an": [0, 1, 2, 4, 11, 13, 15, 18, 19, 22, 23, 24, 25, 28, 30, 31, 32, 35, 37, 39, 40, 41, 42, 44, 45, 48, 49, 50, 53, 54, 55, 57, 58, 61, 64, 69, 70, 77, 79, 81, 83, 84, 86], "possibl": [0, 9, 13, 15, 20, 28, 35, 48, 61, 65, 68, 69, 81, 86], "calcul": [0, 37, 46, 47, 51, 52, 56, 57, 68], "which": [0, 2, 3, 15, 24, 26, 28, 30, 31, 35, 37, 40, 41, 42, 45, 46, 47, 49, 51, 52, 53, 54, 58, 61, 66, 69, 77, 83, 86], "retriev": [0, 2, 86], "creat": [0, 2, 4, 58, 81, 83, 84, 85, 86], "first": [0, 2, 3, 9, 12, 15, 33, 35, 38, 39, 45, 48, 54, 55, 63, 64, 65, 66, 67, 69, 72, 79, 83, 85, 86], "argument": [0, 1, 3, 9, 13, 15, 19, 21, 25, 27, 30, 35, 37, 39, 44, 45, 61, 64, 68, 69, 79, 82, 83, 85], "second": [0, 3, 13, 25, 27, 35, 48, 50, 69, 83, 86], "cfundefin": 0, "cfgrai": 0, "cfrgb": 0, "cfyuv": 0, "stinteg": 0, "stfloat": 0, "preset": [0, 1], "suffix": [0, 61], "have": [0, 1, 2, 3, 9, 10, 13, 19, 24, 25, 28, 31, 33, 35, 37, 39, 40, 41, 42, 44, 48, 49, 50, 53, 54, 58, 61, 62, 65, 81, 83, 84, 86], "float": [0, 1, 3, 7, 9, 13, 21, 23, 24, 25, 28, 31, 35, 40, 41, 42, 44, 45, 48, 49, 50, 53, 55, 56, 58, 61, 66, 86], "type": [0, 3, 24, 28, 31, 40, 41, 42, 49, 53, 58, 61, 66, 82, 83, 85], "stand": 0, "half": 0, "precis": 0, "singl": [0, 3, 7, 15, 23, 35, 38, 50, 54, 69, 86], "respect": [0, 23, 28, 41, 69, 85], "planar": [0, 61, 86], "see": [0, 2, 3, 14, 61, 65, 83, 86], "current": [0, 3, 13, 23, 37, 54, 55, 75, 83, 86], "video": [0, 1, 2, 4, 25, 61, 81, 82, 84, 85], "pf": 0, "control": [0, 15, 39, 41, 68, 69, 86], "how": [0, 28, 30, 31, 35, 37, 44, 45, 48, 50, 53, 54, 68, 81, 86], "multithread": [0, 3, 84], "fmparallel": 0, "complet": [0, 2, 4, 19, 83, 86], "parallel": [0, 3], "execut": [0, 86], "multipl": [0, 2, 8, 18, 19, 23, 26, 28, 43, 86], "thread": [0, 3, 86], "sever": [0, 3, 34, 61, 83, 85, 86], "fmparallelrequest": 0, "For": [0, 2, 9, 10, 19, 35, 39, 41, 57, 61, 62, 65, 66, 67, 69, 72, 81, 83, 86], "serial": 0, "natur": [0, 84], "can": [0, 2, 3, 4, 7, 8, 9, 10, 11, 12, 13, 15, 19, 22, 23, 24, 25, 26, 30, 35, 37, 38, 42, 43, 44, 45, 46, 47, 54, 57, 58, 61, 62, 63, 65, 66, 69, 70, 79, 81, 83, 84, 85, 86], "request": [0, 2, 13, 25, 37, 68, 85], "advanc": [0, 4, 84], "one": [0, 1, 2, 3, 9, 15, 23, 35, 37, 47, 52, 54, 59, 69, 74, 79, 81, 83, 84, 86], "more": [0, 2, 3, 9, 15, 35, 37, 50, 54, 57, 61, 81, 83, 86], "thei": [0, 3, 9, 15, 19, 21, 23, 35, 39, 61, 83, 86], "A": [0, 1, 2, 3, 26, 34, 38, 39, 48, 50, 69, 83, 86], "from": [0, 1, 2, 3, 9, 13, 15, 22, 23, 25, 27, 29, 30, 33, 35, 37, 39, 40, 41, 45, 48, 49, 50, 53, 54, 59, 61, 68, 69, 72, 77, 79, 81, 83, 85, 86], "time": [0, 2, 3, 8, 13, 25, 34, 43, 68, 83, 84, 85, 86], "activ": [0, 86], "reason": [0, 2, 13, 25, 54, 86], "ariniti": [0, 3], "onli": [0, 2, 3, 7, 19, 20, 22, 23, 24, 31, 33, 35, 37, 54, 61, 63, 64, 66, 69, 76, 77, 79, 83, 86], "arallframesreadi": 0, "fmunord": [0, 3], "modifi": [0, 3, 18, 22, 37, 54, 77, 86], "examin": 0, "intern": [0, 1, 33, 86], "state": [0, 86], "determin": [0, 9, 15, 61, 69, 86], "while": [0, 41, 83, 86], "run": [0, 3, 83, 85, 86], "happen": [0, 2, 9, 23, 47, 86], "ani": [0, 2, 3, 22, 24, 28, 31, 35, 38, 40, 41, 42, 49, 53, 54, 58, 77, 83, 84, 85, 86], "order": [0, 9, 10, 11, 15, 18, 33, 35, 57, 61, 62, 64, 66, 67, 70, 83], "0": [0, 1, 2, 3, 8, 9, 10, 12, 13, 21, 24, 25, 26, 28, 30, 31, 33, 35, 37, 38, 39, 40, 41, 42, 43, 44, 46, 48, 49, 50, 51, 53, 54, 56, 58, 61, 62, 63, 65, 68, 69, 70, 78, 79, 81, 83, 86], "again": [0, 8, 43], "1": [0, 3, 8, 9, 10, 13, 15, 22, 24, 25, 26, 28, 31, 35, 37, 39, 40, 41, 42, 43, 44, 46, 47, 48, 49, 50, 51, 52, 53, 54, 56, 58, 61, 62, 63, 65, 68, 69, 73, 74, 75, 76, 77, 78, 81, 86], "fmframest": 0, "compat": [0, 5, 61, 82, 84, 85, 86], "other": [0, 2, 3, 9, 20, 24, 27, 28, 30, 31, 37, 40, 41, 42, 44, 45, 48, 49, 53, 58, 61, 65, 68, 82, 83], "architectur": 0, "do": [0, 3, 19, 54, 61, 78, 83, 84, 85, 86], "NOT": 0, "IN": 0, "ever": 0, "get": [0, 37, 61, 77, 82, 83, 85, 86], "unlik": [0, 27, 86], "process": [0, 2, 24, 26, 28, 31, 40, 41, 42, 44, 45, 46, 48, 49, 51, 53, 58, 84, 85, 86], "indic": [0, 2, 61], "object": [0, 2, 3, 81, 83, 86], "mtvideo": 0, "mtaudio": 0, "channel": [0, 3, 7, 9, 13, 15, 16, 27, 35, 57, 61, 69, 81], "posit": [0, 3, 77, 86], "mirror": [0, 1], "ffmpeg": [0, 81, 83], "constant": [0, 1, 3, 9, 13, 15, 61, 82], "older": [0, 86], "avail": [0, 2, 61, 83, 86], "valu": [0, 2, 3, 7, 13, 15, 20, 24, 26, 28, 35, 40, 41, 42, 44, 45, 49, 50, 53, 55, 56, 61, 65, 67, 68, 83, 85, 86], "ac": 0, "properti": [0, 1, 9, 13, 15, 22, 25, 27, 29, 33, 37, 48, 50, 54, 56, 59, 60, 61, 64, 65, 66, 67, 69, 72, 76, 82, 84, 86], "store": [0, 1, 27, 35, 56, 59, 86], "ptunset": 0, "ptint": 0, "ptfloat": 0, "ptdata": 0, "ptfunction": 0, "ptvideonod": 0, "ptaudionod": 0, "ptvideofram": 0, "ptaudiofram": 0, "mapget": 0, "fail": [0, 2, 17, 18, 19, 83, 86], "return": [0, 1, 2, 3, 8, 9, 10, 11, 13, 15, 16, 18, 22, 24, 25, 28, 29, 30, 31, 32, 35, 37, 39, 40, 41, 42, 43, 44, 45, 48, 49, 50, 53, 54, 58, 60, 61, 62, 63, 64, 69, 70, 71, 79, 83, 86], "err": 0, "paramet": [0, 9, 15, 28, 45, 61, 66, 69, 77, 86], "error": [0, 2, 3, 11, 15, 18, 19, 22, 24, 25, 28, 30, 31, 32, 35, 39, 40, 41, 42, 48, 49, 50, 53, 54, 55, 58, 61, 64, 69, 70, 79, 82, 83, 86], "non": [0, 2, 15, 35, 41, 61, 83, 86], "zero": [0, 2, 9, 15, 35, 50, 69], "pesuccess": 0, "peunset": 0, "kei": [0, 2, 3, 67, 77, 85], "wa": [0, 2, 3, 38, 59, 77, 84, 86], "found": [0, 17, 83, 84], "petyp": 0, "wrong": 0, "e": [0, 1, 3, 35, 61, 85, 86], "g": [0, 61, 69, 85], "peindex": 0, "index": [0, 2, 4, 9, 15, 35, 61, 69, 81, 82, 85, 86], "out": [0, 3, 30, 41, 55, 61, 81, 83, 84, 85], "bound": [0, 24, 42, 55, 86], "peerror": 0, "ha": [0, 1, 2, 18, 23, 33, 35, 48, 52, 54, 64, 65, 68, 69, 83, 84, 85, 86], "set": [0, 2, 3, 13, 18, 20, 21, 23, 25, 27, 33, 35, 39, 44, 45, 48, 54, 55, 61, 63, 64, 65, 66, 67, 68, 77, 81, 83, 85, 86], "behaviour": 0, "friend": 0, "mareplac": 0, "exist": [0, 1, 2, 15, 29, 37, 67, 83, 84, 86], "associ": [0, 2, 68, 86], "replac": [0, 29, 31, 38, 49, 53, 67, 83, 86], "maappend": 0, "append": [0, 11, 19, 44, 45, 70, 86], "list": [0, 4, 13, 15, 37, 44, 45, 48, 54, 61, 83, 86], "arerror": 0, "mtdebug": 0, "mtinform": 0, "mtwarn": 0, "mtcritic": 0, "mtfatal": 0, "option": [0, 2, 45, 61, 68, 82, 83, 86], "ccfenablegraphinspect": 0, "graph": [0, 3, 37, 85, 86], "inspect": [0, 86], "increas": [0, 58], "memori": [0, 74, 83, 86], "usag": 0, "due": [0, 2, 35, 86], "extra": [0, 83], "inform": [0, 61, 73, 74, 83, 86], "ccfdisableautoload": 0, "don": [0, 81, 84, 85, 86], "t": [0, 1, 2, 3, 30, 35, 55, 61, 64, 77, 81, 83, 84, 85, 86], "autoload": [0, 82], "user": [0, 2, 45, 61, 83, 86], "alwai": [0, 2, 3, 28, 35, 44, 45, 56, 68, 83, 85, 86], "load": [0, 2, 17, 18, 19, 35, 81, 83, 86], "ccfdisablelibraryunload": 0, "unload": 0, "destroi": [0, 86], "small": [0, 3], "amount": 0, "leak": 0, "everi": [0, 13, 24, 25, 37, 54, 63, 66, 67, 68, 86], "window": [0, 1, 2, 77, 82, 85], "featur": [0, 4, 20, 84, 86], "my": 0, "fault": 0, "mai": [0, 3, 33, 34, 41, 54, 61, 68, 81, 83, 86], "help": [0, 1, 3, 84], "extrem": 0, "script": [0, 2, 4, 82, 84, 85, 86], "reload": 0, "pcmodifi": 0, "allow": [0, 2, 7, 13, 23, 24, 31, 35, 37, 40, 41, 42, 53, 55, 61, 68, 79, 84, 86], "after": [0, 2, 38, 83, 86], "phase": 0, "mostli": [0, 1, 2, 86], "avisynth": [0, 5, 28, 37, 82, 83, 84], "foreign": 0, "loader": [0, 19, 83], "sinc": [0, 2, 3, 23, 33, 35, 37, 41, 48, 84, 85], "data": [0, 3, 66, 82], "contain": [0, 2, 3, 35, 37, 45, 53, 83, 85, 86], "both": [0, 1, 13, 22, 25, 27, 28, 30, 69, 79, 83], "pure": 0, "binari": [0, 2, 66, 83], "printabl": 0, "string": [0, 2, 3, 17, 18, 19, 20, 27, 28, 35, 56, 59, 60, 61, 66, 76, 77, 81, 86], "hint": [0, 3, 37], "whether": [0, 2, 3, 23, 39, 86], "human": [0, 86], "readabl": [0, 86], "gener": [0, 9, 13, 15, 25, 37, 61, 68, 69, 82, 84, 86], "unknown": [0, 1, 2, 3, 61], "should": [0, 2, 3, 13, 25, 27, 37, 54, 68, 83, 86], "veri": [0, 3, 18, 19, 48, 81, 83], "rare": [0, 19, 86], "almost": [0, 69], "artifact": 0, "api3": 0, "dtunknown": 0, "dtbinari": 0, "dtutf8": 0, "upstream": 0, "pattern": [0, 63, 68, 86], "rpgener": 0, "anyth": 0, "goe": 0, "note": [0, 1, 3, 19, 23, 29, 33, 35, 37, 41, 52, 57, 61, 68, 83, 85, 86], "beyond": [0, 23, 30], "end": [0, 18, 19, 77, 79, 85, 86], "length": [0, 3, 8, 9, 12, 13, 15, 25, 27, 37, 39, 43, 79], "repeat": [0, 8, 43, 86], "last": [0, 3, 12, 15, 29, 38, 79, 83, 85, 86], "mode": [0, 1, 2, 3, 14, 23, 28, 48, 68, 86], "rpnoframereus": 0, "Will": [0, 2, 86], "input": [0, 9, 15, 16, 19, 23, 28, 30, 31, 32, 33, 34, 35, 37, 38, 39, 40, 41, 42, 45, 53, 54, 56, 57, 61, 64, 69, 71], "most": [0, 3, 9, 15, 19, 23, 27, 35, 48, 69, 81, 83, 84, 85, 86], "onc": [0, 18, 84, 86], "output": [0, 2, 9, 15, 23, 27, 28, 31, 33, 35, 37, 39, 41, 44, 45, 47, 48, 53, 58, 61, 64, 69, 82, 83], "exactli": [0, 12, 53, 69, 86], "trim": [0, 5, 82, 86], "revers": [0, 5, 10, 35, 82, 86], "selecteveri": [0, 5, 33, 82, 86], "rpstrictspati": 0, "n": [0, 35, 37, 54, 85, 86], "differ": [0, 9, 11, 15, 19, 23, 24, 35, 39, 46, 47, 51, 52, 56, 61, 69, 70, 83, 86], "fix": [0, 2, 30, 63, 86], "known": [0, 1, 53, 61, 83], "ahead": 0, "lut": [0, 5, 45, 82], "expr": [0, 5, 37, 82], "condition": 0, "similar": [0, 4, 86], "cach": [0, 37, 68, 86], "cmauto": 0, "enabl": [0, 35, 68, 86], "disabl": [0, 68], "base": [0, 3, 4, 35, 65, 68, 77, 84, 85], "report": [0, 3, 83, 86], "consum": 0, "cmforcedis": 0, "never": [0, 3, 25, 83, 86], "cmforceen": 0, "opaqu": [0, 86], "access": [0, 2, 37, 81, 82], "hold": [0, 86], "each": [0, 7, 9, 16, 19, 21, 23, 24, 27, 28, 30, 31, 35, 42, 49, 50, 53, 71, 85, 86], "row": [0, 78], "pixel": [0, 3, 21, 24, 28, 30, 31, 35, 40, 42, 45, 48, 49, 53, 55, 56, 58, 61], "guarante": [0, 2, 3, 35], "align": [0, 1, 61, 73, 74, 75, 76, 77], "least": 0, "32": [0, 19, 24, 28, 31, 35, 40, 41, 42, 49, 53, 58, 83, 85], "byte": [0, 1, 35, 77, 86], "two": [0, 1, 3, 23, 30, 35, 45, 48, 50, 56, 83, 86], "same": [0, 1, 2, 9, 12, 13, 15, 18, 24, 25, 28, 32, 33, 35, 37, 39, 40, 48, 50, 54, 61, 63, 67, 72, 78, 83, 86], "width": [0, 1, 25, 30, 61, 65, 72, 86], "per": [0, 3, 35, 37, 48, 61, 83, 84, 86], "stride": [0, 86], "attach": [0, 3, 27, 59, 76, 84, 86], "refer": [0, 2, 13, 25, 61, 69, 82, 83], "construct": 0, "Its": [0, 37, 86], "primari": [0, 3, 61], "repres": [0, 27, 61, 86], "instanc": [0, 3, 81, 86], "individu": [0, 7, 13, 24, 25, 35, 42], "keep": [0, 13, 25, 35], "track": [0, 81], "There": [0, 3, 13, 19, 25, 83, 86], "few": [0, 2, 35, 83, 86], "built": [0, 3, 4, 77, 83], "therefor": [0, 1, 28, 86], "basic": [0, 1, 81, 82, 86], "identifi": [0, 9, 18, 83, 86], "com": [0, 83, 84], "std": [0, 1, 3, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 74, 78, 79, 80, 81, 83, 86], "namespac": [0, 1, 18, 19, 83, 86], "resiz": [0, 1, 5, 37, 48, 57, 65, 82, 86], "modul": [0, 2, 19, 83, 84, 86], "av": [0, 19, 83, 85], "dylib": 0, "dll": [0, 18, 19, 37, 83, 85, 86], "pointer": [0, 1, 2, 86], "pass": [0, 2, 3, 19, 26, 35, 44, 45, 54, 81, 83, 85, 86], "attribut": [0, 61, 81, 86], "uniqu": [0, 86], "among": 0, "becaus": [0, 30, 35, 54, 84], "what": [0, 56, 78, 81], "sure": [0, 86], "up": [0, 2, 18, 19, 35, 44, 45, 77, 83, 86], "full": [0, 3, 41, 48, 61, 85, 86], "name": [0, 1, 2, 3, 18, 19, 23, 27, 44, 56, 60, 61, 66, 85, 86], "messag": [0, 2, 55, 85, 86], "thing": [0, 3, 19, 37, 69, 83, 86], "you": [0, 2, 3, 19, 27, 35, 37, 54, 61, 65, 81, 83, 84, 85, 86], "enumer": [0, 61], "its": [0, 1, 2, 9, 15, 31, 49, 53, 68, 83, 85, 86], "locat": [0, 2, 61, 83], "system": [0, 61, 83, 86], "freed": [0, 2, 86], "belong": [0, 86], "primarili": [0, 3, 27], "queri": 0, "editor": [0, 4, 81, 83, 85, 86], "One": [0, 33, 83], "peculiar": 0, "cannot": [0, 83, 86], "instead": [0, 12, 13, 23, 25, 28, 29, 35, 44, 45, 54, 61, 83, 86], "done": [0, 28, 35, 83, 86], "between": [0, 9, 24, 28, 31, 40, 41, 42, 46, 47, 49, 53, 56, 58, 61, 63, 69, 79, 84, 86], "layer": 0, "pair": [0, 3], "arrai": [0, 9, 28, 35, 44, 53, 76, 77, 86], "integ": [0, 1, 7, 13, 23, 24, 28, 31, 35, 40, 41, 42, 49, 53, 58, 61, 77, 86], "sort": [0, 49], "In": [0, 8, 10, 11, 12, 15, 19, 35, 43, 48, 49, 61, 62, 63, 69, 70, 79, 83], "alphanumer": 0, "charact": [0, 3, 17, 18, 19, 77, 86], "underscor": [0, 77, 86], "prefix": [0, 1, 83, 86], "eras": 0, "regist": [0, 85, 86], "logger": [0, 86], "clip": [0, 1, 2, 3, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 86], "fill": 0, "proper": [0, 3], "check": [0, 1, 55, 69, 81, 83, 86], "manual": [0, 3, 82, 85, 86], "discourag": 0, "illeg": [0, 35, 86], "combin": [0, 9, 15, 19, 33, 69, 78, 81], "caus": [0, 19, 48, 83], "undefin": [0, 35, 86], "int": [0, 1, 2, 3, 6, 8, 9, 12, 13, 14, 15, 21, 22, 23, 24, 25, 26, 28, 30, 31, 32, 34, 35, 38, 40, 41, 42, 43, 44, 45, 46, 48, 49, 51, 53, 56, 58, 61, 63, 65, 66, 68, 69, 73, 74, 75, 76, 77, 79], "colorfamili": [0, 69], "sampletyp": [0, 13], "bitspersampl": 0, "signific": 0, "bytespersampl": 0, "power": [0, 86], "2": [0, 3, 4, 10, 15, 19, 24, 28, 31, 33, 35, 37, 38, 40, 41, 42, 44, 45, 46, 47, 48, 49, 51, 52, 53, 58, 61, 62, 63, 65, 66, 67, 69, 78, 81, 85, 86], "smallest": [0, 53], "fit": [0, 77], "subsamplingw": 0, "subsamplingh": 0, "log2": 0, "subsampl": [0, 1, 21, 30, 35, 61, 69, 86], "factor": [0, 77], "appli": [0, 7, 9, 23, 27, 28, 32, 34, 35, 44, 45, 48], "third": [0, 48, 50, 69, 86], "plane": [0, 1, 23, 24, 26, 28, 31, 35, 37, 40, 41, 42, 44, 45, 46, 48, 49, 50, 51, 53, 56, 58, 69, 71, 86], "conveni": [0, 1, 2, 65, 73, 74, 75, 76, 77, 83], "uv_width": 0, "y_width": 0, "numplan": 0, "about": [0, 3, 73, 74, 81, 82, 86], "vari": [0, 61], "int64_t": [0, 1], "fpsnum": [0, 22, 25], "numer": [0, 9, 61, 86], "part": [0, 84, 86], "rate": [0, 22, 39, 63, 64, 86], "reduc": [0, 1], "fraction": [0, 3, 86], "fpsden": [0, 22, 25], "denomin": [0, 86], "height": [0, 1, 25, 30, 61, 65, 72, 86], "dimens": [0, 1, 11, 39, 48, 50, 61, 69, 70, 86], "numfram": 0, "numchannel": 0, "uint64_t": 0, "channellayout": 0, "bitmask": 0, "present": [0, 9, 33, 86], "left": [0, 3, 15, 21, 30, 35, 61, 78, 80], "shift": [0, 48, 61], "sampler": [0, 1, 6, 13], "numsampl": 0, "const": [0, 1, 2], "char": [0, 2], "versionstr": 0, "copyright": 0, "numthread": 0, "worker": 0, "maxframebuffers": 0, "framebuff": [0, 86], "grow": 0, "size": [0, 1, 25, 30, 61, 69, 84, 86], "befor": [0, 2, 23, 28, 58, 83, 86], "aggress": [0, 86], "reclaim": 0, "usedframebuffers": 0, "sourc": [0, 3, 15, 33, 37, 61, 65, 81, 83, 85], "requestpattern": 0, "initi": [0, 3, 83], "configplugin": 0, "pluginnamespac": 0, "pluginvers": 0, "apivers": 0, "flag": [0, 2, 86], "provid": [0, 1, 2, 19, 37, 61, 83, 86], "recommend": [0, 2, 3, 61], "If": [0, 1, 2, 3, 8, 9, 13, 15, 18, 19, 23, 24, 25, 27, 28, 31, 35, 39, 40, 41, 42, 43, 44, 45, 48, 49, 50, 53, 54, 55, 56, 58, 60, 61, 63, 64, 66, 67, 74, 79, 81, 83, 85, 86], "know": [0, 61, 81, 86], "actual": [0, 86], "simpli": [0, 1, 2, 24, 28, 31, 40, 41, 42, 44, 49, 53, 54, 57, 58, 83, 85, 86], "match": [0, 3, 83], "re": [0, 83], "compil": [0, 35, 82], "against": 0, "consist": 0, "ORed": 0, "togeth": [0, 23, 28, 33, 46, 47, 51, 52, 72, 86], "typic": [0, 61], "success": [0, 2, 18, 19, 86], "arg": [0, 85], "returntyp": 0, "vspublicfunct": 0, "argsfunc": 0, "functiondata": 0, "giant": 0, "wai": [0, 2, 9, 15, 17, 18, 19, 22, 23, 37, 69, 77, 78, 79, 83, 85, 86], "case": [0, 2, 19, 37, 69, 86], "shouldn": 0, "desir": [0, 86], "sane": 0, "default": [0, 2, 13, 20, 24, 25, 28, 31, 35, 41, 42, 44, 45, 46, 48, 50, 51, 53, 55, 61, 68, 74, 83, 86], "suit": 0, "been": [0, 2, 18, 48, 65, 84, 86], "releas": [0, 83, 86], "maximum": [0, 1, 5, 8, 20, 24, 40, 41, 43, 82, 86], "automat": [0, 2, 37, 68, 81, 83, 86], "detect": [0, 83, 86], "info": [0, 85], "highest": [0, 9, 42, 49], "support": [0, 2, 4, 20, 35, 81, 82, 83, 84, 86], "msgtype": 0, "msg": 0, "send": [0, 84, 86], "through": [0, 2, 35, 44, 45, 54, 86], "framework": [0, 86], "abort": 0, "deliv": 0, "handler": [0, 86], "vsloghandlerfre": 0, "userdata": 0, "instal": [0, 4, 81, 82, 85, 86], "custom": [0, 2, 86], "variou": [0, 81, 86], "emit": [0, 86], "handl": [0, 2, 61, 84, 86], "hundr": 0, "soon": 0, "warn": [0, 1], "auto": [0, 37, 81], "won": [0, 2, 55, 83], "disappear": 0, "typedef": 0, "null": [0, 2, 66], "restor": [0, 86], "remov": [0, 54, 60, 63, 79, 86], "invalid": [0, 35, 86], "obtain": [0, 2, 85, 86], "propsrc": 0, "copi": [0, 1, 3, 9, 13, 24, 25, 28, 31, 35, 40, 41, 42, 48, 49, 50, 53, 54, 58, 72, 83, 86], "anoth": [0, 1, 3, 22, 27, 54, 59, 61, 86], "fatal": [0, 3, 19], "uninitialis": 0, "colorspac": [0, 4, 40, 48, 61, 84, 86], "greater": [0, 24, 31, 35, 41], "than": [0, 3, 8, 15, 24, 29, 31, 35, 37, 41, 43, 50, 52, 53, 54, 61, 86], "suitabl": [0, 57], "ownership": [0, 2], "transfer": [0, 3, 61, 86], "caller": [0, 1, 86], "planesrc": 0, "element": [0, 28, 53], "correspond": [0, 15, 28, 53, 61, 77, 86], "assum": [0, 15, 35, 41, 48, 81, 83], "framea": 0, "frameb": 0, "framec": 0, "3": [0, 2, 3, 10, 28, 35, 37, 53, 61, 62, 63, 68, 69, 78, 79, 83, 84, 86], "newfram": 0, "f": [0, 35, 37, 45, 54, 86], "w": [0, 35], "now": [0, 2, 81, 86], "apart": [0, 85, 86], "channelsrc": 0, "nth": [0, 15], "decrement": 0, "count": [0, 2, 86], "delet": [0, 32, 33, 64, 65], "reach": [0, 8, 43], "safe": [0, 2, 19, 86], "increment": [0, 2, 86], "duplic": [0, 34, 35, 63, 86], "just": [0, 48, 81, 83, 84], "As": 0, "buffer": [0, 2, 86], "fashion": 0, "realli": [0, 19, 86], "until": [0, 2, 8, 43], "oper": [0, 2, 3, 8, 9, 11, 12, 15, 27, 35, 43, 53, 57, 58, 63, 69, 70, 81, 83, 86], "occur": 0, "transpar": 0, "read": [0, 1, 2, 3, 19, 22, 54, 85, 86], "valid": [0, 1, 2, 28, 33, 86], "long": [0, 13, 25, 54, 77, 86], "live": [0, 86], "ptrdiff_t": 0, "distanc": 0, "consecut": 0, "line": [0, 77, 81, 83, 86], "doesn": [0, 2, 77], "isn": [0, 2, 35, 64], "uint8_t": 0, "three": [0, 19, 35, 69], "alloc": [0, 83], "contigu": [0, 86], "chunk": [0, 86], "distinguish": 0, "given": [0, 1, 7, 9, 11, 15, 22, 24, 25, 35, 44, 50, 63, 69, 70, 72, 76, 86], "depend": [0, 3, 18, 23, 66, 68, 83, 86], "chroma": [0, 1, 3, 50, 61], "vi": [0, 1], "filtermod": [0, 81], "numdep": 0, "instancedata": 0, "pleas": 0, "easi": [0, 23, 83], "identif": 0, "level": [0, 5, 82, 84, 86], "effici": [0, 86], "configur": [0, 83, 86], "privat": 0, "someth": [0, 3, 27, 84, 86], "went": 0, "ident": [0, 61, 86], "except": [0, 35, 61, 83, 85, 86], "ai": 0, "immedi": 0, "creation": [0, 2], "upper": [0, 24, 42, 55, 86], "mani": [0, 4, 23, 30, 68, 83, 86], "addit": [0, 3, 11, 15, 54, 61, 70, 84, 85, 86], "try": [0, 19, 48, 61, 84], "linear": [0, 41, 61], "strategi": 0, "debug": [0, 20, 83, 86], "work": [0, 2, 19, 23, 83, 84, 86], "well": [0, 19, 50, 56, 68, 84, 86], "silent": [0, 17, 77, 83], "ignor": [0, 19, 83, 86], "reset": [0, 68], "discard": 0, "fixeds": [0, 14, 68], "maxsiz": [0, 14, 68], "maxhistorys": 0, "detail": [0, 86], "adjust": [0, 41, 63, 68, 83], "algorithm": 0, "unless": [0, 11, 39, 61, 70, 86], "recent": [0, 83, 85], "evict": 0, "off": [0, 2], "shrink": 0, "benefici": 0, "effect": [0, 33, 41, 45, 64, 86], "decreas": [0, 58], "tri": [0, 19, 83, 86], "fairli": [0, 26, 68, 86], "destin": [0, 61], "At": [0, 2, 23, 86], "termin": [0, 66, 83], "written": [0, 2, 4, 35, 84], "meaning": [0, 19, 86], "compon": [0, 4, 86], "rang": [0, 3, 24, 28, 35, 38, 41, 42, 44, 45, 48, 50, 57, 61, 85], "8": [0, 24, 28, 31, 35, 38, 40, 41, 42, 49, 53, 57, 58, 61, 77, 78, 83], "horizont": [0, 28, 36, 81, 86], "4": [0, 3, 28, 45, 46, 47, 51, 52, 53, 61, 63, 83], "vertic": [0, 28, 36, 86], "rgb": [0, 19, 61, 69, 86], "contruct": [], "bitshift": 0, "stereo": [0, 9, 13, 15], "express": [0, 35], "acfrontleft": 0, "acfrontright": 0, "uint32_t": 0, "id": [0, 1, 37, 61, 86], "gotten": [0, 54, 86], "failur": [0, 2, 54], "dealloc": 0, "later": [0, 57, 83, 86], "leav": 0, "empti": [0, 2, 13, 25, 35, 83], "next": [0, 2, 3, 28], "errormessag": 0, "add": [0, 1, 2, 21, 28, 46, 47, 66, 67, 83, 85], "clear": [0, 2, 61, 86], "encount": [0, 55, 83, 86], "lost": 0, "otherwis": [0, 8, 13, 19, 24, 25, 39, 43, 47, 86], "alreadi": [0, 18, 66, 67, 83, 84, 85, 86], "specifi": [0, 2, 3, 13, 15, 17, 21, 22, 24, 25, 28, 30, 31, 32, 34, 35, 40, 41, 42, 44, 45, 48, 49, 50, 53, 54, 56, 58, 61, 64, 67, 69, 79, 84, 85, 86], "die": 0, "total": [0, 83], "here": [0, 2, 3, 28, 53, 78, 81, 86], "problem": [0, 3, 19], "convert": [0, 1, 35, 41, 61, 77, 86], "satur": [0, 1, 28], "lot": 0, "faster": 0, "loop": [0, 1, 5, 82, 86], "descript": [0, 86], "overwritten": [0, 66], "old": [0, 83], "neg": [0, 7, 15, 28, 35], "doubl": [0, 1, 64], "d": [0, 1, 35], "arbitrari": [0, 37, 66, 86], "consid": [0, 1, 11, 35, 39, 50, 53, 68, 70, 79], "alter": [0, 68], "longer": [0, 2, 29, 68], "everyth": [0, 35, 83, 85], "propgetfram": 0, "vsfunctionref": 0, "mapgetfunc": 0, "func": [0, 19, 37, 44, 45, 54, 82, 86], "url": 0, "better": [0, 57], "over": [0, 2, 8, 23, 33, 43, 68, 84, 86], "final": [0, 28, 68, 83, 86], "absolut": [0, 2, 3, 28, 35, 56], "path": [0, 2, 17, 18, 19, 37, 61, 82, 83], "real": [0, 85], "symbol": 0, "link": [0, 83], "delimit": 0, "forward": 0, "slash": 0, "retain": [0, 2], "declar": [0, 86], "smoothli": 0, "readi": 0, "where": [0, 2, 9, 24, 40, 48, 61, 68, 83, 86], "successfulli": [0, 86], "either": [0, 1, 7, 19, 22, 24, 44, 45, 61, 83, 86], "loadplugin": [0, 5, 17, 37, 82, 83], "obviou": 0, "vsfreefunctiondata": 0, "context": [0, 86], "callback": [0, 2, 86], "task": 0, "errormsg": 0, "bufsiz": 0, "synchron": [0, 3], "necessari": [0, 48, 83], "dure": [0, 55], "want": [0, 3, 65, 81, 83, 84, 86], "trail": [0, 86], "vsframedonecallback": 0, "client": [0, 2], "were": 0, "reorder": 0, "them": [0, 3, 19, 37, 54, 60, 61, 83, 85, 86], "previous": [0, 84, 86], "usual": [0, 3, 13, 25, 35, 46, 47, 51, 52, 61, 83, 85, 86], "framectx": 0, "arframereadi": 0, "best": 0, "ascend": 0, "By": [0, 20, 35, 44, 45, 46, 48, 51], "referenc": [0, 37], "20": 0, "batch": [0, 85], "letter": [0, 3], "word": [0, 49], "za": 0, "z": [0, 3, 35], "z0": 0, "9_": 0, "pascalcas": 0, "separ": [0, 7, 16, 64, 71, 86], "semicolon": 0, "made": [0, 84, 86], "field": [0, 3, 33, 61, 64, 65, 66, 67], "colon": 0, "insert": 0, "whitespac": 0, "lowercas": [0, 86], "anod": [0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16], "vnode": [0, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80], "afram": 0, "vframe": 0, "opt": 0, "place": [0, 1, 2, 83, 86], "without": [0, 35, 37, 61], "remain": [0, 86], "follow": [0, 19, 61, 83], "blah": 0, "moo": 0, "asdf": [0, 83], "accept": [0, 3, 30, 61, 69, 86], "matter": [0, 56], "similarli": 0, "import": [0, 2, 35, 37, 81, 83], "often": [0, 61], "foocreat": 0, "initialis": 0, "perform": [0, 12, 26, 28, 37, 48, 61, 86], "usabl": [0, 2], "push": 0, "greatli": 0, "benefit": 0, "produc": [0, 3, 35, 54], "Such": [0, 35], "necessarili": 0, "global": [0, 19, 83, 85, 86], "doe": [0, 22, 27, 78, 86], "meet": 0, "minimum": [0, 1, 5, 41, 82], "simpl": [0, 3, 28, 37, 77, 85, 86], "five": 0, "foogetfram": 0, "foofre": 0, "These": [0, 19, 35, 83, 86], "sdk": [0, 3], "folder": [0, 83], "vspapi": 0, "purpos": [0, 20, 35, 85, 86], "subset": 0, "activationreason": 0, "framedata": 0, "local": [0, 82, 83, 86], "persist": 0, "could": [0, 2, 85], "concurr": [0, 85, 86], "freeli": 0, "splice": [0, 5, 11, 82, 86], "collect": 1, "vsh_": 1, "vsh": 1, "document": [1, 83], "plugin": [1, 2, 4, 17, 18, 19, 82, 84, 86], "attempt": [1, 83, 86], "portabl": [1, 82, 85], "definit": 1, "c99": 1, "restrict": [1, 21, 30, 35, 61], "keyword": [1, 82], "counterpart": 1, "pptr": 1, "_aligned_malloc": 1, "posix_memalign": 1, "elsewher": 1, "style": [1, 86], "ptr": 1, "_aligned_fre": 1, "b": [1, 35, 37, 39, 48, 50, 61, 65, 69, 81, 86], "size_t": 1, "templat": 1, "malloc": 1, "inlin": 1, "bool": 1, "vsvideoinfo": 1, "v1": [1, 24], "v2": [1, 85], "unsign": 1, "presetformat": 1, "vsvideoformat": 1, "v": [1, 9, 15, 25, 28, 35, 37, 61, 69, 83, 85, 86], "vscore": [1, 2, 86], "vsapi": [1, 2], "true": [1, 11, 19, 28, 33, 35, 39, 48, 63, 64, 70, 86], "framer": [1, 3, 22, 73, 86], "taken": [1, 3, 35], "consider": [1, 3, 35, 86], "compar": [1, 84], "vsaudioinfo": 1, "num": 1, "den": 1, "mul": 1, "div": 1, "multipli": [1, 23, 28, 39, 48, 57, 58, 63], "ration": [1, 3, 22], "result": [1, 28, 35, 46, 51, 57, 61, 83, 84, 86], "ensur": [1, 86], "addnum": 1, "addden": 1, "sign": 1, "silenc": 1, "vsmap": [1, 2], "avoid": [1, 23, 47, 83, 86], "unexpect": 1, "overflow": [1, 35], "dstp": 1, "dst_stride": 1, "srcp": 1, "src_stride": 1, "row_siz": 1, "memcpi": 1, "vsformat": 1, "fi": 1, "particular": 1, "regard": 1, "wrapper": [2, 4, 83, 86], "vapoursynth": [0, 2, 4, 17, 18, 33, 37, 61, 74, 79, 81, 83, 84, 85], "interfac": 2, "evalu": [2, 35, 37, 44, 85], "everywher": 2, "els": [2, 27, 37, 83, 85, 86], "python": [2, 4, 8, 10, 11, 12, 17, 18, 19, 43, 62, 63, 70, 79, 81, 82, 84], "vspipe": [2, 82, 83, 86], "vsvfw": [2, 85, 86], "program": [2, 4, 82, 85], "player": [2, 4], "mpv": [2, 4, 81], "libvapoursynth": [2, 83], "dlopen": 2, "rtld_global": 2, "abl": 2, "design": [2, 3, 84], "environ": [2, 82, 85, 86], "commun": [2, 83], "vsscript_api_vers": 2, "explicitli": 2, "pre": [2, 48, 57], "regardless": [2, 40, 48], "yet": [2, 19, 86], "scriptfilenam": 2, "entir": [2, 86], "displai": 2, "special": [2, 3, 30, 35, 83, 84, 86], "__file__": 2, "variabl": [2, 19, 25, 30, 69, 83, 86], "sy": [2, 86], "exit": [2, 85, 86], "code": [2, 3, 35, 55, 61, 83, 85, 86], "directori": [2, 83, 85], "mib": 2, "enough": 2, "everyon": 2, "behav": 2, "okai": 2, "dst": 2, "vsscript_setvari": 2, "var": 2, "vsnode": 2, "mark": [2, 61, 86], "alpha": [2, 3, 19, 27, 48, 57, 59, 86], "altern": [2, 15, 45, 84, 86], "mean": [2, 3, 19, 26, 33, 35, 48, 50, 56, 61, 64, 69, 86], "multip": [], "exact": [2, 83, 86], "disregard": 2, "alt": 2, "cancel": 2, "finish": [2, 86], "setcwd": 2, "temporarili": 2, "dir": [3, 83], "simplefilt": 3, "function": [3, 18, 19, 20, 30, 37, 44, 45, 46, 47, 51, 52, 54, 55, 56, 59, 61, 65, 68, 73, 74, 75, 76, 77, 82, 83, 85], "relat": [3, 83], "aren": [3, 30, 61], "checklist": 3, "watch": 3, "sometim": [3, 61, 86], "own": [3, 18, 83, 84, 86], "deep": 3, "appear": [3, 85], "vapoursynthplugininit": 3, "constructor": 3, "destructor": 3, "complic": 3, "howev": [3, 19, 61, 86], "even": [3, 26, 35, 41, 61, 63, 86], "fmserial": 3, "enter": [3, 83], "simultan": 3, "misconsept": 3, "rule": [3, 86], "And": 3, "those": [3, 76, 83, 86], "lock": 3, "9": [3, 28, 61, 77], "camelcas": [3, 86], "categori": [3, 86], "start": [3, 63, 79, 82, 83, 84, 85, 86], "_": [3, 61], "strictli": 3, "_chromaloc": 3, "yuv": [3, 35, 41, 44, 61, 69, 86], "center": [3, 23, 28, 31, 61], "topleft": 3, "top": [3, 21, 30, 33, 35, 61, 64, 65, 66, 67, 83], "bottomleft": 3, "5": [3, 9, 19, 28, 35, 50, 53, 61, 63, 78, 85, 86], "bottom": [3, 21, 30, 33, 61, 64, 65], "_colorrang": 3, "limit": [3, 5, 31, 41, 44, 48, 53, 57, 61, 82, 86], "pc": [3, 61], "tv": [3, 61], "_primari": [3, 86], "color": [3, 21, 25, 37, 48, 61, 69], "itu": [3, 61], "h": [3, 28, 61, 82, 86], "265": [3, 61], "tabl": [3, 44, 45, 61], "_matrix": [3, 86], "matrix": [3, 9, 28, 46, 47, 51, 52, 61, 78], "coeffici": [3, 9, 28, 61], "_transfer": [3, 86], "characterist": [3, 61], "_fieldbas": [3, 33, 61, 64, 65, 66, 67], "compos": 3, "independ": 3, "interlac": [3, 61, 65], "progress": [3, 61, 65, 85, 86], "_absolutetim": 3, "timestamp": 3, "durat": [3, 22, 39, 63, 64], "_durationnum": [3, 22], "_durationden": [3, 22], "normal": [3, 18, 35, 51, 52, 56, 86], "bint": [3, 13, 18, 23, 25, 28, 33, 39, 44, 45, 48, 53, 61, 63, 64, 70], "_comb": [3, 54], "postprocess": 3, "_field": [3, 33, 64, 65], "separatefield": [3, 5, 33, 82], "signal": 3, "_picttyp": 3, "ipb": 3, "_sarnum": 3, "_sarden": 3, "aspect": 3, "ratio": 3, "_scenechangenext": 3, "scene": [3, 23], "_scenechangeprev": 3, "_alpha": [3, 27, 59], "d2v": 4, "witch": 4, "open": [4, 81, 83, 85, 86], "d2vsourc": 4, "hybrid": 4, "doom9": 4, "encod": [4, 65, 81], "gui": 4, "net": 4, "media": 4, "smoothvideo": 4, "project": [4, 84], "realtim": 4, "interpol": 4, "staxrip": 4, "extend": [4, 9, 15, 30, 39], "syntax": 4, "fast": [4, 26, 35], "preview": [4, 82, 86], "spiritu": 4, "successor": 4, "virtualdub2": 4, "virtualdub": [4, 19, 81], "bitdepth": [4, 19, 28, 47, 52, 85], "vsmkv": 4, "fuse": 4, "virtual": [4, 85], "filesystem": [4, 85], "uncompress": [4, 85], "matroska": 4, "mkv": [4, 65, 81, 85], "vspreview": 4, "standalon": [4, 86], "too": [4, 7, 77, 86], "r": [4, 17, 18, 19, 61, 69, 83, 85, 86], "minim": 4, "wobbli": 4, "ivtc": 4, "assist": 4, "yatta": 4, "yuuno": 4, "incorpor": 4, "jupyt": 4, "nim": 4, "bind": [4, 86], "languag": [4, 83, 84], "rust": 4, "vsxx": 4, "github": [4, 83], "action": 4, "your": [4, 81, 83, 85, 86], "loadallplugin": [5, 82], "setmaxcpu": [5, 82], "addbord": [5, 82], "assumefp": [5, 82], "averagefram": [5, 82], "binar": [5, 82], "binarizemask": [5, 82], "blankclip": [5, 37, 74, 82, 86], "boxblur": [5, 82], "cliptoprop": [5, 59, 82], "convolut": [5, 23, 46, 47, 51, 52, 82], "copyframeprop": [5, 82], "crop": [5, 82], "cropab": [5, 82], "deflat": [5, 82], "inflat": [5, 82], "deletefram": [5, 82], "doubleweav": [5, 82], "duplicatefram": [5, 82], "flipvert": [5, 78, 82, 86], "fliphorizont": [5, 78, 81, 82], "frameev": [5, 54, 82], "freezefram": [5, 82], "interleav": [5, 33, 64, 82], "invert": [5, 82], "invertmask": [5, 82], "lut2": [5, 82], "makediff": [5, 47, 51, 82], "makefulldiff": [5, 52, 82], "maskedmerg": [5, 57, 82], "median": [5, 82], "merg": [5, 15, 48, 51, 52, 69, 82], "mergediff": [5, 46, 82], "mergefulldiff": [5, 47, 82], "modifyfram": [5, 37, 82], "pemverifi": [5, 82], "planestat": [5, 37, 82], "premultipli": [5, 48, 82], "prewitt": [5, 82], "sobel": [5, 82], "proptoclip": [5, 27, 82], "removeframeprop": [5, 82], "bilinear": [5, 37, 61, 65], "bicub": [5, 61, 86], "lanczo": [5, 61], "spline16": [5, 61], "spline36": [5, 61], "spline64": [5, 61], "bob": [5, 61], "setfieldbas": [5, 82], "setframeprop": [5, 65, 82], "setvideocach": [5, 14, 82], "shuffleplan": [5, 82], "splitplan": [5, 82], "stackvert": [5, 82], "stackhorizont": [5, 82], "transpos": [5, 82], "turn180": [5, 82], "clipinfo": [5, 77], "coreinfo": [5, 77], "framenum": [5, 77], "frameprop": [5, 77, 86], "assumesampler": [5, 82], "audiogain": [5, 81, 82], "audioloop": [5, 82, 86], "audiomix": [5, 82], "audiorevers": [5, 82, 86], "audiosplic": [5, 82, 86], "audiotrim": [5, 82, 86], "blankaudio": [5, 82], "setaudiocach": [5, 82], "shufflechannel": [5, 82], "splitchannel": [5, 82], "src": [6, 22], "gain": [7, 81], "volum": [7, 85], "suppli": [7, 23, 56, 74, 86], "larg": [7, 19, 26, 84], "lead": 7, "less": [8, 31, 41, 43, 53, 86], "channels_out": [9, 15], "mix": [9, 35], "implicitli": [9, 15, 69], "ll": [9, 15, 83], "longest": [9, 15, 39], "front_left": [9, 13, 15, 86], "front_right": [9, 13, 15, 86], "lowest": [9, 42, 49], "downmix": 9, "mono": [9, 15], "front_cent": [9, 86], "7071": 9, "low_frequ": [9, 86], "back_left": [9, 86], "back_right": [9, 86], "would": [10, 47, 57, 62, 78], "slice": [10, 12, 62, 63, 79, 82], "mismatch": [11, 39, 48, 70, 86], "unit": [12, 61, 86], "obvious": 12, "44100": 13, "10": [13, 25, 35, 45, 61, 86], "edit": [13, 25, 27, 84], "test": [13, 20, 25, 61, 83, 86], "44": 13, "1khz": 13, "preced": [13, 25, 33], "twice": [13, 15, 32, 78], "historys": [14, 68], "channels_in": 15, "extract": [15, 59, 69, 85], "reus": [15, 86], "swap": [15, 35, 69], "right": [15, 21, 23, 30, 78, 80], "clipa": [15, 35, 45, 46, 47, 48, 50, 51, 52, 56], "clipb": [15, 35, 45, 46, 47, 48, 50, 51, 52, 56], "nativ": [17, 18, 83], "skip": 17, "bewar": [17, 18, 19], "escap": [17, 18, 19, 86], "correct": [17, 18, 19, 83, 86], "altsearchpath": 18, "fals": [18, 28, 33, 35, 64, 86], "prevent": [18, 41, 68, 83, 86], "collis": [18, 19, 86], "being": [18, 23, 35, 86], "search": [18, 82, 83], "6": [19, 28, 35, 53, 61, 85], "64": [19, 35, 83, 85], "higher": [19, 45, 47, 52, 85], "pack": [19, 86], "coincident": 19, "expect": [19, 86], "yuy2": [19, 86], "rgb32": 19, "yuv422p8": [19, 86], "rgb24": [19, 25, 37, 61, 86], "compatpack": 19, "env": [19, 86], "trigger": 19, "distinct": 19, "func_2": 19, "func_3": 19, "overload": 19, "give": 19, "insan": 19, "common": [19, 82, 86], "cpu": [20, 35], "intend": [20, 24, 27, 40, 86], "instruct": [20, 35, 83], "optim": [20, 35, 61], "x86": 20, "avx2": 20, "sse2": 20, "none": [20, 37, 61, 86], "black": [21, 25, 37], "border": 21, "side": [21, 30, 83], "obei": 21, "newli": 21, "metadata": [22, 84, 86], "assign": 22, "overwrit": [22, 83], "comput": [22, 84], "weight": [23, 48, 50], "scale": [23, 45, 58, 61, 73, 74, 75, 76, 77, 84], "scenechang": 23, "averag": [23, 31, 35, 45, 50, 56], "seen": 23, "tempor": 23, "sum": [23, 28], "divid": [23, 28, 39, 63], "odd": [23, 28, 63, 86], "rest": 23, "31": 23, "threshold": [24, 31, 53], "v0": 24, "turn": [24, 61, 77, 80, 86], "imag": [24, 61, 84], "mask": [24, 27, 40, 46, 47, 48, 51, 52, 58, 59, 86], "depth": [24, 28, 31, 40, 41, 42, 45, 49, 53, 58], "middl": [24, 28, 49], "lower": [24, 42, 45, 55], "equal": 24, "unprocess": [24, 28, 31, 40, 41, 42, 48, 49, 53, 58], "640": [25, 61], "480": 25, "24": 25, "varsiz": 25, "varformat": 25, "640x480": 25, "24fp": 25, "themselv": 25, "still": [25, 30, 86], "hradiu": 26, "hpass": 26, "vradiu": 26, "vpass": 26, "box": [26, 83], "blur": [26, 28], "radiu": 26, "cheapli": 26, "approxim": [26, 35], "gaussian": 26, "mclip": 27, "prop": [27, 37, 54, 56, 59, 60, 66, 76, 86], "deriv": [27, 61, 83], "invers": [27, 59], "bia": 28, "divisor": 28, "spatial": 28, "3x3": [28, 31, 49, 53], "neighbourhood": [28, 31, 49, 53], "nine": [28, 49], "round": [28, 61, 84], "nearest": 28, "larger": [28, 35], "clamp": [28, 35, 41, 45, 46, 47, 51], "25": [28, 86], "5x5": 28, "1023": [28, 35], "inclus": [28, 38, 79, 86], "7": [28, 53, 61, 73, 74, 75, 76, 77, 83], "principl": 28, "becom": [28, 31, 53], "select": [28, 61, 63, 85, 86], "squar": 28, "hv": 28, "vh": 28, "equival": [28, 35, 48, 57, 61, 69, 86], "stronger": 28, "58": 28, "prop_src": [29, 37], "simplest": [30, 37], "croprel": 30, "alia": [30, 61], "hand": 30, "area": 30, "thu": 30, "whole": [30, 61, 86], "pictur": [30, 78, 86], "awai": 30, "met": 30, "eight": 31, "much": [31, 53, 57, 86], "65535": 31, "tff": [33, 61, 64], "weav": 33, "back": [33, 46, 47, 51, 52, 86], "weak": [33, 86], "notion": 33, "undo": 33, "sep": 33, "woven": 33, "accordingli": 33, "26": 35, "polish": 35, "notat": 35, "previou": [35, 68], "fewer": 35, "practic": [35, 86], "incompat": 35, "content": [35, 57, 78, 82, 86], "runtim": [35, 83, 84], "pitfal": [35, 82], "speed": 35, "255": [35, 37, 41, 57, 61], "difficult": 35, "u": [35, 61, 69], "co": 35, "cg": 35, "bits_per_sampl": [35, 44, 45, 86], "overrid": [35, 83], "f16c": 35, "logic": 35, "arithmet": 35, "comparison": 35, "stack": [35, 72], "manipul": [35, 84], "dup": 35, "former": 35, "topmost": 35, "latter": [35, 86], "swapn": 35, "dupn": 35, "form": [35, 47, 86], "step": [35, 83, 86], "dup0": 35, "swap1": 35, "machin": 35, "origin": [35, 38], "finit": 35, "neither": [35, 79], "nan": 35, "nor": [35, 79, 86], "inf": 35, "especi": 35, "transcendent": 35, "exp": 35, "x": [35, 37, 44, 45, 61, 69, 82], "88": 35, "3e": 35, "38": 35, "pow": 35, "1e": 35, "sqrt": [35, 37], "sin": 35, "ab": 35, "max": [35, 37, 42, 44, 55, 56], "min": [35, 42, 44, 55, 56], "xor": 35, "within": [35, 86], "2e": 35, "magnitud": 35, "1e5": 35, "accuraci": 35, "whose": [35, 83, 86], "2e5": 35, "y": [35, 45, 61], "uv": [35, 41, 61], "unchang": [35, 44, 45, 48, 50], "clipc": 35, "clipa16bit": 35, "clipb10bit": [35, 45], "clipa8bit": [35, 45], "256": 35, "junk": [35, 86], "direct": [35, 36, 81, 86], "clipa10bit": 35, "clipb16bit": 35, "yuv420p16": [35, 86], "flip": [36, 78, 81], "eval": 37, "clip_src": 37, "reliabl": 37, "deduc": 37, "mainli": [37, 59], "decis": 37, "improv": [37, 65, 84], "encourag": 37, "accomplish": 37, "anim": 37, "scriptclip": 37, "condit": [37, 54], "fade": 37, "white": [37, 61], "functool": 37, "base_clip": 37, "yuv420p8": [37, 61, 86], "1000": 37, "128": [37, 57, 61], "def": [37, 44, 45, 54], "animated_clip": 37, "partial": 37, "set_output": [37, 81, 85, 86], "balanc": 37, "show": [37, 85], "math": 37, "grayworld1adjust": 37, "small_numb": 37, "000000001": 37, "red": [37, 61], "planestatsaverag": 37, "green": [37, 61], "blue": [37, 61], "max_rgb": 37, "red_corr": 37, "green_corr": 37, "blue_corr": 37, "norm": 37, "r_gain": 37, "g_gain": 37, "b_gain": 37, "repr": 37, "grayworld1": 37, "matrix_": [37, 61], "rgb_clip": 37, "r_avg": 37, "g_avg": 37, "b_avg": 37, "adjusted_clip": 37, "bestsourc": [37, 81], "videosourc": [37, 65, 81], "freez": 38, "100": [38, 61, 85, 86], "231": 38, "15": [38, 61], "112": 38, "300": [38, 61], "50": [38, 86], "overlap": 38, "modify_dur": [39, 63, 64], "treat": [39, 65], "subtract": 40, "min_in": 41, "max_in": 41, "gamma": 41, "min_out": 41, "max_out": 41, "bright": [41, 61], "contrast": [41, 61], "remap": 41, "unintuit": 41, "235": [41, 44, 61], "240": [41, 44, 65], "undesir": 41, "degre": [41, 80], "convers": [41, 45, 61], "brighten": 41, "darken": 41, "lutf": [44, 45], "floatout": [44, 45], "look": [44, 45, 83], "luti": 44, "lutuv": 44, "ret": 44, "limited_clip": 44, "limiti": 44, "limituv": 44, "account": 45, "clip1": [45, 54, 86], "clip2": [45, 54, 86], "respons": [45, 86], "understand": 45, "clipi": 45, "clipx": 45, "unsharp": [46, 47, 51, 52], "luma": [46, 50, 51, 57, 69], "blur_clip": [46, 47, 51, 52], "diff_clip": [46, 47, 51, 52], "sharpened_clip": [46, 47, 51, 52], "wraparound": 47, "issu": 47, "first_plan": 48, "interv": 48, "grayscal": [48, 57, 69], "bilinearli": 48, "blend": 48, "horribl": 48, "unintend": 48, "bad": [48, 55, 69], "idea": 48, "pick": 49, "outsid": 50, "coordin": [53, 55], "eros": 53, "find": 53, "largest": 53, "dilat": 53, "selector": 54, "probabl": [54, 83], "framenumb": 54, "set_frame_numb": 54, "fout": 54, "remove_properti": 54, "del": 54, "certain": [54, 61, 83, 86], "transfer_properti": 54, "develop": [55, 84], "badli": 55, "go": 55, "unnot": 55, "diff": 56, "yield": [57, 86], "exclud": 57, "offset": [57, 63, 86], "60": [57, 86], "edg": 58, "intens": 58, "unset": 60, "enum": 61, "chromaloc": 61, "matrix_in": 61, "transfer_in": 61, "primaries_in": 61, "range_in": 61, "chromaloc_in": 61, "filter_param_a": 61, "filter_param_b": 61, "resample_filter_uv": 61, "filter_param_a_uv": 61, "filter_param_b_uv": 61, "dither_typ": 61, "cpu_typ": 61, "src_left": 61, "src_top": 61, "src_width": 61, "src_height": 61, "nominal_lumin": 61, "choos": [61, 86], "good": [61, 69, 86], "neutral": 61, "rudimentari": 61, "deinterlac": [61, 85], "denot": 61, "annex": 61, "bt": 61, "709": 61, "3074": 61, "yourself": [61, 86], "unspecifi": 61, "accord": 61, "sub": [61, 86], "resampl": 61, "qualiti": [61, 65], "kind": [61, 84], "method": [61, 86], "ycocg": [61, 86], "famili": [61, 69], "legal": 61, "btb": 61, "wtw": 61, "studio": [61, 83], "mpeg": 61, "figur": 61, "top_left": 61, "bottom_left": 61, "scaler": 61, "tap": 61, "dither": 61, "random": [61, 83], "error_diffus": 61, "region": 61, "physic": 61, "cd": 61, "m": [61, 83], "To": [61, 83, 85, 86], "yv12": 61, "1920": 61, "1080": 61, "matrix_in_": 61, "abbrevi": 61, "parenthes": 61, "gbr": 61, "yzx": 61, "xyz": 61, "kr": 61, "2126": 61, "kb": 61, "0722": 61, "rec": 61, "unspec": 61, "fcc": 61, "470bg": 61, "299": 61, "114": 61, "470": 61, "histor": 61, "170m": 61, "smpte": 61, "2004": 61, "240m": 61, "ycgco": 61, "2020ncl": 61, "2627": 61, "0593": 61, "2020": 61, "lumin": 61, "2020cl": 61, "chromancl": 61, "12": 61, "chromat": 61, "chromacl": 61, "13": [61, 78], "ictcp": 61, "14": 61, "lc0": 61, "45": 61, "lc": 61, "500": 61, "601": 61, "2020_10": 61, "2020_12": 61, "470m": 61, "525": 61, "625": 61, "log100": 61, "log316": 61, "316": 61, "xvycc": 61, "11": [61, 83, 86], "iec": 61, "61966": 61, "srgb": 61, "st2084": 61, "st": 61, "2084": 61, "b67": 61, "18": 61, "arib": 61, "600": 61, "150": 61, "060": 61, "330": 61, "d65": 61, "3127": 61, "3290": 61, "310": 61, "595": 61, "155": 61, "070": 61, "630": 61, "340": 61, "1999": 61, "film": 61, "170": 61, "797": 61, "131": 61, "046": 61, "708": 61, "292": 61, "st428": 61, "commonli": 61, "st431": 61, "dci": 61, "p3": 61, "tradit": 61, "st432": 61, "jedec": 61, "p22": 61, "22": 61, "standard": [61, 83, 85, 86], "FOR": 61, "toler": 61, "monitor": 61, "3213": 61, "eq": 61, "clip1i": 61, "bitdepthi": 61, "219": 61, "cb": [61, 86], "clip1c": 61, "bitdepthc": 61, "224": 61, "pb": 61, "cr": 61, "pr": 61, "dynam": [61, 83], "cycl": [63, 86], "decim": 63, "fourth": 63, "manner": 63, "halv": 64, "materi": 65, "rule6": [65, 86], "320": 65, "intval": 66, "floatval": 66, "overridden": [68, 86], "self": 68, "explanatori": 68, "histori": 68, "touch": 68, "grai": [69, 86], "rel": [69, 83], "likewis": [69, 79], "yclip": 69, "uclip": 69, "vclip": 69, "cast": 69, "yuvclip": 69, "text": [73, 74, 75, 76, 82], "print": [73, 74, 75, 76, 77, 81, 83, 85, 86], "blank": 74, "draw": 77, "bitmap": 77, "font": 77, "bold": 77, "terminu": 77, "pcf": 77, "cover": 77, "1252": 77, "superset": 77, "iso": 77, "8859": 77, "aka": 77, "latin1": 77, "unprint": 77, "dumb": 77, "drop": 77, "numpad": 77, "synthes": 78, "rotat": 78, "noth": [78, 86], "slower": 78, "illustr": 78, "55": 78, "89": 78, "21": 78, "34": 78, "144": 78, "233": 78, "377": 78, "180": 80, "manag": [81, 83, 86], "tutori": 81, "plai": 81, "around": [81, 83], "interpret": 81, "vpy": [81, 85], "inspir": [81, 84], "filenam": 81, "audiosourc": 81, "2x": 81, "rememb": [81, 86], "quit": [81, 86], "nice": 81, "represent": 81, "directli": [81, 83, 86], "pipe": [81, 85, 86], "x264": [81, 85], "flac": 81, "command": [81, 83], "y4m": [81, 85, 86], "demux": [81, 85], "264": 81, "wav": [81, 85], "o": [81, 82, 85, 86], "introduct": 82, "author": 82, "linux": 82, "vsrepo": 82, "structur": 82, "grammar": 82, "syntact": 82, "sugar": 82, "raw": [82, 85], "class": [82, 85], "get_output": [82, 86], "clear_output": [82, 86], "construct_signatur": [82, 86], "register_on_destroi": [82, 86], "unregister_on_destroi": [82, 86], "videonod": [82, 86], "videooutputtupl": [82, 86], "videofram": [82, 86], "videoformat": [82, 86], "audionod": [82, 86], "audiofram": [82, 86], "get_current_environ": [82, 86], "environmentpolici": [82, 86], "environmentpolicyapi": [82, 86], "register_polici": [82, 86], "_try_enable_introspect": [82, 86], "has_polici": [82, 86], "environmentdata": [82, 86], "synopsi": 82, "avf": [82, 83, 86], "vfw": [82, 86], "tool": [82, 86], "reserv": 82, "page": 82, "press": 83, "along": 83, "instanti": [83, 86], "fact": 83, "download": 83, "visual": 83, "2019": 83, "mention": 83, "begin": 83, "bug": 83, "pyd": 83, "ly": 83, "decompress": 83, "embedd": 83, "archiv": [83, 85], "bat": 83, "xcode": 83, "appstor": 83, "homebrew": 83, "wait": [83, 84], "brew": 83, "OF": 83, "date": 83, "deb": 83, "multimedia": 83, "repositori": 83, "guid": 83, "offici": 83, "websit": 83, "epel": 83, "enterpris": 83, "unoffici": 83, "portag": 83, "tree": 83, "ebuild": 83, "nixpkg": 83, "via": 83, "python3packag": 83, "unstabl": [83, 86], "Be": [83, 86], "awar": [83, 86], "broken": 83, "maco": 83, "backport": 83, "stabl": [83, 86], "branch": 83, "newest": [83, 86], "32bit": 83, "64bit": 83, "msvc": 83, "innosetup": 83, "zip": 83, "compress": 83, "clone": 83, "git": 83, "http": 83, "zimg": 83, "sekrit": 83, "twc": 83, "recurs": 83, "submodul": 83, "avisynthplu": 83, "libp2p": 83, "solut": 83, "py": 83, "pip": 83, "txt": [83, 85], "cython_build": 83, "docs_build": 83, "abov": 83, "7z": 83, "ex": [83, 85], "plan": 84, "ok": [], "grab": 83, "pfm": 83, "192": 83, "win": 83, "make_port": 83, "make_instal": 83, "properli": 83, "across": 83, "boundari": 83, "trolololol": 83, "autoconf": 83, "automak": 83, "libtool": 83, "pkg": 83, "config": 83, "gcc": 83, "newer": 83, "clang": 83, "cython": 83, "28": 83, "sphinx": 83, "python3": 83, "libass": 83, "imagemagick": 83, "pip3": 83, "ve": 83, "updat": [83, 86], "upgrad": 83, "haven": 83, "Or": [83, 84], "pull": 83, "autogen": 83, "sh": 83, "usr": 83, "pop": 83, "No": [83, 86], "lib": 83, "ld_library_path": 83, "site": 83, "pythonpath": 83, "makefil": 83, "doc": 83, "html": 83, "cp": 83, "vsdb": 83, "On": [83, 85], "visit": 83, "put": 83, "think": [83, 84], "mechan": 83, "save": 83, "blow": 83, "your_python_vers": 83, "_pth": 83, "might": [83, 86], "crash": 83, "cough": 83, "wxgtk": 83, "decid": 83, "accid": 83, "appdata": 83, "plugins32": 83, "plugins64": 83, "modern": 83, "roam": 83, "shortcut": 83, "menu": 83, "futur": [83, 86], "vapoursynth32": 83, "coreplugin": 83, "vapoursynth64": 83, "xdg_config_hom": 83, "conf": 83, "home": 83, "vapoursynth_conf_path": 83, "userplugindir": 83, "systemplugindir": 83, "libdir": 83, "plugindir": 83, "hard": 84, "tell": [84, 86], "came": 84, "month": 84, "period": 84, "softwar": [84, 85, 86], "heavili": 84, "aim": 84, "21st": 84, "centuri": 84, "rewrit": 84, "advantag": 84, "late": 84, "90": 84, "implement": [84, 86], "learn": 84, "stick": 84, "fredrik": 84, "mellbin": 84, "electr": 84, "engin": 84, "focu": 84, "analysi": 84, "medic": 84, "he": 84, "digit": 84, "electron": 84, "hi": 84, "spare": 84, "dai": 84, "himself": 84, "job": 84, "repli": 84, "choic": 84, "him": 84, "interest": 84, "feel": 84, "contact": 84, "me": 84, "thingi": 84, "gmail": 84, "port": 84, "sponsor": 84, "outfil": 85, "hyphen": 85, "write": [85, 86], "dot": [85, 86], "anywher": 85, "str": 85, "dict": [85, 86], "outputindex": 85, "w64": 85, "timecod": 85, "p": 85, "stderr": 85, "record": 85, "spent": 85, "stdout": [85, 86], "ye": 85, "fluffi": 85, "kitten": 85, "packag": [85, 86], "easili": 85, "avi": 85, "bridg": 85, "gap": 85, "plain": 85, "core32": 85, "core64": 85, "alt_output": [85, 86], "profession": [85, 86], "easiest": 85, "thechaoscod": 85, "registri": 85, "00": 85, "hkey_local_machin": 85, "clsid": 85, "58f74ca0": 85, "bd0e": 85, "4664": 85, "a49b": 85, "8d10e6f0c131": 85, "inprocserver32": 85, "threadingmodel": 85, "avifil": 85, "extens": 85, "section": 86, "explain": 86, "expos": 86, "vsscript": 86, "__name__": 86, "__vapoursynth__": 86, "__main__": 86, "singleton": 86, "sai": 86, "conflict": 86, "short": 86, "chain": 86, "2000": 86, "quival": 86, "strip": 86, "lambda_": 86, "dictionari": 86, "kwarg": 86, "lambda": 86, "pep8": 86, "backslash": 86, "normcas": 86, "incorrect": 86, "yuv422p10": 86, "adob": 86, "product": 86, "i420": 86, "iyuv": 86, "uyvi": 86, "v210": 86, "some_clip": 86, "get_read_ptr": 86, "get_write_ptr": 86, "get_strid": 86, "ctype": 86, "friendli": 86, "get_fram": 86, "stuff": 86, "prefer": 86, "throw": 86, "hasn": 86, "signatur": 86, "inject": 86, "registr": 86, "resourc": 86, "unregist": 86, "num_thread": 86, "hardwar": 86, "max_cache_s": 86, "megabyt": 86, "get_video_format": 86, "query_video_format": 86, "color_famili": 86, "sample_typ": 86, "subsampling_w": 86, "subsampling_h": 86, "create_video_fram": 86, "uniniti": 86, "add_log_handl": 86, "handler_func": 86, "loghandl": 86, "messagetyp": 86, "remove_log_handl": 86, "log_messag": 86, "message_typ": 86, "version_numb": 86, "__version__": 86, "__api_version__": 86, "l": 86, "itself": 86, "num_fram": 86, "fp": 86, "fps_num": 86, "deprec": 86, "fps_den": 86, "get_frame_async": 86, "thrown": 86, "render": 86, "callabl": 86, "r58": 86, "vsf": 86, "fourcc": 86, "fileobj": 86, "prefetch": 86, "progress_upd": 86, "backlog": 86, "yuv4mpeg2": 86, "current_fram": 86, "total_fram": 86, "close": 86, "iter": 86, "unconsum": 86, "did": 86, "stop": 86, "backward": 86, "is_inspect": 86, "truthi": 86, "underli": 86, "maintain": 86, "introspect": 86, "omit": 86, "readonli": 86, "writabl": 86, "forcefulli": 86, "forget": 86, "thin": 86, "readchunk": 86, "dump": 86, "disk": 86, "wb": 86, "held": 86, "n_plane": 86, "grant": 86, "assur": 86, "plane_idx": 86, "memoryview": 86, "consult": 86, "group": 86, "bytes_per_sampl": 86, "storag": 86, "pad": 86, "num_plan": 86, "modif": 86, "channel_layout": 86, "num_channel": 86, "sample_r": 86, "playback": 86, "sensic": 86, "concept": 86, "lump": 86, "return_signatur": 86, "come": 86, "switch": 86, "is_singl": 86, "_not_": 86, "env_id": 86, "aliv": 86, "r51": 86, "block": 86, "enclos": 86, "statement": 86, "rais": 86, "we": 86, "subclass": 86, "runner": 86, "concret": 86, "polici": 86, "referenci": 86, "on_policy_regist": 86, "abus": 86, "runtimeerror": 86, "special_api": 86, "proivd": 86, "hidden": 86, "useless": 86, "harm": 86, "on_policy_clear": 86, "unregister_polici": 86, "set_environ": 86, "dead": 86, "act": 86, "is_al": 86, "destroy_environ": 86, "wrap_environ": 86, "create_environ": 86, "sensit": 86, "set_logg": 86, "r52": 86, "get_vapoursynth_api": 86, "c_void_p": 86, "provision": 86, "r62": 86, "get_core_ptr": 86, "r50": 86, "exhaust": 86, "vsscript_init": 86, "succe": 86, "vsfunc": 86, "familiar": 86, "mayb": 86, "uncommon": 86, "handi": 86, "predefin": 86, "gray8": 86, "gray9": 86, "gray10": 86, "gray12": 86, "gray14": 86, "gray16": 86, "gray32": 86, "grayh": 86, "yuv444p8": 86, "yuv410p8": 86, "yuv411p8": 86, "yuv440p8": 86, "yuv420p9": 86, "yuv422p9": 86, "yuv444p9": 86, "yuv420p10": 86, "yuv444p10": 86, "yuv420p12": 86, "yuv422p12": 86, "yuv444p12": 86, "yuv420p14": 86, "yuv422p14": 86, "yuv444p14": 86, "yuv422p16": 86, "yuv444p16": 86, "yuv444ph": 86, "yuv444p": 86, "rgb27": 86, "rgb30": 86, "rgb36": 86, "rgb42": 86, "rgb48": 86, "rgbh": 86, "chroma_left": 86, "chroma_cent": 86, "chroma_top_left": 86, "chroma_top": 86, "chroma_bottom_left": 86, "chroma_bottom": 86, "field_progress": 86, "field_top": 86, "field_bottom": 86, "range_ful": 86, "range_limit": 86, "matrix_rgb": 86, "matrix_bt709": 86, "matrix_unspecifi": 86, "matrix_fcc": 86, "matrix_bt470_bg": 86, "matrix_st170_m": 86, "matrix_st240_m": 86, "matrix_ycgco": 86, "matrix_bt2020_ncl": 86, "matrix_bt2020_cl": 86, "matrix_chromaticity_derived_ncl": 86, "matrix_chromaticity_derived_cl": 86, "matrix_ictcp": 86, "transfer_bt709": 86, "transfer_unspecifi": 86, "transfer_bt470_m": 86, "transfer_bt470_bg": 86, "transfer_bt601": 86, "transfer_st240_m": 86, "transfer_linear": 86, "transfer_log_100": 86, "transfer_log_316": 86, "transfer_iec_61966_2_4": 86, "transfer_iec_61966_2_1": 86, "transfer_bt2020_10": 86, "transfer_bt2020_12": 86, "transfer_st2084": 86, "transfer_arib_b67": 86, "primaries_bt709": 86, "primaries_unspecifi": 86, "primaries_bt470_m": 86, "primaries_bt470_bg": 86, "primaries_st170_m": 86, "primaries_st240_m": 86, "primaries_film": 86, "primaries_bt2020": 86, "primaries_st428": 86, "primaries_st431_2": 86, "primaries_st432_1": 86, "primaries_ebu3213_": 86, "front_left_of_cent": 86, "front_right_of_cent": 86, "back_cent": 86, "side_left": 86, "side_right": 86, "top_cent": 86, "top_front_left": 86, "top_front_cent": 86, "top_front_right": 86, "top_back_left": 86, "top_back_cent": 86, "top_back_right": 86, "stereo_left": 86, "stereo_right": 86, "wide_left": 86, "wide_right": 86, "surround_direct_left": 86, "surround_direct_right": 86, "low_frequency2": 86, "vshelper4": [3, 82], "vsscript4": [3, 82]}, "objects": {"": [[0, 0, 1, "c.api", "api"], [0, 0, 1, "c.bitsPerSample", "bitsPerSample"], [0, 0, 1, "c.bitsPerSample", "bitsPerSample"], [0, 0, 1, "c.bytesPerSample", "bytesPerSample"], [0, 0, 1, "c.bytesPerSample", "bytesPerSample"], [0, 0, 1, "c.channelLayout", "channelLayout"], [0, 0, 1, "c.colorFamily", "colorFamily"], [0, 0, 1, "c.core", "core"], [2, 1, 1, "c.createScript", "createScript"], [2, 1, 1, "c.evalSetWorkingDir", "evalSetWorkingDir"], [2, 1, 1, "c.evaluateBuffer", "evaluateBuffer"], [2, 1, 1, "c.evaluateFile", "evaluateFile"], [0, 0, 1, "c.format", "format"], [0, 0, 1, "c.format", "format"], [0, 0, 1, "c.fpsDen", "fpsDen"], [0, 0, 1, "c.fpsNum", "fpsNum"], [2, 1, 1, "c.freeScript", "freeScript"], [2, 1, 1, "c.getAltOutputMode", "getAltOutputMode"], [2, 1, 1, "c.getApiVersion", "getApiVersion"], [2, 1, 1, "c.getCore", "getCore"], [2, 1, 1, "c.getError", "getError"], [2, 1, 1, "c.getExitCode", "getExitCode"], [2, 1, 1, "c.getOutputAlphaNode", "getOutputAlphaNode"], [2, 1, 1, "c.getOutputNode", "getOutputNode"], [2, 1, 1, "c.getVSAPI", "getVSAPI"], [2, 1, 1, "c.getVSScriptAPI", "getVSScriptAPI"], [2, 1, 1, "c.getVariable", "getVariable"], [0, 0, 1, "c.height", "height"], [0, 0, 1, "c.maxFramebufferSize", "maxFramebufferSize"], [0, 0, 1, "c.numChannels", "numChannels"], [0, 0, 1, "c.numFrames", "numFrames"], [0, 0, 1, "c.numFrames", "numFrames"], [0, 0, 1, "c.numPlanes", "numPlanes"], [0, 0, 1, "c.numSamples", "numSamples"], [0, 0, 1, "c.numThreads", "numThreads"], [0, 0, 1, "c.requestPattern", "requestPattern"], [0, 0, 1, "c.sampleRate", "sampleRate"], [0, 0, 1, "c.sampleType", "sampleType"], [0, 0, 1, "c.sampleType", "sampleType"], [0, 0, 1, "c.source", "source"], [0, 0, 1, "c.subSamplingH", "subSamplingH"], [0, 0, 1, "c.subSamplingW", "subSamplingW"], [0, 0, 1, "c.usedFramebufferSize", "usedFramebufferSize"], [0, 0, 1, "c.versionString", "versionString"], [2, 1, 1, "c.vsscript_setVariable", "vsscript_setVariable"], [0, 0, 1, "c.width", "width"], [1, 3, 1, "_CPPv4N3vsh11addRationalEP7int64_tP7int64_t7int64_t7int64_t", "vsh::addRational"], [1, 4, 1, "_CPPv4N3vsh11addRationalEP7int64_tP7int64_t7int64_t7int64_t", "vsh::addRational::addden"], [1, 4, 1, "_CPPv4N3vsh11addRationalEP7int64_tP7int64_t7int64_t7int64_t", "vsh::addRational::addnum"], [1, 4, 1, "_CPPv4N3vsh11addRationalEP7int64_tP7int64_t7int64_t7int64_t", "vsh::addRational::den"], [1, 4, 1, "_CPPv4N3vsh11addRationalEP7int64_tP7int64_t7int64_t7int64_t", "vsh::addRational::num"], [1, 3, 1, "_CPPv4N3vsh18areValidDimensionsEPK8VSFormatii", "vsh::areValidDimensions"], [1, 4, 1, "_CPPv4N3vsh18areValidDimensionsEPK8VSFormatii", "vsh::areValidDimensions::fi"], [1, 4, 1, "_CPPv4N3vsh18areValidDimensionsEPK8VSFormatii", "vsh::areValidDimensions::height"], [1, 4, 1, "_CPPv4N3vsh18areValidDimensionsEPK8VSFormatii", "vsh::areValidDimensions::width"], [1, 3, 1, "_CPPv4N3vsh6bitbltEPviPKvi6size_t6size_t", "vsh::bitblt"], [1, 4, 1, "_CPPv4N3vsh6bitbltEPviPKvi6size_t6size_t", "vsh::bitblt::dst_stride"], [1, 4, 1, "_CPPv4N3vsh6bitbltEPviPKvi6size_t6size_t", "vsh::bitblt::dstp"], [1, 4, 1, "_CPPv4N3vsh6bitbltEPviPKvi6size_t6size_t", "vsh::bitblt::height"], [1, 4, 1, "_CPPv4N3vsh6bitbltEPviPKvi6size_t6size_t", "vsh::bitblt::row_size"], [1, 4, 1, "_CPPv4N3vsh6bitbltEPviPKvi6size_t6size_t", "vsh::bitblt::src_stride"], [1, 4, 1, "_CPPv4N3vsh6bitbltEPviPKvi6size_t6size_t", "vsh::bitblt::srcp"], [1, 3, 1, "_CPPv4N3vsh14doubleToFloatSEd", "vsh::doubleToFloatS"], [1, 4, 1, "_CPPv4N3vsh14doubleToFloatSEd", "vsh::doubleToFloatS::d"], [1, 3, 1, "_CPPv4N3vsh11int64ToIntSE7int64_t", "vsh::int64ToIntS"], [1, 4, 1, "_CPPv4N3vsh11int64ToIntSE7int64_t", "vsh::int64ToIntS::i"], [1, 3, 1, "_CPPv4N3vsh16isConstantFormatEPK11VSVideoInfo", "vsh::isConstantFormat"], [1, 4, 1, "_CPPv4N3vsh16isConstantFormatEPK11VSVideoInfo", "vsh::isConstantFormat::vi"], [1, 3, 1, "_CPPv4N3vsh17isSameAudioFormatEPK11VSAudioInfoPK11VSAudioInfo", "vsh::isSameAudioFormat"], [1, 4, 1, "_CPPv4N3vsh17isSameAudioFormatEPK11VSAudioInfoPK11VSAudioInfo", "vsh::isSameAudioFormat::v1"], [1, 4, 1, "_CPPv4N3vsh17isSameAudioFormatEPK11VSAudioInfoPK11VSAudioInfo", "vsh::isSameAudioFormat::v2"], [1, 3, 1, "_CPPv4N3vsh15isSameAudioInfoEPK11VSAudioInfoPK11VSAudioInfo", "vsh::isSameAudioInfo"], [1, 4, 1, "_CPPv4N3vsh15isSameAudioInfoEPK11VSAudioInfoPK11VSAudioInfo", "vsh::isSameAudioInfo::v1"], [1, 4, 1, "_CPPv4N3vsh15isSameAudioInfoEPK11VSAudioInfoPK11VSAudioInfo", "vsh::isSameAudioInfo::v2"], [1, 3, 1, "_CPPv4N3vsh17isSameVideoFormatEPK11VSVideoInfoPK11VSVideoInfo", "vsh::isSameVideoFormat"], [1, 4, 1, "_CPPv4N3vsh17isSameVideoFormatEPK11VSVideoInfoPK11VSVideoInfo", "vsh::isSameVideoFormat::v1"], [1, 4, 1, "_CPPv4N3vsh17isSameVideoFormatEPK11VSVideoInfoPK11VSVideoInfo", "vsh::isSameVideoFormat::v2"], [1, 3, 1, "_CPPv4N3vsh15isSameVideoInfoEPK11VSVideoInfoPK11VSVideoInfo", "vsh::isSameVideoInfo"], [1, 4, 1, "_CPPv4N3vsh15isSameVideoInfoEPK11VSVideoInfoPK11VSVideoInfo", "vsh::isSameVideoInfo::v1"], [1, 4, 1, "_CPPv4N3vsh15isSameVideoInfoEPK11VSVideoInfoPK11VSVideoInfo", "vsh::isSameVideoInfo::v2"], [1, 3, 1, "_CPPv4N3vsh23isSameVideoPresetFormatEjPK13VSVideoFormatP6VSCorePK5VSAPI", "vsh::isSameVideoPresetFormat"], [1, 4, 1, "_CPPv4N3vsh23isSameVideoPresetFormatEjPK13VSVideoFormatP6VSCorePK5VSAPI", "vsh::isSameVideoPresetFormat::core"], [1, 4, 1, "_CPPv4N3vsh23isSameVideoPresetFormatEjPK13VSVideoFormatP6VSCorePK5VSAPI", "vsh::isSameVideoPresetFormat::presetFormat"], [1, 4, 1, "_CPPv4N3vsh23isSameVideoPresetFormatEjPK13VSVideoFormatP6VSCorePK5VSAPI", "vsh::isSameVideoPresetFormat::v"], [1, 4, 1, "_CPPv4N3vsh23isSameVideoPresetFormatEjPK13VSVideoFormatP6VSCorePK5VSAPI", "vsh::isSameVideoPresetFormat::vsapi"], [1, 3, 1, "_CPPv4N3vsh14muldivRationalEP7int64_tP7int64_t7int64_t7int64_t", "vsh::muldivRational"], [1, 4, 1, "_CPPv4N3vsh14muldivRationalEP7int64_tP7int64_t7int64_t7int64_t", "vsh::muldivRational::den"], [1, 4, 1, "_CPPv4N3vsh14muldivRationalEP7int64_tP7int64_t7int64_t7int64_t", "vsh::muldivRational::div"], [1, 4, 1, "_CPPv4N3vsh14muldivRationalEP7int64_tP7int64_t7int64_t7int64_t", "vsh::muldivRational::mul"], [1, 4, 1, "_CPPv4N3vsh14muldivRationalEP7int64_tP7int64_t7int64_t7int64_t", "vsh::muldivRational::num"], [1, 3, 1, "_CPPv4N3vsh14reduceRationalEP7int64_tP7int64_t", "vsh::reduceRational"], [1, 4, 1, "_CPPv4N3vsh14reduceRationalEP7int64_tP7int64_t", "vsh::reduceRational::den"], [1, 4, 1, "_CPPv4N3vsh14reduceRationalEP7int64_tP7int64_t", "vsh::reduceRational::num"], [1, 3, 1, "_CPPv4N3vsh16vsh_aligned_freeEPv", "vsh::vsh_aligned_free"], [1, 4, 1, "_CPPv4N3vsh16vsh_aligned_freeEPv", "vsh::vsh_aligned_free::ptr"], [1, 3, 1, "_CPPv4N3vsh18vsh_aligned_mallocE6size_t6size_t", "vsh::vsh_aligned_malloc"], [1, 4, 1, "_CPPv4N3vsh18vsh_aligned_mallocE6size_t6size_t", "vsh::vsh_aligned_malloc::alignment"], [1, 4, 1, "_CPPv4N3vsh18vsh_aligned_mallocE6size_t6size_t", "vsh::vsh_aligned_malloc::size"], [86, 5, 1, "", "AudioFrame"], [86, 5, 1, "", "AudioNode"], [86, 5, 1, "", "Core"], [86, 5, 1, "", "Environment"], [86, 5, 1, "", "EnvironmentData"], [86, 5, 1, "", "EnvironmentPolicy"], [86, 5, 1, "", "EnvironmentPolicyAPI"], [86, 9, 1, "", "Error"], [86, 5, 1, "", "Func"], [86, 5, 1, "", "Function"], [86, 5, 1, "", "Local"], [86, 5, 1, "", "Plugin"], [86, 5, 1, "", "VideoFormat"], [86, 5, 1, "", "VideoFrame"], [86, 5, 1, "", "VideoNode"], [86, 5, 1, "", "VideoOutputTuple"], [86, 8, 1, "try_enable_introspection", "_try_enable_introspection"], [86, 8, 1, "", "clear_output"], [86, 8, 1, "", "clear_outputs"], [86, 8, 1, "", "construct_signature"], [86, 6, 1, "", "core"], [86, 8, 1, "", "get_current_environment"], [86, 8, 1, "", "get_output"], [86, 8, 1, "", "get_outputs"], [86, 8, 1, "", "has_policy"], [86, 8, 1, "", "register_on_destroy"], [86, 8, 1, "", "register_policy"], [86, 8, 1, "", "unregister_on_destroy"]], "createScript": [[2, 2, 1, "c.createScript", "core"]], "evalSetWorkingDir": [[2, 2, 1, "c.evalSetWorkingDir", "handle"], [2, 2, 1, "c.evalSetWorkingDir", "setCWD"]], "evaluateBuffer": [[2, 2, 1, "c.evaluateBuffer", "buffer"], [2, 2, 1, "c.evaluateBuffer", "handle"], [2, 2, 1, "c.evaluateBuffer", "scriptFilename"]], "evaluateFile": [[2, 2, 1, "c.evaluateFile", "handle"], [2, 2, 1, "c.evaluateFile", "scriptFilename"]], "freeScript": [[2, 2, 1, "c.freeScript", "handle"]], "getAltOutputMode": [[2, 2, 1, "c.getAltOutputMode", "handle"], [2, 2, 1, "c.getAltOutputMode", "index"]], "getCore": [[2, 2, 1, "c.getCore", "handle"]], "getError": [[2, 2, 1, "c.getError", "handle"]], "getExitCode": [[2, 2, 1, "c.getExitCode", "handle"]], "getOutputAlphaNode": [[2, 2, 1, "c.getOutputAlphaNode", "handle"], [2, 2, 1, "c.getOutputAlphaNode", "index"]], "getOutputNode": [[2, 2, 1, "c.getOutputNode", "handle"], [2, 2, 1, "c.getOutputNode", "index"]], "getVSAPI": [[2, 2, 1, "c.getVSAPI", "version"]], "getVSScriptAPI": [[2, 2, 1, "c.getVSScriptAPI", "version"]], "getVariable": [[2, 2, 1, "c.getVariable", "dst"], [2, 2, 1, "c.getVariable", "handle"], [2, 2, 1, "c.getVariable", "name"]], "vsscript_setVariable": [[2, 2, 1, "c.vsscript_setVariable", "handle"], [2, 2, 1, "c.vsscript_setVariable", "vars"]], "AudioFrame": [[86, 6, 1, "", "bits_per_sample"], [86, 6, 1, "", "bytes_per_sample"], [86, 6, 1, "", "channel_layout"], [86, 7, 1, "", "copy"], [86, 7, 1, "", "get_read_ptr"], [86, 7, 1, "", "get_stride"], [86, 7, 1, "", "get_write_ptr"], [86, 6, 1, "", "num_channels"], [86, 6, 1, "", "props"], [86, 6, 1, "", "readonly"], [86, 6, 1, "", "sample_type"]], "AudioNode": [[86, 6, 1, "", "bits_per_sample"], [86, 6, 1, "", "bytes_per_sample"], [86, 6, 1, "", "channel_layout"], [86, 7, 1, "", "frames"], [86, 7, 1, "", "get_frame"], [86, 7, 1, "", "get_frame_async"], [86, 7, 1, "", "is_inspectable"], [86, 6, 1, "", "num_channels"], [86, 6, 1, "", "sample_rate"], [86, 6, 1, "", "sample_type"], [86, 7, 1, "", "set_output"]], "Core": [[86, 7, 1, "", "add_log_handler"], [86, 7, 1, "", "create_video_frame"], [86, 7, 1, "", "get_video_format"], [86, 7, 1, "", "log_message"], [86, 6, 1, "", "max_cache_size"], [86, 6, 1, "", "num_threads"], [86, 7, 1, "", "plugins"], [86, 7, 1, "", "query_video_format"], [86, 7, 1, "", "remove_log_handler"], [86, 7, 1, "", "rule6"], [86, 7, 1, "", "version"], [86, 7, 1, "", "version_number"]], "Environment": [[86, 6, 1, "", "alive"], [86, 7, 1, "", "copy"], [86, 6, 1, "", "env_id"], [86, 8, 1, "", "is_single"], [86, 6, 1, "", "single"], [86, 7, 1, "", "use"]], "EnvironmentPolicy": [[86, 7, 1, "", "get_current_environment"], [86, 7, 1, "", "is_alive"], [86, 7, 1, "", "on_policy_cleared"], [86, 7, 1, "", "on_policy_registered"], [86, 7, 1, "", "set_environment"]], "EnvironmentPolicyAPI": [[86, 7, 1, "", "create_environment"], [86, 7, 1, "", "destroy_environment"], [86, 7, 1, "", "get_core_ptr"], [86, 7, 1, "", "get_vapoursynth_api"], [86, 7, 1, "", "set_logger"], [86, 7, 1, "", "unregister_policy"], [86, 7, 1, "", "wrap_environment"]], "Function": [[86, 6, 1, "", "name"], [86, 6, 1, "", "plugin"], [86, 6, 1, "", "return_signature"], [86, 6, 1, "", "signature"]], "Plugin": [[86, 7, 1, "", "functions"], [86, 6, 1, "", "identifier"], [86, 6, 1, "", "name"], [86, 6, 1, "", "namespace"]], "VideoFormat": [[86, 6, 1, "", "bits_per_sample"], [86, 6, 1, "", "bytes_per_sample"], [86, 6, 1, "", "color_family"], [86, 6, 1, "", "id"], [86, 6, 1, "", "name"], [86, 6, 1, "", "num_planes"], [86, 7, 1, "", "replace"], [86, 6, 1, "", "sample_type"], [86, 6, 1, "", "subsampling_h"], [86, 6, 1, "", "subsampling_w"]], "VideoFrame": [[86, 7, 1, "", "close"], [86, 6, 1, "", "closed"], [86, 7, 1, "", "copy"], [86, 6, 1, "", "format"], [86, 7, 1, "", "get_read_ptr"], [86, 7, 1, "", "get_stride"], [86, 7, 1, "", "get_write_ptr"], [86, 6, 1, "", "height"], [86, 6, 1, "", "props"], [86, 7, 1, "", "readchunks"], [86, 6, 1, "", "readonly"], [86, 6, 1, "", "width"]], "VideoNode": [[86, 6, 1, "", "denominator"], [86, 6, 1, "", "flags"], [86, 6, 1, "", "format"], [86, 6, 1, "", "fps"], [86, 6, 1, "", "fps_den"], [86, 6, 1, "", "fps_num"], [86, 7, 1, "", "frames"], [86, 7, 1, "", "get_frame"], [86, 7, 1, "", "get_frame_async"], [86, 6, 1, "", "height"], [86, 7, 1, "", "is_inspectable"], [86, 6, 1, "", "num_frames"], [86, 6, 1, "", "numerator"], [86, 7, 1, "", "output"], [86, 7, 1, "", "set_output"], [86, 6, 1, "", "width"]], "VideoOutputTuple": [[86, 6, 1, "", "alpha"], [86, 6, 1, "", "alt_output"], [86, 6, 1, "", "clip"]], "avs": [[19, 8, 1, "", "LoadPlugin"]], "resize": [[61, 8, 1, "", "Bicubic"], [61, 8, 1, "", "Bilinear"], [61, 8, 1, "", "Bob"], [61, 8, 1, "", "Lanczos"], [61, 8, 1, "", "Point"], [61, 8, 1, "", "Spline16"], [61, 8, 1, "", "Spline36"], [61, 8, 1, "", "Spline64"]], "std": [[21, 8, 1, "", "AddBorders"], [22, 8, 1, "", "AssumeFPS"], [6, 8, 1, "", "AssumeSampleRate"], [7, 8, 1, "", "AudioGain"], [8, 8, 1, "", "AudioLoop"], [9, 8, 1, "", "AudioMix"], [10, 8, 1, "", "AudioReverse"], [11, 8, 1, "", "AudioSplice"], [12, 8, 1, "", "AudioTrim"], [23, 8, 1, "", "AverageFrames"], [24, 8, 1, "", "Binarize"], [24, 8, 1, "", "BinarizeMask"], [13, 8, 1, "", "BlankAudio"], [25, 8, 1, "", "BlankClip"], [26, 8, 1, "", "BoxBlur"], [27, 8, 1, "", "ClipToProp"], [28, 8, 1, "", "Convolution"], [29, 8, 1, "", "CopyFrameProps"], [30, 8, 1, "", "Crop"], [30, 8, 1, "", "CropAbs"], [31, 8, 1, "", "Deflate"], [32, 8, 1, "", "DeleteFrames"], [33, 8, 1, "", "DoubleWeave"], [34, 8, 1, "", "DuplicateFrames"], [35, 8, 1, "", "Expr"], [36, 8, 1, "", "FlipHorizontal"], [36, 8, 1, "", "FlipVertical"], [37, 8, 1, "", "FrameEval"], [38, 8, 1, "", "FreezeFrames"], [31, 8, 1, "", "Inflate"], [39, 8, 1, "", "Interleave"], [40, 8, 1, "", "Invert"], [40, 8, 1, "", "InvertMask"], [41, 8, 1, "", "Levels"], [42, 8, 1, "", "Limiter"], [17, 8, 1, "", "LoadAllPlugins"], [18, 8, 1, "", "LoadPlugin"], [43, 8, 1, "", "Loop"], [44, 8, 1, "", "Lut"], [45, 8, 1, "", "Lut2"], [46, 8, 1, "", "MakeDiff"], [47, 8, 1, "", "MakeFullDiff"], [48, 8, 1, "", "MaskedMerge"], [53, 8, 1, "", "Maximum"], [49, 8, 1, "", "Median"], [50, 8, 1, "", "Merge"], [51, 8, 1, "", "MergeDiff"], [52, 8, 1, "", "MergeFullDiff"], [53, 8, 1, "", "Minimum"], [54, 8, 1, "", "ModifyFrame"], [55, 8, 1, "", "PEMVerifier"], [56, 8, 1, "", "PlaneStats"], [57, 8, 1, "", "PreMultiply"], [58, 8, 1, "", "Prewitt"], [59, 8, 1, "", "PropToClip"], [60, 8, 1, "", "RemoveFrameProps"], [62, 8, 1, "", "Reverse"], [63, 8, 1, "", "SelectEvery"], [64, 8, 1, "", "SeparateFields"], [14, 8, 1, "", "SetAudioCache"], [65, 8, 1, "", "SetFieldBased"], [66, 8, 1, "", "SetFrameProp"], [67, 8, 1, "", "SetFrameProps"], [20, 8, 1, "", "SetMaxCPU"], [68, 8, 1, "", "SetVideoCache"], [15, 8, 1, "", "ShuffleChannels"], [69, 8, 1, "", "ShufflePlanes"], [58, 8, 1, "", "Sobel"], [70, 8, 1, "", "Splice"], [16, 8, 1, "", "SplitChannels"], [71, 8, 1, "", "SplitPlanes"], [72, 8, 1, "", "StackHorizontal"], [72, 8, 1, "", "StackVertical"], [78, 8, 1, "", "Transpose"], [79, 8, 1, "", "Trim"], [80, 8, 1, "", "Turn180"]], "text": [[73, 8, 1, "", "ClipInfo"], [74, 8, 1, "", "CoreInfo"], [75, 8, 1, "", "FrameNum"], [76, 8, 1, "", "FrameProps"], [77, 8, 1, "", "Text"]]}, "objtypes": {"0": "c:member", "1": "c:function", "2": "c:functionParam", "3": "cpp:function", "4": "cpp:functionParam", "5": "py:class", "6": "py:attribute", "7": "py:method", "8": "py:function", "9": "py:exception"}, "objnames": {"0": ["c", "member", "C member"], "1": ["c", "function", "C function"], "2": ["c", "functionParam", "C function parameter"], "3": ["cpp", "function", "C++ function"], "4": ["cpp", "functionParam", "C++ function parameter"], "5": ["py", "class", "Python class"], "6": ["py", "attribute", "Python attribute"], "7": ["py", "method", "Python method"], "8": ["py", "function", "Python function"], "9": ["py", "exception", "Python exception"]}, "titleterms": {"vapoursynth": [3, 82, 86], "h": [0, 1, 2], "tabl": [0, 1, 2, 82], "content": [0, 1, 2], "introduct": [0, 1, 2, 84], "macro": [0, 1], "vs_cc": 0, "vs_external_api": 0, "vapoursynth_api_major": 0, "vapoursynth_api_minor": 0, "vapoursynth_api_vers": 0, "vs_audio_frame_sampl": 0, "vs_make_vers": 0, "enum": 0, "vscolorfamili": 0, "vssampletyp": 0, "vspresetvideoformat": 0, "vsfiltermod": 0, "vsmediatyp": 0, "vsaudiochannel": 0, "vspropertytyp": 0, "vsmappropertyerror": 0, "vsmapappendmod": 0, "vsactivationreason": 0, "vsmessagetyp": 0, "vscorecreationflag": 0, "vspluginconfigflag": 0, "vsdatatypehint": 0, "vsrequestpattern": 0, "vscachemod": 0, "struct": [0, 2], "vsframe": 0, "vsnode": 0, "vscore": 0, "vsplugin": 0, "vspluginfunct": 0, "vsfunction": 0, "vsmap": 0, "vsloghandl": 0, "vsframecontext": 0, "vsvideoformat": 0, "vsvideoinfo": 0, "vsaudioformat": 0, "vsaudioinfo": 0, "vscoreinfo": 0, "vsfilterdepend": 0, "vspluginapi": 0, "vsapi": 0, "function": [0, 1, 2, 5, 86], "write": 0, "plugin": [0, 3, 83], "vshelper4": 1, "vsh_std_plugin_id": 1, "vsh_resize_plugin_id": 1, "vsh_text_plugin_id": 1, "vs_restrict": 1, "vsh_aligned_malloc": 1, "vsh_aligned_fre": 1, "vsmin": 1, "vsmax": 1, "isconstantformat": 1, "issamevideoformat": 1, "issamevideopresetformat": 1, "issamevideoinfo": 1, "issameaudioformat": 1, "issameaudioinfo": 1, "muldivr": 1, "reducer": 1, "addrat": 1, "int64toint": 1, "doubletofloat": 1, "bitblt": 1, "arevaliddimens": 1, "vsscript4": 2, "vsscript": 2, "vsscriptapi": 2, "getvsscriptapi": 2, "getapivers": 2, "getvsapi": 2, "createscript": 2, "getcor": 2, "evaluatebuff": 2, "evaluatefil": 2, "geterror": 2, "getexitcod": 2, "getvari": 2, "setvari": 2, "getoutputnod": 2, "getoutputalphanod": 2, "getaltoutputmod": 2, "freescript": 2, "evalsetworkingdir": 2, "c": [3, 83], "api": 3, "refer": [3, 5, 86], "public": 3, "header": 3, "common": 3, "pitfal": 3, "gener": [3, 5], "reserv": 3, "frame": [3, 86], "properti": 3, "applic": 4, "librari": 4, "tool": 4, "video": [5, 86], "text": [5, 77], "audio": [5, 86], "assumesampler": 6, "audiogain": 7, "audioloop": 8, "audiomix": 9, "audiorevers": 10, "audiosplic": 11, "audiotrim": 12, "blankaudio": 13, "setaudiocach": 14, "shufflechannel": 15, "splitchannel": 16, "loadallplugin": 17, "loadplugin": [18, 19], "avisynth": [19, 85], "compat": 19, "setmaxcpu": 20, "addbord": 21, "assumefp": 22, "averagefram": 23, "binar": 24, "binarizemask": 24, "blankclip": 25, "boxblur": 26, "cliptoprop": 27, "convolut": 28, "copyframeprop": 29, "crop": 30, "cropab": 30, "deflat": 31, "inflat": 31, "deletefram": 32, "doubleweav": 33, "duplicatefram": 34, "expr": 35, "flipvert": 36, "fliphorizont": 36, "frameev": 37, "freezefram": 38, "interleav": 39, "invert": 40, "invertmask": 40, "level": 41, "limit": 42, "loop": 43, "lut": 44, "lut2": 45, "makediff": 46, "makefulldiff": 47, "maskedmerg": 48, "median": 49, "merg": 50, "mergediff": 51, "mergefulldiff": 52, "minimum": 53, "maximum": 53, "modifyfram": 54, "pemverifi": 55, "planestat": 56, "premultipli": 57, "prewitt": 58, "sobel": 58, "proptoclip": 59, "removeframeprop": 60, "resiz": 61, "revers": 62, "selecteveri": 63, "separatefield": 64, "setfieldbas": 65, "setframeprop": [66, 67], "setvideocach": 68, "shuffleplan": 69, "splice": 70, "splitplan": 71, "stackvert": 72, "stackhorizont": 72, "clipinfo": 73, "coreinfo": 74, "framenum": 75, "frameprop": 76, "transpos": 78, "trim": 79, "turn180": 80, "get": 81, "start": 81, "exampl": [81, 85], "script": [81, 83], "preview": 81, "output": [81, 85, 86], "vspipe": [81, 85], "welcom": 82, "": 82, "document": 82, "indic": 82, "instal": 83, "basic": 83, "program": 83, "window": [83, 86], "prerequisit": 83, "portabl": 83, "o": 83, "x": 83, "linux": 83, "debian": 83, "fedora": 83, "cento": 83, "rhel": 83, "gentoo": 83, "arch": 83, "nix": 83, "nixo": 83, "compil": 83, "prepar": 83, "build": 83, "environ": 83, "project": 83, "python": [83, 86], "distribut": 83, "requir": 83, "packag": 83, "vsrepo": 83, "manual": 83, "autoload": 83, "about": 84, "author": 84, "synopsi": 85, "option": 85, "avf": 85, "support": 85, "vfw": 85, "structur": 86, "grammar": 86, "slice": 86, "other": 86, "syntact": 86, "sugar": 86, "keyword": 86, "filter": 86, "argument": 86, "file": 86, "path": 86, "raw": 86, "access": 86, "data": 86, "class": 86, "constant": 86, "color": 86, "famili": 86, "format": 86, "chroma": 86, "locat": 86, "field": 86, "base": 86, "rang": 86, "matrix": 86, "coeffici": 86, "transfercharacterist": 86, "primari": 86, "channel": 86, "sampl": 86, "type": 86, "vapoursynth4": 0}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 57}, "alltitles": {"VapourSynth4.h": [[0, "vapoursynth4-h"]], "Table of contents": [[0, "table-of-contents"], [1, "table-of-contents"], [2, "table-of-contents"]], "Introduction": [[0, "introduction"], [1, "introduction"], [2, "introduction"], [84, "introduction"]], "Macros": [[0, "macros"], [1, "macros"]], "VS_CC": [[0, "vs-cc"]], "VS_EXTERNAL_API": [[0, "vs-external-api"]], "VAPOURSYNTH_API_MAJOR": [[0, "vapoursynth-api-major"]], "VAPOURSYNTH_API_MINOR": [[0, "vapoursynth-api-minor"]], "VAPOURSYNTH_API_VERSION": [[0, "vapoursynth-api-version"]], "VS_AUDIO_FRAME_SAMPLES": [[0, "vs-audio-frame-samples"]], "VS_MAKE_VERSION": [[0, "vs-make-version"]], "Enums": [[0, "enums"]], "enum VSColorFamily": [[0, "enum-vscolorfamily"]], "enum VSSampleType": [[0, "enum-vssampletype"]], "enum VSPresetVideoFormat": [[0, "enum-vspresetvideoformat"]], "enum VSFilterMode": [[0, "enum-vsfiltermode"]], "enum VSMediaType": [[0, "enum-vsmediatype"]], "enum VSAudioChannels": [[0, "enum-vsaudiochannels"]], "enum VSPropertyType": [[0, "enum-vspropertytype"]], "enum VSMapPropertyError": [[0, "enum-vsmappropertyerror"]], "enum VSMapAppendMode": [[0, "enum-vsmapappendmode"]], "enum VSActivationReason": [[0, "enum-vsactivationreason"]], "enum VSMessageType": [[0, "enum-vsmessagetype"]], "enum VSCoreCreationFlags": [[0, "enum-vscorecreationflags"]], "enum VSPluginConfigFlags": [[0, "enum-vspluginconfigflags"]], "enum VSDataTypeHint": [[0, "enum-vsdatatypehint"]], "enum VSRequestPattern": [[0, "enum-vsrequestpattern"]], "enum VSCacheMode": [[0, "enum-vscachemode"]], "Structs": [[0, "structs"], [2, "structs"]], "struct VSFrame": [[0, "struct-vsframe"]], "struct VSNode": [[0, "struct-vsnode"]], "struct VSCore": [[0, "struct-vscore"]], "struct VSPlugin": [[0, "struct-vsplugin"]], "struct VSPluginFunction": [[0, "struct-vspluginfunction"]], "struct VSFunction": [[0, "struct-vsfunction"]], "struct VSMap": [[0, "struct-vsmap"]], "struct VSLogHandle": [[0, "struct-vsloghandle"]], "struct VSFrameContext": [[0, "struct-vsframecontext"]], "struct VSVideoFormat": [[0, "struct-vsvideoformat"]], "struct VSVideoInfo": [[0, "struct-vsvideoinfo"]], "struct VSAudioFormat": [[0, "struct-vsaudioformat"]], "struct VSAudioInfo": [[0, "struct-vsaudioinfo"]], "struct VSCoreInfo": [[0, "struct-vscoreinfo"]], "struct VSFilterDependency": [[0, "struct-vsfilterdependency"]], "struct VSPLUGINAPI": [[0, "struct-vspluginapi"]], "struct VSAPI": [[0, "struct-vsapi"]], "Functions": [[0, "functions"], [1, "functions"], [2, "functions"]], "Writing plugins": [[0, "writing-plugins"]], "VSHelper4.h": [[1, "vshelper4-h"]], "VSH_STD_PLUGIN_ID": [[1, "vsh-std-plugin-id"]], "VSH_RESIZE_PLUGIN_ID": [[1, "vsh-resize-plugin-id"]], "VSH_TEXT_PLUGIN_ID": [[1, "vsh-text-plugin-id"]], "VS_RESTRICT": [[1, "vs-restrict"]], "VSH_ALIGNED_MALLOC": [[1, "vsh-aligned-malloc"]], "VSH_ALIGNED_FREE": [[1, "vsh-aligned-free"]], "VSMIN": [[1, "vsmin"]], "VSMAX": [[1, "vsmax"]], "vsh_aligned_malloc": [[1, "vsh-aligned-malloc-cpp"]], "vsh_aligned_free": [[1, "vsh-aligned-free-cpp"]], "isConstantFormat": [[1, "isconstantformat"]], "isSameVideoFormat": [[1, "issamevideoformat"]], "isSameVideoPresetFormat": [[1, "issamevideopresetformat"]], "isSameVideoInfo": [[1, "issamevideoinfo"]], "isSameAudioFormat": [[1, "issameaudioformat"]], "isSameAudioInfo": [[1, "issameaudioinfo"]], "muldivRational": [[1, "muldivrational"]], "reduceRational": [[1, "reducerational"]], "addRational": [[1, "addrational"]], "int64ToIntS": [[1, "int64toints"]], "doubleToFloatS": [[1, "doubletofloats"]], "bitblt": [[1, "bitblt"]], "areValidDimensions": [[1, "arevaliddimensions"]], "VSScript4.h": [[2, "vsscript4-h"]], "VSScript": [[2, "vsscript"]], "VSScriptAPI": [[2, "vsscriptapi"]], "getVSScriptAPI": [[2, "getvsscriptapi"]], "getApiVersion": [[2, "getapiversion"]], "getVSAPI": [[2, "getvsapi"]], "createScript": [[2, "createscript"]], "getCore": [[2, "getcore"]], "evaluateBuffer": [[2, "evaluatebuffer"]], "evaluateFile": [[2, "evaluatefile"]], "getError": [[2, "geterror"]], "getExitCode": [[2, "getexitcode"]], "getVariable": [[2, "getvariable"]], "setVariables": [[2, "setvariables"]], "getOutputNode": [[2, "getoutputnode"]], "getOutputAlphaNode": [[2, "getoutputalphanode"]], "getAltOutputMode": [[2, "getaltoutputmode"]], "freeScript": [[2, "freescript"]], "evalSetWorkingDir": [[2, "evalsetworkingdir"]], "VapourSynth C API Reference": [[3, "vapoursynth-c-api-reference"]], "Public Headers": [[3, "public-headers"]], "Common Pitfalls": [[3, "common-pitfalls"]], "General API": [[3, "general-api"]], "Plugins": [[3, "plugins"]], "Reserved Frame Properties": [[3, "reserved-frame-properties"]], "Applications and Libraries": [[4, "applications-and-libraries"]], "Applications": [[4, "applications"]], "Libraries": [[4, "libraries"]], "Tools": [[4, "tools"]], "Function Reference": [[5, "function-reference"]], "General Functions": [[5, "general-functions"]], "Video Functions": [[5, "video-functions"]], "Text": [[5, "text"], [77, "text"]], "Audio Functions": [[5, "audio-functions"]], "AssumeSampleRate": [[6, "assumesamplerate"]], "AudioGain": [[7, "audiogain"]], "AudioLoop": [[8, "audioloop"]], "AudioMix": [[9, "audiomix"]], "AudioReverse": [[10, "audioreverse"]], "AudioSplice": [[11, "audiosplice"]], "AudioTrim": [[12, "audiotrim"]], "BlankAudio": [[13, "blankaudio"]], "SetAudioCache": [[14, "setaudiocache"]], "ShuffleChannels": [[15, "shufflechannels"]], "SplitChannels": [[16, "splitchannels"]], "LoadAllPlugins": [[17, "loadallplugins"]], "LoadPlugin": [[18, "loadplugin"]], "LoadPlugin (Avisynth Compatibility)": [[19, "loadplugin-avisynth-compatibility"]], "SetMaxCPU": [[20, "setmaxcpu"]], "AddBorders": [[21, "addborders"]], "AssumeFPS": [[22, "assumefps"]], "AverageFrames": [[23, "averageframes"]], "Binarize/BinarizeMask": [[24, "binarize-binarizemask"]], "BlankClip": [[25, "blankclip"]], "BoxBlur": [[26, "boxblur"]], "ClipToProp": [[27, "cliptoprop"]], "Convolution": [[28, "convolution"]], "CopyFrameProps": [[29, "copyframeprops"]], "Crop/CropAbs": [[30, "crop-cropabs"]], "Deflate/Inflate": [[31, "deflate-inflate"]], "DeleteFrames": [[32, "deleteframes"]], "DoubleWeave": [[33, "doubleweave"]], "DuplicateFrames": [[34, "duplicateframes"]], "Expr": [[35, "expr"]], "FlipVertical/FlipHorizontal": [[36, "flipvertical-fliphorizontal"]], "FrameEval": [[37, "frameeval"]], "FreezeFrames": [[38, "freezeframes"]], "Interleave": [[39, "interleave"]], "Invert/InvertMask": [[40, "invert-invertmask"]], "Levels": [[41, "levels"]], "Limiter": [[42, "limiter"]], "Loop": [[43, "loop"]], "Lut": [[44, "lut"]], "Lut2": [[45, "lut2"]], "MakeDiff": [[46, "makediff"]], "MakeFullDiff": [[47, "makefulldiff"]], "MaskedMerge": [[48, "maskedmerge"]], "Median": [[49, "median"]], "Merge": [[50, "merge"]], "MergeDiff": [[51, "mergediff"]], "MergeFullDiff": [[52, "mergefulldiff"]], "Minimum/Maximum": [[53, "minimum-maximum"]], "ModifyFrame": [[54, "modifyframe"]], "PEMVerifier": [[55, "pemverifier"]], "PlaneStats": [[56, "planestats"]], "PreMultiply": [[57, "premultiply"]], "Prewitt/Sobel": [[58, "prewitt-sobel"]], "PropToClip": [[59, "proptoclip"]], "RemoveFrameProps": [[60, "removeframeprops"]], "Resize": [[61, "resize"]], "Reverse": [[62, "reverse"]], "SelectEvery": [[63, "selectevery"]], "SeparateFields": [[64, "separatefields"]], "SetFieldBased": [[65, "setfieldbased"]], "SetFrameProp": [[66, "setframeprop"]], "SetFrameProps": [[67, "setframeprops"]], "SetVideoCache": [[68, "setvideocache"]], "ShufflePlanes": [[69, "shuffleplanes"]], "Splice": [[70, "splice"]], "SplitPlanes": [[71, "splitplanes"]], "StackVertical/StackHorizontal": [[72, "stackvertical-stackhorizontal"]], "ClipInfo": [[73, "clipinfo"]], "CoreInfo": [[74, "coreinfo"]], "FrameNum": [[75, "framenum"]], "FrameProps": [[76, "frameprops"]], "Transpose": [[78, "transpose"]], "Trim": [[79, "trim"]], "Turn180": [[80, "turn180"]], "Getting Started": [[81, "getting-started"]], "Example Script": [[81, "example-script"]], "Preview": [[81, "preview"]], "Output with VSPipe": [[81, "output-with-vspipe"]], "Welcome to VapourSynth\u2019s documentation!": [[82, "welcome-to-vapoursynths-documentation"]], "Indices and tables": [[82, "indices-and-tables"]], "Installation": [[83, "installation"], [83, "id1"]], "Basic Program": [[83, "basic-program"]], "Windows Installation": [[83, "windows-installation"]], "Prerequisites": [[83, "prerequisites"]], "Windows Installation (Portable)": [[83, "windows-installation-portable"]], "OS X Installation": [[83, "os-x-installation"]], "Linux installation": [[83, "linux-installation"]], "Debian": [[83, "debian"]], "Fedora, CentOS and RHEL": [[83, "fedora-centos-and-rhel"]], "Gentoo": [[83, "gentoo"]], "Arch Linux": [[83, "arch-linux"]], "Nix and NixOS": [[83, "nix-and-nixos"]], "Windows Compilation": [[83, "windows-compilation"]], "Preparing the Build Environment on Windows": [[83, "preparing-the-build-environment-on-windows"]], "Preparing the C++ Project": [[83, "preparing-the-c-project"]], "Preparing the Python Project": [[83, "preparing-the-python-project"]], "Distribution": [[83, "distribution"]], "Linux and OS X Compilation": [[83, "linux-and-os-x-compilation"]], "Required packages (OS X)": [[83, "required-packages-os-x"]], "Compilation": [[83, "compilation"]], "Plugins and Scripts": [[83, "plugins-and-scripts"]], "Installing with VSRepo": [[83, "installing-with-vsrepo"]], "Installing Manually": [[83, "installing-manually"]], "Plugin Autoloading": [[83, "plugin-autoloading"]], "Windows": [[83, "windows"]], "Windows Portable": [[83, "windows-portable"]], "Linux": [[83, "linux"]], "OS X": [[83, "os-x"]], "About the author": [[84, "about-the-author"]], "Output": [[85, "output"], [86, "output"]], "VSPipe": [[85, "vspipe"]], "Synopsis": [[85, "synopsis"]], "Options": [[85, "options"]], "Examples": [[85, "examples"]], "AVFS": [[85, "avfs"]], "Avisynth Support": [[85, "avisynth-support"]], "VFW": [[85, "vfw"]], "Python Reference": [[86, "python-reference"]], "VapourSynth Structure": [[86, "vapoursynth-structure"]], "Grammar": [[86, "grammar"]], "Slicing and Other Syntactic Sugar": [[86, "slicing-and-other-syntactic-sugar"]], "Python Keywords as Filter Arguments": [[86, "python-keywords-as-filter-arguments"]], "Windows File Paths": [[86, "windows-file-paths"]], "Raw Access to Frame Data": [[86, "raw-access-to-frame-data"]], "Classes and Functions": [[86, "classes-and-functions"]], "Constants": [[86, "constants"]], "Video": [[86, "video"]], "Color Family": [[86, "color-family"]], "Format": [[86, "format"]], "Chroma Location": [[86, "chroma-location"]], "Field Based": [[86, "field-based"]], "Color Range": [[86, "color-range"]], "Matrix Coefficients": [[86, "matrix-coefficients"]], "TransferCharacteristics": [[86, "transfercharacteristics"]], "Color Primaries": [[86, "color-primaries"]], "Audio": [[86, "audio"]], "Channels": [[86, "channels"]], "Sample Type": [[86, "sample-type"]]}, "indexentries": {"api (c member)": [[0, "c.api"]], "bitspersample (c member)": [[0, "c.bitsPerSample"]], "bytespersample (c member)": [[0, "c.bytesPerSample"]], "channellayout (c member)": [[0, "c.channelLayout"]], "colorfamily (c member)": [[0, "c.colorFamily"]], "core (c member)": [[0, "c.core"]], "format (c member)": [[0, "c.format"]], "fpsden (c member)": [[0, "c.fpsDen"]], "fpsnum (c member)": [[0, "c.fpsNum"]], "height (c member)": [[0, "c.height"]], "maxframebuffersize (c member)": [[0, "c.maxFramebufferSize"]], "numchannels (c member)": [[0, "c.numChannels"]], "numframes (c member)": [[0, "c.numFrames"]], "numplanes (c member)": [[0, "c.numPlanes"]], "numsamples (c member)": [[0, "c.numSamples"]], "numthreads (c member)": [[0, "c.numThreads"]], "requestpattern (c member)": [[0, "c.requestPattern"]], "samplerate (c member)": [[0, "c.sampleRate"]], "sampletype (c member)": [[0, "c.sampleType"]], "source (c member)": [[0, "c.source"]], "subsamplingh (c member)": [[0, "c.subSamplingH"]], "subsamplingw (c member)": [[0, "c.subSamplingW"]], "usedframebuffersize (c member)": [[0, "c.usedFramebufferSize"]], "versionstring (c member)": [[0, "c.versionString"]], "width (c member)": [[0, "c.width"]], "vsh::addrational (c++ function)": [[1, "_CPPv4N3vsh11addRationalEP7int64_tP7int64_t7int64_t7int64_t"]], "vsh::arevaliddimensions (c++ function)": [[1, "_CPPv4N3vsh18areValidDimensionsEPK8VSFormatii"]], "vsh::bitblt (c++ function)": [[1, "_CPPv4N3vsh6bitbltEPviPKvi6size_t6size_t"]], "vsh::doubletofloats (c++ function)": [[1, "_CPPv4N3vsh14doubleToFloatSEd"]], "vsh::int64toints (c++ function)": [[1, "_CPPv4N3vsh11int64ToIntSE7int64_t"]], "vsh::isconstantformat (c++ function)": [[1, "_CPPv4N3vsh16isConstantFormatEPK11VSVideoInfo"]], "vsh::issameaudioformat (c++ function)": [[1, "_CPPv4N3vsh17isSameAudioFormatEPK11VSAudioInfoPK11VSAudioInfo"]], "vsh::issameaudioinfo (c++ function)": [[1, "_CPPv4N3vsh15isSameAudioInfoEPK11VSAudioInfoPK11VSAudioInfo"]], "vsh::issamevideoformat (c++ function)": [[1, "_CPPv4N3vsh17isSameVideoFormatEPK11VSVideoInfoPK11VSVideoInfo"]], "vsh::issamevideoinfo (c++ function)": [[1, "_CPPv4N3vsh15isSameVideoInfoEPK11VSVideoInfoPK11VSVideoInfo"]], "vsh::issamevideopresetformat (c++ function)": [[1, "_CPPv4N3vsh23isSameVideoPresetFormatEjPK13VSVideoFormatP6VSCorePK5VSAPI"]], "vsh::muldivrational (c++ function)": [[1, "_CPPv4N3vsh14muldivRationalEP7int64_tP7int64_t7int64_t7int64_t"]], "vsh::reducerational (c++ function)": [[1, "_CPPv4N3vsh14reduceRationalEP7int64_tP7int64_t"]], "vsh::vsh_aligned_free (c++ function)": [[1, "_CPPv4N3vsh16vsh_aligned_freeEPv"]], "vsh::vsh_aligned_malloc (c++ function)": [[1, "_CPPv4N3vsh18vsh_aligned_mallocE6size_t6size_t"]], "createscript (c function)": [[2, "c.createScript"]], "evalsetworkingdir (c function)": [[2, "c.evalSetWorkingDir"]], "evaluatebuffer (c function)": [[2, "c.evaluateBuffer"]], "evaluatefile (c function)": [[2, "c.evaluateFile"]], "freescript (c function)": [[2, "c.freeScript"]], "getaltoutputmode (c function)": [[2, "c.getAltOutputMode"]], "getapiversion (c function)": [[2, "c.getApiVersion"]], "getcore (c function)": [[2, "c.getCore"]], "geterror (c function)": [[2, "c.getError"]], "getexitcode (c function)": [[2, "c.getExitCode"]], "getoutputalphanode (c function)": [[2, "c.getOutputAlphaNode"]], "getoutputnode (c function)": [[2, "c.getOutputNode"]], "getvsapi (c function)": [[2, "c.getVSAPI"]], "getvsscriptapi (c function)": [[2, "c.getVSScriptAPI"]], "getvariable (c function)": [[2, "c.getVariable"]], "vsscript_setvariable (c function)": [[2, "c.vsscript_setVariable"]], "assumesamplerate() (in module std)": [[6, "std.AssumeSampleRate"]], "audiogain() (in module std)": [[7, "std.AudioGain"]], "audioloop() (in module std)": [[8, "std.AudioLoop"]], "audiomix() (in module std)": [[9, "std.AudioMix"]], "audioreverse() (in module std)": [[10, "std.AudioReverse"]], "audiosplice() (in module std)": [[11, "std.AudioSplice"]], "audiotrim() (in module std)": [[12, "std.AudioTrim"]], "blankaudio() (in module std)": [[13, "std.BlankAudio"]], "setaudiocache() (in module std)": [[14, "std.SetAudioCache"]], "shufflechannels() (in module std)": [[15, "std.ShuffleChannels"]], "splitchannels() (in module std)": [[16, "std.SplitChannels"]], "loadallplugins() (in module std)": [[17, "std.LoadAllPlugins"]], "loadplugin() (in module std)": [[18, "std.LoadPlugin"]], "loadplugin() (in module avs)": [[19, "avs.LoadPlugin"]], "setmaxcpu() (in module std)": [[20, "std.SetMaxCPU"]], "addborders() (in module std)": [[21, "std.AddBorders"]], "assumefps() (in module std)": [[22, "std.AssumeFPS"]], "averageframes() (in module std)": [[23, "std.AverageFrames"]], "binarize() (in module std)": [[24, "std.Binarize"]], "binarizemask() (in module std)": [[24, "std.BinarizeMask"]], "blankclip() (in module std)": [[25, "std.BlankClip"]], "boxblur() (in module std)": [[26, "std.BoxBlur"]], "cliptoprop() (in module std)": [[27, "std.ClipToProp"]], "convolution() (in module std)": [[28, "std.Convolution"]], "copyframeprops() (in module std)": [[29, "std.CopyFrameProps"]], "crop() (in module std)": [[30, "std.Crop"]], "cropabs() (in module std)": [[30, "std.CropAbs"]], "deflate() (in module std)": [[31, "std.Deflate"]], "inflate() (in module std)": [[31, "std.Inflate"]], "deleteframes() (in module std)": [[32, "std.DeleteFrames"]], "doubleweave() (in module std)": [[33, "std.DoubleWeave"]], "duplicateframes() (in module std)": [[34, "std.DuplicateFrames"]], "expr() (in module std)": [[35, "std.Expr"]], "fliphorizontal() (in module std)": [[36, "std.FlipHorizontal"]], "flipvertical() (in module std)": [[36, "std.FlipVertical"]], "frameeval() (in module std)": [[37, "std.FrameEval"]], "freezeframes() (in module std)": [[38, "std.FreezeFrames"]], "interleave() (in module std)": [[39, "std.Interleave"]], "invert() (in module std)": [[40, "std.Invert"]], "invertmask() (in module std)": [[40, "std.InvertMask"]], "levels() (in module std)": [[41, "std.Levels"]], "limiter() (in module std)": [[42, "std.Limiter"]], "loop() (in module std)": [[43, "std.Loop"]], "lut() (in module std)": [[44, "std.Lut"]], "lut2() (in module std)": [[45, "std.Lut2"]], "makediff() (in module std)": [[46, "std.MakeDiff"]], "makefulldiff() (in module std)": [[47, "std.MakeFullDiff"]], "maskedmerge() (in module std)": [[48, "std.MaskedMerge"]], "median() (in module std)": [[49, "std.Median"]], "merge() (in module std)": [[50, "std.Merge"]], "mergediff() (in module std)": [[51, "std.MergeDiff"]], "mergefulldiff() (in module std)": [[52, "std.MergeFullDiff"]], "maximum() (in module std)": [[53, "std.Maximum"]], "minimum() (in module std)": [[53, "std.Minimum"]], "modifyframe() (in module std)": [[54, "std.ModifyFrame"]], "pemverifier() (in module std)": [[55, "std.PEMVerifier"]], "planestats() (in module std)": [[56, "std.PlaneStats"]], "premultiply() (in module std)": [[57, "std.PreMultiply"]], "prewitt() (in module std)": [[58, "std.Prewitt"]], "sobel() (in module std)": [[58, "std.Sobel"]], "proptoclip() (in module std)": [[59, "std.PropToClip"]], "removeframeprops() (in module std)": [[60, "std.RemoveFrameProps"]], "bicubic() (in module resize)": [[61, "resize.Bicubic"]], "bilinear() (in module resize)": [[61, "resize.Bilinear"]], "bob() (in module resize)": [[61, "resize.Bob"]], "lanczos() (in module resize)": [[61, "resize.Lanczos"]], "point() (in module resize)": [[61, "resize.Point"]], "spline16() (in module resize)": [[61, "resize.Spline16"]], "spline36() (in module resize)": [[61, "resize.Spline36"]], "spline64() (in module resize)": [[61, "resize.Spline64"]], "reverse() (in module std)": [[62, "std.Reverse"]], "selectevery() (in module std)": [[63, "std.SelectEvery"]], "separatefields() (in module std)": [[64, "std.SeparateFields"]], "setfieldbased() (in module std)": [[65, "std.SetFieldBased"]], "setframeprop() (in module std)": [[66, "std.SetFrameProp"]], "setframeprops() (in module std)": [[67, "std.SetFrameProps"]], "setvideocache() (in module std)": [[68, "std.SetVideoCache"]], "shuffleplanes() (in module std)": [[69, "std.ShufflePlanes"]], "splice() (in module std)": [[70, "std.Splice"]], "splitplanes() (in module std)": [[71, "std.SplitPlanes"]], "stackhorizontal() (in module std)": [[72, "std.StackHorizontal"]], "stackvertical() (in module std)": [[72, "std.StackVertical"]], "clipinfo() (in module text)": [[73, "text.ClipInfo"]], "coreinfo() (in module text)": [[74, "text.CoreInfo"]], "framenum() (in module text)": [[75, "text.FrameNum"]], "frameprops() (in module text)": [[76, "text.FrameProps"]], "text() (in module text)": [[77, "text.Text"]], "transpose() (in module std)": [[78, "std.Transpose"]], "trim() (in module std)": [[79, "std.Trim"]], "turn180() (in module std)": [[80, "std.Turn180"]], "audioframe (built-in class)": [[86, "AudioFrame"]], "audionode (built-in class)": [[86, "AudioNode"]], "core (built-in class)": [[86, "Core"]], "environment (built-in class)": [[86, "Environment"]], "environment.is_single()": [[86, "Environment.is_single"]], "environmentdata (built-in class)": [[86, "EnvironmentData"]], "environmentpolicy (built-in class)": [[86, "EnvironmentPolicy"]], "environmentpolicyapi (built-in class)": [[86, "EnvironmentPolicyAPI"]], "error": [[86, "Error"]], "func (built-in class)": [[86, "Func"]], "function (built-in class)": [[86, "Function"]], "local (built-in class)": [[86, "Local"]], "plugin (built-in class)": [[86, "Plugin"]], "videoformat (built-in class)": [[86, "VideoFormat"]], "videoframe (built-in class)": [[86, "VideoFrame"]], "videonode (built-in class)": [[86, "VideoNode"]], "videooutputtuple (built-in class)": [[86, "VideoOutputTuple"]], "_try_enable_introspection()": [[86, "try_enable_introspection"]], "add_log_handler() (core method)": [[86, "Core.add_log_handler"]], "alive (environment attribute)": [[86, "Environment.alive"]], "alpha (videooutputtuple attribute)": [[86, "VideoOutputTuple.alpha"]], "alt_output (videooutputtuple attribute)": [[86, "VideoOutputTuple.alt_output"]], "bits_per_sample (audioframe attribute)": [[86, "AudioFrame.bits_per_sample"]], "bits_per_sample (audionode attribute)": [[86, "AudioNode.bits_per_sample"]], "bits_per_sample (videoformat attribute)": [[86, "VideoFormat.bits_per_sample"]], "built-in function": [[86, "Environment.is_single"], [86, "clear_output"], [86, "clear_outputs"], [86, "construct_signature"], [86, "get_current_environment"], [86, "get_output"], [86, "get_outputs"], [86, "has_policy"], [86, "register_on_destroy"], [86, "register_policy"], [86, "try_enable_introspection"], [86, "unregister_on_destroy"]], "bytes_per_sample (audioframe attribute)": [[86, "AudioFrame.bytes_per_sample"]], "bytes_per_sample (audionode attribute)": [[86, "AudioNode.bytes_per_sample"]], "bytes_per_sample (videoformat attribute)": [[86, "VideoFormat.bytes_per_sample"]], "channel_layout (audioframe attribute)": [[86, "AudioFrame.channel_layout"]], "channel_layout (audionode attribute)": [[86, "AudioNode.channel_layout"]], "clear_output()": [[86, "clear_output"]], "clear_outputs()": [[86, "clear_outputs"]], "clip (videooutputtuple attribute)": [[86, "VideoOutputTuple.clip"]], "close() (videoframe method)": [[86, "VideoFrame.close"]], "closed (videoframe attribute)": [[86, "VideoFrame.closed"]], "color_family (videoformat attribute)": [[86, "VideoFormat.color_family"]], "construct_signature()": [[86, "construct_signature"]], "copy() (audioframe method)": [[86, "AudioFrame.copy"]], "copy() (environment method)": [[86, "Environment.copy"]], "copy() (videoframe method)": [[86, "VideoFrame.copy"]], "core": [[86, "core"]], "create_environment() (environmentpolicyapi method)": [[86, "EnvironmentPolicyAPI.create_environment"]], "create_video_frame() (core method)": [[86, "Core.create_video_frame"]], "denominator (videonode attribute)": [[86, "VideoNode.denominator"]], "destroy_environment() (environmentpolicyapi method)": [[86, "EnvironmentPolicyAPI.destroy_environment"]], "env_id (environment attribute)": [[86, "Environment.env_id"]], "flags (videonode attribute)": [[86, "VideoNode.flags"]], "format (videoframe attribute)": [[86, "VideoFrame.format"]], "format (videonode attribute)": [[86, "VideoNode.format"]], "fps (videonode attribute)": [[86, "VideoNode.fps"]], "fps_den (videonode attribute)": [[86, "VideoNode.fps_den"]], "fps_num (videonode attribute)": [[86, "VideoNode.fps_num"]], "frames() (audionode method)": [[86, "AudioNode.frames"]], "frames() (videonode method)": [[86, "VideoNode.frames"]], "functions() (plugin method)": [[86, "Plugin.functions"]], "get_core_ptr() (environmentpolicyapi method)": [[86, "EnvironmentPolicyAPI.get_core_ptr"]], "get_current_environment()": [[86, "get_current_environment"]], "get_current_environment() (environmentpolicy method)": [[86, "EnvironmentPolicy.get_current_environment"]], "get_frame() (audionode method)": [[86, "AudioNode.get_frame"]], "get_frame() (videonode method)": [[86, "VideoNode.get_frame"]], "get_frame_async() (audionode method)": [[86, "AudioNode.get_frame_async"]], "get_frame_async() (videonode method)": [[86, "VideoNode.get_frame_async"]], "get_output()": [[86, "get_output"]], "get_outputs()": [[86, "get_outputs"]], "get_read_ptr() (audioframe method)": [[86, "AudioFrame.get_read_ptr"]], "get_read_ptr() (videoframe method)": [[86, "VideoFrame.get_read_ptr"]], "get_stride() (audioframe method)": [[86, "AudioFrame.get_stride"]], "get_stride() (videoframe method)": [[86, "VideoFrame.get_stride"]], "get_vapoursynth_api() (environmentpolicyapi method)": [[86, "EnvironmentPolicyAPI.get_vapoursynth_api"]], "get_video_format() (core method)": [[86, "Core.get_video_format"]], "get_write_ptr() (audioframe method)": [[86, "AudioFrame.get_write_ptr"]], "get_write_ptr() (videoframe method)": [[86, "VideoFrame.get_write_ptr"]], "has_policy()": [[86, "has_policy"]], "height (videoframe attribute)": [[86, "VideoFrame.height"]], "height (videonode attribute)": [[86, "VideoNode.height"]], "id (videoformat attribute)": [[86, "VideoFormat.id"]], "identifier (plugin attribute)": [[86, "Plugin.identifier"]], "is_alive() (environmentpolicy method)": [[86, "EnvironmentPolicy.is_alive"]], "is_inspectable() (audionode method)": [[86, "AudioNode.is_inspectable"]], "is_inspectable() (videonode method)": [[86, "VideoNode.is_inspectable"]], "log_message() (core method)": [[86, "Core.log_message"]], "max_cache_size (core attribute)": [[86, "Core.max_cache_size"]], "name (function attribute)": [[86, "Function.name"]], "name (plugin attribute)": [[86, "Plugin.name"]], "name (videoformat attribute)": [[86, "VideoFormat.name"]], "namespace (plugin attribute)": [[86, "Plugin.namespace"]], "num_channels (audioframe attribute)": [[86, "AudioFrame.num_channels"]], "num_channels (audionode attribute)": [[86, "AudioNode.num_channels"]], "num_frames (videonode attribute)": [[86, "VideoNode.num_frames"]], "num_planes (videoformat attribute)": [[86, "VideoFormat.num_planes"]], "num_threads (core attribute)": [[86, "Core.num_threads"]], "numerator (videonode attribute)": [[86, "VideoNode.numerator"]], "on_policy_cleared() (environmentpolicy method)": [[86, "EnvironmentPolicy.on_policy_cleared"]], "on_policy_registered() (environmentpolicy method)": [[86, "EnvironmentPolicy.on_policy_registered"]], "output() (videonode method)": [[86, "VideoNode.output"]], "plugin (function attribute)": [[86, "Function.plugin"]], "plugins() (core method)": [[86, "Core.plugins"]], "props (audioframe attribute)": [[86, "AudioFrame.props"]], "props (videoframe attribute)": [[86, "VideoFrame.props"]], "query_video_format() (core method)": [[86, "Core.query_video_format"]], "readchunks() (videoframe method)": [[86, "VideoFrame.readchunks"]], "readonly (audioframe attribute)": [[86, "AudioFrame.readonly"]], "readonly (videoframe attribute)": [[86, "VideoFrame.readonly"]], "register_on_destroy()": [[86, "register_on_destroy"]], "register_policy()": [[86, "register_policy"]], "remove_log_handler() (core method)": [[86, "Core.remove_log_handler"]], "replace() (videoformat method)": [[86, "VideoFormat.replace"]], "return_signature (function attribute)": [[86, "Function.return_signature"]], "rule6() (core method)": [[86, "Core.rule6"]], "sample_rate (audionode attribute)": [[86, "AudioNode.sample_rate"]], "sample_type (audioframe attribute)": [[86, "AudioFrame.sample_type"]], "sample_type (audionode attribute)": [[86, "AudioNode.sample_type"]], "sample_type (videoformat attribute)": [[86, "VideoFormat.sample_type"]], "set_environment() (environmentpolicy method)": [[86, "EnvironmentPolicy.set_environment"]], "set_logger() (environmentpolicyapi method)": [[86, "EnvironmentPolicyAPI.set_logger"]], "set_output() (audionode method)": [[86, "AudioNode.set_output"]], "set_output() (videonode method)": [[86, "VideoNode.set_output"]], "signature (function attribute)": [[86, "Function.signature"]], "single (environment attribute)": [[86, "Environment.single"]], "subsampling_h (videoformat attribute)": [[86, "VideoFormat.subsampling_h"]], "subsampling_w (videoformat attribute)": [[86, "VideoFormat.subsampling_w"]], "unregister_on_destroy()": [[86, "unregister_on_destroy"]], "unregister_policy() (environmentpolicyapi method)": [[86, "EnvironmentPolicyAPI.unregister_policy"]], "use() (environment method)": [[86, "Environment.use"]], "version() (core method)": [[86, "Core.version"]], "version_number() (core method)": [[86, "Core.version_number"]], "width (videoframe attribute)": [[86, "VideoFrame.width"]], "width (videonode attribute)": [[86, "VideoNode.width"]], "wrap_environment() (environmentpolicyapi method)": [[86, "EnvironmentPolicyAPI.wrap_environment"]]}}) \ No newline at end of file diff --git a/Programs/sdk/examples/filter_skeleton.c b/Programs/sdk/examples/filter_skeleton.c deleted file mode 100644 index 58fd5fe..0000000 --- a/Programs/sdk/examples/filter_skeleton.c +++ /dev/null @@ -1,58 +0,0 @@ -////////////////////////////////////////// -// This file contains a simple filter -// skeleton you can use to get started. -// With no changes it simply passes -// frames through. - -#include "VapourSynth4.h" -#include "VSHelper4.h" - -typedef struct { - VSNode *node; - const VSVideoInfo *vi; -} FilterData; - - -static const VSFrame *VS_CC filterGetFrame(int n, int activationReason, void *instanceData, void **frameData, VSFrameContext *frameCtx, VSCore *core, const VSAPI *vsapi) { - FilterData *d = (FilterData *)instanceData; - - if (activationReason == arInitial) { - vsapi->requestFrameFilter(n, d->node, frameCtx); - } else if (activationReason == arAllFramesReady) { - const VSFrame *frame = vsapi->getFrameFilter(n, d->node, frameCtx); - - /* your code here... */ - - return frame; - } - - return NULL; -} - -static void VS_CC filterFree(void *instanceData, VSCore *core, const VSAPI *vsapi) { - FilterData *d = (FilterData *)instanceData; - vsapi->freeNode(d->node); - free(d); -} - -static void VS_CC filterCreate(const VSMap *in, VSMap *out, void *userData, VSCore *core, const VSAPI *vsapi) { - FilterData d; - FilterData *data; - - d.node = vsapi->mapGetNode(in, "clip", 0, 0); - d.vi = vsapi->getVideoInfo(d.node); - - data = (FilterData *)malloc(sizeof(d)); - *data = d; - - VSFilterDependency deps[] = {{d.node, rpGeneral}}; /* Depending the the request patterns you may want to change this */ - vsapi->createVideoFilter(out, "Filter", data->vi, filterGetFrame, filterFree, fmParallel, deps, 1, data, core); -} - -////////////////////////////////////////// -// Init - -VS_EXTERNAL_API(void) VapourSynthPluginInit2(VSPlugin *plugin, const VSPLUGINAPI *vspapi) { - vspapi->configPlugin("com.example.filter", "filter", "VapourSynth Filter Skeleton", VS_MAKE_VERSION(1, 0), VAPOURSYNTH_API_VERSION, 0, plugin); - vspapi->registerFunction("Filter", "clip:vnode;", "clip:vnode;", filterCreate, NULL, plugin); -} diff --git a/Programs/sdk/examples/invert_example.c b/Programs/sdk/examples/invert_example.c deleted file mode 100644 index 747ba11..0000000 --- a/Programs/sdk/examples/invert_example.c +++ /dev/null @@ -1,173 +0,0 @@ -////////////////////////////////////////// -// This file contains a simple invert -// filter that's commented to show -// the basics of the filter api. -// This file may make more sense when -// read from the bottom and up. - -#include -#include "VapourSynth4.h" -#include "VSHelper4.h" - -typedef struct { - VSNode *node; - int enabled; -} InvertData; - -// This is the main function that gets called when a frame should be produced. It will, in most cases, get -// called several times to produce one frame. This state is being kept track of by the value of -// activationReason. The first call to produce a certain frame n is always arInitial. In this state -// you should request all the input frames you need. Always do it in ascending order to play nice with the -// upstream filters. -// Once all frames are ready, the filter will be called with arAllFramesReady. It is now time to -// do the actual processing. -static const VSFrame *VS_CC invertGetFrame(int n, int activationReason, void *instanceData, void **frameData, VSFrameContext *frameCtx, VSCore *core, const VSAPI *vsapi) { - InvertData *d = (InvertData *)instanceData; - - if (activationReason == arInitial) { - // Request the source frame on the first call - vsapi->requestFrameFilter(n, d->node, frameCtx); - } else if (activationReason == arAllFramesReady) { - const VSFrame *src = vsapi->getFrameFilter(n, d->node, frameCtx); - // The reason we query this on a per frame basis is because we want our filter - // to accept clips with varying dimensions. If we reject such content using d->vi - // would be easier. - const VSVideoFormat *fi = vsapi->getVideoFrameFormat(src); - int height = vsapi->getFrameHeight(src, 0); - int width = vsapi->getFrameWidth(src, 0); - - - // When creating a new frame for output it is VERY EXTREMELY SUPER IMPORTANT to - // supply the "dominant" source frame to copy properties from. Frame props - // are an essential part of the filter chain and you should NEVER break it. - VSFrame *dst = vsapi->newVideoFrame(fi, width, height, src, core); - - // It's processing loop time! - // Loop over all the planes - int plane; - for (plane = 0; plane < fi->numPlanes; plane++) { - const uint8_t *srcp = vsapi->getReadPtr(src, plane); - ptrdiff_t src_stride = vsapi->getStride(src, plane); - uint8_t *dstp = vsapi->getWritePtr(dst, plane); - ptrdiff_t dst_stride = vsapi->getStride(dst, plane); // note that if a frame has the same dimensions and format, the stride is guaranteed to be the same. int dst_stride = src_stride would be fine too in this filter. - // Since planes may be subsampled you have to query the height of them individually - int h = vsapi->getFrameHeight(src, plane); - int y; - int w = vsapi->getFrameWidth(src, plane); - int x; - - for (y = 0; y < h; y++) { - for (x = 0; x < w; x++) - dstp[x] = ~srcp[x]; - - dstp += dst_stride; - srcp += src_stride; - } - } - - // Release the source frame - vsapi->freeFrame(src); - - // A reference is consumed when it is returned, so saving the dst reference somewhere - // and reusing it is not allowed. - return dst; - } - - return NULL; -} - -// Free all allocated data on filter destruction -static void VS_CC invertFree(void *instanceData, VSCore *core, const VSAPI *vsapi) { - InvertData *d = (InvertData *)instanceData; - vsapi->freeNode(d->node); - free(d); -} - -// This function is responsible for validating arguments and creating a new filter -static void VS_CC invertCreate(const VSMap *in, VSMap *out, void *userData, VSCore *core, const VSAPI *vsapi) { - InvertData d; - InvertData *data; - int err; - - // Get a clip reference from the input arguments. This must be freed later. - d.node = vsapi->mapGetNode(in, "clip", 0, 0); - const VSVideoInfo *vi = vsapi->getVideoInfo(d.node); - - // In this first version we only want to handle 8bit integer formats. Note that - // vi->format can be 0 if the input clip can change format midstream. - if (!vsh_isConstantVideoFormat(vi) || vi->format.sampleType != stInteger || vi->format.bitsPerSample != 8) { - vsapi->mapSetError(out, "Invert: only constant format 8bit integer input supported"); - vsapi->freeNode(d.node); - return; - } - - // If a property read fails for some reason (index out of bounds/wrong type) - // then err will have flags set to indicate why and 0 will be returned. This - // can be very useful to know when having optional arguments. Since we have - // strict checking because of what we wrote in the argument string, the only - // reason this could fail is when the value wasn't set by the user. - // And when it's not set we want it to default to enabled. - d.enabled = !!vsapi->mapGetInt(in, "enable", 0, &err); - if (err) - d.enabled = 1; - - // Let's pretend the only allowed values are 1 or 0... - if (d.enabled < 0 || d.enabled > 1) { - vsapi->mapSetError(out, "Invert: enabled must be 0 or 1"); - vsapi->freeNode(d.node); - return; - } - - // I usually keep the filter data struct on the stack and don't allocate it - // until all the input validation is done. - data = (InvertData *)malloc(sizeof(d)); - *data = d; - - // Creates a new filter and returns a reference to it. Always pass on the in and out - // arguments or unexpected things may happen. The name should be something that's - // easy to connect to the filter, like its function name. - // The three function pointers handle initialization, frame processing and filter destruction. - // The filtermode is very important to get right as it controls how threading of the filter - // is handled. In general you should only use fmParallel whenever possible. This is if you - // need to modify no shared data at all when the filter is running. - // For more complicated filters, fmParallelRequests is usually easier to achieve as it can - // be prefetched in parallel but the actual processing is serialized. - // The others can be considered special cases where fmFrameState is useful to source filters and - // fmUnordered is useful when a filter's state may change even when deciding which frames to - // prefetch (such as a cache filter). - - VSFilterDependency deps[] = {{d.node, rpStrictSpatial}}; - vsapi->createVideoFilter(out, "Invert", vi, invertGetFrame, invertFree, fmParallel, deps, 1, data, core); -} - -////////////////////////////////////////// -// Init - -// This is the entry point that is called when a plugin is loaded. You are only supposed -// to call the two provided functions here. -// configFunc sets the id, namespace, and long name of the plugin (the last 3 arguments -// never need to be changed for a normal plugin). -// -// id: Needs to be a "reverse" url and unique among all plugins. -// It is inspired by how android packages identify themselves. -// If you don't own a domain then make one up that's related -// to the plugin name. -// -// namespace: Should only use [a-z_] and not be too long. -// -// full name: Any name that describes the plugin nicely. -// -// registerFunction is called once for each function you want to register. Function names -// should be CamelCase. The argument string has this format: -// name:type; or name:type:flag1:flag2....; -// All argument name should be lowercase and only use [a-z_]. -// The valid types are int,float,data,clip,frame,func. [] can be appended to allow arrays -// of type to be passed (numbers:int[]) -// The available flags are opt, to make an argument optional, empty, which controls whether -// or not empty arrays are accepted - - -VS_EXTERNAL_API(void) VapourSynthPluginInit2(VSPlugin *plugin, const VSPLUGINAPI *vspapi) { - vspapi->configPlugin("com.example.invert", "invert", "VapourSynth Invert Example", VS_MAKE_VERSION(1, 0), VAPOURSYNTH_API_VERSION, 0, plugin); - vspapi->registerFunction("Filter", "clip:vnode;enabled:int:opt;", "clip:vnode;", invertCreate, NULL, plugin); -} diff --git a/Programs/sdk/examples/vsscript_example.c b/Programs/sdk/examples/vsscript_example.c deleted file mode 100644 index ac53583..0000000 --- a/Programs/sdk/examples/vsscript_example.c +++ /dev/null @@ -1,116 +0,0 @@ -/* -* This file is an example on how to use the VSScript part of the VapourSynth API. -* It writes out all the frames of an input script to a file. -* This file may be freely modified/copied/distributed. -* -* For an example of how to use getFrameAsync() see src/vspipe/vspipe.cpp -* It's basically the same as this example but with a callback when the -* processing is done. -*/ - -#include "VSScript4.h" -#include "VSHelper4.h" -#include -#include - - - -int main(int argc, char **argv) { - const VSAPI *vsapi = NULL; - const VSSCRIPTAPI *vssapi = NULL; - VSScript *se = NULL; - FILE *outFile = NULL; - - if (argc != 3) { - fprintf(stderr, "Usage: vsscript_example \n"); - return 1; - } - - // Open the output file for writing - outFile = fopen(argv[2], "wb"); - - if (!outFile) { - fprintf(stderr, "Failed to open output for writing\n"); - return 1; - } - - - // Initialize VSScript and get the api pointer - vssapi = getVSScriptAPI(VSSCRIPT_API_VERSION); - if (!vssapi) { - // VapourSynth probably isn't properly installed at all - fprintf(stderr, "Failed to initialize VSScript library\n"); - return 1; - } - - // Get a pointer to the normal api struct, exists so you don't have to link with the VapourSynth core library - // Failure only happens on very rare API version mismatches and usually doesn't need to be checked - vsapi = vssapi->getVSAPI(VAPOURSYNTH_API_VERSION); - assert(vsapi); - - // This line does the actual script evaluation. If se = NULL it will create a new environment - if (vssapi->evaluateFile(se, argv[1])) { - fprintf(stderr, "Script evaluation failed:\n%s", vssapi->getError(se)); - vssapi->freeScript(se); - return 1; - } - - // Get the clip set as output. It is valid until the out index is re-set/cleared/the script is freed - VSNode *node = vssapi->getOutputNode(se, 0); - if (!node) { - fprintf(stderr, "Failed to retrieve output node\n"); - vssapi->freeScript(se); - return 1; - } - - // Reject hard to handle formats - const VSVideoInfo *vi = vsapi->getVideoInfo(node); - - if (!vsh_isConstantVideoFormat(vi)) { - fprintf(stderr, "Cannot output clips with varying dimensions or format\n"); - vsapi->freeNode(node); - vssapi->freeScript(se); - return 1; - } - - // Output all frames - char errMsg[1024]; - int error = 0; - for (int n = 0; n < vi->numFrames; n++) { - const VSFrame *frame = vsapi->getFrame(n, node, errMsg, sizeof(errMsg)); - - if (!frame) { // Check if an error happened when getting the frame - error = 1; - break; - } - - // Loop over every row of every plane write to the file - for (int p = 0; p < vi->format.numPlanes; p++) { - ptrdiff_t stride = vsapi->getStride(frame, p); - const uint8_t *readPtr = vsapi->getReadPtr(frame, p); - int rowSize = vsapi->getFrameWidth(frame, p) * vi->format.bytesPerSample; - int height = vsapi->getFrameHeight(frame, p); - - for (int y = 0; y < height; y++) { - // You should probably handle any fwrite errors here as well - fwrite(readPtr, rowSize, 1, outFile); - readPtr += stride; - } - } - - vsapi->freeFrame(frame); - } - - // Cleanup - fclose(outFile); - - vsapi->freeNode(node); - vssapi->freeScript(se); - - if (error) { - fprintf(stderr, "%s", errMsg); - return 1; - } - - return 0; -} diff --git a/Programs/sdk/include/VSConstants4.h b/Programs/sdk/include/VSConstants4.h deleted file mode 100644 index b27317d..0000000 --- a/Programs/sdk/include/VSConstants4.h +++ /dev/null @@ -1,93 +0,0 @@ -/* -* Copyright (c) 2021 Fredrik Mellbin -* -* This file is part of VapourSynth. -* -* VapourSynth is free software; you can redistribute it and/or -* modify it under the terms of the GNU Lesser General Public -* License as published by the Free Software Foundation; either -* version 2.1 of the License, or (at your option) any later version. -* -* VapourSynth is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -* Lesser General Public License for more details. -* -* You should have received a copy of the GNU Lesser General Public -* License along with VapourSynth; if not, write to the Free Software -* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -#ifndef VSCONSTANTS4_H -#define VSCONSTANTS4_H - -typedef enum VSColorRange { - VSC_RANGE_FULL = 0, - VSC_RANGE_LIMITED = 1 -} VSColorRange; - -typedef enum VSChromaLocation { - VSC_CHROMA_LEFT = 0, - VSC_CHROMA_CENTER = 1, - VSC_CHROMA_TOP_LEFT = 2, - VSC_CHROMA_TOP = 3, - VSC_CHROMA_BOTTOM_LEFT = 4, - VSC_CHROMA_BOTTOM = 5 -} VSChromaLocation; - -typedef enum VSFieldBased { - VSC_FIELD_PROGRESSIVE = 0, - VSC_FIELD_BOTTOM = 1, - VSC_FIELD_TOP = 2 -} VSFieldBased; - -typedef enum VSMatrixCoefficients { - VSC_MATRIX_RGB = 0, - VSC_MATRIX_BT709 = 1, - VSC_MATRIX_UNSPECIFIED = 2, - VSC_MATRIX_FCC = 4, - VSC_MATRIX_BT470_BG = 5, - VSC_MATRIX_ST170_M = 6, /* Equivalent to 5. */ - VSC_MATRIX_ST240_M = 7, - VSC_MATRIX_YCGCO = 8, - VSC_MATRIX_BT2020_NCL = 9, - VSC_MATRIX_BT2020_CL = 10, - VSC_MATRIX_CHROMATICITY_DERIVED_NCL = 12, - VSC_MATRIX_CHROMATICITY_DERIVED_CL = 13, - VSC_MATRIX_ICTCP = 14 -} VSMatrixCoefficients; - -typedef enum VSTransferCharacteristics { - VSC_TRANSFER_BT709 = 1, - VSC_TRANSFER_UNSPECIFIED = 2, - VSC_TRANSFER_BT470_M = 4, - VSC_TRANSFER_BT470_BG = 5, - VSC_TRANSFER_BT601 = 6, /* Equivalent to 1. */ - VSC_TRANSFER_ST240_M = 7, - VSC_TRANSFER_LINEAR = 8, - VSC_TRANSFER_LOG_100 = 9, - VSC_TRANSFER_LOG_316 = 10, - VSC_TRANSFER_IEC_61966_2_4 = 11, - VSC_TRANSFER_IEC_61966_2_1 = 13, - VSC_TRANSFER_BT2020_10 = 14, /* Equivalent to 1. */ - VSC_TRANSFER_BT2020_12 = 15, /* Equivalent to 1. */ - VSC_TRANSFER_ST2084 = 16, - VSC_TRANSFER_ARIB_B67 = 18 -} VSTransferCharacteristics; - -typedef enum VSColorPrimaries { - VSC_PRIMARIES_BT709 = 1, - VSC_PRIMARIES_UNSPECIFIED = 2, - VSC_PRIMARIES_BT470_M = 4, - VSC_PRIMARIES_BT470_BG = 5, - VSC_PRIMARIES_ST170_M = 6, - VSC_PRIMARIES_ST240_M = 7, /* Equivalent to 6. */ - VSC_PRIMARIES_FILM = 8, - VSC_PRIMARIES_BT2020 = 9, - VSC_PRIMARIES_ST428 = 10, - VSC_PRIMARIES_ST431_2 = 11, - VSC_PRIMARIES_ST432_1 = 12, - VSC_PRIMARIES_EBU3213_E = 22 -} VSColorPrimaries; - -#endif /* VSCONSTANTS4_H */ diff --git a/Programs/sdk/include/VSHelper.h b/Programs/sdk/include/VSHelper.h deleted file mode 100644 index c344577..0000000 --- a/Programs/sdk/include/VSHelper.h +++ /dev/null @@ -1,174 +0,0 @@ -/***************************************************************************** -* Copyright (c) 2012-2015 Fredrik Mellbin -* --- Legal stuff --- -* This program is free software. It comes without any warranty, to -* the extent permitted by applicable law. You can redistribute it -* and/or modify it under the terms of the Do What The Fuck You Want -* To Public License, Version 2, as published by Sam Hocevar. See -* http://sam.zoy.org/wtfpl/COPYING for more details. -*****************************************************************************/ - -#ifndef VSHELPER_H -#define VSHELPER_H - -#include -#include -#include -#include -#include -#include -#ifdef _WIN32 -#include -#endif -#include "VapourSynth.h" - -/* Visual Studio doesn't recognize inline in c mode */ -#if defined(_MSC_VER) && !defined(__cplusplus) -#define inline _inline -#endif - -/* A kinda portable definition of the C99 restrict keyword (or its unofficial C++ equivalent) */ -#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* Available in C99 */ -#define VS_RESTRICT restrict -#elif defined(__cplusplus) || defined(_MSC_VER) /* Almost all relevant C++ compilers support it so just assume it works */ -#define VS_RESTRICT __restrict -#else /* Not supported */ -#define VS_RESTRICT -#endif - -#ifdef _WIN32 -#define VS_ALIGNED_MALLOC(pptr, size, alignment) do { *(pptr) = _aligned_malloc((size), (alignment)); } while (0) -#define VS_ALIGNED_FREE(ptr) do { _aligned_free((ptr)); } while (0) -#else -#define VS_ALIGNED_MALLOC(pptr, size, alignment) do { if(posix_memalign((void**)(pptr), (alignment), (size))) *((void**)pptr) = NULL; } while (0) -#define VS_ALIGNED_FREE(ptr) do { free((ptr)); } while (0) -#endif - -#define VSMAX(a,b) ((a) > (b) ? (a) : (b)) -#define VSMIN(a,b) ((a) > (b) ? (b) : (a)) - -#ifdef __cplusplus -/* A nicer templated malloc for all the C++ users out there */ -#if __cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1900) -template -#else -template -#endif -static inline T* vs_aligned_malloc(size_t size, size_t alignment) { -#ifdef _WIN32 - return (T*)_aligned_malloc(size, alignment); -#else - void *tmp = NULL; - if (posix_memalign(&tmp, alignment, size)) - tmp = 0; - return (T*)tmp; -#endif -} - -static inline void vs_aligned_free(void *ptr) { - VS_ALIGNED_FREE(ptr); -} -#endif /* __cplusplus */ - -/* convenience function for checking if the format never changes between frames */ -static inline int isConstantFormat(const VSVideoInfo *vi) { - return vi->height > 0 && vi->width > 0 && vi->format; -} - -/* convenience function to check for if two clips have the same format (unknown/changeable will be considered the same too) */ -static inline int isSameFormat(const VSVideoInfo *v1, const VSVideoInfo *v2) { - return v1->height == v2->height && v1->width == v2->width && v1->format == v2->format; -} - -/* multiplies and divides a rational number, such as a frame duration, in place and reduces the result */ -static inline void muldivRational(int64_t *num, int64_t *den, int64_t mul, int64_t div) { - /* do nothing if the rational number is invalid */ - if (!*den) - return; - - /* nobody wants to accidentally divide by zero */ - assert(div); - - int64_t a, b; - *num *= mul; - *den *= div; - a = *num; - b = *den; - while (b != 0) { - int64_t t = a; - a = b; - b = t % b; - } - if (a < 0) - a = -a; - *num /= a; - *den /= a; -} - -/* reduces a rational number */ -static inline void vs_normalizeRational(int64_t *num, int64_t *den) { - muldivRational(num, den, 1, 1); -} - -/* add two rational numbers and reduces the result */ -static inline void vs_addRational(int64_t *num, int64_t *den, int64_t addnum, int64_t addden) { - /* do nothing if the rational number is invalid */ - if (!*den) - return; - - /* nobody wants to accidentally add an invalid rational number */ - assert(addden); - - if (*den == addden) { - *num += addnum; - } else { - int64_t temp = addden; - addnum *= *den; - addden *= *den; - *num *= temp; - *den *= temp; - - *num += addnum; - - vs_normalizeRational(num, den); - } -} - -/* converts an int64 to int with saturation, useful to silence warnings when reading int properties among other things */ -static inline int int64ToIntS(int64_t i) { - if (i > INT_MAX) - return INT_MAX; - else if (i < INT_MIN) - return INT_MIN; - else return (int)i; -} - -static inline void vs_bitblt(void *dstp, int dst_stride, const void *srcp, int src_stride, size_t row_size, size_t height) { - if (height) { - if (src_stride == dst_stride && src_stride == (int)row_size) { - memcpy(dstp, srcp, row_size * height); - } else { - const uint8_t *srcp8 = (const uint8_t *)srcp; - uint8_t *dstp8 = (uint8_t *)dstp; - size_t i; - for (i = 0; i < height; i++) { - memcpy(dstp8, srcp8, row_size); - srcp8 += src_stride; - dstp8 += dst_stride; - } - } - } -} - -/* check if the frame dimensions are valid for a given format */ -/* returns non-zero for valid width and height */ -static inline int areValidDimensions(const VSFormat *fi, int width, int height) { - return !(width % (1 << fi->subSamplingW) || height % (1 << fi->subSamplingH)); -} - -/* Visual Studio doesn't recognize inline in c mode */ -#if defined(_MSC_VER) && !defined(__cplusplus) -#undef inline -#endif - -#endif diff --git a/Programs/sdk/include/VSHelper4.h b/Programs/sdk/include/VSHelper4.h deleted file mode 100644 index 0061a2d..0000000 --- a/Programs/sdk/include/VSHelper4.h +++ /dev/null @@ -1,217 +0,0 @@ -/***************************************************************************** -* Copyright (c) 2012-2020 Fredrik Mellbin -* --- Legal stuff --- -* This program is free software. It comes without any warranty, to -* the extent permitted by applicable law. You can redistribute it -* and/or modify it under the terms of the Do What The Fuck You Want -* To Public License, Version 2, as published by Sam Hocevar. See -* http://sam.zoy.org/wtfpl/COPYING for more details. -*****************************************************************************/ - -#ifndef VSHELPER4_H -#define VSHELPER4_H - -#include -#include -#include -#include -#include -#include -#include -#ifdef _WIN32 -#include -#endif -#include "VapourSynth4.h" - -#define VSH_STD_PLUGIN_ID "com.vapoursynth.std" -#define VSH_RESIZE_PLUGIN_ID "com.vapoursynth.resize" -#define VSH_TEXT_PLUGIN_ID "com.vapoursynth.text" - -#ifdef __cplusplus -namespace vsh { -#define VSH4_MANGLE_FUNCTION_NAME(name) name -#define VSH4_BOOLEAN_TYPE bool -#else -#define VSH4_MANGLE_FUNCTION_NAME(name) vsh_##name -#define VSH4_BOOLEAN_TYPE int -#endif - -/* Visual Studio doesn't recognize inline in c mode */ -#if defined(_MSC_VER) && !defined(__cplusplus) -#define inline _inline -#endif - -/* A kinda portable definition of the C99 restrict keyword (or its unofficial C++ equivalent) */ -#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* Available in C99 */ -#define VS_RESTRICT restrict -#elif defined(__cplusplus) || defined(_MSC_VER) /* Almost all relevant C++ compilers support it so just assume it works */ -#define VS_RESTRICT __restrict -#else /* Not supported */ -#define VS_RESTRICT -#endif - -#ifdef _WIN32 -#define VSH_ALIGNED_MALLOC(pptr, size, alignment) do { *(pptr) = _aligned_malloc((size), (alignment)); } while (0) -#define VSH_ALIGNED_FREE(ptr) do { _aligned_free((ptr)); } while (0) -#else -#define VSH_ALIGNED_MALLOC(pptr, size, alignment) do { if(posix_memalign((void**)(pptr), (alignment), (size))) *((void**)pptr) = NULL; } while (0) -#define VSH_ALIGNED_FREE(ptr) do { free((ptr)); } while (0) -#endif - -#define VSMAX(a,b) ((a) > (b) ? (a) : (b)) -#define VSMIN(a,b) ((a) > (b) ? (b) : (a)) - -#ifdef __cplusplus -/* A nicer templated malloc for all the C++ users out there */ -#if __cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1900) -template -#else -template -#endif -static inline T *vsh_aligned_malloc(size_t size, size_t alignment) { -#ifdef _WIN32 - return (T *)_aligned_malloc(size, alignment); -#else - void *tmp = NULL; - if (posix_memalign(&tmp, alignment, size)) - tmp = 0; - return (T *)tmp; -#endif -} - -static inline void vsh_aligned_free(void *ptr) { - VSH_ALIGNED_FREE(ptr); -} -#endif /* __cplusplus */ - -/* convenience function for checking if the format never changes between frames */ -static inline VSH4_BOOLEAN_TYPE VSH4_MANGLE_FUNCTION_NAME(isConstantVideoFormat)(const VSVideoInfo *vi) { - return vi->height > 0 && vi->width > 0 && vi->format.colorFamily != cfUndefined; -} - -/* convenience function to check if two clips have the same format (unknown/changeable will be considered the same too) */ -static inline VSH4_BOOLEAN_TYPE VSH4_MANGLE_FUNCTION_NAME(isSameVideoFormat)(const VSVideoFormat *v1, const VSVideoFormat *v2) { - return v1->colorFamily == v2->colorFamily && v1->sampleType == v2->sampleType && v1->bitsPerSample == v2->bitsPerSample && v1->subSamplingW == v2->subSamplingW && v1->subSamplingH == v2->subSamplingH; -} - -/* convenience function to check if a clip has the same format as a format id */ -static inline VSH4_BOOLEAN_TYPE VSH4_MANGLE_FUNCTION_NAME(isSameVideoPresetFormat)(unsigned presetFormat, const VSVideoFormat *v, VSCore *core, const VSAPI *vsapi) { - return vsapi->queryVideoFormatID(v->colorFamily, v->sampleType, v->bitsPerSample, v->subSamplingW, v->subSamplingH, core) == presetFormat; -} - -/* convenience function to check for if two clips have the same format (but not framerate) while also including width and height (unknown/changeable will be considered the same too) */ -static inline VSH4_BOOLEAN_TYPE VSH4_MANGLE_FUNCTION_NAME(isSameVideoInfo)(const VSVideoInfo *v1, const VSVideoInfo *v2) { - return v1->height == v2->height && v1->width == v2->width && VSH4_MANGLE_FUNCTION_NAME(isSameVideoFormat)(&v1->format, &v2->format); -} - -/* convenience function to check for if two clips have the same format while also including samplerate (unknown/changeable will be considered the same too) */ -static inline VSH4_BOOLEAN_TYPE VSH4_MANGLE_FUNCTION_NAME(isSameAudioFormat)(const VSAudioFormat *a1, const VSAudioFormat *a2) { - return a1->bitsPerSample == a2->bitsPerSample && a1->sampleType == a2->sampleType && a1->channelLayout == a2->channelLayout; -} - -/* convenience function to check for if two clips have the same format while also including samplerate (unknown/changeable will be considered the same too) */ -static inline VSH4_BOOLEAN_TYPE VSH4_MANGLE_FUNCTION_NAME(isSameAudioInfo)(const VSAudioInfo *a1, const VSAudioInfo *a2) { - return a1->sampleRate == a2->sampleRate && VSH4_MANGLE_FUNCTION_NAME(isSameAudioFormat)(&a1->format, &a2->format); -} - -/* multiplies and divides a rational number, such as a frame duration, in place and reduces the result */ -static inline void VSH4_MANGLE_FUNCTION_NAME(muldivRational)(int64_t *num, int64_t *den, int64_t mul, int64_t div) { - /* do nothing if the rational number is invalid */ - if (!*den) - return; - - /* nobody wants to accidentally divide by zero */ - assert(div); - - int64_t a, b; - *num *= mul; - *den *= div; - a = *num; - b = *den; - while (b != 0) { - int64_t t = a; - a = b; - b = t % b; - } - if (a < 0) - a = -a; - *num /= a; - *den /= a; -} - -/* reduces a rational number */ -static inline void VSH4_MANGLE_FUNCTION_NAME(reduceRational)(int64_t *num, int64_t *den) { - VSH4_MANGLE_FUNCTION_NAME(muldivRational)(num, den, 1, 1); -} - -/* add two rational numbers and reduces the result */ -static inline void VSH4_MANGLE_FUNCTION_NAME(addRational)(int64_t *num, int64_t *den, int64_t addnum, int64_t addden) { - /* do nothing if the rational number is invalid */ - if (!*den) - return; - - /* nobody wants to accidentally add an invalid rational number */ - assert(addden); - - if (*den == addden) { - *num += addnum; - } else { - int64_t temp = addden; - addnum *= *den; - addden *= *den; - *num *= temp; - *den *= temp; - - *num += addnum; - - VSH4_MANGLE_FUNCTION_NAME(reduceRational)(num, den); - } -} - -/* converts an int64 to int with saturation, useful to silence warnings when reading int properties among other things */ -static inline int VSH4_MANGLE_FUNCTION_NAME(int64ToIntS)(int64_t i) { - if (i > INT_MAX) - return INT_MAX; - else if (i < INT_MIN) - return INT_MIN; - else return (int)i; -} - -/* converts a double to float with saturation, useful to silence warnings when reading float properties among other things */ -static inline float VSH4_MANGLE_FUNCTION_NAME(doubleToFloatS)(double d) { - return (float)d; -} - -static inline void VSH4_MANGLE_FUNCTION_NAME(bitblt)(void *dstp, ptrdiff_t dst_stride, const void *srcp, ptrdiff_t src_stride, size_t row_size, size_t height) { - if (height) { - if (src_stride == dst_stride && src_stride == (ptrdiff_t)row_size) { - memcpy(dstp, srcp, row_size * height); - } else { - const uint8_t *srcp8 = (const uint8_t *)srcp; - uint8_t *dstp8 = (uint8_t *)dstp; - size_t i; - for (i = 0; i < height; i++) { - memcpy(dstp8, srcp8, row_size); - srcp8 += src_stride; - dstp8 += dst_stride; - } - } - } -} - -/* check if the frame dimensions are valid for a given format */ -/* returns non-zero for valid width and height */ -static inline VSH4_BOOLEAN_TYPE VSH4_MANGLE_FUNCTION_NAME(areValidDimensions)(const VSVideoFormat *fi, int width, int height) { - return !(width % (1 << fi->subSamplingW) || height % (1 << fi->subSamplingH)); -} - -/* Visual Studio doesn't recognize inline in c mode */ -#if defined(_MSC_VER) && !defined(__cplusplus) -#undef inline -#endif - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Programs/sdk/include/VSScript.h b/Programs/sdk/include/VSScript.h deleted file mode 100644 index 637b592..0000000 --- a/Programs/sdk/include/VSScript.h +++ /dev/null @@ -1,85 +0,0 @@ -/* -* Copyright (c) 2013-2018 Fredrik Mellbin -* -* This file is part of VapourSynth. -* -* VapourSynth is free software; you can redistribute it and/or -* modify it under the terms of the GNU Lesser General Public -* License as published by the Free Software Foundation; either -* version 2.1 of the License, or (at your option) any later version. -* -* VapourSynth is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -* Lesser General Public License for more details. -* -* You should have received a copy of the GNU Lesser General Public -* License along with VapourSynth; if not, write to the Free Software -* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -#ifndef VSSCRIPT_H -#define VSSCRIPT_H - -#include "VapourSynth.h" - -#define VSSCRIPT_API_MAJOR 3 -#define VSSCRIPT_API_MINOR 2 -#define VSSCRIPT_API_VERSION ((VSSCRIPT_API_MAJOR << 16) | (VSSCRIPT_API_MINOR)) - -/* As of api 3.2 all functions are threadsafe */ - -typedef struct VSScript VSScript; - -typedef enum VSEvalFlags { - efSetWorkingDir = 1, -} VSEvalFlags; - -/* Get the api version */ -VS_API(int) vsscript_getApiVersion(void); /* api 3.1 */ - -/* Initialize the available scripting runtimes, returns zero on failure */ -VS_API(int) vsscript_init(void); - -/* Free all scripting runtimes */ -VS_API(int) vsscript_finalize(void); - -/* -* Pass a pointer to a null handle to create a new one -* The values returned by the query functions are only valid during the lifetime of the VSScript -* scriptFilename is if the error message should reference a certain file, NULL allowed in vsscript_evaluateScript() -* core is to pass in an already created instance so that mixed environments can be used, -* NULL creates a new core that can be fetched with vsscript_getCore() later OR implicitly uses the one associated with an already existing handle when passed -* If efSetWorkingDir is passed to flags the current working directory will be changed to the path of the script -* note that if scriptFilename is NULL in vsscript_evaluateScript() then __file__ won't be set and the working directory won't be changed -* Set efSetWorkingDir to get the default and recommended behavior -*/ -VS_API(int) vsscript_evaluateScript(VSScript **handle, const char *script, const char *scriptFilename, int flags); -/* Convenience version of the above function that loads the script from a file */ -VS_API(int) vsscript_evaluateFile(VSScript **handle, const char *scriptFilename, int flags); -/* Create an empty environment for use in later invocations, mostly useful to set script variables before execution */ -VS_API(int) vsscript_createScript(VSScript **handle); - -VS_API(void) vsscript_freeScript(VSScript *handle); -VS_API(const char *) vsscript_getError(VSScript *handle); -VS_API(int) vsscript_getExitCode(VSScript *handle); -/* The node returned must be freed using freeNode() before calling vsscript_freeScript() */ -VS_API(VSNodeRef *) vsscript_getOutput(VSScript *handle, int index); -/* Both nodes returned must be freed using freeNode() before calling vsscript_freeScript(), the alpha node pointer will only be set if an alpha clip has been set in the script */ -VS_API(VSNodeRef *) vsscript_getOutput2(VSScript *handle, int index, VSNodeRef **alpha); /* api 3.1 */ -/* Unset an output index */ -VS_API(int) vsscript_clearOutput(VSScript *handle, int index); -/* The core is valid as long as the environment exists */ -VS_API(VSCore *) vsscript_getCore(VSScript *handle); -/* Convenience function for retrieving a vsapi pointer */ -VS_API(const VSAPI *) vsscript_getVSApi(void); /* deprecated as of api 3.2 since it's impossible to tell the api version supported */ -VS_API(const VSAPI *) vsscript_getVSApi2(int version); /* api 3.2, generally you should pass VAPOURSYNTH_API_VERSION */ - -/* Variables names that are not set or not of a convertible type will return an error */ -VS_API(int) vsscript_getVariable(VSScript *handle, const char *name, VSMap *dst); -VS_API(int) vsscript_setVariable(VSScript *handle, const VSMap *vars); -VS_API(int) vsscript_clearVariable(VSScript *handle, const char *name); -/* Tries to clear everything set in an environment, normally it is better to simply free an environment completely and create a new one */ -VS_API(void) vsscript_clearEnvironment(VSScript *handle); - -#endif /* VSSCRIPT_H */ diff --git a/Programs/sdk/include/VSScript4.h b/Programs/sdk/include/VSScript4.h deleted file mode 100644 index c59c683..0000000 --- a/Programs/sdk/include/VSScript4.h +++ /dev/null @@ -1,97 +0,0 @@ -/* -* Copyright (c) 2013-2020 Fredrik Mellbin -* -* This file is part of VapourSynth. -* -* VapourSynth is free software; you can redistribute it and/or -* modify it under the terms of the GNU Lesser General Public -* License as published by the Free Software Foundation; either -* version 2.1 of the License, or (at your option) any later version. -* -* VapourSynth is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -* Lesser General Public License for more details. -* -* You should have received a copy of the GNU Lesser General Public -* License along with VapourSynth; if not, write to the Free Software -* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -#ifndef VSSCRIPT4_H -#define VSSCRIPT4_H - -#include "VapourSynth4.h" - -#define VSSCRIPT_API_MAJOR 4 -#define VSSCRIPT_API_MINOR 1 -#define VSSCRIPT_API_VERSION VS_MAKE_VERSION(VSSCRIPT_API_MAJOR, VSSCRIPT_API_MINOR) - -typedef struct VSScript VSScript; -typedef struct VSSCRIPTAPI VSSCRIPTAPI; - -struct VSSCRIPTAPI { - /* Returns the highest supported VSSCRIPT_API_VERSION */ - int (VS_CC *getAPIVersion)(void) VS_NOEXCEPT; - - /* Convenience function for retrieving a VSAPI pointer without having to use the VapourSynth library. Always pass VAPOURSYNTH_API_VERSION */ - const VSAPI *(VS_CC *getVSAPI)(int version) VS_NOEXCEPT; - - /* - * Providing a pre-created core is useful for setting core creation flags, log callbacks, preload specific plugins and many other things. - * You must create a VSScript object before evaluating a script. Always takes ownership of the core even on failure. Returns NULL on failure. - * Pass NULL to have a core automatically created with the default options. - */ - VSScript *(VS_CC *createScript)(VSCore *core) VS_NOEXCEPT; - - /* The core is valid as long as the environment exists, return NULL on error */ - VSCore *(VS_CC *getCore)(VSScript *handle) VS_NOEXCEPT; - - /* - * Evaluates a script passed in the buffer argument. The scriptFilename is only used for display purposes. in Python - * it means that the main module won't be unnamed in error messages. - * - * Returns 0 on success. - * - * Note that calling any function other than getError() and freeScript() on a VSScript object in the error state - * will result in undefined behavior. - */ - int (VS_CC *evaluateBuffer)(VSScript *handle, const char *buffer, const char *scriptFilename) VS_NOEXCEPT; - - /* Convenience version of the above function that loads the script from scriptFilename and passes as the buffer to evaluateBuffer */ - int (VS_CC *evaluateFile)(VSScript *handle, const char *scriptFilename) VS_NOEXCEPT; - - /* Returns NULL on success, otherwise an error message */ - const char *(VS_CC *getError)(VSScript *handle) VS_NOEXCEPT; - - /* Returns the script's reported exit code */ - int (VS_CC *getExitCode)(VSScript *handle) VS_NOEXCEPT; - - /* Fetches a variable of any VSMap storable type set in a script. It is stored in the key with the same name in dst. Returns 0 on success. */ - int (VS_CC *getVariable)(VSScript *handle, const char *name, VSMap *dst) VS_NOEXCEPT; - - /* Sets all keys in the provided VSMap as variables in the script. Returns 0 on success. */ - int (VS_CC *setVariables)(VSScript *handle, const VSMap *vars) VS_NOEXCEPT; - - /* - * The returned nodes must be freed using freeNode() before calling freeScript() since they may depend on data in the VSScript - * environment. Returns NULL if no node was set as output in the script. Index 0 is used by default in scripts and other - * values are rarely used. - */ - VSNode *(VS_CC *getOutputNode)(VSScript *handle, int index) VS_NOEXCEPT; - VSNode *(VS_CC *getOutputAlphaNode)(VSScript *handle, int index) VS_NOEXCEPT; - int (VS_CC *getAltOutputMode)(VSScript *handle, int index) VS_NOEXCEPT; - - void (VS_CC *freeScript)(VSScript *handle) VS_NOEXCEPT; - - /* - * Set whether or not the working directory is temporarily changed to the same - * location as the script file when evaluateFile is called. Off by default. - */ - void (VS_CC *evalSetWorkingDir)(VSScript *handle, int setCWD) VS_NOEXCEPT; - -}; - -VS_API(const VSSCRIPTAPI *) getVSScriptAPI(int version) VS_NOEXCEPT; - -#endif /* VSSCRIPT4_H */ diff --git a/Programs/sdk/include/VapourSynth.h b/Programs/sdk/include/VapourSynth.h deleted file mode 100644 index cdbecac..0000000 --- a/Programs/sdk/include/VapourSynth.h +++ /dev/null @@ -1,359 +0,0 @@ -/* -* Copyright (c) 2012-2017 Fredrik Mellbin -* -* This file is part of VapourSynth. -* -* VapourSynth is free software; you can redistribute it and/or -* modify it under the terms of the GNU Lesser General Public -* License as published by the Free Software Foundation; either -* version 2.1 of the License, or (at your option) any later version. -* -* VapourSynth is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -* Lesser General Public License for more details. -* -* You should have received a copy of the GNU Lesser General Public -* License along with VapourSynth; if not, write to the Free Software -* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -#ifndef VAPOURSYNTH_H -#define VAPOURSYNTH_H - -#include - -#define VAPOURSYNTH_API_MAJOR 3 -#define VAPOURSYNTH_API_MINOR 6 -#define VAPOURSYNTH_API_VERSION ((VAPOURSYNTH_API_MAJOR << 16) | (VAPOURSYNTH_API_MINOR)) - -/* Convenience for C++ users. */ -#ifdef __cplusplus -# define VS_EXTERN_C extern "C" -# if __cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1900) -# define VS_NOEXCEPT noexcept -# else -# define VS_NOEXCEPT -# endif -# if __cplusplus >= 201402L || (defined(_MSC_VER) && _MSC_VER >= 1900) -# define VS_DEPRECATE(REASON) [[deprecated(REASON)]] -# else -# define VS_DEPRECATE(REASON) -# endif -#else -# define VS_EXTERN_C -# define VS_NOEXCEPT -# define VS_DEPRECATE(REASON) -#endif - -#if defined(_WIN32) && !defined(_WIN64) -# define VS_CC __stdcall -#else -# define VS_CC -#endif - -/* And now for some symbol hide-and-seek... */ -#if defined(_WIN32) /* Windows being special */ -# define VS_EXTERNAL_API(ret) VS_EXTERN_C __declspec(dllexport) ret VS_CC -#elif defined(__GNUC__) && __GNUC__ >= 4 -# define VS_EXTERNAL_API(ret) VS_EXTERN_C __attribute__((visibility("default"))) ret VS_CC -#else -# define VS_EXTERNAL_API(ret) VS_EXTERN_C ret VS_CC -#endif - -#if !defined(VS_CORE_EXPORTS) && defined(_WIN32) -# define VS_API(ret) VS_EXTERN_C __declspec(dllimport) ret VS_CC -#else -# define VS_API(ret) VS_EXTERNAL_API(ret) -#endif - -typedef struct VSFrameRef VSFrameRef; -typedef struct VSNodeRef VSNodeRef; -typedef struct VSCore VSCore; -typedef struct VSPlugin VSPlugin; -typedef struct VSNode VSNode; -typedef struct VSFuncRef VSFuncRef; -typedef struct VSMap VSMap; -typedef struct VSAPI VSAPI; -typedef struct VSFrameContext VSFrameContext; - -typedef enum VSColorFamily { - /* all planar formats */ - cmGray = 1000000, - cmRGB = 2000000, - cmYUV = 3000000, - cmYCoCg = 4000000, - /* special for compatibility */ - cmCompat = 9000000 -} VSColorFamily; - -typedef enum VSSampleType { - stInteger = 0, - stFloat = 1 -} VSSampleType; - -/* The +10 is so people won't be using the constants interchangeably "by accident" */ -typedef enum VSPresetFormat { - pfNone = 0, - - pfGray8 = cmGray + 10, - pfGray16, - - pfGrayH, - pfGrayS, - - pfYUV420P8 = cmYUV + 10, - pfYUV422P8, - pfYUV444P8, - pfYUV410P8, - pfYUV411P8, - pfYUV440P8, - - pfYUV420P9, - pfYUV422P9, - pfYUV444P9, - - pfYUV420P10, - pfYUV422P10, - pfYUV444P10, - - pfYUV420P16, - pfYUV422P16, - pfYUV444P16, - - pfYUV444PH, - pfYUV444PS, - - pfYUV420P12, - pfYUV422P12, - pfYUV444P12, - - pfYUV420P14, - pfYUV422P14, - pfYUV444P14, - - pfRGB24 = cmRGB + 10, - pfRGB27, - pfRGB30, - pfRGB48, - - pfRGBH, - pfRGBS, - - /* special for compatibility, if you implement these in any filter I'll personally kill you */ - /* I'll also change their ids around to break your stuff regularly */ - pfCompatBGR32 = cmCompat + 10, - pfCompatYUY2 -} VSPresetFormat; - -typedef enum VSFilterMode { - fmParallel = 100, /* completely parallel execution */ - fmParallelRequests = 200, /* for filters that are serial in nature but can request one or more frames they need in advance */ - fmUnordered = 300, /* for filters that modify their internal state every request */ - fmSerial = 400 /* for source filters and compatibility with other filtering architectures */ -} VSFilterMode; - -typedef struct VSFormat { - char name[32]; - int id; - int colorFamily; /* see VSColorFamily */ - int sampleType; /* see VSSampleType */ - int bitsPerSample; /* number of significant bits */ - int bytesPerSample; /* actual storage is always in a power of 2 and the smallest possible that can fit the number of bits used per sample */ - - int subSamplingW; /* log2 subsampling factor, applied to second and third plane */ - int subSamplingH; - - int numPlanes; /* implicit from colorFamily */ -} VSFormat; - -typedef enum VSNodeFlags { - nfNoCache = 1, - nfIsCache = 2, - nfMakeLinear = 4 /* api 3.3 */ -} VSNodeFlags; - -typedef enum VSPropTypes { - ptUnset = 'u', - ptInt = 'i', - ptFloat = 'f', - ptData = 's', - ptNode = 'c', - ptFrame = 'v', - ptFunction = 'm' -} VSPropTypes; - -typedef enum VSGetPropErrors { - peUnset = 1, - peType = 2, - peIndex = 4 -} VSGetPropErrors; - -typedef enum VSPropAppendMode { - paReplace = 0, - paAppend = 1, - paTouch = 2 -} VSPropAppendMode; - -typedef struct VSCoreInfo { - const char *versionString; - int core; - int api; - int numThreads; - int64_t maxFramebufferSize; - int64_t usedFramebufferSize; -} VSCoreInfo; - -typedef struct VSVideoInfo { - const VSFormat *format; - int64_t fpsNum; - int64_t fpsDen; - int width; - int height; - int numFrames; /* api 3.2 - no longer allowed to be 0 */ - int flags; -} VSVideoInfo; - -typedef enum VSActivationReason { - arInitial = 0, - arFrameReady = 1, - arAllFramesReady = 2, - arError = -1 -} VSActivationReason; - -typedef enum VSMessageType { - mtDebug = 0, - mtWarning = 1, - mtCritical = 2, - mtFatal = 3 -} VSMessageType; - -/* core entry point */ -typedef const VSAPI *(VS_CC *VSGetVapourSynthAPI)(int version); - -/* plugin function and filter typedefs */ -typedef void (VS_CC *VSPublicFunction)(const VSMap *in, VSMap *out, void *userData, VSCore *core, const VSAPI *vsapi); -typedef void (VS_CC *VSRegisterFunction)(const char *name, const char *args, VSPublicFunction argsFunc, void *functionData, VSPlugin *plugin); -typedef void (VS_CC *VSConfigPlugin)(const char *identifier, const char *defaultNamespace, const char *name, int apiVersion, int readonly, VSPlugin *plugin); -typedef void (VS_CC *VSInitPlugin)(VSConfigPlugin configFunc, VSRegisterFunction registerFunc, VSPlugin *plugin); -typedef void (VS_CC *VSFreeFuncData)(void *userData); -typedef void (VS_CC *VSFilterInit)(VSMap *in, VSMap *out, void **instanceData, VSNode *node, VSCore *core, const VSAPI *vsapi); -typedef const VSFrameRef *(VS_CC *VSFilterGetFrame)(int n, int activationReason, void **instanceData, void **frameData, VSFrameContext *frameCtx, VSCore *core, const VSAPI *vsapi); -typedef void (VS_CC *VSFilterFree)(void *instanceData, VSCore *core, const VSAPI *vsapi); - -/* other */ -typedef void (VS_CC *VSFrameDoneCallback)(void *userData, const VSFrameRef *f, int n, VSNodeRef *, const char *errorMsg); -typedef void (VS_CC *VSMessageHandler)(int msgType, const char *msg, void *userData); -typedef void (VS_CC *VSMessageHandlerFree)(void *userData); - -struct VSAPI { - VSCore *(VS_CC *createCore)(int threads) VS_NOEXCEPT; - void (VS_CC *freeCore)(VSCore *core) VS_NOEXCEPT; - - VS_DEPRECATE("getCoreInfo has been deprecated as of api 3.6, use getCoreInfo2 instead") - const VSCoreInfo *(VS_CC *getCoreInfo)(VSCore *core) VS_NOEXCEPT; - - const VSFrameRef *(VS_CC *cloneFrameRef)(const VSFrameRef *f) VS_NOEXCEPT; - VSNodeRef *(VS_CC *cloneNodeRef)(VSNodeRef *node) VS_NOEXCEPT; - VSFuncRef *(VS_CC *cloneFuncRef)(VSFuncRef *f) VS_NOEXCEPT; - - void (VS_CC *freeFrame)(const VSFrameRef *f) VS_NOEXCEPT; - void (VS_CC *freeNode)(VSNodeRef *node) VS_NOEXCEPT; - void (VS_CC *freeFunc)(VSFuncRef *f) VS_NOEXCEPT; - - VSFrameRef *(VS_CC *newVideoFrame)(const VSFormat *format, int width, int height, const VSFrameRef *propSrc, VSCore *core) VS_NOEXCEPT; - VSFrameRef *(VS_CC *copyFrame)(const VSFrameRef *f, VSCore *core) VS_NOEXCEPT; - void (VS_CC *copyFrameProps)(const VSFrameRef *src, VSFrameRef *dst, VSCore *core) VS_NOEXCEPT; - - void (VS_CC *registerFunction)(const char *name, const char *args, VSPublicFunction argsFunc, void *functionData, VSPlugin *plugin) VS_NOEXCEPT; - VSPlugin *(VS_CC *getPluginById)(const char *identifier, VSCore *core) VS_NOEXCEPT; - VSPlugin *(VS_CC *getPluginByNs)(const char *ns, VSCore *core) VS_NOEXCEPT; - VSMap *(VS_CC *getPlugins)(VSCore *core) VS_NOEXCEPT; - VSMap *(VS_CC *getFunctions)(VSPlugin *plugin) VS_NOEXCEPT; - void (VS_CC *createFilter)(const VSMap *in, VSMap *out, const char *name, VSFilterInit init, VSFilterGetFrame getFrame, VSFilterFree free, int filterMode, int flags, void *instanceData, VSCore *core) VS_NOEXCEPT; - void (VS_CC *setError)(VSMap *map, const char *errorMessage) VS_NOEXCEPT; /* use to signal errors outside filter getframe functions */ - const char *(VS_CC *getError)(const VSMap *map) VS_NOEXCEPT; /* use to query errors, returns 0 if no error */ - void (VS_CC *setFilterError)(const char *errorMessage, VSFrameContext *frameCtx) VS_NOEXCEPT; /* use to signal errors in the filter getframe function */ - VSMap *(VS_CC *invoke)(VSPlugin *plugin, const char *name, const VSMap *args) VS_NOEXCEPT; - - const VSFormat *(VS_CC *getFormatPreset)(int id, VSCore *core) VS_NOEXCEPT; - const VSFormat *(VS_CC *registerFormat)(int colorFamily, int sampleType, int bitsPerSample, int subSamplingW, int subSamplingH, VSCore *core) VS_NOEXCEPT; - - const VSFrameRef *(VS_CC *getFrame)(int n, VSNodeRef *node, char *errorMsg, int bufSize) VS_NOEXCEPT; /* do never use inside a filter's getframe function, for external applications using the core as a library or for requesting frames in a filter constructor */ - void (VS_CC *getFrameAsync)(int n, VSNodeRef *node, VSFrameDoneCallback callback, void *userData) VS_NOEXCEPT; /* do never use inside a filter's getframe function, for external applications using the core as a library or for requesting frames in a filter constructor */ - const VSFrameRef *(VS_CC *getFrameFilter)(int n, VSNodeRef *node, VSFrameContext *frameCtx) VS_NOEXCEPT; /* only use inside a filter's getframe function */ - void (VS_CC *requestFrameFilter)(int n, VSNodeRef *node, VSFrameContext *frameCtx) VS_NOEXCEPT; /* only use inside a filter's getframe function */ - void (VS_CC *queryCompletedFrame)(VSNodeRef **node, int *n, VSFrameContext *frameCtx) VS_NOEXCEPT; /* only use inside a filter's getframe function */ - void (VS_CC *releaseFrameEarly)(VSNodeRef *node, int n, VSFrameContext *frameCtx) VS_NOEXCEPT; /* only use inside a filter's getframe function */ - - int (VS_CC *getStride)(const VSFrameRef *f, int plane) VS_NOEXCEPT; - const uint8_t *(VS_CC *getReadPtr)(const VSFrameRef *f, int plane) VS_NOEXCEPT; - uint8_t *(VS_CC *getWritePtr)(VSFrameRef *f, int plane) VS_NOEXCEPT; - - VSFuncRef *(VS_CC *createFunc)(VSPublicFunction func, void *userData, VSFreeFuncData free, VSCore *core, const VSAPI *vsapi) VS_NOEXCEPT; - void (VS_CC *callFunc)(VSFuncRef *func, const VSMap *in, VSMap *out, VSCore *core, const VSAPI *vsapi) VS_NOEXCEPT; /* core and vsapi arguments are completely ignored, they only remain to preserve ABI */ - - /* property access functions */ - VSMap *(VS_CC *createMap)(void) VS_NOEXCEPT; - void (VS_CC *freeMap)(VSMap *map) VS_NOEXCEPT; - void (VS_CC *clearMap)(VSMap *map) VS_NOEXCEPT; - - const VSVideoInfo *(VS_CC *getVideoInfo)(VSNodeRef *node) VS_NOEXCEPT; - void (VS_CC *setVideoInfo)(const VSVideoInfo *vi, int numOutputs, VSNode *node) VS_NOEXCEPT; - const VSFormat *(VS_CC *getFrameFormat)(const VSFrameRef *f) VS_NOEXCEPT; - int (VS_CC *getFrameWidth)(const VSFrameRef *f, int plane) VS_NOEXCEPT; - int (VS_CC *getFrameHeight)(const VSFrameRef *f, int plane) VS_NOEXCEPT; - const VSMap *(VS_CC *getFramePropsRO)(const VSFrameRef *f) VS_NOEXCEPT; - VSMap *(VS_CC *getFramePropsRW)(VSFrameRef *f) VS_NOEXCEPT; - - int (VS_CC *propNumKeys)(const VSMap *map) VS_NOEXCEPT; - const char *(VS_CC *propGetKey)(const VSMap *map, int index) VS_NOEXCEPT; - int (VS_CC *propNumElements)(const VSMap *map, const char *key) VS_NOEXCEPT; - char (VS_CC *propGetType)(const VSMap *map, const char *key) VS_NOEXCEPT; - - int64_t(VS_CC *propGetInt)(const VSMap *map, const char *key, int index, int *error) VS_NOEXCEPT; - double(VS_CC *propGetFloat)(const VSMap *map, const char *key, int index, int *error) VS_NOEXCEPT; - const char *(VS_CC *propGetData)(const VSMap *map, const char *key, int index, int *error) VS_NOEXCEPT; - int (VS_CC *propGetDataSize)(const VSMap *map, const char *key, int index, int *error) VS_NOEXCEPT; - VSNodeRef *(VS_CC *propGetNode)(const VSMap *map, const char *key, int index, int *error) VS_NOEXCEPT; - const VSFrameRef *(VS_CC *propGetFrame)(const VSMap *map, const char *key, int index, int *error) VS_NOEXCEPT; - VSFuncRef *(VS_CC *propGetFunc)(const VSMap *map, const char *key, int index, int *error) VS_NOEXCEPT; - - int (VS_CC *propDeleteKey)(VSMap *map, const char *key) VS_NOEXCEPT; - int (VS_CC *propSetInt)(VSMap *map, const char *key, int64_t i, int append) VS_NOEXCEPT; - int (VS_CC *propSetFloat)(VSMap *map, const char *key, double d, int append) VS_NOEXCEPT; - int (VS_CC *propSetData)(VSMap *map, const char *key, const char *data, int size, int append) VS_NOEXCEPT; - int (VS_CC *propSetNode)(VSMap *map, const char *key, VSNodeRef *node, int append) VS_NOEXCEPT; - int (VS_CC *propSetFrame)(VSMap *map, const char *key, const VSFrameRef *f, int append) VS_NOEXCEPT; - int (VS_CC *propSetFunc)(VSMap *map, const char *key, VSFuncRef *func, int append) VS_NOEXCEPT; - - int64_t (VS_CC *setMaxCacheSize)(int64_t bytes, VSCore *core) VS_NOEXCEPT; - int (VS_CC *getOutputIndex)(VSFrameContext *frameCtx) VS_NOEXCEPT; - VSFrameRef *(VS_CC *newVideoFrame2)(const VSFormat *format, int width, int height, const VSFrameRef **planeSrc, const int *planes, const VSFrameRef *propSrc, VSCore *core) VS_NOEXCEPT; - - VS_DEPRECATE("setMessageHandler has been deprecated as of api 3.6, use addMessageHandler and removeMessageHandler instead") - void (VS_CC *setMessageHandler)(VSMessageHandler handler, void *userData) VS_NOEXCEPT; - - int (VS_CC *setThreadCount)(int threads, VSCore *core) VS_NOEXCEPT; - - const char *(VS_CC *getPluginPath)(const VSPlugin *plugin) VS_NOEXCEPT; - - /* api 3.1 */ - const int64_t *(VS_CC *propGetIntArray)(const VSMap *map, const char *key, int *error) VS_NOEXCEPT; - const double *(VS_CC *propGetFloatArray)(const VSMap *map, const char *key, int *error) VS_NOEXCEPT; - - int (VS_CC *propSetIntArray)(VSMap *map, const char *key, const int64_t *i, int size) VS_NOEXCEPT; - int (VS_CC *propSetFloatArray)(VSMap *map, const char *key, const double *d, int size) VS_NOEXCEPT; - - /* api 3.4 */ - void (VS_CC *logMessage)(int msgType, const char *msg) VS_NOEXCEPT; - - /* api 3.6 */ - int (VS_CC *addMessageHandler)(VSMessageHandler handler, VSMessageHandlerFree free, void *userData) VS_NOEXCEPT; - int (VS_CC *removeMessageHandler)(int id) VS_NOEXCEPT; - void (VS_CC *getCoreInfo2)(VSCore *core, VSCoreInfo *info) VS_NOEXCEPT; -}; - -VS_API(const VSAPI *) getVapourSynthAPI(int version) VS_NOEXCEPT; - -#endif /* VAPOURSYNTH_H */ diff --git a/Programs/sdk/include/VapourSynth4.h b/Programs/sdk/include/VapourSynth4.h deleted file mode 100644 index 00b2d57..0000000 --- a/Programs/sdk/include/VapourSynth4.h +++ /dev/null @@ -1,489 +0,0 @@ -/* -* Copyright (c) 2012-2021 Fredrik Mellbin -* -* This file is part of VapourSynth. -* -* VapourSynth is free software; you can redistribute it and/or -* modify it under the terms of the GNU Lesser General Public -* License as published by the Free Software Foundation; either -* version 2.1 of the License, or (at your option) any later version. -* -* VapourSynth is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -* Lesser General Public License for more details. -* -* You should have received a copy of the GNU Lesser General Public -* License along with VapourSynth; if not, write to the Free Software -* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -#ifndef VAPOURSYNTH4_H -#define VAPOURSYNTH4_H - -#include -#include - -#define VS_MAKE_VERSION(major, minor) (((major) << 16) | (minor)) -#define VAPOURSYNTH_API_MAJOR 4 -#define VAPOURSYNTH_API_MINOR 0 -#define VAPOURSYNTH_API_VERSION VS_MAKE_VERSION(VAPOURSYNTH_API_MAJOR, VAPOURSYNTH_API_MINOR) - -#define VS_AUDIO_FRAME_SAMPLES 3072 - -/* Convenience for C++ users. */ -#ifdef __cplusplus -# define VS_EXTERN_C extern "C" -# if __cplusplus >= 201103L || (defined(_MSVC_LANG) && _MSVC_LANG >= 201103L) -# define VS_NOEXCEPT noexcept -# else -# define VS_NOEXCEPT -# endif -#else -# define VS_EXTERN_C -# define VS_NOEXCEPT -#endif - -#if defined(_WIN32) && !defined(_WIN64) -# define VS_CC __stdcall -#else -# define VS_CC -#endif - -/* And now for some symbol hide-and-seek... */ -#if defined(_WIN32) /* Windows being special */ -# define VS_EXTERNAL_API(ret) VS_EXTERN_C __declspec(dllexport) ret VS_CC -#elif defined(__GNUC__) && __GNUC__ >= 4 -# define VS_EXTERNAL_API(ret) VS_EXTERN_C __attribute__((visibility("default"))) ret VS_CC -#else -# define VS_EXTERNAL_API(ret) VS_EXTERN_C ret VS_CC -#endif - -#if !defined(VS_CORE_EXPORTS) && defined(_WIN32) -# define VS_API(ret) VS_EXTERN_C __declspec(dllimport) ret VS_CC -#else -# define VS_API(ret) VS_EXTERNAL_API(ret) -#endif - -typedef struct VSFrame VSFrame; -typedef struct VSNode VSNode; -typedef struct VSCore VSCore; -typedef struct VSPlugin VSPlugin; -typedef struct VSPluginFunction VSPluginFunction; -typedef struct VSFunction VSFunction; -typedef struct VSMap VSMap; -typedef struct VSLogHandle VSLogHandle; -typedef struct VSFrameContext VSFrameContext; -typedef struct VSPLUGINAPI VSPLUGINAPI; -typedef struct VSAPI VSAPI; - -typedef enum VSColorFamily { - cfUndefined = 0, - cfGray = 1, - cfRGB = 2, - cfYUV = 3 -} VSColorFamily; - -typedef enum VSSampleType { - stInteger = 0, - stFloat = 1 -} VSSampleType; - -#define VS_MAKE_VIDEO_ID(colorFamily, sampleType, bitsPerSample, subSamplingW, subSamplingH) ((colorFamily << 28) | (sampleType << 24) | (bitsPerSample << 16) | (subSamplingW << 8) | (subSamplingH << 0)) - -typedef enum VSPresetVideoFormat { - pfNone = 0, - - pfGray8 = VS_MAKE_VIDEO_ID(cfGray, stInteger, 8, 0, 0), - pfGray9 = VS_MAKE_VIDEO_ID(cfGray, stInteger, 9, 0, 0), - pfGray10 = VS_MAKE_VIDEO_ID(cfGray, stInteger, 10, 0, 0), - pfGray12 = VS_MAKE_VIDEO_ID(cfGray, stInteger, 12, 0, 0), - pfGray14 = VS_MAKE_VIDEO_ID(cfGray, stInteger, 14, 0, 0), - pfGray16 = VS_MAKE_VIDEO_ID(cfGray, stInteger, 16, 0, 0), - pfGray32 = VS_MAKE_VIDEO_ID(cfGray, stInteger, 32, 0, 0), - - pfGrayH = VS_MAKE_VIDEO_ID(cfGray, stFloat, 16, 0, 0), - pfGrayS = VS_MAKE_VIDEO_ID(cfGray, stFloat, 32, 0, 0), - - pfYUV410P8 = VS_MAKE_VIDEO_ID(cfYUV, stInteger, 8, 2, 2), - pfYUV411P8 = VS_MAKE_VIDEO_ID(cfYUV, stInteger, 8, 2, 0), - pfYUV440P8 = VS_MAKE_VIDEO_ID(cfYUV, stInteger, 8, 0, 1), - - pfYUV420P8 = VS_MAKE_VIDEO_ID(cfYUV, stInteger, 8, 1, 1), - pfYUV422P8 = VS_MAKE_VIDEO_ID(cfYUV, stInteger, 8, 1, 0), - pfYUV444P8 = VS_MAKE_VIDEO_ID(cfYUV, stInteger, 8, 0, 0), - - pfYUV420P9 = VS_MAKE_VIDEO_ID(cfYUV, stInteger, 9, 1, 1), - pfYUV422P9 = VS_MAKE_VIDEO_ID(cfYUV, stInteger, 9, 1, 0), - pfYUV444P9 = VS_MAKE_VIDEO_ID(cfYUV, stInteger, 9, 0, 0), - - pfYUV420P10 = VS_MAKE_VIDEO_ID(cfYUV, stInteger, 10, 1, 1), - pfYUV422P10 = VS_MAKE_VIDEO_ID(cfYUV, stInteger, 10, 1, 0), - pfYUV444P10 = VS_MAKE_VIDEO_ID(cfYUV, stInteger, 10, 0, 0), - - pfYUV420P12 = VS_MAKE_VIDEO_ID(cfYUV, stInteger, 12, 1, 1), - pfYUV422P12 = VS_MAKE_VIDEO_ID(cfYUV, stInteger, 12, 1, 0), - pfYUV444P12 = VS_MAKE_VIDEO_ID(cfYUV, stInteger, 12, 0, 0), - - pfYUV420P14 = VS_MAKE_VIDEO_ID(cfYUV, stInteger, 14, 1, 1), - pfYUV422P14 = VS_MAKE_VIDEO_ID(cfYUV, stInteger, 14, 1, 0), - pfYUV444P14 = VS_MAKE_VIDEO_ID(cfYUV, stInteger, 14, 0, 0), - - pfYUV420P16 = VS_MAKE_VIDEO_ID(cfYUV, stInteger, 16, 1, 1), - pfYUV422P16 = VS_MAKE_VIDEO_ID(cfYUV, stInteger, 16, 1, 0), - pfYUV444P16 = VS_MAKE_VIDEO_ID(cfYUV, stInteger, 16, 0, 0), - - pfYUV444PH = VS_MAKE_VIDEO_ID(cfYUV, stFloat, 16, 0, 0), - pfYUV444PS = VS_MAKE_VIDEO_ID(cfYUV, stFloat, 32, 0, 0), - - pfRGB24 = VS_MAKE_VIDEO_ID(cfRGB, stInteger, 8, 0, 0), - pfRGB27 = VS_MAKE_VIDEO_ID(cfRGB, stInteger, 9, 0, 0), - pfRGB30 = VS_MAKE_VIDEO_ID(cfRGB, stInteger, 10, 0, 0), - pfRGB36 = VS_MAKE_VIDEO_ID(cfRGB, stInteger, 12, 0, 0), - pfRGB42 = VS_MAKE_VIDEO_ID(cfRGB, stInteger, 14, 0, 0), - pfRGB48 = VS_MAKE_VIDEO_ID(cfRGB, stInteger, 16, 0, 0), - - pfRGBH = VS_MAKE_VIDEO_ID(cfRGB, stFloat, 16, 0, 0), - pfRGBS = VS_MAKE_VIDEO_ID(cfRGB, stFloat, 32, 0, 0), -} VSPresetVideoFormat; - -#undef VS_MAKE_VIDEO_ID - - -typedef enum VSFilterMode { - fmParallel = 0, /* completely parallel execution */ - fmParallelRequests = 1, /* for filters that are serial in nature but can request one or more frames they need in advance */ - fmUnordered = 2, /* for filters that modify their internal state every request like source filters that read a file */ - fmFrameState = 3 /* DO NOT USE UNLESS ABSOLUTELY NECESSARY, for compatibility with external code that can only keep the processing state of a single frame at a time */ -} VSFilterMode; - -typedef enum VSMediaType { - mtVideo = 1, - mtAudio = 2 -} VSMediaType; - -typedef struct VSVideoFormat { - int colorFamily; /* see VSColorFamily */ - int sampleType; /* see VSSampleType */ - int bitsPerSample; /* number of significant bits */ - int bytesPerSample; /* actual storage is always in a power of 2 and the smallest possible that can fit the number of bits used per sample */ - - int subSamplingW; /* log2 subsampling factor, applied to second and third plane */ - int subSamplingH; /* log2 subsampling factor, applied to second and third plane */ - - int numPlanes; /* implicit from colorFamily */ -} VSVideoFormat; - -typedef enum VSAudioChannels { - acFrontLeft = 0, - acFrontRight = 1, - acFrontCenter = 2, - acLowFrequency = 3, - acBackLeft = 4, - acBackRight = 5, - acFrontLeftOFCenter = 6, - acFrontRightOFCenter = 7, - acBackCenter = 8, - acSideLeft = 9, - acSideRight = 10, - acTopCenter = 11, - acTopFrontLeft = 12, - acTopFrontCenter = 13, - acTopFrontRight = 14, - acTopBackLeft = 15, - acTopBackCenter = 16, - acTopBackRight = 17, - acStereoLeft = 29, - acStereoRight = 30, - acWideLeft = 31, - acWideRight = 32, - acSurroundDirectLeft = 33, - acSurroundDirectRight = 34, - acLowFrequency2 = 35 -} VSAudioChannels; - -typedef struct VSAudioFormat { - int sampleType; - int bitsPerSample; - int bytesPerSample; /* implicit from bitsPerSample */ - int numChannels; /* implicit from channelLayout */ - uint64_t channelLayout; -} VSAudioFormat; - -typedef enum VSPropertyType { - ptUnset = 0, - ptInt = 1, - ptFloat = 2, - ptData = 3, - ptFunction = 4, - ptVideoNode = 5, - ptAudioNode = 6, - ptVideoFrame = 7, - ptAudioFrame = 8 -} VSPropertyType; - -typedef enum VSMapPropertyError { - peSuccess = 0, - peUnset = 1, /* no key exists */ - peType = 2, /* key exists but not of a compatible type */ - peIndex = 4, /* index out of bounds */ - peError = 3 /* map has error state set */ -} VSMapPropertyError; - -typedef enum VSMapAppendMode { - maReplace = 0, - maAppend = 1 -} VSMapAppendMode; - -typedef struct VSCoreInfo { - const char *versionString; - int core; - int api; - int numThreads; - int64_t maxFramebufferSize; - int64_t usedFramebufferSize; -} VSCoreInfo; - -typedef struct VSVideoInfo { - VSVideoFormat format; - int64_t fpsNum; - int64_t fpsDen; - int width; - int height; - int numFrames; -} VSVideoInfo; - -typedef struct VSAudioInfo { - VSAudioFormat format; - int sampleRate; - int64_t numSamples; - int numFrames; /* the total number of audio frames needed to hold numSamples, implicit from numSamples when calling createAudioFilter */ -} VSAudioInfo; - -typedef enum VSActivationReason { - arInitial = 0, - arAllFramesReady = 1, - arError = -1 -} VSActivationReason; - -typedef enum VSMessageType { - mtDebug = 0, - mtInformation = 1, - mtWarning = 2, - mtCritical = 3, - mtFatal = 4 /* also terminates the process, should generally not be used by normal filters */ -} VSMessageType; - -typedef enum VSCoreCreationFlags { - ccfEnableGraphInspection = 1, - ccfDisableAutoLoading = 2, - ccfDisableLibraryUnloading = 4 -} VSCoreCreationFlags; - -typedef enum VSPluginConfigFlags { - pcModifiable = 1 -} VSPluginConfigFlags; - -typedef enum VSDataTypeHint { - dtUnknown = -1, - dtBinary = 0, - dtUtf8 = 1 -} VSDataTypeHint; - -typedef enum VSRequestPattern { - rpGeneral = 0, /* General pattern */ - rpNoFrameReuse = 1, /* When requesting all output frames from the filter no frame will be requested more than once from this input clip, never requests frames beyond the end of the clip */ - rpStrictSpatial = 2 /* Always (and only) requests frame n from input clip when generating output frame n, never requests frames beyond the end of the clip */ -} VSRequestPattern; - -typedef enum VSCacheMode { - cmAuto = -1, - cmForceDisable = 0, - cmForceEnable = 1 -} VSCacheMode; - -/* Core entry point */ -typedef const VSAPI *(VS_CC *VSGetVapourSynthAPI)(int version); - -/* Plugin, function and filter related */ -typedef void (VS_CC *VSPublicFunction)(const VSMap *in, VSMap *out, void *userData, VSCore *core, const VSAPI *vsapi); -typedef void (VS_CC *VSInitPlugin)(VSPlugin *plugin, const VSPLUGINAPI *vspapi); -typedef void (VS_CC *VSFreeFunctionData)(void *userData); -typedef const VSFrame *(VS_CC *VSFilterGetFrame)(int n, int activationReason, void *instanceData, void **frameData, VSFrameContext *frameCtx, VSCore *core, const VSAPI *vsapi); -typedef void (VS_CC *VSFilterFree)(void *instanceData, VSCore *core, const VSAPI *vsapi); - -/* Other */ -typedef void (VS_CC *VSFrameDoneCallback)(void *userData, const VSFrame *f, int n, VSNode *node, const char *errorMsg); -typedef void (VS_CC *VSLogHandler)(int msgType, const char *msg, void *userData); -typedef void (VS_CC *VSLogHandlerFree)(void *userData); - -struct VSPLUGINAPI { - int (VS_CC *getAPIVersion)(void) VS_NOEXCEPT; /* returns VAPOURSYNTH_API_VERSION of the library */ - int (VS_CC *configPlugin)(const char *identifier, const char *pluginNamespace, const char *name, int pluginVersion, int apiVersion, int flags, VSPlugin *plugin) VS_NOEXCEPT; /* use the VS_MAKE_VERSION macro for pluginVersion */ - int (VS_CC *registerFunction)(const char *name, const char *args, const char *returnType, VSPublicFunction argsFunc, void *functionData, VSPlugin *plugin) VS_NOEXCEPT; /* non-zero return value on success */ -}; - -typedef struct VSFilterDependency { - VSNode *source; - int requestPattern; /* VSRequestPattern */ -} VSFilterDependency; - -struct VSAPI { - /* Audio and video filter related including nodes */ - void (VS_CC *createVideoFilter)(VSMap *out, const char *name, const VSVideoInfo *vi, VSFilterGetFrame getFrame, VSFilterFree free, int filterMode, const VSFilterDependency *dependencies, int numDeps, void *instanceData, VSCore *core) VS_NOEXCEPT; /* output nodes are appended to the clip key in the out map */ - VSNode *(VS_CC *createVideoFilter2)(const char *name, const VSVideoInfo *vi, VSFilterGetFrame getFrame, VSFilterFree free, int filterMode, const VSFilterDependency *dependencies, int numDeps, void *instanceData, VSCore *core) VS_NOEXCEPT; /* same as createVideoFilter but returns a pointer to the VSNode directly or NULL on failure */ - void (VS_CC *createAudioFilter)(VSMap *out, const char *name, const VSAudioInfo *ai, VSFilterGetFrame getFrame, VSFilterFree free, int filterMode, const VSFilterDependency *dependencies, int numDeps, void *instanceData, VSCore *core) VS_NOEXCEPT; /* output nodes are appended to the clip key in the out map */ - VSNode *(VS_CC *createAudioFilter2)(const char *name, const VSAudioInfo *ai, VSFilterGetFrame getFrame, VSFilterFree free, int filterMode, const VSFilterDependency *dependencies, int numDeps, void *instanceData, VSCore *core) VS_NOEXCEPT; /* same as createAudioFilter but returns a pointer to the VSNode directly or NULL on failure */ - int (VS_CC *setLinearFilter)(VSNode *node) VS_NOEXCEPT; /* Use right after create*Filter*, sets the correct cache mode for using the cacheFrame API and returns the recommended upper number of additional frames to cache per request */ - void (VS_CC *setCacheMode)(VSNode *node, int mode) VS_NOEXCEPT; /* VSCacheMode, changing the cache mode also resets all options to their default */ - void (VS_CC *setCacheOptions)(VSNode *node, int fixedSize, int maxSize, int maxHistorySize) VS_NOEXCEPT; /* passing -1 means no change */ - - void (VS_CC *freeNode)(VSNode *node) VS_NOEXCEPT; - VSNode *(VS_CC *addNodeRef)(VSNode *node) VS_NOEXCEPT; - int (VS_CC *getNodeType)(VSNode *node) VS_NOEXCEPT; /* returns VSMediaType */ - const VSVideoInfo *(VS_CC *getVideoInfo)(VSNode *node) VS_NOEXCEPT; - const VSAudioInfo *(VS_CC *getAudioInfo)(VSNode *node) VS_NOEXCEPT; - - /* Frame related functions */ - VSFrame *(VS_CC *newVideoFrame)(const VSVideoFormat *format, int width, int height, const VSFrame *propSrc, VSCore *core) VS_NOEXCEPT; - VSFrame *(VS_CC *newVideoFrame2)(const VSVideoFormat *format, int width, int height, const VSFrame **planeSrc, const int *planes, const VSFrame *propSrc, VSCore *core) VS_NOEXCEPT; /* same as newVideoFrame but allows the specified planes to be effectively copied from the source frames */ - VSFrame *(VS_CC *newAudioFrame)(const VSAudioFormat *format, int numSamples, const VSFrame *propSrc, VSCore *core) VS_NOEXCEPT; - VSFrame *(VS_CC *newAudioFrame2)(const VSAudioFormat *format, int numSamples, const VSFrame **channelSrc, const int *channels, const VSFrame *propSrc, VSCore *core) VS_NOEXCEPT; /* same as newAudioFrame but allows the specified channels to be effectively copied from the source frames */ - void (VS_CC *freeFrame)(const VSFrame *f) VS_NOEXCEPT; - const VSFrame *(VS_CC *addFrameRef)(const VSFrame *f) VS_NOEXCEPT; - VSFrame *(VS_CC *copyFrame)(const VSFrame *f, VSCore *core) VS_NOEXCEPT; - const VSMap *(VS_CC *getFramePropertiesRO)(const VSFrame *f) VS_NOEXCEPT; - VSMap *(VS_CC *getFramePropertiesRW)(VSFrame *f) VS_NOEXCEPT; - - ptrdiff_t (VS_CC *getStride)(const VSFrame *f, int plane) VS_NOEXCEPT; - const uint8_t *(VS_CC *getReadPtr)(const VSFrame *f, int plane) VS_NOEXCEPT; - uint8_t *(VS_CC *getWritePtr)(VSFrame *f, int plane) VS_NOEXCEPT; /* calling this function invalidates previously gotten read pointers to the same frame */ - - const VSVideoFormat *(VS_CC *getVideoFrameFormat)(const VSFrame *f) VS_NOEXCEPT; - const VSAudioFormat *(VS_CC *getAudioFrameFormat)(const VSFrame *f) VS_NOEXCEPT; - int (VS_CC *getFrameType)(const VSFrame *f) VS_NOEXCEPT; /* returns VSMediaType */ - int (VS_CC *getFrameWidth)(const VSFrame *f, int plane) VS_NOEXCEPT; - int (VS_CC *getFrameHeight)(const VSFrame *f, int plane) VS_NOEXCEPT; - int (VS_CC *getFrameLength)(const VSFrame *f) VS_NOEXCEPT; /* returns the number of samples for audio frames */ - - /* General format functions */ - int (VS_CC *getVideoFormatName)(const VSVideoFormat *format, char *buffer) VS_NOEXCEPT; /* up to 32 characters including terminating null may be written to the buffer, non-zero return value on success */ - int (VS_CC *getAudioFormatName)(const VSAudioFormat *format, char *buffer) VS_NOEXCEPT; /* up to 32 characters including terminating null may be written to the buffer, non-zero return value on success */ - int (VS_CC *queryVideoFormat)(VSVideoFormat *format, int colorFamily, int sampleType, int bitsPerSample, int subSamplingW, int subSamplingH, VSCore *core) VS_NOEXCEPT; /* non-zero return value on success */ - int (VS_CC *queryAudioFormat)(VSAudioFormat *format, int sampleType, int bitsPerSample, uint64_t channelLayout, VSCore *core) VS_NOEXCEPT; /* non-zero return value on success */ - uint32_t (VS_CC *queryVideoFormatID)(int colorFamily, int sampleType, int bitsPerSample, int subSamplingW, int subSamplingH, VSCore *core) VS_NOEXCEPT; /* returns 0 on failure */ - int (VS_CC *getVideoFormatByID)(VSVideoFormat *format, uint32_t id, VSCore *core) VS_NOEXCEPT; /* non-zero return value on success */ - - /* Frame request and filter getframe functions */ - const VSFrame *(VS_CC *getFrame)(int n, VSNode *node, char *errorMsg, int bufSize) VS_NOEXCEPT; /* only for external applications using the core as a library or for requesting frames in a filter constructor, do not use inside a filter's getframe function */ - void (VS_CC *getFrameAsync)(int n, VSNode *node, VSFrameDoneCallback callback, void *userData) VS_NOEXCEPT; /* only for external applications using the core as a library or for requesting frames in a filter constructor, do not use inside a filter's getframe function */ - const VSFrame *(VS_CC *getFrameFilter)(int n, VSNode *node, VSFrameContext *frameCtx) VS_NOEXCEPT; /* only use inside a filter's getframe function */ - void (VS_CC *requestFrameFilter)(int n, VSNode *node, VSFrameContext *frameCtx) VS_NOEXCEPT; /* only use inside a filter's getframe function */ - void (VS_CC *releaseFrameEarly)(VSNode *node, int n, VSFrameContext *frameCtx) VS_NOEXCEPT; /* only use inside a filter's getframe function, unless this function is called a requested frame is kept in memory until the end of processing the current frame */ - void (VS_CC *cacheFrame)(const VSFrame *frame, int n, VSFrameContext *frameCtx) VS_NOEXCEPT; /* used to store intermediate frames in cache, useful for filters where random access is slow, must call setLinearFilter on the node before using or the result is undefined */ - void (VS_CC *setFilterError)(const char *errorMessage, VSFrameContext *frameCtx) VS_NOEXCEPT; /* used to signal errors in the filter getframe function */ - - /* External functions */ - VSFunction *(VS_CC *createFunction)(VSPublicFunction func, void *userData, VSFreeFunctionData free, VSCore *core) VS_NOEXCEPT; - void (VS_CC *freeFunction)(VSFunction *f) VS_NOEXCEPT; - VSFunction *(VS_CC *addFunctionRef)(VSFunction *f) VS_NOEXCEPT; - void (VS_CC *callFunction)(VSFunction *func, const VSMap *in, VSMap *out) VS_NOEXCEPT; - - /* Map and property access functions */ - VSMap *(VS_CC *createMap)(void) VS_NOEXCEPT; - void (VS_CC *freeMap)(VSMap *map) VS_NOEXCEPT; - void (VS_CC *clearMap)(VSMap *map) VS_NOEXCEPT; - void (VS_CC *copyMap)(const VSMap *src, VSMap *dst) VS_NOEXCEPT; /* copies all values in src to dst, if a key already exists in dst it's replaced */ - - void (VS_CC *mapSetError)(VSMap *map, const char *errorMessage) VS_NOEXCEPT; /* used to signal errors outside filter getframe function */ - const char *(VS_CC *mapGetError)(const VSMap *map) VS_NOEXCEPT; /* used to query errors, returns 0 if no error */ - - int (VS_CC *mapNumKeys)(const VSMap *map) VS_NOEXCEPT; - const char *(VS_CC *mapGetKey)(const VSMap *map, int index) VS_NOEXCEPT; - int (VS_CC *mapDeleteKey)(VSMap *map, const char *key) VS_NOEXCEPT; - int (VS_CC *mapNumElements)(const VSMap *map, const char *key) VS_NOEXCEPT; /* returns -1 if a key doesn't exist */ - int (VS_CC *mapGetType)(const VSMap *map, const char *key) VS_NOEXCEPT; /* returns VSPropertyType */ - int (VS_CC *mapSetEmpty)(VSMap *map, const char *key, int type) VS_NOEXCEPT; - - int64_t (VS_CC *mapGetInt)(const VSMap *map, const char *key, int index, int *error) VS_NOEXCEPT; - int (VS_CC *mapGetIntSaturated)(const VSMap *map, const char *key, int index, int *error) VS_NOEXCEPT; - const int64_t *(VS_CC *mapGetIntArray)(const VSMap *map, const char *key, int *error) VS_NOEXCEPT; - int (VS_CC *mapSetInt)(VSMap *map, const char *key, int64_t i, int append) VS_NOEXCEPT; - int (VS_CC *mapSetIntArray)(VSMap *map, const char *key, const int64_t *i, int size) VS_NOEXCEPT; - - double (VS_CC *mapGetFloat)(const VSMap *map, const char *key, int index, int *error) VS_NOEXCEPT; - float (VS_CC *mapGetFloatSaturated)(const VSMap *map, const char *key, int index, int *error) VS_NOEXCEPT; - const double *(VS_CC *mapGetFloatArray)(const VSMap *map, const char *key, int *error) VS_NOEXCEPT; - int (VS_CC *mapSetFloat)(VSMap *map, const char *key, double d, int append) VS_NOEXCEPT; - int (VS_CC *mapSetFloatArray)(VSMap *map, const char *key, const double *d, int size) VS_NOEXCEPT; - - const char *(VS_CC *mapGetData)(const VSMap *map, const char *key, int index, int *error) VS_NOEXCEPT; - int (VS_CC *mapGetDataSize)(const VSMap *map, const char *key, int index, int *error) VS_NOEXCEPT; - int (VS_CC *mapGetDataTypeHint)(const VSMap *map, const char *key, int index, int *error) VS_NOEXCEPT; /* returns VSDataTypeHint */ - int (VS_CC *mapSetData)(VSMap *map, const char *key, const char *data, int size, int type, int append) VS_NOEXCEPT; - - VSNode *(VS_CC *mapGetNode)(const VSMap *map, const char *key, int index, int *error) VS_NOEXCEPT; - int (VS_CC *mapSetNode)(VSMap *map, const char *key, VSNode *node, int append) VS_NOEXCEPT; /* returns 0 on success */ - int (VS_CC *mapConsumeNode)(VSMap *map, const char *key, VSNode *node, int append) VS_NOEXCEPT; /* always consumes the reference, even on error */ - - const VSFrame *(VS_CC *mapGetFrame)(const VSMap *map, const char *key, int index, int *error) VS_NOEXCEPT; - int (VS_CC *mapSetFrame)(VSMap *map, const char *key, const VSFrame *f, int append) VS_NOEXCEPT; /* returns 0 on success */ - int (VS_CC *mapConsumeFrame)(VSMap *map, const char *key, const VSFrame *f, int append) VS_NOEXCEPT; /* always consumes the reference, even on error */ - - VSFunction *(VS_CC *mapGetFunction)(const VSMap *map, const char *key, int index, int *error) VS_NOEXCEPT; - int (VS_CC *mapSetFunction)(VSMap *map, const char *key, VSFunction *func, int append) VS_NOEXCEPT; /* returns 0 on success */ - int (VS_CC *mapConsumeFunction)(VSMap *map, const char *key, VSFunction *func, int append) VS_NOEXCEPT; /* always consumes the reference, even on error */ - - /* Plugin and plugin function related */ - int (VS_CC *registerFunction)(const char *name, const char *args, const char *returnType, VSPublicFunction argsFunc, void *functionData, VSPlugin *plugin) VS_NOEXCEPT; /* non-zero return value on success */ - VSPlugin *(VS_CC *getPluginByID)(const char *identifier, VSCore *core) VS_NOEXCEPT; - VSPlugin *(VS_CC *getPluginByNamespace)(const char *ns, VSCore *core) VS_NOEXCEPT; - VSPlugin *(VS_CC *getNextPlugin)(VSPlugin *plugin, VSCore *core) VS_NOEXCEPT; /* pass NULL to get the first plugin */ - const char *(VS_CC *getPluginName)(VSPlugin *plugin) VS_NOEXCEPT; - const char *(VS_CC *getPluginID)(VSPlugin *plugin) VS_NOEXCEPT; - const char *(VS_CC *getPluginNamespace)(VSPlugin *plugin) VS_NOEXCEPT; - VSPluginFunction *(VS_CC *getNextPluginFunction)(VSPluginFunction *func, VSPlugin *plugin) VS_NOEXCEPT; /* pass NULL to get the first plugin function */ - VSPluginFunction *(VS_CC *getPluginFunctionByName)(const char *name, VSPlugin *plugin) VS_NOEXCEPT; - const char *(VS_CC *getPluginFunctionName)(VSPluginFunction *func) VS_NOEXCEPT; - const char *(VS_CC *getPluginFunctionArguments)(VSPluginFunction *func) VS_NOEXCEPT; /* returns an argument format string */ - const char *(VS_CC *getPluginFunctionReturnType)(VSPluginFunction *func) VS_NOEXCEPT; /* returns an argument format string */ - const char *(VS_CC *getPluginPath)(const VSPlugin *plugin) VS_NOEXCEPT; /* the full path to the loaded library file containing the plugin entry point */ - int (VS_CC *getPluginVersion)(const VSPlugin *plugin) VS_NOEXCEPT; - VSMap *(VS_CC *invoke)(VSPlugin *plugin, const char *name, const VSMap *args) VS_NOEXCEPT; /* user must free the returned VSMap */ - - /* Core and information */ - VSCore *(VS_CC *createCore)(int flags) VS_NOEXCEPT; /* flags uses the VSCoreCreationFlags enum */ - void (VS_CC *freeCore)(VSCore *core) VS_NOEXCEPT; /* only call this function after all node, frame and function references belonging to the core have been freed */ - int64_t(VS_CC *setMaxCacheSize)(int64_t bytes, VSCore *core) VS_NOEXCEPT; /* the total cache size at which vapoursynth more aggressively tries to reclaim memory, it is not a hard limit */ - int (VS_CC *setThreadCount)(int threads, VSCore *core) VS_NOEXCEPT; /* setting threads to 0 means automatic detection */ - void (VS_CC *getCoreInfo)(VSCore *core, VSCoreInfo *info) VS_NOEXCEPT; - int (VS_CC *getAPIVersion)(void) VS_NOEXCEPT; - - /* Message handler */ - void (VS_CC *logMessage)(int msgType, const char *msg, VSCore *core) VS_NOEXCEPT; - VSLogHandle *(VS_CC *addLogHandler)(VSLogHandler handler, VSLogHandlerFree free, void *userData, VSCore *core) VS_NOEXCEPT; /* free and userData can be NULL, returns a handle that can be passed to removeLogHandler */ - int (VS_CC *removeLogHandler)(VSLogHandle *handle, VSCore *core) VS_NOEXCEPT; /* returns non-zero if successfully removed */ - -#ifdef VS_GRAPH_API - /* Graph information */ - - /* - * These functions only exist to retrieve internal details for debug purposes and graph visualization - * They will only only work properly when used on a core created with ccfEnableGraphInspection and are - * not safe to use concurrently with frame requests or other API functions. Because of this they are - * unsuitable for use in plugins and filters. - */ - - const char *(VS_CC *getNodeCreationFunctionName)(VSNode *node, int level) VS_NOEXCEPT; /* level=0 returns the name of the function that created the filter, specifying a higher level will retrieve the function above that invoked it or NULL if a non-existent level is requested */ - const VSMap *(VS_CC *getNodeCreationFunctionArguments)(VSNode *node, int level) VS_NOEXCEPT; /* level=0 returns a copy of the arguments passed to the function that created the filter, returns NULL if a non-existent level is requested */ - const char *(VS_CC *getNodeName)(VSNode *node) VS_NOEXCEPT; /* the name passed to create*Filter */ - int (VS_CC *getNodeFilterMode)(VSNode *node) VS_NOEXCEPT; /* VSFilterMode */ - int64_t (VS_CC *getNodeFilterTime)(VSNode *node) VS_NOEXCEPT; /* time spent processing frames in nanoseconds */ - const VSFilterDependency *(VS_CC *getNodeDependencies)(VSNode *node) VS_NOEXCEPT; - int (VS_CC *getNumNodeDependencies)(VSNode *node) VS_NOEXCEPT; -#endif -}; - -VS_API(const VSAPI *) getVapourSynthAPI(int version) VS_NOEXCEPT; - -#endif /* VAPOURSYNTH4_H */ diff --git a/Programs/sdk/lib32/VSScript.lib b/Programs/sdk/lib32/VSScript.lib deleted file mode 100644 index d87b2e8fe9c0a88045e717065fc71a848278c2a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6302 zcmcIn-%ndr9RHRdV|1*P7RsDI#wI$Z5uvom)M#N~Bx68m;lX6E zF&z@GPLH2X4i6>EESw{P|{0L_`QoggEzlq>YY(DG|aF(nv&KTG4h6v zqs=&GfY&Rc3?pyIFe6MU`Og}fX6C#QA*!VqZ8?=)N)@zMbWAs44jdMjNDHyIpGyQ5 z%h{ypw4ouYqPMa^iksDQsjU8{CgdHjl>GIaUJ!hlLh{2b!4;j+j72@469Qz*?s>J> z=GAs2)^%jpttNmjAHbz%fV(K0erz8C7)FPU5WwM9fLYYtX#*&roI~9X>Mo;n2LW!h z01O2H5?Eiu`YOh)q8>>bJWvC5P!9)SAGAUMg3tyn&<&m0j?5kK)O^3~o2E_U~PE|Y>~_n(|ya>vo`!jWik zBLXsUbR!K0t>wwhb(S%*9K{uFw0E3<_RMRrZL+(uhR8 z-7Vpum2$-nab$_Z!sUl;<1?eAR8ut$(w&7^9@rm2Z#x47CAapxo?msRUN~rlmF9iz zH5Qc08w6Wd+f!Uo_uCh{b9HC3Sz_D&y17P9S_Ip1-aF>0h3vh?b)N^28$Ry>~j_Zc9?P@(?S02_4-pxEO%rYVk(x>(CJ5%NI= z*gnychV)12$13!7fak3iRW*>n-v>KM_AXn(QT7m`Y^i~FUjKL-9}~sdz)G1d88q;P z%a%T-r)>F=t!?1k&&$IE9*CA%y^zw%gw$g1OG>c`LKa zqHL-t8)=vEh1+EjrYApqSPErt=eLqMeGKvUE*I@oMCJmZ9XjR-MYg^@QXFNS;=ReQ z8ti%v`@_~_pTn!qKeYZ7;(3ru%05*EXueTN_C%j^B7gnCBfma@$aG(oknIDT$JzaO zqbHrHkoj`!IHJ}%QMv0tmALFc;^z6IPu~6WNyM!aamCAq0LwQjnq$RiKW&(~PNS_C zQ01EpkF@()?q`I`jrL~a&<`gNcb^isbWf@dIT~@U@547EzZ^qkdfk+=io1mgkbI+} zIqr8N9?5@puM-jXi-`OckB1S?=!!5E>l*+4<-cfM8wE`H{wToink}Mz&ar;}_j|YK zl=sTG*6p-PM8$eu*_>OW^*kUWvb(PU$u}yRTLmxu_}a!l#7j*M#L~r@$JzakQL*9K zbYh!O56Y)#P(vy5p!E~~^;WYNm>+uM{y zekCS8S_MeHQBf8t`2L04S9XZ+TO5eoYl#OEx=;}+yO43b`^Q(|pXrVg5KyhBSaoQM Vo$}k+FE%M>g94iP&J#er{{q_CnwJ0o diff --git a/Programs/sdk/lib32/VapourSynth.lib b/Programs/sdk/lib32/VapourSynth.lib deleted file mode 100644 index 84bf9048b33812bb87d68543a23c15bbaf78e7bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1802 zcmY$iNi0gvu;bEKKn1#nsC*dD0Lm~lwSck`xEL51SQ!`?k1;T?fS6Vc3~W8@U0U(1JXdg@+ zNZf%z;Q$km7GvN9aT)m0Jf+ScEWi#F2bl>1d<-fKV)a74naM@@#rbI^3K~J03O=5G z-VkY2k_X5IX#^PnNv7;zM*!m#D28SegF|wDZUNBEV)cxS|Nq0R1SJL#06CJ00p@iF z1_rRRGhiZMPlD`XhKZPf)Bpt-;A%_}A|P=U5CH`s(-|0Sp*#@9#1I7}$xdi^6Al-e z*9oQ^BU2Nkl*7ajFJAI{FW8YFr(#bzDPSoCfs}HLVWOavvl7OE(x8+>vlKy09LoY7 zg0qk!Ipi$NkV1}`!Db%UshdCxAQ6r|