Message ID | 20220217004949.91570-1-qyot27@gmail.com |
---|---|
State | New |
Headers | show |
Series | [FFmpeg-devel] avformat/avisynth: fix frameprop version check | expand |
Context | Check | Description |
---|---|---|
andriy/make_x86 | success | Make finished |
andriy/make_fate_x86 | success | Make fate finished |
andriy/make_ppc | success | Make finished |
andriy/make_fate_ppc | success | Make fate finished |
andriy/make_aarch64_jetson | success | Make finished |
andriy/make_fate_aarch64_jetson | success | Make fate finished |
andriy/make_armv7_RPi4 | success | Make finished |
andriy/make_fate_armv7_RPi4 | success | Make fate finished |
On 2/16/22 7:49 PM, Stephen Hutchinson wrote: > Trying to be clever about determining between interface version 8 > and 8.1 ended up with pre-8.1 versions of AviSynth+ segfaulting. > > The amount of time between interface version 8.1 and 9 is small, > so just restrict the frameprop awareness to version 9 and call it > a day. > --- > libavformat/avisynth.c | 23 ++++++----------------- > 1 file changed, 6 insertions(+), 17 deletions(-) > > diff --git a/libavformat/avisynth.c b/libavformat/avisynth.c > index 8bc39869a3..b345f5efe2 100644 > --- a/libavformat/avisynth.c > +++ b/libavformat/avisynth.c > @@ -502,24 +502,13 @@ static int avisynth_create_stream_video(AVFormatContext *s, AVStream *st) > /* Read AviSynth+'s frame properties to set additional info. > * > * Due to a bug preventing the C interface from accessing frame > - * properties in earlier versions of interface version 8, only > - * enable this if we detect version 8.1 at the minimum. */ > + * properties in earlier versions of interface version 8, and > + * previous attempts at being clever resulting in pre-8 versions > + * of AviSynth+ segfaulting, only enable this if we detect > + * version 9 at the minimum. Technically, 8.1 works, but the time > + * distance between 8.1 and 9 is very small, so just restrict it to 9. */ > > - if (!avs_library.avs_get_env_property) { > - av_log(s, AV_LOG_TRACE, "%s\n", > - "avs_get_env_property does not exist in AviSynth library; frame properties won't be checked."); > - frameprop = false; > - } else { > - if (avs_library.avs_get_env_property(avs->env, AVS_AEP_INTERFACE_BUGFIX)) { > - av_log(s, AV_LOG_TRACE, "%s\n", "Using interface version 8.1 or higher, reading frame properties."); > - frameprop = true; > - } else { > - av_log(s, AV_LOG_TRACE, "%s\n", "Using interface version 8.0, need 8.1+ to read frame properties."); > - frameprop = false; > - } > - } > - > - if (frameprop = true) { > + if (avs_library.avs_get_version(avs->clip) >= 9) { > > frame = avs_library.avs_get_frame(avs->clip, framedata); > avsmap = avs_library.avs_get_frame_props_ro(avs->env, frame); Pushed.
diff --git a/libavformat/avisynth.c b/libavformat/avisynth.c index 8bc39869a3..b345f5efe2 100644 --- a/libavformat/avisynth.c +++ b/libavformat/avisynth.c @@ -502,24 +502,13 @@ static int avisynth_create_stream_video(AVFormatContext *s, AVStream *st) /* Read AviSynth+'s frame properties to set additional info. * * Due to a bug preventing the C interface from accessing frame - * properties in earlier versions of interface version 8, only - * enable this if we detect version 8.1 at the minimum. */ + * properties in earlier versions of interface version 8, and + * previous attempts at being clever resulting in pre-8 versions + * of AviSynth+ segfaulting, only enable this if we detect + * version 9 at the minimum. Technically, 8.1 works, but the time + * distance between 8.1 and 9 is very small, so just restrict it to 9. */ - if (!avs_library.avs_get_env_property) { - av_log(s, AV_LOG_TRACE, "%s\n", - "avs_get_env_property does not exist in AviSynth library; frame properties won't be checked."); - frameprop = false; - } else { - if (avs_library.avs_get_env_property(avs->env, AVS_AEP_INTERFACE_BUGFIX)) { - av_log(s, AV_LOG_TRACE, "%s\n", "Using interface version 8.1 or higher, reading frame properties."); - frameprop = true; - } else { - av_log(s, AV_LOG_TRACE, "%s\n", "Using interface version 8.0, need 8.1+ to read frame properties."); - frameprop = false; - } - } - - if (frameprop = true) { + if (avs_library.avs_get_version(avs->clip) >= 9) { frame = avs_library.avs_get_frame(avs->clip, framedata); avsmap = avs_library.avs_get_frame_props_ro(avs->env, frame);