-
Notifications
You must be signed in to change notification settings - Fork 75
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Windows] Frameprops cause segfault for 32-bit build #276
Comments
This is not clear for me; the fairly recent that worked is a new version and what did not work is the December version? If I understand then this is needed to reproduce: |
Grabbed current ffmpeg git (https://git.ffmpeg.org/ffmpeg.git), now just inspecting the code. |
Have you checked |
Commit FFmpeg/FFmpeg@2497a45562 (from December) works. FFmpeg HEAD does not. The frame property reading patches were committed in mid-February. To figure out if it was something in the rest of FFmpeg that might have broken it, I checked out commit (FFmpeg/FFmpeg@2497a45562), and then 32-bit Windows isn't necessary, only 32-bit FFmpeg. I wasn't testing with GCC builds of AviSynth, so I wasn't using the |
Hi, I'm sorry to say but I'd need a short help how to build this ffmpeg monster for win32. If it's not a short one I'm gonna figure it out. I fetched the master git so far and have a mingw environment which I usually use for gcc+win syntax check for Avisynth+ but I think it's x64 as well. |
I normally cross-compile FFmpeg under Linux, so the best I can really do there is point to the tedious build guide. Assuming zlib, bzip2, and AviSynth+'s headers are already installed, the basic configuration options for FFmpeg for 32-bit are here: https://github.com/qyot27/mpv/blob/extra-new/DOCS/crosscompile-mingw-tedious.txt#L4658 https://www.mediafire.com/file/1gz6azqot6ngdp8/ffmpeg_2497a45562.7z/file That contains two different debug builds of FFmpeg git-2497a45562: the regular commit as it was back in December, as well as with the frameprop changes applied. I also just tested with AviSynth+GCC 3.7.1a and the |
Strange. It seems that this function pointer did not resolved in ffmpeg. |
I only mentioned I thought maybe it had something to do with the fact |
Thanks. All V8+ functions were missing in avisynth.def.
instead of
This is the list which I appended to avisynth.def, interestingly two older functions were missing as well (rgb48,64) I suppose this implies that the IF version must jump again, and ffmpeg 32 bit build should require 9.1?
|
Those functions missing in the .def file makes sense. It also makes sense why the GCC build would work while the 32-bit MSVC build wouldn't, as GCC has the visibility attribute to control this sort of thing and probably just has all of them visible all the time. I'm not sure why it would be fine for 64-bit MSVC, unless Microsoft decided to do something similar when dealing with that issue on 64-bit, like the calling convention stuff on 64-bit being simpler too. I don't think this requires an interface bump, or to play with the detection logic in FFmpeg (I found out that I couldn't be clever about that and still be able to work with pre-3.7.1 versions of AviSynth+, so the frameprop patch just uses Though it might warrant actually doing the release of 3.7.2, so users have an easy fixed version to point to. Is there currently anything in the other recent issues that should get in before then? |
Things to do - nothing important is in my queue |
I've been trying to find the source of this for a while, but the best I've been able to do is narrow it down to FFmpeg calling the frameprop-related API functions (the line in libavformat/avisynth.c where
avs_get_frame_props_ro
is used is what gdb points to). Under 64-bit, it's fine (else the patch wouldn't have landed in FFmpeg), but with 32-bit, it immediately segfaults.For good measure, I had a fairly recent build of FFmpeg that worked - latest git for AviSynth+ loaded in it just fine, but the FFmpeg was from December, a good month and a half before the frameprop patches were integrated. So I rebuilt from the same commit, just with libavformat/avisynth.c checked out from FFmpeg's HEAD, and it could no longer load. The only difference between libavformat/avisynth.c from then to now are the frameprop changes.
It is specific to Windows, though. I have a VM of Debian i686, and both AviSynth+ and FFmpeg are perfectly fine.
A full backtrace using a non-stripped version of FFmpeg and a debug build of AviSynth+ r3651 (ec22279):
The text was updated successfully, but these errors were encountered: