CrendKing / avisynth_filter

DirectShow filters that put AviSynth and VapourSynth into video playing
MIT License
107 stars 8 forks source link

x86: crash with ReClock enabled #7

Closed chainikdn closed 3 years ago

chainikdn commented 3 years ago

no comments - it just crashes on start call stack shows it's a ReClock's crash when AVSF is enabled, but it doesn't make any difference for the end-user doesn't crash with ffdshow, obviously

    [External Code] 
>   ReClock.dll!0caeae7d()  Unknown
    ReClock.dll![Frames below may be incorrect and/or missing, no symbols loaded for ReClock.dll]   Unknown
    [External Code] 
CrendKing commented 3 years ago

I'll try, but isn't ReClock obsoleted by madVR, which has the judder removal feature, and supports x64?

chainikdn commented 3 years ago

madVR, which has the judder removal feature

I don't think it's the same thing. However I never used ReClock myself and have no idea why someone uses it now :D Still there's a complain from one user: https://www.svp-team.com/forum/viewtopic.php?pid=76654#p76654 Although it may indicate some issue with samples timestamps, for example. nope, it crashes before the first Receive

CrendKing commented 3 years ago

Screen

Works on my end. ReClock 1.9.0.7, using SVP and doubling frame rate.

Also tried with madVR. No problem

Can you try one thing? Re-download AVSF 0.6.1 package. My build yesterday might have some problem.

chainikdn commented 3 years ago

ha. it actually crashes IF there's some script set in AVSF, even the simplest "return Info()"

CrendKing commented 3 years ago

My script loads SVP and doubles the frame rate, as you can see in the screenshot.

Again, if you can get the crash easily, can you show me the call stack?

chainikdn commented 3 years ago

it works with empty script path in AVSF + SVP it crashes with non-empty script path in AVSF, regardless of SVP

can you show me the call stack?

all I can see is in the 1st message

CrendKing commented 3 years ago

What do you mean "empty script path"? I painted my screenshot to hide the path to the source video, but I do have a script (in the settings page, not shown in the status page). Do you need the script content?

chainikdn commented 3 years ago

by "empty script path" I mean empty "AviSynth script to load" field

CrendKing commented 3 years ago

Screenshot 2

chainikdn commented 3 years ago

dunno what else can I say

empty or missing file -> doesn't crash existing file -> crash SVP is closed completely


in fact I had the same strange crash-on-start-with-script-set trying to test "worker" build yesterday and after today's commits it started to work will try 32-bit "worker" now... ---> nope, no difference

CrendKing commented 3 years ago

Does everything work for you without ReClock, even include the current "worker" branch? Are we sure ReClock is the cause? If you want, I can publish a pre-release of the worker branch.

Does your ReClock have different settings than my screenshot?

FYI, just noticed SVP can only detect playback if I put AviSynth+ 3.6 AviSynth.dll in the MPC directory. 3.5 doesn't work :-p

CrendKing commented 3 years ago

Screenshot3 Screenshot4

chainikdn commented 3 years ago

Does everything work for you without ReClock, even include the current "worker" branch?

yep

Are we sure ReClock is the cause?

kind of :D

Does your ReClock have different settings than my screenshot?

nope

If you want, I can publish a pre-release of the worker branch.

no need... besides, it's hardly usable now cause it hangs on almost every action (for example, change some SVP params) but more important I don't see huge improvements over regular version o_O

FYI, just noticed SVP can only detect playback if I put AviSynth+ 3.6 AviSynth.dll in the MPC directory. 3.5 doesn't work :-p

work for me... there must be something in SVP's log anyway

CrendKing commented 3 years ago

it hangs on almost every action (for example, change some SVP params) I don't see huge improvements over regular version

This is the surprise of the day! Where does the difference come from? The new version is huge improvement over the current 0.6.x IMO. I fixed many existing problems and the performance difference is clear when playing 4K on my rig. The only reason I'm not merging it to trunk is that I usually use it for some period of time and see if any error pops up. Those concurrency issues are elusive.

I played around SVP, changing all sorts of params with the worker branch. It instantly reloads the new script and display OSD accordingly.

work for me... there must be something in SVP's log anyway

I was using an AviSynth.dll that I build myself using CMake. The dll should function exactly the same as the official release, except it does not contain any version info. The log has this line:

AVSF: please use Avisynth+ 3.5.0 or later

I wonder do you guys check version by extracting version info or use IScriptEnvironment::CheckVersion()?

Also, do you notice when you seek, you see the error message "Only a single prefetcher is allowed per script"? If yes, it is related to AviSynth 3.5 switch we did yesterday. My commit in the worker branch yesterday fixed that problem. If you can confirm, I'll backport that fix to 0.6.x.

chainikdn commented 3 years ago

I believe we'll need another thread for the "worker" branch and performance-related issues. And it definitely need much more testing. Again, it hangs all the time on my testing Ryzen 7 1700, and I don't see a huge perf. improvement - i.e. both "regular" and "worker" versions allow smooth 4k/10-bit @ 24x4 = 96 fps playback and doesn't allow 24x5 = 120 fps. But there could be another bottleneck somewhere...

when you seek, you see the error message "Only a single prefetcher is allowed per script"

nope, never seen this

do you guys check version by extracting version info

yep

CrendKing commented 3 years ago

I believe we'll need another thread for the "worker" branch and performance-related issues.

If you have time, can you open a ticket for that? For a starter, can you pull the latest commit (even with --force), enable logging, trigger some hang and show me the log? Thanks!

nope, never seen this

You need to make sure to have Prefetch() at the end of the script.

As for this issue, since I can't trigger it at all, I will close it. If you have any new discovery, we can reopen this and solve.