Masaiki / xy-VSFilter

xy-VSFilter variant with libass backend
https://github.com/Masaiki/xy-VSFilter
GNU General Public License v2.0
521 stars 9 forks source link

Incompatible with CrystalDiskInfo which is using MCI | 与CrystalDiskInfo(使用了MCI)不兼容 #23

Closed DogTorrent closed 4 months ago

DogTorrent commented 4 months ago

CrystalDiskInfo只要一播放声音(点击小人或者挂后台警告)就会crash,我拖了cdi的源码下来debug,发现CrystalDiskInfo使用了MCI并指定了lpstrDeviceType=MPEGVideo的方式来播放wav音频,进而会用到mciqtz32.dll里的方法(HKLM\Software\Microsoft\Windows NT\CurrentVersion\MCI32里指定了MPEGVideo使用mciqtz32.dll),而mciqtz32.dll似乎又会去使用系统上安装的DirectShow滤镜,然后就导致了崩溃。 我这里检查发现32位的XySubFilter.dll会导致32位的CrystalDiskInfo崩溃,64位的XySubFilter.dll会导致64位的CrystalDiskInfo崩溃,而使用K-Lite带的XySubFilter.dll则不会导致崩溃,大概确实应该是XySubFilter_with_libass引入的问题?

Issues-translate-bot commented 4 months ago

Bot detected the issue body's language is not English, translate it automatically. 👯👭🏻🧑‍🤝‍🧑👫🧑🏿‍🤝‍🧑🏻👩🏾‍🤝‍👨🏿👬🏿


CrystalDiskInfo will crash as soon as it plays sound (click on the villain or hang the background warning). I dragged the source code of cdi to debug and found that CrystalDiskInfo uses MCI and specifies lpstrDeviceType=MPEGVideo to play wav audio, and then uses mciqtz32 The method in .dll (HKLM\Software\Microsoft\Windows NT\CurrentVersion\MCI32 specifies that MPEGVideo uses mciqtz32.dll), and mciqtz32.dll seems to use the DirectShow filter installed on the system, which then causes a crash. . I checked here and found that 32-bit XySubFilter.dll will cause 32-bit CrystalDiskInfo to crash, 64-bit XySubFilter.dll will cause 64-bit CrystalDiskInfo to crash, and using XySubFilter.dll with K-Lite will not cause a crash, which is probably true. Should it be a problem introduced by XySubFilter_with_libass?

Masaiki commented 4 months ago

啊?这有点怪,我周末看看

Issues-translate-bot commented 4 months ago

Bot detected the issue body's language is not English, translate it automatically. 👯👭🏻🧑‍🤝‍🧑👫🧑🏿‍🤝‍🧑🏻👩🏾‍🤝‍👨🏿👬🏿


ah? This is a bit weird, I'll check it out over the weekend

Masaiki commented 4 months ago

@DogTorrent 我发现不只是 XySubFilter_with_libass 其他版本 https://github.com/Cyberbeing/xy-VSFilter & https://github.com/pinterf/xy-VSFilter 也存在这个问题 klite 中可能用的是 potplayer 添加的全局滤镜?没注册这个 dll 所以避免了这一问题?我暂时不太清楚 我尝试性的修了一下 本地测试已经通过你可以试一下 test_build.zip

Issues-translate-bot commented 4 months ago

Bot detected the issue body's language is not English, translate it automatically. 👯👭🏻🧑‍🤝‍🧑👫🧑🏿‍🤝‍🧑🏻👩🏾‍🤝‍👨🏿👬🏿


@DogTorrent I found that not only other versions of XySubFilter_with_libass https://github.com/Cyberbeing/xy-VSFilter & https://github.com/pinterf/xy-VSFilter also have this problem Klite may use the global filter added by potplayer? Did you avoid this problem by not registering this dll? I'm not sure yet I tried to fix it. The local test has passed. You can try it. test_build.zip

DogTorrent commented 4 months ago

@DogTorrent 我发现不只是 XySubFilter_with_libass 其他版本 https://github.com/Cyberbeing/xy-VSFilter & https://github.com/pinterf/xy-VSFilter 也存在这个问题 klite 中可能用的是 potplayer 添加的全局滤镜?没注册这个 dll 所以避免了这一问题?我暂时不太清楚 我尝试性的修了一下 本地测试已经通过你可以试一下 test_build.zip

新的我测了下,没有问题了。 Cyberbeing/xy-VSFilter的3.1.0.752和pinterf/xy-VSFilter的3.2.0.810、3.2.0.806我也都试了,确实都会导致崩溃。但是k-lite带的的dll(版本号为3.2.0.806)我手动注册后也还是正常的,看起来并不是没有注册的问题,也不知道k-lite带的dll是哪来的

Issues-translate-bot commented 4 months ago

Bot detected the issue body's language is not English, translate it automatically. 👯👭🏻🧑‍🤝‍🧑👫🧑🏿‍🤝‍🧑🏻👩🏾‍🤝‍👨🏿👬🏿


@DogTorrent I found that not only XySubFilter_with_libass but also other versions https://github.com/Cyberbeing/xy-VSFilter & https://github.com/pinterf/xy-VSFilter also have this problem. The ones in klite may be added by potplayer. Global filter? Did you avoid this problem by not registering this dll? I'm not sure yet. I tried to fix it. The local test has passed. You can try it test_build.zip

I tested the new one and there is no problem. 3.1.0.752 of Cyberbeing/xy-VSFilter and pinterf/xy-VSFilter I have also tried 3.2.0.810 and 3.2.0.806, and they will indeed cause crashes. But the dll that comes with k-lite (version number is 3.2.0.806) is still normal after I manually registered it. It seems that it is not a problem of not being registered, and I don’t know where the dll that comes with k-lite comes from.