If the user attempts to use AviSynth 2.5, an error message will now tell them they need to upgrade. Signed-off-by: Michael Niedermayer <michaelni@gmx.at>tags/n2.7
| @@ -1,68 +0,0 @@ | |||||
| // Copyright (c) 2011 FFmpegSource Project | |||||
| // | |||||
| // Permission is hereby granted, free of charge, to any person obtaining a copy | |||||
| // of this software and associated documentation files (the "Software"), to deal | |||||
| // in the Software without restriction, including without limitation the rights | |||||
| // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |||||
| // copies of the Software, and to permit persons to whom the Software is | |||||
| // furnished to do so, subject to the following conditions: | |||||
| // | |||||
| // The above copyright notice and this permission notice shall be included in | |||||
| // all copies or substantial portions of the Software. | |||||
| // | |||||
| // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |||||
| // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |||||
| // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |||||
| // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |||||
| // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |||||
| // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | |||||
| // THE SOFTWARE. | |||||
| /* these are defines/functions that are used and were changed in the switch to 2.6 | |||||
| * and are needed to maintain full compatility with 2.5 */ | |||||
| enum { | |||||
| AVS_CS_YV12_25 = 1<<3 | AVS_CS_YUV | AVS_CS_PLANAR, // y-v-u, planar | |||||
| AVS_CS_I420_25 = 1<<4 | AVS_CS_YUV | AVS_CS_PLANAR, // y-u-v, planar | |||||
| }; | |||||
| AVSC_INLINE int avs_get_height_p_25(const AVS_VideoFrame * p, int plane) { | |||||
| switch (plane) | |||||
| { | |||||
| case AVS_PLANAR_U: case AVS_PLANAR_V: | |||||
| if (p->pitchUV) | |||||
| return p->height>>1; | |||||
| return 0; | |||||
| } | |||||
| return p->height;} | |||||
| AVSC_INLINE int avs_get_row_size_p_25(const AVS_VideoFrame * p, int plane) { | |||||
| int r; | |||||
| switch (plane) | |||||
| { | |||||
| case AVS_PLANAR_U: case AVS_PLANAR_V: | |||||
| if (p->pitchUV) | |||||
| return p->row_size>>1; | |||||
| else | |||||
| return 0; | |||||
| case AVS_PLANAR_U_ALIGNED: case AVS_PLANAR_V_ALIGNED: | |||||
| if (p->pitchUV) | |||||
| { | |||||
| r = ((p->row_size+AVS_FRAME_ALIGN-1)&(~(AVS_FRAME_ALIGN-1)) )>>1; // Aligned rowsize | |||||
| if (r < p->pitchUV) | |||||
| return r; | |||||
| return p->row_size>>1; | |||||
| } | |||||
| else | |||||
| return 0; | |||||
| case AVS_PLANAR_Y_ALIGNED: | |||||
| r = (p->row_size+AVS_FRAME_ALIGN-1)&(~(AVS_FRAME_ALIGN-1)); // Aligned rowsize | |||||
| if (r <= p->pitch) | |||||
| return r; | |||||
| return p->row_size; | |||||
| } | |||||
| return p->row_size; | |||||
| } | |||||
| AVSC_INLINE int avs_is_yv12_25(const AVS_VideoInfo * p) | |||||
| { return ((p->pixel_type & AVS_CS_YV12_25) == AVS_CS_YV12_25)||((p->pixel_type & AVS_CS_I420_25) == AVS_CS_I420_25); } | |||||
| @@ -31,7 +31,6 @@ | |||||
| #include <windows.h> | #include <windows.h> | ||||
| #undef EXTERN_C | #undef EXTERN_C | ||||
| #include "compat/avisynth/avisynth_c.h" | #include "compat/avisynth/avisynth_c.h" | ||||
| #include "compat/avisynth/avisynth_c_25.h" | |||||
| #define AVISYNTH_LIB "avisynth" | #define AVISYNTH_LIB "avisynth" | ||||
| #define USING_AVISYNTH | #define USING_AVISYNTH | ||||
| #else | #else | ||||
| @@ -406,6 +405,19 @@ static int avisynth_open_file(AVFormatContext *s) | |||||
| avs->clip = avs_library.avs_take_clip(val, avs->env); | avs->clip = avs_library.avs_take_clip(val, avs->env); | ||||
| avs->vi = avs_library.avs_get_video_info(avs->clip); | avs->vi = avs_library.avs_get_video_info(avs->clip); | ||||
| #ifdef USING_AVISYNTH | |||||
| /* FFmpeg only supports AviSynth 2.6 on Windows. Since AvxSynth | |||||
| * identifies itself as interface version 3 like 2.5.8, this | |||||
| * needs to be special-cased. */ | |||||
| if (avs_library.avs_get_version(avs->clip) == 3) { | |||||
| av_log(s, AV_LOG_ERROR, | |||||
| "AviSynth 2.5.8 not supported. Please upgrade to 2.6.\n"); | |||||
| ret = AVERROR_UNKNOWN; | |||||
| goto fail; | |||||
| } | |||||
| #endif | |||||
| /* Release the AVS_Value as it will go out of scope. */ | /* Release the AVS_Value as it will go out of scope. */ | ||||
| avs_library.avs_release_value(val); | avs_library.avs_release_value(val); | ||||
| @@ -505,13 +517,8 @@ static int avisynth_read_packet_video(AVFormatContext *s, AVPacket *pkt, | |||||
| src_p = avs_library.avs_get_read_ptr_p(frame, plane); | src_p = avs_library.avs_get_read_ptr_p(frame, plane); | ||||
| pitch = avs_library.avs_get_pitch_p(frame, plane); | pitch = avs_library.avs_get_pitch_p(frame, plane); | ||||
| if (avs_library.avs_get_version(avs->clip) == 3) { | |||||
| rowsize = avs_get_row_size_p_25(frame, plane); | |||||
| planeheight = avs_get_height_p_25(frame, plane); | |||||
| } else { | |||||
| rowsize = avs_library.avs_get_row_size_p(frame, plane); | |||||
| planeheight = avs_library.avs_get_height_p(frame, plane); | |||||
| } | |||||
| rowsize = avs_library.avs_get_row_size_p(frame, plane); | |||||
| planeheight = avs_library.avs_get_height_p(frame, plane); | |||||
| #else | #else | ||||
| src_p = avs_get_read_ptr_p(frame, plane); | src_p = avs_get_read_ptr_p(frame, plane); | ||||
| pitch = avs_get_pitch_p(frame, plane); | pitch = avs_get_pitch_p(frame, plane); | ||||