diff --git a/avs_core/core/avisynth.cpp b/avs_core/core/avisynth.cpp index bda6ee602..8749256ca 100644 --- a/avs_core/core/avisynth.cpp +++ b/avs_core/core/avisynth.cpp @@ -4442,6 +4442,54 @@ PVideoFrame ScriptEnvironment::NewVideoFrameOnDevice(const VideoInfo& vi, int al case VideoInfo::CS_YUVA420PS: case VideoInfo::CS_YUVA422PS: case VideoInfo::CS_YUVA444PS: + // planar 4:4:0 + case VideoInfo::CS_YUV440: + case VideoInfo::CS_YUV440P10: + case VideoInfo::CS_YUV440P12: + case VideoInfo::CS_YUV440P14: + case VideoInfo::CS_YUV440P16: + case VideoInfo::CS_YUV440PS: + // planar 4:4:0:A + case VideoInfo::CS_YUVA440: + case VideoInfo::CS_YUVA440P10: + case VideoInfo::CS_YUVA440P12: + case VideoInfo::CS_YUVA440P14: + case VideoInfo::CS_YUVA440P16: + case VideoInfo::CS_YUVA440PS: + // planar 4:1:1 + case VideoInfo::CS_YUV411P10: + case VideoInfo::CS_YUV411P12: + case VideoInfo::CS_YUV411P14: + case VideoInfo::CS_YUV411P16: + case VideoInfo::CS_YUV411PS: + // planar 4:1:1:A + case VideoInfo::CS_YUVA411: + case VideoInfo::CS_YUVA411P10: + case VideoInfo::CS_YUVA411P12: + case VideoInfo::CS_YUVA411P14: + case VideoInfo::CS_YUVA411P16: + case VideoInfo::CS_YUVA411PS: + // planar 4:1:0 + case VideoInfo::CS_YUV410: + case VideoInfo::CS_YUV410P10: + case VideoInfo::CS_YUV410P12: + case VideoInfo::CS_YUV410P14: + case VideoInfo::CS_YUV410P16: + case VideoInfo::CS_YUV410PS: + // planar 4:1:0:A + case VideoInfo::CS_YUVA410: + case VideoInfo::CS_YUVA410P10: + case VideoInfo::CS_YUVA410P12: + case VideoInfo::CS_YUVA410P14: + case VideoInfo::CS_YUVA410P16: + case VideoInfo::CS_YUVA410PS: + // Y+α 4:0:0:A + case VideoInfo::CS_YA8: + case VideoInfo::CS_YA10: + case VideoInfo::CS_YA12: + case VideoInfo::CS_YA14: + case VideoInfo::CS_YA16: + case VideoInfo::CS_YA32: break; default: ThrowError("Filter Error: Filter attempted to create VideoFrame with invalid pixel_type."); diff --git a/avs_core/core/avisynth.def b/avs_core/core/avisynth.def index 6a81bb6d9..a8865bb94 100644 --- a/avs_core/core/avisynth.def +++ b/avs_core/core/avisynth.def @@ -169,3 +169,7 @@ EXPORTS avs_release_global_lock = _avs_release_global_lock@8 avs_get_cpu_flags_ex = _avs_get_cpu_flags_ex@4 + avs_is_440 = _avs_is_440@4 + avs_is_ya = _avs_is_ya@4 + avs_is_410 = _avs_is_410@4 + avs_is_411 = _avs_is_411@4 diff --git a/avs_core/core/avisynth_c.cpp b/avs_core/core/avisynth_c.cpp index 7f2918261..1c85e76e7 100644 --- a/avs_core/core/avisynth_c.cpp +++ b/avs_core/core/avisynth_c.cpp @@ -747,6 +747,34 @@ void AVSC_CC avs_clear_map(AVS_ScriptEnvironment * p, AVS_Map * map) } } +extern "C" +int AVSC_CC avs_is_440(const AVS_VideoInfo * p) +{ + return ((p->pixel_type & AVS_CS_PLANAR_MASK & ~AVS_CS_SAMPLE_BITS_MASK) == (AVS_CS_GENERIC_YUV440 & AVS_CS_PLANAR_FILTER)) || + ((p->pixel_type & AVS_CS_PLANAR_MASK & ~AVS_CS_SAMPLE_BITS_MASK) == (AVS_CS_GENERIC_YUVA440 & AVS_CS_PLANAR_FILTER)); +} + +extern "C" +int AVSC_CC avs_is_ya(const AVS_VideoInfo * p) +{ + return ((p->pixel_type & AVS_CS_PLANAR_MASK & ~AVS_CS_SAMPLE_BITS_MASK) == (AVS_CS_GENERIC_YA & AVS_CS_PLANAR_FILTER)) || + ((p->pixel_type & AVS_CS_PLANAR_MASK & ~AVS_CS_SAMPLE_BITS_MASK) == (AVS_CS_GENERIC_YA & AVS_CS_PLANAR_FILTER)); +} + +extern "C" +int AVSC_CC avs_is_410(const AVS_VideoInfo * p) +{ + return ((p->pixel_type & AVS_CS_PLANAR_MASK & ~AVS_CS_SAMPLE_BITS_MASK) == (AVS_CS_GENERIC_YUV410 & AVS_CS_PLANAR_FILTER)) || + ((p->pixel_type & AVS_CS_PLANAR_MASK & ~AVS_CS_SAMPLE_BITS_MASK) == (AVS_CS_GENERIC_YUVA410 & AVS_CS_PLANAR_FILTER)); +} + +extern "C" +int AVSC_CC avs_is_411(const AVS_VideoInfo * p) +{ + return ((p->pixel_type & AVS_CS_PLANAR_MASK & ~AVS_CS_SAMPLE_BITS_MASK) == (AVS_CS_GENERIC_YUV411 & AVS_CS_PLANAR_FILTER)) || + ((p->pixel_type & AVS_CS_PLANAR_MASK & ~AVS_CS_SAMPLE_BITS_MASK) == (AVS_CS_GENERIC_YUVA411 & AVS_CS_PLANAR_FILTER)); +} + ///////////////////////////////////////////////////////////////////// diff --git a/avs_core/core/interface.cpp b/avs_core/core/interface.cpp index adbf2790f..0762a3d16 100644 --- a/avs_core/core/interface.cpp +++ b/avs_core/core/interface.cpp @@ -430,6 +430,14 @@ unsigned int VideoInfo::GetChannelMask() const return dwChannelMask >> 4; } +bool VideoInfo::Is440() const { return ((pixel_type & CS_PLANAR_MASK & ~CS_Sample_Bits_Mask) == (CS_GENERIC_YUV440 & CS_PLANAR_FILTER)) || + ((pixel_type & CS_PLANAR_MASK & ~CS_Sample_Bits_Mask) == (CS_GENERIC_YUVA440 & CS_PLANAR_FILTER)) ; } +bool VideoInfo::IsYA() const { return ((pixel_type & CS_PLANAR_MASK & ~CS_Sample_Bits_Mask) == (CS_GENERIC_YA & CS_PLANAR_FILTER)) || + ((pixel_type & CS_PLANAR_MASK & ~CS_Sample_Bits_Mask) == (CS_GENERIC_YA & CS_PLANAR_FILTER)) ; } +bool VideoInfo::Is410() const { return ((pixel_type & CS_PLANAR_MASK & ~CS_Sample_Bits_Mask) == (CS_GENERIC_YUV410 & CS_PLANAR_FILTER)) || + ((pixel_type & CS_PLANAR_MASK & ~CS_Sample_Bits_Mask) == (CS_GENERIC_YUVA410 & CS_PLANAR_FILTER)) ; } +bool VideoInfo::Is411() const { return ((pixel_type & CS_PLANAR_MASK & ~CS_Sample_Bits_Mask) == (CS_GENERIC_YUV411 & CS_PLANAR_FILTER)) || + ((pixel_type & CS_PLANAR_MASK & ~CS_Sample_Bits_Mask) == (CS_GENERIC_YUVA411 & CS_PLANAR_FILTER)) ; } // end struct VideoInfo @@ -1312,6 +1320,12 @@ static const AVS_Linkage avs_linkage = { // struct AVS_Linkage { &VideoInfo::SetChannelMask, // void (VideoInfo::*SetChannelMask)(); &VideoInfo::GetChannelMask, // int (VideoInfo::*GetChannelMask)() const; + // V13 + &VideoInfo::Is440, // bool (VideoInfo::*Is440)() const; + &VideoInfo::IsYA, // bool (VideoInfo::*IsYA)() const; + &VideoInfo::Is410, // bool (VideoInfo::*Is410)() const; + &VideoInfo::Is411, // bool (VideoInfo::*Is411)() const; + // a single { nullptr } initializes the whole placeholder array { nullptr }, // void (VideoInfo::* reserved2[64 - 31])(); // Reserve pointer space for Avisynth+ diff --git a/avs_core/core/parser/script.cpp b/avs_core/core/parser/script.cpp index 911eaf21f..0fc0f92bc 100644 --- a/avs_core/core/parser/script.cpp +++ b/avs_core/core/parser/script.cpp @@ -360,6 +360,12 @@ extern const AVSFunction Script_functions[] = { /* { "IsArrayOf", BUILTIN_FUNC_PREFIX, ".s", IsArrayOf }, */ + + { "Is440", BUILTIN_FUNC_PREFIX, "c", Is440 }, + { "IsYA", BUILTIN_FUNC_PREFIX, "c", IsYA }, + { "Is410", BUILTIN_FUNC_PREFIX, "c", Is410 }, + { "Is411", BUILTIN_FUNC_PREFIX, "c", Is411 }, + { 0 } }; @@ -1583,6 +1589,53 @@ static const std::map pixel_format_table = {VideoInfo::CS_RGBAP14 , "RGBAP14"}, {VideoInfo::CS_RGBAP16 , "RGBAP16"}, {VideoInfo::CS_RGBAPS , "RGBAPS"}, + + {VideoInfo::CS_YUV440 , "YUV440"}, + {VideoInfo::CS_YUV440P10 , "YUV440P10"}, + {VideoInfo::CS_YUV440P12 , "YUV440P12"}, + {VideoInfo::CS_YUV440P14 , "YUV440P14"}, + {VideoInfo::CS_YUV440P16 , "YUV440P16"}, + {VideoInfo::CS_YUV440PS , "YUV440PS"}, + + {VideoInfo::CS_YUVA440 , "YUVA440"}, + {VideoInfo::CS_YUVA440P10 , "YUVA440P10"}, + {VideoInfo::CS_YUVA440P12 , "YUVA440P12"}, + {VideoInfo::CS_YUVA440P14 , "YUVA440P14"}, + {VideoInfo::CS_YUVA440P16 , "YUVA440P16"}, + {VideoInfo::CS_YUVA440PS , "YUVA440PS"}, + + {VideoInfo::CS_YUV411P10 , "YUV411P10"}, + {VideoInfo::CS_YUV411P12 , "YUV411P12"}, + {VideoInfo::CS_YUV411P14 , "YUV411P14"}, + {VideoInfo::CS_YUV411P16 , "YUV411P16"}, + {VideoInfo::CS_YUV411PS , "YUV411PS"}, + + {VideoInfo::CS_YUVA411 , "YUVA411"}, + {VideoInfo::CS_YUVA411P10 , "YUVA411P10"}, + {VideoInfo::CS_YUVA411P12 , "YUVA411P12"}, + {VideoInfo::CS_YUVA411P14 , "YUVA411P14"}, + {VideoInfo::CS_YUVA411P16 , "YUVA411P16"}, + {VideoInfo::CS_YUVA411PS , "YUVA411PS"}, + + {VideoInfo::CS_YUV410 , "YUV9"}, + {VideoInfo::CS_YUV410P10 , "YUV410P10"}, + {VideoInfo::CS_YUV410P12 , "YUV410P12"}, + {VideoInfo::CS_YUV410P14 , "YUV410P14"}, + {VideoInfo::CS_YUV410P16 , "YUV410P16"}, + {VideoInfo::CS_YUV410PS , "YUV410PS"}, + + {VideoInfo::CS_YUVA410P10 , "YUVA410P10"}, + {VideoInfo::CS_YUVA410P12 , "YUVA410P12"}, + {VideoInfo::CS_YUVA410P14 , "YUVA410P14"}, + {VideoInfo::CS_YUVA410P16 , "YUVA410P16"}, + {VideoInfo::CS_YUVA410PS , "YUVA410PS"}, + + {VideoInfo::CS_YA8, "YA8"}, + {VideoInfo::CS_YA10, "YA10"}, + {VideoInfo::CS_YA12, "YA12"}, + {VideoInfo::CS_YA14, "YA14"}, + {VideoInfo::CS_YA16, "YA16"}, + {VideoInfo::CS_YA32, "YA32"} }; static const std::multimap pixel_format_table_ex = @@ -1600,6 +1653,11 @@ static const std::multimap pixel_format_table_ex = {VideoInfo::CS_YUVA420, "YUVA420P8"}, {VideoInfo::CS_YUVA422, "YUVA422P8"}, {VideoInfo::CS_YUVA444, "YUVA444P8"}, + {VideoInfo::CS_YUV440 , "YUV440P8"}, + {VideoInfo::CS_YUVA440, "YUVA440P8"}, + {VideoInfo::CS_YUVA411, "YUVA411P8"}, + {VideoInfo::CS_YUV410, "YUV410P8"}, + {VideoInfo::CS_YUVA410, "YUVA410P8"} }; const char *GetPixelTypeName(const int pixel_type) @@ -2894,3 +2952,7 @@ AVSValue ArraySort(AVSValue args, void* user_data, IScriptEnvironment* env) return AVSValue(new_val.data(), size); } +AVSValue Is440(AVSValue args, void*, IScriptEnvironment*) { return VI(args[0]).Is440(); } +AVSValue IsYA(AVSValue args, void*, IScriptEnvironment*) { return VI(args[0]).IsYA(); } +AVSValue Is410(AVSValue args, void*, IScriptEnvironment*) { return VI(args[0]).Is410(); } +AVSValue Is411(AVSValue args, void*, IScriptEnvironment*) { return VI(args[0]).Is411(); } diff --git a/avs_core/core/parser/script.h b/avs_core/core/parser/script.h index 872af98bf..af6605d18 100644 --- a/avs_core/core/parser/script.h +++ b/avs_core/core/parser/script.h @@ -321,4 +321,9 @@ AVSValue ArrayIns(AVSValue args, void*, IScriptEnvironment* env); AVSValue ArrayDel(AVSValue args, void*, IScriptEnvironment* env); AVSValue ArraySort(AVSValue args, void*, IScriptEnvironment* env); +AVSValue Is440(AVSValue args, void*, IScriptEnvironment* env); +AVSValue IsYA(AVSValue args, void*, IScriptEnvironment* env); +AVSValue Is410(AVSValue args, void*, IScriptEnvironment* env); +AVSValue Is411(AVSValue args, void*, IScriptEnvironment* env); + #endif // __Script_H__ diff --git a/avs_core/include/avisynth.h b/avs_core/include/avisynth.h index 84fa4f8da..5ac546be4 100644 --- a/avs_core/include/avisynth.h +++ b/avs_core/include/avisynth.h @@ -129,7 +129,7 @@ enum AvsVersion { AVISYNTH_CLASSIC_INTERFACE_VERSION_25 = 3, AVISYNTH_CLASSIC_INTERFACE_VERSION_26BETA = 5, AVISYNTH_CLASSIC_INTERFACE_VERSION = 6, - AVISYNTH_INTERFACE_VERSION = 12, + AVISYNTH_INTERFACE_VERSION = 13, AVISYNTHPLUS_INTERFACE_BUGFIX_VERSION = 0 // reset to zero whenever the normal interface version bumps }; @@ -480,6 +480,12 @@ struct AVS_Linkage { void (VideoInfo::* SetChannelMask)(bool isChannelMaskKnown, unsigned int dwChannelMask); unsigned int (VideoInfo::* GetChannelMask)() const; + // V13 + bool (VideoInfo::*Is440)() const; + bool (VideoInfo::*IsYA)() const; + bool (VideoInfo::*Is410)() const; + bool (VideoInfo::*Is411)() const; + /**********************************************************************/ // Reserve pointer space for Avisynth+ void (VideoInfo::* reserved2[64 - 31])(); @@ -730,21 +736,28 @@ struct VideoInfo { CS_GENERIC_YUV422 = CS_PLANAR | CS_YUV | CS_VPlaneFirst | CS_Sub_Width_2 | CS_Sub_Height_1, // 4:2:2 planar CS_GENERIC_YUV420 = CS_PLANAR | CS_YUV | CS_VPlaneFirst | CS_Sub_Width_2 | CS_Sub_Height_2, // 4:2:0 planar CS_GENERIC_Y = CS_PLANAR | CS_INTERLEAVED | CS_YUV, // Y only (4:0:0) + CS_GENERIC_YA = CS_PLANAR | CS_INTERLEAVED | CS_YUVA, // Y plus alpha (4:0:0:A) CS_GENERIC_RGBP = CS_PLANAR | CS_BGR | CS_RGB_TYPE, // planar RGB. Though name is RGB but plane order G,B,R CS_GENERIC_RGBAP = CS_PLANAR | CS_BGR | CS_RGBA_TYPE, // planar RGBA CS_GENERIC_YUVA444 = CS_PLANAR | CS_YUVA | CS_VPlaneFirst | CS_Sub_Width_1 | CS_Sub_Height_1, // 4:4:4:A planar CS_GENERIC_YUVA422 = CS_PLANAR | CS_YUVA | CS_VPlaneFirst | CS_Sub_Width_2 | CS_Sub_Height_1, // 4:2:2:A planar CS_GENERIC_YUVA420 = CS_PLANAR | CS_YUVA | CS_VPlaneFirst | CS_Sub_Width_2 | CS_Sub_Height_2, // 4:2:0:A planar + CS_GENERIC_YUV440 = CS_PLANAR | CS_YUV | CS_VPlaneFirst | CS_Sub_Width_1 | CS_Sub_Height_2, // 4:4:0 planar, 2026-07-29 + CS_GENERIC_YUVA440 = CS_PLANAR | CS_YUVA | CS_VPlaneFirst | CS_Sub_Width_1 | CS_Sub_Height_2, // 4:4:0:A planar, 2026-07-29 + CS_GENERIC_YUV411 = CS_PLANAR | CS_YUV | CS_VPlaneFirst | CS_Sub_Width_4 | CS_Sub_Height_1, // 4:1:1 planar, 2026-08-25 + CS_GENERIC_YUVA411 = CS_PLANAR | CS_YUVA | CS_VPlaneFirst | CS_Sub_Width_4 | CS_Sub_Height_1, // 4:1:1:A planar, 2026-08-25 + CS_GENERIC_YUV410 = CS_PLANAR | CS_YUV | CS_VPlaneFirst | CS_Sub_Width_4 | CS_Sub_Height_4, // 4:1:0 planar, 2026-08-25 + CS_GENERIC_YUVA410 = CS_PLANAR | CS_YUVA | CS_VPlaneFirst | CS_Sub_Width_4 | CS_Sub_Height_4, // 4:1:0:A planar, 2026-08-25 CS_YV24 = CS_GENERIC_YUV444 | CS_Sample_Bits_8, // YVU 4:4:4 planar CS_YV16 = CS_GENERIC_YUV422 | CS_Sample_Bits_8, // YVU 4:2:2 planar CS_YV12 = CS_GENERIC_YUV420 | CS_Sample_Bits_8, // YVU 4:2:0 planar CS_I420 = CS_PLANAR | CS_YUV | CS_Sample_Bits_8 | CS_UPlaneFirst | CS_Sub_Width_2 | CS_Sub_Height_2, // YUV 4:2:0 planar CS_IYUV = CS_I420, - CS_YUV9 = CS_PLANAR | CS_YUV | CS_Sample_Bits_8 | CS_VPlaneFirst | CS_Sub_Width_4 | CS_Sub_Height_4, // YUV 4:1:0 planar - CS_YV411 = CS_PLANAR | CS_YUV | CS_Sample_Bits_8 | CS_VPlaneFirst | CS_Sub_Width_4 | CS_Sub_Height_1, // YUV 4:1:1 planar + CS_YUV9 = CS_GENERIC_YUV410 | CS_Sample_Bits_8, // YUV 4:1:0 planar + CS_YV411 = CS_GENERIC_YUV411 | CS_Sample_Bits_8, // YUV 4:1:1 planar - CS_Y8 = CS_GENERIC_Y | CS_Sample_Bits_8, // Y 4:0:0 planar + CS_Y8 = CS_GENERIC_Y | CS_Sample_Bits_8, // Y 4:0:0 planar //------------------------- // AVS16: new planar constants go live! Experimental PF 160613 @@ -820,9 +833,62 @@ struct VideoInfo { CS_YUVA422P16 = CS_GENERIC_YUVA422 | CS_Sample_Bits_16, // YUVA 4:2:2 16bit samples CS_YUVA420P16 = CS_GENERIC_YUVA420 | CS_Sample_Bits_16, // YUVA 4:2:0 16bit samples - CS_YUVA444PS = CS_GENERIC_YUVA444 | CS_Sample_Bits_32, // YUVA 4:4:4 32bit samples - CS_YUVA422PS = CS_GENERIC_YUVA422 | CS_Sample_Bits_32, // YUVA 4:2:2 32bit samples - CS_YUVA420PS = CS_GENERIC_YUVA420 | CS_Sample_Bits_32, // YUVA 4:2:0 32bit samples + CS_YUVA444PS = CS_GENERIC_YUVA444 | CS_Sample_Bits_32, // YUVA 4:4:4 32bit samples + CS_YUVA422PS = CS_GENERIC_YUVA422 | CS_Sample_Bits_32, // YUVA 4:2:2 32bit samples + CS_YUVA420PS = CS_GENERIC_YUVA420 | CS_Sample_Bits_32, // YUVA 4:2:0 32bit samples + + // Planar YUV(A) 4:4:0, 2026-07-29 + CS_YUV440 = CS_GENERIC_YUV440 | CS_Sample_Bits_8, // YUV 4:4:0 8bit samples + CS_YUV440P10 = CS_GENERIC_YUV440 | CS_Sample_Bits_10, // YUV 4:4:0 10bit samples + CS_YUV440P12 = CS_GENERIC_YUV440 | CS_Sample_Bits_12, // YUV 4:4:0 12bit samples + CS_YUV440P14 = CS_GENERIC_YUV440 | CS_Sample_Bits_14, // YUV 4:4:0 14bit samples + CS_YUV440P16 = CS_GENERIC_YUV440 | CS_Sample_Bits_16, // YUV 4:4:0 16bit samples + CS_YUV440PS = CS_GENERIC_YUV440 | CS_Sample_Bits_32, // YUV 4:4:0 32bit samples + + CS_YUVA440 = CS_GENERIC_YUVA440 | CS_Sample_Bits_8, // YUVA 4:4:0 8bit samples + CS_YUVA440P10 = CS_GENERIC_YUVA440 | CS_Sample_Bits_10, // YUVA 4:4:0 10bit samples + CS_YUVA440P12 = CS_GENERIC_YUVA440 | CS_Sample_Bits_12, // YUVA 4:4:0 12bit samples + CS_YUVA440P14 = CS_GENERIC_YUVA440 | CS_Sample_Bits_14, // YUVA 4:4:0 14bit samples + CS_YUVA440P16 = CS_GENERIC_YUVA440 | CS_Sample_Bits_16, // YUVA 4:4:0 16bit samples + CS_YUVA440PS = CS_GENERIC_YUVA440 | CS_Sample_Bits_32, // YUVA 4:4:0 32bit samples + + // Planar YUV(A) 4:1:1 additional bitdepths, 2026-08-25 + CS_YUV411 = CS_YV411, // YUV 4:1:1 8bit samples + CS_YUV411P10 = CS_GENERIC_YUV411 | CS_Sample_Bits_10, // YUV 4:1:1 10bit samples + CS_YUV411P12 = CS_GENERIC_YUV411 | CS_Sample_Bits_12, // YUV 4:1:1 12bit samples + CS_YUV411P14 = CS_GENERIC_YUV411 | CS_Sample_Bits_14, // YUV 4:1:1 14bit samples + CS_YUV411P16 = CS_GENERIC_YUV411 | CS_Sample_Bits_16, // YUV 4:1:1 16bit samples + CS_YUV411PS = CS_GENERIC_YUV411 | CS_Sample_Bits_32, // YUV 4:1:1 32bit samples + + CS_YUVA411 = CS_GENERIC_YUVA411 | CS_Sample_Bits_8, // YUVA 4:1:1 8bit samples + CS_YUVA411P10 = CS_GENERIC_YUVA411 | CS_Sample_Bits_10, // YUVA 4:1:1 10bit samples + CS_YUVA411P12 = CS_GENERIC_YUVA411 | CS_Sample_Bits_12, // YUVA 4:1:1 12bit samples + CS_YUVA411P14 = CS_GENERIC_YUVA411 | CS_Sample_Bits_14, // YUVA 4:1:1 14bit samples + CS_YUVA411P16 = CS_GENERIC_YUVA411 | CS_Sample_Bits_16, // YUVA 4:1:1 16bit samples + CS_YUVA411PS = CS_GENERIC_YUVA411 | CS_Sample_Bits_32, // YUVA 4:1:1 32bit samples + + // Planar YUV(A) 4:1:0, 2026-08-25 + CS_YUV410 = CS_YUV9, // YUV 4:1:0 8bit samples + CS_YUV410P10 = CS_GENERIC_YUV410 | CS_Sample_Bits_10, // YUV 4:1:0 10bit samples + CS_YUV410P12 = CS_GENERIC_YUV410 | CS_Sample_Bits_12, // YUV 4:1:0 12bit samples + CS_YUV410P14 = CS_GENERIC_YUV410 | CS_Sample_Bits_14, // YUV 4:1:0 14bit samples + CS_YUV410P16 = CS_GENERIC_YUV410 | CS_Sample_Bits_16, // YUV 4:1:0 16bit samples + CS_YUV410PS = CS_GENERIC_YUV410 | CS_Sample_Bits_32, // YUV 4:1:0 32bit samples + + CS_YUVA410 = CS_GENERIC_YUVA410 | CS_Sample_Bits_8, // YUVA 4:1:0 8bit samples + CS_YUVA410P10 = CS_GENERIC_YUVA410 | CS_Sample_Bits_10, // YUVA 4:1:0 10bit samples + CS_YUVA410P12 = CS_GENERIC_YUVA410 | CS_Sample_Bits_12, // YUVA 4:1:0 12bit samples + CS_YUVA410P14 = CS_GENERIC_YUVA410 | CS_Sample_Bits_14, // YUVA 4:1:0 14bit samples + CS_YUVA410P16 = CS_GENERIC_YUVA410 | CS_Sample_Bits_16, // YUVA 4:1:0 16bit samples + CS_YUVA410PS = CS_GENERIC_YUVA410 | CS_Sample_Bits_32, // YUVA 4:1:0 32bit samples + + // Y plus alpha 4:0:0, 2026-08-25 + CS_YA8 = CS_GENERIC_YA | CS_Sample_Bits_8, // Y plus alpha 4:0:0 8bit samples + CS_YA10 = CS_GENERIC_YA | CS_Sample_Bits_10, // Y plus alpha 4:0:0 10bit samples + CS_YA12 = CS_GENERIC_YA | CS_Sample_Bits_12, // Y plus alpha 4:0:0 12bit samples + CS_YA14 = CS_GENERIC_YA | CS_Sample_Bits_14, // Y plus alpha 4:0:0 14bit samples + CS_YA16 = CS_GENERIC_YA | CS_Sample_Bits_16, // Y plus alpha 4:0:0 16bit samples + CS_YA32 = CS_GENERIC_YA | CS_Sample_Bits_32 // Y plus alpha 4:0:0 32bit samples }; int pixel_type; // changed to int as of 2.5 @@ -992,6 +1058,12 @@ struct VideoInfo { void SetChannelMask(bool isChannelMaskKnown, unsigned int dwChannelMask) AVS_BakedCode(AVS_LinkCall_Void(SetChannelMask)(isChannelMaskKnown, dwChannelMask)) unsigned int GetChannelMask() const AVS_BakedCode(return AVS_LinkCallOptDefault(GetChannelMask, 0) ) + // v13 + bool Is440() const AVS_BakedCode( return AVS_LinkCallOptDefault(Is440, false) ) + bool IsYA() const AVS_BakedCode( return AVS_LinkCallOptDefault(IsYA, false) ) + bool Is410() const AVS_BakedCode( return AVS_LinkCallOptDefault(Is410, false) ) + bool Is411() const AVS_BakedCode( return AVS_LinkCallOpt(Is410, IsYV411) ) + }; // end struct VideoInfo diff --git a/avs_core/include/avisynth_c.h b/avs_core/include/avisynth_c.h index 8d7d71f56..5fefc8d6b 100644 --- a/avs_core/include/avisynth_c.h +++ b/avs_core/include/avisynth_c.h @@ -167,7 +167,7 @@ #ifndef __AVISYNTH_12_H__ enum { AVISYNTH_INTERFACE_CLASSIC_VERSION = 6, - AVISYNTH_INTERFACE_VERSION = 12, + AVISYNTH_INTERFACE_VERSION = 13, AVISYNTHPLUS_INTERFACE_BUGFIX_VERSION = 0 // reset to zero whenever the normal interface version bumps }; #endif @@ -239,15 +239,22 @@ enum { AVS_CS_RGB_TYPE = 1 << 0, AVS_CS_RGBA_TYPE = 1 << 1, - AVS_CS_GENERIC_YUV444 = AVS_CS_PLANAR | AVS_CS_YUV | AVS_CS_VPLANEFIRST | AVS_CS_SUB_WIDTH_1 | AVS_CS_SUB_HEIGHT_1, // 4:4:4 planar - AVS_CS_GENERIC_YUV422 = AVS_CS_PLANAR | AVS_CS_YUV | AVS_CS_VPLANEFIRST | AVS_CS_SUB_WIDTH_2 | AVS_CS_SUB_HEIGHT_1, // 4:2:2 planar - AVS_CS_GENERIC_YUV420 = AVS_CS_PLANAR | AVS_CS_YUV | AVS_CS_VPLANEFIRST | AVS_CS_SUB_WIDTH_2 | AVS_CS_SUB_HEIGHT_2, // 4:2:0 planar + AVS_CS_GENERIC_YUV444 = AVS_CS_PLANAR | AVS_CS_YUV | AVS_CS_VPLANEFIRST | AVS_CS_SUB_WIDTH_1 | AVS_CS_SUB_HEIGHT_1, // 4:4:4 planar + AVS_CS_GENERIC_YUV422 = AVS_CS_PLANAR | AVS_CS_YUV | AVS_CS_VPLANEFIRST | AVS_CS_SUB_WIDTH_2 | AVS_CS_SUB_HEIGHT_1, // 4:2:2 planar + AVS_CS_GENERIC_YUV420 = AVS_CS_PLANAR | AVS_CS_YUV | AVS_CS_VPLANEFIRST | AVS_CS_SUB_WIDTH_2 | AVS_CS_SUB_HEIGHT_2, // 4:2:0 planar AVS_CS_GENERIC_Y = AVS_CS_PLANAR | AVS_CS_INTERLEAVED | AVS_CS_YUV, // Y only (4:0:0) - AVS_CS_GENERIC_RGBP = AVS_CS_PLANAR | AVS_CS_BGR | AVS_CS_RGB_TYPE, // planar RGB - AVS_CS_GENERIC_RGBAP = AVS_CS_PLANAR | AVS_CS_BGR | AVS_CS_RGBA_TYPE, // planar RGBA + AVS_CS_GENERIC_YA = AVS_CS_PLANAR | AVS_CS_INTERLEAVED | AVS_CS_YUVA, // Y plus alpha (4:0:0:A) + AVS_CS_GENERIC_RGBP = AVS_CS_PLANAR | AVS_CS_BGR | AVS_CS_RGB_TYPE, // planar RGB + AVS_CS_GENERIC_RGBAP = AVS_CS_PLANAR | AVS_CS_BGR | AVS_CS_RGBA_TYPE, // planar RGBA AVS_CS_GENERIC_YUVA444 = AVS_CS_PLANAR | AVS_CS_YUVA | AVS_CS_VPLANEFIRST | AVS_CS_SUB_WIDTH_1 | AVS_CS_SUB_HEIGHT_1, // 4:4:4:A planar AVS_CS_GENERIC_YUVA422 = AVS_CS_PLANAR | AVS_CS_YUVA | AVS_CS_VPLANEFIRST | AVS_CS_SUB_WIDTH_2 | AVS_CS_SUB_HEIGHT_1, // 4:2:2:A planar - AVS_CS_GENERIC_YUVA420 = AVS_CS_PLANAR | AVS_CS_YUVA | AVS_CS_VPLANEFIRST | AVS_CS_SUB_WIDTH_2 | AVS_CS_SUB_HEIGHT_2 // 4:2:0:A planar + AVS_CS_GENERIC_YUVA420 = AVS_CS_PLANAR | AVS_CS_YUVA | AVS_CS_VPLANEFIRST | AVS_CS_SUB_WIDTH_2 | AVS_CS_SUB_HEIGHT_2, // 4:2:0:A planar + AVS_CS_GENERIC_YUV440 = AVS_CS_PLANAR | AVS_CS_YUV | AVS_CS_VPLANEFIRST | AVS_CS_SUB_WIDTH_1 | AVS_CS_SUB_HEIGHT_2, // 4:4:0 planar + AVS_CS_GENERIC_YUVA440 = AVS_CS_PLANAR | AVS_CS_YUVA | AVS_CS_VPLANEFIRST | AVS_CS_SUB_WIDTH_1 | AVS_CS_SUB_HEIGHT_2, // 4:4:0:A planar + AVS_CS_GENERIC_YUV411 = AVS_CS_PLANAR | AVS_CS_YUV | AVS_CS_VPLANEFIRST | AVS_CS_SUB_WIDTH_4 | AVS_CS_SUB_HEIGHT_1, // 4:1:1 planar + AVS_CS_GENERIC_YUVA411 = AVS_CS_PLANAR | AVS_CS_YUVA | AVS_CS_VPLANEFIRST | AVS_CS_SUB_WIDTH_4 | AVS_CS_SUB_HEIGHT_1, // 4:1:1:A planar + AVS_CS_GENERIC_YUV410 = AVS_CS_PLANAR | AVS_CS_YUV | AVS_CS_VPLANEFIRST | AVS_CS_SUB_WIDTH_4 | AVS_CS_SUB_HEIGHT_4, // 4:1:0 planar + AVS_CS_GENERIC_YUVA410 = AVS_CS_PLANAR | AVS_CS_YUVA | AVS_CS_VPLANEFIRST | AVS_CS_SUB_WIDTH_4 | AVS_CS_SUB_HEIGHT_4 // 4:1:0:A planar }; // Specific color formats @@ -265,8 +272,8 @@ enum { AVS_CS_YV12 = AVS_CS_GENERIC_YUV420 | AVS_CS_SAMPLE_BITS_8, // YUV 4:2:0 planar AVS_CS_I420 = AVS_CS_PLANAR | AVS_CS_YUV | AVS_CS_SAMPLE_BITS_8 | AVS_CS_UPLANEFIRST | AVS_CS_SUB_WIDTH_2 | AVS_CS_SUB_HEIGHT_2, // YUV 4:2:0 planar AVS_CS_IYUV = AVS_CS_I420, - AVS_CS_YV411 = AVS_CS_PLANAR | AVS_CS_YUV | AVS_CS_SAMPLE_BITS_8 | AVS_CS_VPLANEFIRST | AVS_CS_SUB_WIDTH_4 | AVS_CS_SUB_HEIGHT_1, // YUV 4:1:1 planar - AVS_CS_YUV9 = AVS_CS_PLANAR | AVS_CS_YUV | AVS_CS_SAMPLE_BITS_8 | AVS_CS_VPLANEFIRST | AVS_CS_SUB_WIDTH_4 | AVS_CS_SUB_HEIGHT_4, // YUV 4:1:0 planar + AVS_CS_YV411 = AVS_CS_GENERIC_YUV411 | AVS_CS_SAMPLE_BITS_8, // YUV 4:1:1 planar + AVS_CS_YUV9 = AVS_CS_GENERIC_YUV410 | AVS_CS_SAMPLE_BITS_8, // YUV 4:1:0 planar AVS_CS_Y8 = AVS_CS_GENERIC_Y | AVS_CS_SAMPLE_BITS_8, // Y 4:0:0 planar //------------------------- @@ -299,8 +306,8 @@ enum { AVS_CS_Y32 = AVS_CS_GENERIC_Y | AVS_CS_SAMPLE_BITS_32, // Y 4:0:0 32bit samples // RGB packed - AVS_CS_BGR48 = AVS_CS_RGB_TYPE | AVS_CS_BGR | AVS_CS_INTERLEAVED | AVS_CS_SAMPLE_BITS_16, // BGR 3x16 bit - AVS_CS_BGR64 = AVS_CS_RGBA_TYPE | AVS_CS_BGR | AVS_CS_INTERLEAVED | AVS_CS_SAMPLE_BITS_16, // BGR 4x16 bit + AVS_CS_BGR48 = AVS_CS_RGB_TYPE | AVS_CS_BGR | AVS_CS_INTERLEAVED | AVS_CS_SAMPLE_BITS_16, // BGR 3x16 bit + AVS_CS_BGR64 = AVS_CS_RGBA_TYPE | AVS_CS_BGR | AVS_CS_INTERLEAVED | AVS_CS_SAMPLE_BITS_16, // BGR 4x16 bit // no packed 32 bit (float) support for these legacy types // RGB planar @@ -340,9 +347,62 @@ enum { AVS_CS_YUVA422P16 = AVS_CS_GENERIC_YUVA422 | AVS_CS_SAMPLE_BITS_16, // YUVA 4:2:2 16bit samples AVS_CS_YUVA420P16 = AVS_CS_GENERIC_YUVA420 | AVS_CS_SAMPLE_BITS_16, // YUVA 4:2:0 16bit samples - AVS_CS_YUVA444PS = AVS_CS_GENERIC_YUVA444 | AVS_CS_SAMPLE_BITS_32, // YUVA 4:4:4 32bit samples - AVS_CS_YUVA422PS = AVS_CS_GENERIC_YUVA422 | AVS_CS_SAMPLE_BITS_32, // YUVA 4:2:2 32bit samples - AVS_CS_YUVA420PS = AVS_CS_GENERIC_YUVA420 | AVS_CS_SAMPLE_BITS_32, // YUVA 4:2:0 32bit samples + AVS_CS_YUVA444PS = AVS_CS_GENERIC_YUVA444 | AVS_CS_SAMPLE_BITS_32, // YUVA 4:4:4 32bit samples + AVS_CS_YUVA422PS = AVS_CS_GENERIC_YUVA422 | AVS_CS_SAMPLE_BITS_32, // YUVA 4:2:2 32bit samples + AVS_CS_YUVA420PS = AVS_CS_GENERIC_YUVA420 | AVS_CS_SAMPLE_BITS_32, // YUVA 4:2:0 32bit samples + + // Planar YUV(A) 4:4:0 - 2026-07-29 + AVS_CS_YUV440 = AVS_CS_GENERIC_YUV440 | AVS_CS_SAMPLE_BITS_8, // YUV 4:4:0 8bit samples + AVS_CS_YUV440P10 = AVS_CS_GENERIC_YUV440 | AVS_CS_SAMPLE_BITS_10, // YUV 4:4:0 10bit samples + AVS_CS_YUV440P12 = AVS_CS_GENERIC_YUV440 | AVS_CS_SAMPLE_BITS_12, // YUV 4:4:0 12bit samples + AVS_CS_YUV440P14 = AVS_CS_GENERIC_YUV440 | AVS_CS_SAMPLE_BITS_14, // YUV 4:4:0 14bit samples + AVS_CS_YUV440P16 = AVS_CS_GENERIC_YUV440 | AVS_CS_SAMPLE_BITS_16, // YUV 4:4:0 16bit samples + AVS_CS_YUV440PS = AVS_CS_GENERIC_YUV440 | AVS_CS_SAMPLE_BITS_32, // YUV 4:4:0 32bit samples + + AVS_CS_YUVA440 = AVS_CS_GENERIC_YUVA440 | AVS_CS_SAMPLE_BITS_8, // YUVA 4:4:0 8bit samples + AVS_CS_YUVA440P10 = AVS_CS_GENERIC_YUVA440 | AVS_CS_SAMPLE_BITS_10, // YUVA 4:4:0 10bit samples + AVS_CS_YUVA440P12 = AVS_CS_GENERIC_YUVA440 | AVS_CS_SAMPLE_BITS_12, // YUVA 4:4:0 12bit samples + AVS_CS_YUVA440P14 = AVS_CS_GENERIC_YUVA440 | AVS_CS_SAMPLE_BITS_14, // YUVA 4:4:0 14bit samples + AVS_CS_YUVA440P16 = AVS_CS_GENERIC_YUVA440 | AVS_CS_SAMPLE_BITS_16, // YUVA 4:4:0 16bit samples + AVS_CS_YUVA440PS = AVS_CS_GENERIC_YUVA440 | AVS_CS_SAMPLE_BITS_32, // YUVA 4:4:0 32bit samples + + // Planar YUV(A) 4:1:1 additional formats - 2026-08-25 + AVS_CS_YUV411 = AVS_CS_YV411, // YUV 4:1:1 10bit samples + AVS_CS_YUV411P10 = AVS_CS_GENERIC_YUV411 | AVS_CS_SAMPLE_BITS_10, // YUV 4:1:1 10bit samples + AVS_CS_YUV411P12 = AVS_CS_GENERIC_YUV411 | AVS_CS_SAMPLE_BITS_12, // YUV 4:1:1 12bit samples + AVS_CS_YUV411P14 = AVS_CS_GENERIC_YUV411 | AVS_CS_SAMPLE_BITS_14, // YUV 4:1:1 14bit samples + AVS_CS_YUV411P16 = AVS_CS_GENERIC_YUV411 | AVS_CS_SAMPLE_BITS_16, // YUV 4:1:1 16bit samples + AVS_CS_YUV411PS = AVS_CS_GENERIC_YUV411 | AVS_CS_SAMPLE_BITS_32, // YUV 4:1:1 32bit samples + + AVS_CS_YUVA411 = AVS_CS_GENERIC_YUVA411 | AVS_CS_SAMPLE_BITS_8, // YUVA 4:1:1 8bit samples + AVS_CS_YUVA411P10 = AVS_CS_GENERIC_YUVA411 | AVS_CS_SAMPLE_BITS_10, // YUVA 4:1:1 10bit samples + AVS_CS_YUVA411P12 = AVS_CS_GENERIC_YUVA411 | AVS_CS_SAMPLE_BITS_12, // YUVA 4:1:1 12bit samples + AVS_CS_YUVA411P14 = AVS_CS_GENERIC_YUVA411 | AVS_CS_SAMPLE_BITS_14, // YUVA 4:1:1 14bit samples + AVS_CS_YUVA411P16 = AVS_CS_GENERIC_YUVA411 | AVS_CS_SAMPLE_BITS_16, // YUVA 4:1:1 16bit samples + AVS_CS_YUVA411PS = AVS_CS_GENERIC_YUVA411 | AVS_CS_SAMPLE_BITS_32, // YUVA 4:1:1 32bit samples + + // Planar YUV(A) 4:1:0 - 2026-08-25 + AVS_CS_YUV410 = AVS_CS_YUV9, // YUV 4:1:0 8bit samples + AVS_CS_YUV410P10 = AVS_CS_GENERIC_YUV410 | AVS_CS_SAMPLE_BITS_10, // YUV 4:1:0 10bit samples + AVS_CS_YUV410P12 = AVS_CS_GENERIC_YUV410 | AVS_CS_SAMPLE_BITS_12, // YUV 4:1:0 12bit samples + AVS_CS_YUV410P14 = AVS_CS_GENERIC_YUV410 | AVS_CS_SAMPLE_BITS_14, // YUV 4:1:0 14bit samples + AVS_CS_YUV410P16 = AVS_CS_GENERIC_YUV410 | AVS_CS_SAMPLE_BITS_16, // YUV 4:1:0 16bit samples + AVS_CS_YUV410PS = AVS_CS_GENERIC_YUV410 | AVS_CS_SAMPLE_BITS_32, // YUV 4:1:0 32bit samples + + AVS_CS_YUVA410 = AVS_CS_GENERIC_YUVA410 | AVS_CS_SAMPLE_BITS_8, // YUVA 4:1:0 8bit samples + AVS_CS_YUVA410P10 = AVS_CS_GENERIC_YUVA410 | AVS_CS_SAMPLE_BITS_10, // YUVA 4:1:0 10bit samples + AVS_CS_YUVA410P12 = AVS_CS_GENERIC_YUVA410 | AVS_CS_SAMPLE_BITS_12, // YUVA 4:1:0 12bit samples + AVS_CS_YUVA410P14 = AVS_CS_GENERIC_YUVA410 | AVS_CS_SAMPLE_BITS_14, // YUVA 4:1:0 14bit samples + AVS_CS_YUVA410P16 = AVS_CS_GENERIC_YUVA410 | AVS_CS_SAMPLE_BITS_16, // YUVA 4:1:0 16bit samples + AVS_CS_YUVA410PS = AVS_CS_GENERIC_YUVA410 | AVS_CS_SAMPLE_BITS_32, // YUVA 4:1:0 32bit samples + + // Y plus alpha 4:0:0 - 2026-08-25 + AVS_CS_YA8 = AVS_CS_GENERIC_YA | AVS_CS_SAMPLE_BITS_8, // Y plus alpha 4:0:0 planar 8bit samples + AVS_CS_YA10 = AVS_CS_GENERIC_YA | AVS_CS_SAMPLE_BITS_10, // Y plus alpha 4:0:0 planar 10bit samples + AVS_CS_YA12 = AVS_CS_GENERIC_YA | AVS_CS_SAMPLE_BITS_12, // Y plus alpha 4:0:0 planar 12bit samples + AVS_CS_YA14 = AVS_CS_GENERIC_YA | AVS_CS_SAMPLE_BITS_14, // Y plus alpha 4:0:0 planar 14bit samples + AVS_CS_YA16 = AVS_CS_GENERIC_YA | AVS_CS_SAMPLE_BITS_16, // Y plus alpha 4:0:0 planar 16bit samples + AVS_CS_YA32 = AVS_CS_GENERIC_YA | AVS_CS_SAMPLE_BITS_32 // Y plus alpha 4:0:0 planar 32bit samples }; // AvsChannelMask enum: Unshifted channel mask constants like in WAVEFORMATEXTENSIBLE @@ -823,6 +883,15 @@ AVSC_API(void, avs_set_channel_mask)(const AVS_VideoInfo* p, bool isChannelMaskK AVSC_API(unsigned int, avs_get_channel_mask)(const AVS_VideoInfo* p); +// V13 +AVSC_API(int, avs_is_440)(const AVS_VideoInfo * p); + +AVSC_API(int, avs_is_ya)(const AVS_VideoInfo * p); + +AVSC_API(int, avs_is_410)(const AVS_VideoInfo * p); + +AVSC_API(int, avs_is_411)(const AVS_VideoInfo * p); + // end of Avisynth+ specific ///////////////////////////////////////////////////////////////////// @@ -1708,6 +1777,11 @@ struct AVS_Library { AVSC_DECLARE_FUNC(avs_acquire_global_lock); AVSC_DECLARE_FUNC(avs_release_global_lock); AVSC_DECLARE_FUNC(avs_get_cpu_flags_ex); + // V13 + AVSC_DECLARE_FUNC(avs_is_440); + AVSC_DECLARE_FUNC(avs_is_ya); + AVSC_DECLARE_FUNC(avs_is_410); + AVSC_DECLARE_FUNC(avs_is_411); }; #undef AVSC_DECLARE_FUNC @@ -2001,6 +2075,11 @@ avs_bits_per_component constant 8 (8 bits/component) AVSC_LOAD_FUNC_OPT(avs_acquire_global_lock); AVSC_LOAD_FUNC_OPT(avs_release_global_lock); AVSC_LOAD_FUNC_OPT(avs_get_cpu_flags_ex); + // V13 + AVSC_LOAD_FUNC_OPT(avs_is_440); + AVSC_LOAD_FUNC_OPT(avs_is_ya); + AVSC_LOAD_FUNC_OPT(avs_is_410); + AVSC_LOAD_FUNC_OPT(avs_is_411); #undef __AVSC_STRINGIFY #undef AVSC_STRINGIFY diff --git a/distrib/docs/english/source/avisynthdoc/FilterSDK/C_api.rst b/distrib/docs/english/source/avisynthdoc/FilterSDK/C_api.rst index 1a74729f7..fdbb16238 100644 --- a/distrib/docs/english/source/avisynthdoc/FilterSDK/C_api.rst +++ b/distrib/docs/english/source/avisynthdoc/FilterSDK/C_api.rst @@ -413,6 +413,14 @@ Quick list +-------------------------------------+-----------------------+-------+ | avs_get_cpu_flags_ex | AVS_ScriptEnvironment | 12 | +-------------------------------------+-----------------------+-------+ +| avs_is_440 | AVS_VideoInfo | 13 | ++-------------------------------------+-----------------------+-------+ +| avs_is_410 | AVS_VideoInfo | 13 | ++-------------------------------------+-----------------------+-------+ +| avs_is_411 | AVS_VideoInfo | 13 | ++-------------------------------------+-----------------------+-------+ +| avs_is_ya | AVS_VideoInfo | 13 | ++-------------------------------------+-----------------------+-------+ Reference @@ -1113,6 +1121,26 @@ avs_is_rgb48 avs_is_rgb64 ------------ +.. _c_avs_is_440: + +avs_is_440 +---------- + +.. _c_avs_is_410: + +avs_is_410 +---------- + +.. _c_avs_is_411: + +avs_is_411 +---------- + +.. _c_avs_is_ya: + +avs_is_ya +--------- + .. _c_avs_subframe_planar_a: avs_subframe_planar_a @@ -1726,4 +1754,4 @@ ____ Back to :doc:`FilterSDK` -$Date: 2025/02/24 13:53:00 $ +$Date: 2026/08/25 22:52:00 $ diff --git a/distrib/docs/english/source/avisynthdoc/FilterSDK/FilterSDK.rst b/distrib/docs/english/source/avisynthdoc/FilterSDK/FilterSDK.rst index e8ff6fe2c..e0863a84a 100644 --- a/distrib/docs/english/source/avisynthdoc/FilterSDK/FilterSDK.rst +++ b/distrib/docs/english/source/avisynthdoc/FilterSDK/FilterSDK.rst @@ -467,6 +467,18 @@ What's new in the API V12 see :ref:`ApplyMessageEx` +.. _api_v13_whats_new: + +What's new in the API V13 +------------------------- + +- C and C++ API (AVISYNTH_INTERFACE_VERSION = 13): + - New API functions for additional pixel formats: + + * ``avs_is_440``, ``avs_is_410``, ``avs_is_411``, ``avs_is_ya`` (C) + * ``Is440``, ``Is410``, ``Is411``, ``IsYA`` (C++) + + Some history ------------ @@ -494,7 +506,7 @@ License terms Note: Avisynth Filter SDK parts are under specific :doc:`SDK license ` terms. -$Date: 2025/12/02 15:36:00 $ +$Date: 2026/08/25 22:40:00 $ Latest online Avisynth+ version is at https://avisynthplus.readthedocs.io/en/latest/avisynthdoc/FilterSDK/FilterSDK.html This one is maintained properly. diff --git a/distrib/docs/english/source/avisynthdoc/FilterSDK/VideoInfo.rst b/distrib/docs/english/source/avisynthdoc/FilterSDK/VideoInfo.rst index 747e6dbfc..3e67692ca 100644 --- a/distrib/docs/english/source/avisynthdoc/FilterSDK/VideoInfo.rst +++ b/distrib/docs/english/source/avisynthdoc/FilterSDK/VideoInfo.rst @@ -395,6 +395,23 @@ These functions are the bit depth independent versions of IsYV24, IsYV16, IsYV12 and IsY8. +Is440 / Is410 / Is411 / IsYA (AviSynth+) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Added in v13: + +:: + + bool Is440() const; + bool Is410() const; + bool Is411() const; + bool IsYA() const; + +These functions will return true if the clip has the specific YUV colorspace. +Is440, Is410, and Is411 also return true for alpha-bearing variants. IsYA +is the alpha-bearing version. + + IsYUVA / IsPlanarRGB / IsPlanarRGBA (AviSynth+) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -937,7 +954,7 @@ only 8, 10, 12, 14, 16 and 32. Back to :doc:`FilterSDK` -$Date: 2023/02/15 12:28:50 $ +$Date: 2025/08/25 22:52:15 $ .. _RGB: http://avisynth.nl/index.php/RGB .. _BMP frame: http://en.wikipedia.org/wiki/BMP_file_format diff --git a/distrib/docs/english/source/avisynthdoc/changelist376.rst b/distrib/docs/english/source/avisynthdoc/changelist376.rst index ded559b30..2df622e3d 100644 --- a/distrib/docs/english/source/avisynthdoc/changelist376.rst +++ b/distrib/docs/english/source/avisynthdoc/changelist376.rst @@ -3,6 +3,17 @@ Changes from 3.7.5 to 3.7.6 Additions, changes ~~~~~~~~~~~~~~~~~~ +- Added new pixel format constants + + * YUV(A) 4:4:0(:α) 8~32bits + * YV411 aliased to more standard YUV411 naming + * YUV 4:1:1 10~32bits + * YUVA 4:1:1:α 8~32bits + * Y plus alpha 4:0:0:α 8~32bits + * YUV9 (added in 2.6 but not used except in the constants list) aliased to more standard YUV410 naming + * YUV 4:1:0 10~32bits + * YUVA 4:1:0:α 8~32bits + - Added ``SetFilterProp``, ``GetFilterProps``, and ``SetFilterPropPassthrough``: * ``SetFilterProp`` — automatically inject a frame property on the output of a named filter @@ -173,6 +184,7 @@ Additions, changes Build environment, Interface ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +- Bump to interface version 13 for new color constants - introduce ``AVS_RESTRICT`` to ``avs/config.h`` (compiler invariant c++ ``__restrict``) - AVX512: CMake to recognize ``*_avx512b.*`` and ``*_avx512.*`` file pattern, add compiler specific AVX512 compile flags accordingly (AVX512 Base and Ice Lake extensions) diff --git a/distrib/docs/english/source/avisynthdoc/syntax/syntax_clip_properties.rst b/distrib/docs/english/source/avisynthdoc/syntax/syntax_clip_properties.rst index 651a600a7..eabed8ef8 100644 --- a/distrib/docs/english/source/avisynthdoc/syntax/syntax_clip_properties.rst +++ b/distrib/docs/english/source/avisynthdoc/syntax/syntax_clip_properties.rst @@ -247,11 +247,30 @@ WAVE_FORMAT_EXTENSIBLE dwChannelMask speaker position definitions, see https://learn.microsoft.com/en-us/windows/win32/api/mmreg/ns-mmreg-waveformatextensible (type: int) +- Is440 (clip) (v3.7.6) + +Returns true if the clip is 4:4:0, false otherwise (type: bool). + +- Is410 (clip) (v3.7.6) + +Returns true if the clip is 4:1:0, false otherwise (type: bool). + +- Is411 (clip) (v3.7.6) + +Returns true if the clip is 4:1:1 (like IsYV411, but bit depth +independently), false otherwise (type: bool). + +- IsYA (clip) (v3.7.6) + +Returns true if the clip is 4:0:0:α, false otherwise (type: bool). + + + -------- Back to :doc:`AviSynth Syntax `. -$Date: 2025-02-25 17:08:52-05:00 $ +$Date: 2026-08-25 22:50:00-05:00 $ .. _rgb: http://avisynth.nl/index.php/RGB .. _rgb24: http://avisynth.nl/index.php/RGB24