nyfair / mpv-win64

MPV Player Win64 Auto Build Bot
19 stars 4 forks source link

编译ffmpeg时--enable-libplacebo --enable-libshaderc出现的问题 #20

Closed eko5624 closed 1 year ago

eko5624 commented 1 year ago

我们这个版本的ffmpeg是动态编译的。在编译ffmpeg时增加 --enable-libplacebo --enable-libshaderc 选项 ,可以成功编译出ffmpeg动态版,也可以成功编译mpv( https://github.com/eko5624/mpv-win64/releases/download/2023-08-26/shared-mpv-20230826.7z )。但我发现在mpv.conf里设置 vo=gpu-next ,然后播放杜比视界的片子时,mpv会闪退,播放普通SDR片子就一切正常。 于是我进一步做了测试:静态编译ffmpeg,然后再编译出mpv。用这个版本的mpv,同样的设置播放杜比视界的片子就没有问题。不知道是什么原因,特来请教。 出错LOG如下: mpv.log

nyfair commented 1 year ago

这log根本没有出错信息呃 ffmpeg使用libplacebo只是滤镜,shaderc更是只用来转换glsl,根本不会被使用到 考虑到libplacebo成吨的bug,播放没有问题也可能只是没报错罢了

具体定位问题的话,我觉得首先应该单独动态链接libplacebo和shaderc排除干扰 其次libplacebo的demo里也有个播放器plplay,用那个动态链接ffmpeg来播放视频试下 当然最好是直接上gdb/lldb之类的来分析

eko5624 commented 1 year ago

怎么编译出plplay并动态链接到ffmpeg呢?在libplacebo没找到编译plplay的相关说明。

eko5624 commented 1 year ago

这log根本没有出错信息呃 ffmpeg使用libplacebo只是滤镜,shaderc更是只用来转换glsl,根本不会被使用到 考虑到libplacebo成吨的bug,播放没有问题也可能只是没报错罢了

具体定位问题的话,我觉得首先应该单独动态链接libplacebo和shaderc排除干扰 其次libplacebo的demo里也有个播放器plplay,用那个动态链接ffmpeg来播放视频试下 当然最好是直接上gdb/lldb之类的来分析

非常牛!!动态编译libplacebo就解决问题啦!原理是什么呢?

eko5624 commented 1 year ago

顺便一提:可以把工具链里的libmcfgthread.dll.a删掉,这样的话编译出来的程序就无需依赖libmcfgthread-1.dll了。

nyfair commented 1 year ago

顺便一提:可以把工具链里的libmcfgthread.dll.a删掉,这样的话编译出来的程序就无需依赖libmcfgthread-1.dll了。

话说我看你macOS版的mpv所有依赖都是动态链接的,为啥到了windows上就从一个极端到另一个极端了?

非常牛!!动态编译libplacebo就解决问题啦!原理是什么呢?

因为libplacebo是bug大户,而ffmpeg和mpv所链接的libplacebo代码并不相同,这里有问题其实代表的是libplacebo被ffmpeg使用的那部分代码有bug

eko5624 commented 1 year ago

macos版动态链接简单呀,也有部分库不支持静态链接吧。

nyfair commented 1 year ago

macos版动态链接简单呀,也有部分库不支持静态链接吧。

我倒是觉得macOS上那堆库反正也没可能被其他程序使用,全静态链接更省事。反倒是windows上,那些dll的确能用来和其他程序共享