我多年来一直在测试我正在开发的软件,仅通过Qt-MinGW64为64位系统编译,没有遇到任何关于视频编码的问题(这是此类应用程序的功能之一)。最近,我一直试图通过用Qt-MingGW32编译来构建我的软件的相应x86版本。
但是,在构建相同的ffmpeg和x264库版本以创建32位版本并成功将它们链接到我的项目之后,由于分段错误错误,应用程序在编码几帧后仍然会崩溃。这很奇怪,因为正如我之前所说,它在为64位系统编译时可以完美地工作。
我也花费了相当多的时间来尝试组合ffmpeg和x264库的大量不同版本,但也没有运气。当禁用x264和ffmpeg库的线程时,它都不起作用,因此它似乎不是win32线程问题。因此,我得出结论,错误最有可能出现在我的代码中,这有点超出我的理解,告诉ffmpeg在x64版本中分配适当的内存量,但不在x86版本中。
还必须指出,在avcodec_encode_video2
调用之前,我会进行以下调用,以便分配与相应项(AVFrame,AVCodec等)相关联的内存,例如
avcodec_open2( my_codec_context, my_codec, &opt );
my_av_frame=av_frame_alloc();
更确切地说,可以找到涉及我正在使用的代码结构的详细信息here。
因此,错误似乎比关于未初始化内存的问题更加微妙。
非常感谢提前。
更新
我发现了问题的焦点。出于某种原因,FFmpeg / x264库在使用Qt-MinGW32编译的Win32 GUI应用程序中表现异常,而它们在Win32控制台应用程序中正确运行,也使用Qt-WinGW32编译。我已经证明了这个声明执行了两个虚拟测试,其中完全相同的代码段通过控制台应用程序和GUI应用程序运行,在第一种情况下成功,在后一种情况下失败。下面可以找到这些测试的代码,以及我的项目中使用的x264和FFmpeg库,以及使用MinGW32在msys2中构建它们的说明:
https://takeafile.com/?f=hisusinivi
我不知道是否可以通过简单地调整代码来解决它,或者它是一个涉及不兼容问题的严重错误。如果是后者,是否应该向Qt / FFmpeg / x264工作人员报告为主要错误?