TianZerL / Anime4KCPP

A high performance anime upscaler
MIT License
1.76k stars 138 forks source link

将 Anime4KCPP_Android 用于视频上,出现 crash,您帮忙看下 #113

Open liguobing opened 7 months ago

liguobing commented 7 months ago

因为这个库处理速度实在是太快了,所以我想要将它应用到实时视频上

具体操作是,获取到视频每一帧的 Bitmap,然后存在一个 queue 中,然后再另一个线程中从 queue 去数据,交由 Anime4KCPP 处理,得到新的 Bitmap,再渲染到一个 Bitmap 上

经常在处理了300-400个 bitmap 后出现 crash,具体报错如下:

A  Cmdline: github.tianzerl.anime4kcpp
A  pid: 28351, tid: 28409, name: Thread-3  >>> github.tianzerl.anime4kcpp <<<
A        #00 pc 00000000000b323c  /data/app/~~6-aV_QLj3Vru1wBFHJ2Huw==/github.tianzerl.anime4kcpp-VGJazKt6MGAya45MdhIrbA==/base.apk!libc++_shared.so (BuildId: 67e966ac77ca70ae9867f54c3711ee9a6c96e3b6)
A        #01 pc 00000000000b41e4  /data/app/~~6-aV_QLj3Vru1wBFHJ2Huw==/github.tianzerl.anime4kcpp-VGJazKt6MGAya45MdhIrbA==/base.apk!libc++_shared.so (BuildId: 67e966ac77ca70ae9867f54c3711ee9a6c96e3b6)
A        #02 pc 00000000000ae050  /data/app/~~6-aV_QLj3Vru1wBFHJ2Huw==/github.tianzerl.anime4kcpp-VGJazKt6MGAya45MdhIrbA==/base.apk!libc++_shared.so (__cxa_throw+104) (BuildId: 67e966ac77ca70ae9867f54c3711ee9a6c96e3b6)
A        #03 pc 000000000013f500  /data/app/~~6-aV_QLj3Vru1wBFHJ2Huw==/github.tianzerl.anime4kcpp-VGJazKt6MGAya45MdhIrbA==/base.apk!libAnime4KCPPCore.so (Anime4KCPP::OpenCL::Anime4K09::runKernel(cv::Mat const&, cv::Mat&, int)+3120) (BuildId: 4fe105cdc76f648093e878ef6f2e817ec4055ad3)
A        #04 pc 000000000013c588  /data/app/~~6-aV_QLj3Vru1wBFHJ2Huw==/github.tianzerl.anime4kcpp-VGJazKt6MGAya45MdhIrbA==/base.apk!libAnime4KCPPCore.so (Anime4KCPP::OpenCL::Anime4K09::runKernelB(cv::Mat const&, cv::Mat&)+40) (BuildId: 4fe105cdc76f648093e878ef6f2e817ec4055ad3)
A        #05 pc 000000000013c770  /data/app/~~6-aV_QLj3Vru1wBFHJ2Huw==/github.tianzerl.anime4kcpp-VGJazKt6MGAya45MdhIrbA==/base.apk!libAnime4KCPPCore.so (Anime4KCPP::OpenCL::Anime4K09::processRGBImageB()+472) (BuildId: 4fe105cdc76f648093e878ef6f2e817ec4055ad3)
A        #06 pc 00000000000f0b2c  /data/app/~~6-aV_QLj3Vru1wBFHJ2Huw==/github.tianzerl.anime4kcpp-VGJazKt6MGAya45MdhIrbA==/base.apk!libAnime4KCPPCore.so (Anime4KCPP::AC::process()+184) (BuildId: 4fe105cdc76f648093e878ef6f2e817ec4055ad3)
A        #07 pc 00000000000e22ec  /data/app/~~6-aV_QLj3Vru1wBFHJ2Huw==/github.tianzerl.anime4kcpp-VGJazKt6MGAya45MdhIrbA==/base.apk!libAnime4KCPPCore.so (Java_github_tianzerl_anime4kcpp_wrapper_Anime4K_processAnime4K+32) (BuildId: 4fe105cdc76f648093e878ef6f2e817ec4055ad3)
A        #10 pc 0000000000000e5c  [anon:dalvik-classes5.dex extracted in memory from /data/app/~~6-aV_QLj3Vru1wBFHJ2Huw==/github.tianzerl.anime4kcpp-VGJazKt6MGAya45MdhIrbA==/base.apk!classes5.dex] (github.tianzerl.anime4kcpp.wrapper.Anime4K.process+4)
A        #12 pc 00000000000021fc  [anon:dalvik-classes4.dex extracted in memory from /data/app/~~6-aV_QLj3Vru1wBFHJ2Huw==/github.tianzerl.anime4kcpp-VGJazKt6MGAya45MdhIrbA==/base.apk!classes4.dex] (github.tianzerl.anime4kcpp.Anime4KCPPUtil.reSizeBitmap+8)
A        #14 pc 0000000000004a64  [anon:dalvik-classes4.dex extracted in memory from /data/app/~~6-aV_QLj3Vru1wBFHJ2Huw==/github.tianzerl.anime4kcpp-VGJazKt6MGAya45MdhIrbA==/base.apk!classes4.dex] (github.tianzerl.anime4kcpp.TestActivity.lambda$processImage$2$github-tianzerl-anime4kcpp-TestActivity+124)
A        #16 pc 0000000000004700  [anon:dalvik-classes4.dex extracted in memory from /data/app/~~6-aV_QLj3Vru1wBFHJ2Huw==/github.tianzerl.anime4kcpp-VGJazKt6MGAya45MdhIrbA==/base.apk!classes4.dex] (github.tianzerl.anime4kcpp.TestActivity$$ExternalSyntheticLambda4.run+4)
2023-11-28 17:30:52.844 28351-28367 BLASTBufferQueue        github.tianzerl.anime4kcpp           E  [VRI[TestActivity]#0](f:0,a:2) Faking releaseBufferCallback from transactionCompleteCallback
---------------------------- PROCESS ENDED (28351) for package github.tianzerl.anime4kcpp ----------------------------

想请教您,该从哪方面入手处理啊

TianZerL commented 7 months ago

是不是爆内存或者显存被系统kill掉了,注意控制队列大小,平衡io速度和处理速度。 看函数是崩溃在了OpenCL的处理函数上,这一步会提交数据给OpenCL,如果你开太多线程的话,就会塞很多数据给GPU。