發表文章

7-zip "Use large memory pages"

large memory page是什麼? 參考 https://docs.microsoft.com/en-us/windows/desktop/Memory/large-page-support 這個功能應該是向系統要一塊連續不會被swap的記憶體,所以在讀寫上效能會比較好 MSDN建議用在server application內 這個選項需要管理者權限才能開 7-zip打開這個選項,會在壓縮和解壓縮上的效能提升 參考 https://sourceforge.net/p/sevenzip/discussion/45797/thread/e730c709/ Windows 10 up to revision 1709 (16299) 都不該使用,1803才有修正 因為win10系統有bug,會導致系統出問題 7-zip 18.05做了預防措施,會自動幫你檢查系統版本擋掉

Visual Studio MSVC compiler/linker options (optimization and etc)

紀錄冷門參數 有些功能看起來compiler/linker都有,因為compile和link可能不是同時做 同樣的功能兩邊都有 https://blogs.msdn.microsoft.com/vcblog/2013/09/11/introducing-gw-compiler-switch/   Compiler /Gw 消除重複或沒用到的global data https://docs.microsoft.com/en-us/cpp/build/reference/gw-optimize-global-data /Gy 消除重複或沒用到的function https://docs.microsoft.com/en-us/cpp/build/reference/gy-enable-function-level-linking /GL 可能會導致compile失敗 ex: ffmpeg 對整個程式做最佳化,要順便指定link /LTCG,才不會偵測到後再重跑增加效率 開了,/LTCG可以加開PGO(profile guided optimization),好像是自動產生數據去測試,未必是好的結果,建議測試過才決定要不要開 /GS- (Buffer Security Check) 關掉可以提高效能 ex: 很多執行時間短的function calls,檢查就會相對占用較多時間 https://docs.microsoft.com/en-us/cpp/build/reference/gs-buffer-security-check /GUARD:NO (Enable Guard Checks) 目前預設是關的,可以不用下 https://docs.microsoft.com/en-us/cpp/build/reference/guard-enable-guard-checks /favor (Optimize for Architecture Specifics) https://docs.microsoft.com/en-us/cpp/build/reference/favor-optimize-for-architecture-specifics 除了提高效能外,目前使用發現binary有變小 /O...

configure build, host, target

http://jingfenghanmax.blogspot.com/2010/09/configure-with-host-target-and-build.html https://gcc.gnu.org/onlinedocs/gccint/Configure-Terms.html

Game capture: 遊戲擷取 限制擷取速率, Limit capture framerate

圖片
懶人包 遊戲要限制FPS,否則會無意義消耗較多資源 ,遊戲和實況品質都可能被影響 Limit capture framerate哪時候該開? 遊戲FPS是OBS內設定FPS的兩倍,建議打開 想讓OBS使用較少資源 詳細的解說和做法在下面,如果你已經知道要怎麼做或沒興趣可以不用看 有些太技術細節沒看懂也沒關係,不用完全懂就能選擇適合的設定 遊戲FPS太高 對螢幕和硬體的影響以前寫過了 https://craftwarblog.blogspot.com/2019/01/fpsrefresh-rate-vsync-g-sync-freesync.html 應該比較省資源的game capture會比其他方式消耗資源 遊戲FPS是120,obs每秒就會更新畫面120 frames obs輸出FPS是60時(實況或錄影),會有 120 - 60  = 60 的frames被obs丟掉沒有使用 其他擷取方式應該是依照obs FPS抓畫面,沒有這個問題 game source(hook)的機制是在遊戲更新畫面時,遊戲複製一份給OBS的game source game source預設會用兩倍的速度去讀取拿到的frame (理由上面圖片Jim講了) 沒限制遊戲FPS,上面兩個動作的次數都會增加,提高系統負擔 OBS合成畫面時是根據Settings->Video的FPS (總共有三個不同的FPS) OBS有打算修改game source相關FPS機制,不知道哪時候會開工就是了 因為這個問題不會造成非常嚴重的結果,有迴避方法在 沒限制遊戲FPS,算是使用者自己的問題 === 目前 21.1.2 game capture 擷取畫面的頻率是依照遊戲的FPS 不是依照obs內的FPS設定 沒開選項是遊戲兩倍 好像是討論到144Hz display, OBS FPS60的情況 (Discord討論出現的內容) 我下面寫的是否該開啟選項的原則沒有改變 資料來源 https://obsproject.com/mantis/view.php?id=1241 Limit capture framerate選項的功能,並不是類似V-sync把擷取頻率限制為obs內的FPS 是把更新的頻率減半 ...

Android 權限/隱私調整 permission/privacy management

Android 6.0 Marshmallow系統內建可調整開放的權限 (在應用程式資訊內) 只開放權限類別,很多細項無法調整 想要調整只能root後安裝第三方軟體 xposed module (need install xposed framework first) privacy   XPrivacy XPrivacyLua (6.0以後可用,successor of XPrivacy) 和隱私無關的功能沒有 ex: 震動 作者說基本上比XPrivacy好,兩者不能共存會衝突 XPrivacy某些隱私權限擋掉後會讓app crash,Lua有修正 permission AppOpsXposed 最新版在我的手機無法運作,我是用舊一點的版本 想要關掉充電時的震動 關掉系統UI的viberation就行了 (可能會連其他情況的震動也關掉) 建議關掉瀏覽器的震動,有些網站會濫用 + 訊息騙你系統有安全問題

OBS 無擷取卡實況遊戲 PS4, PS Vita

Q: 為何不用主機內建的實況功能? A: 畫質較好,可以對實況畫面更多調整 可透過網路傳送遊戲畫面到PC,不一定需要有擷取卡 畫面送到PC後就能直接給OBS 使用了 缺點是會增加主機負擔及延遲 (額外的網路使用) 想要最佳效果還是得透過擷取卡 (正常遊戲方式無差別,訊號改接到擷取卡) PS4  官方軟體 Remote Play https://remoteplay.dl.playstation.net/remoteplay/ PSVita VITA2PC (要破解) http://vitadb.rinnegatamante.it/#/info/305 或在PC上用模擬器,讓OBS擷取

Notepad++ Win10 1803 文字顯示錯誤

https://notepad-plus-plus.org/community/topic/15758/some-characters-are-not-displayed-unicode 原本字形Courier New,要改成別的字型就可以 看起來應該是Win10字型機制的部分有修改到,細節還不清楚 可是notpad就顯示正常 ? M$又偷改東西沒通知自己偷用了嗎?

Windows 10 更新停止方法,stop/disable Windows update

圖片
更新1803時查到的方法,新版本應該還適用 1803問題滿多的,建議暫時不要裝,先觀望 我不想裝1803 就是延後多少天安裝 調這樣後就按更新就不會找到了 這文字好像會讓人誤解,我只是想要有安裝的自主權 不一定是想延後幾天才裝,如果沒看到災情,我會馬上裝 可是這設定,天數沒到按更新不會顯示 如果已經在更新中,也有辦法強制停掉 ↑在執行打services.msc,去service把windows update關掉後,可以強制停止進行中的更新 停掉更新把上面天數調整完,記得再打開,否則收不到安全性更新 主要版本的更新建議觀察一陣子沒災情就可以更新了,都不更新會有問題的

AppVeyor 要開始砍Arifact了

圖片
6/11 設定deploy到github後已解決問題,除了忘記更新的應該都沒問題 6/xx 目前AppVeyor是決定6個月了,OBS Studio再觀望 到時候有問題就再找個可直連的空間 我也算是其中一個濫用者吧,有空該想想檔案該怎麼處理了 OBS Studio應該不會被影響,以目前的更新頻率3個月沒動應該不可能 擁有的專案以後就改上傳到github,不能偷懶了 (目前也只有一個 suspend ) 其他非我個人的就不理了 (Chatty及 OBS Classical)

OBS 實況顯示VNR翻譯的遊戲文字, display VNR (visual novel reader) translation

圖片
需要使用修改過的VNR (主要由 kyob1010 完成) 及OBS (修改過的obs-text.dll) 不想安裝新的可以只換掉關鍵檔案 (版本太舊會出問題,建議用已整合完的版本) 詳細安裝方法請看VNR, OBS各別文件 限制: 不能有多個不同名的obs-text同時使用vnr mode (因為我懶得處理,應該很少用到) 2019/6/26 提高效能,需要更新後才能用或都不更新 (VNR和OBS必須是同一機制) 2019/1/9 提高效能,需要更新後才能用 (或是都不更新留在舊版) VNR (visual novel reader) 不放在github的原因是檔案太大 limit會超過,就選了gitlab https://gitlab.com/craftwar/VNR_OBS kyob1010寫的說明文件 https://gitlab.com/craftwar/VNR_OBS/blob/master/README%20for%20VNR_OBS.txt 有問題要問 kyob1010,py我不熟,我只修改windows api的部分 回報問題前先閱讀 https://craftwarblog.blogspot.com/2018/07/how-to-report-bugs-effectively.html 除錯時,依文件說明使用debug mode檢查視窗全部輸出 (不是輸出停止的最尾端畫面而已) 建議複製到文字檔內再看,非常長,通常會寫錯誤原因 VNR常見問題 https://craftwarblog.blogspot.com/2018/12/vnr-visual-novel-reader-faq.html 一般使用者下載這個就好 (沒有多餘的修改,只加上OBS輸出功能) 如果VNR版本太舊,手動patch可能會錯誤,可下載包好的 Jichi版本 + OBS 輸出patch https://mega.nz/#!l0tHzI6Z!ZMjs_cE46atvjoQIGyV4zCXnDI_FSdZ8NjrHV-3Af7Y (我包的) 原先使用的VNR內的Cache目錄複製進去,避免缺少字典檔或其他檔案,導致問題 或用mklink建立連結,不用複製Cache目錄 (空間只需要一份) https://docs....

C++ Lambda

在改obs-text的時候,想到C++11有lambda,想用到Windows callback 語法上應該這樣改 ::EnumWindows([](HWND hwnd, LPARAM lParam) -> BOOL {     TextSource* _TextSource = reinterpret_cast<TextSource *>(lParam);     return !_TextSource->get_song_name(hwnd); } , reinterpret_cast<LPARAM>(this)); 實際上會錯誤,去查了 http://en.cppreference.com/w/cpp/language/lambda 才知道lambda實際上是透過一個隱藏的class來實作的,所以會有一些限制 call convention會因為內容改變,用到class method就不行啦 不能轉成windows sdk要的 stdcall

Windows SDK 筆記

Global\ Local\ 差別在session,service或Remote Desktop在session 0,要用global才能溝通 其他一般application可以用local SetClipboardData 似乎要檢查return看有沒有成功,沒成功要globalfree (from NotePad++ commit) 否則會有memleak 基本上現在除了OS功能,很少人用這個寫UI了,通常用Qt

don't name git branch as 'tag'

$ git push fatal: The current branch tag has no upstream branch. To push the current branch and set the remote as upstream, use     git push --set-upstream origin tag $ git push --set-upstream origin tag fatal: tag shorthand without <tag> use this command instead git push --set-upstream origin tag:tag

C++ index loop vs range-based for

以OBS Studio的code為範例 VS2017 15.7.1 release with pdb build 這邊我把兩種方式都寫進去,是為了方便比較asm,實際上只會選一種來用 (2)會轉成iterator的方式 http://en.cppreference.com/w/cpp/language/range-for (2)產生的asm會比(1)快 OBS是用(1),我在修其他bug時看到,就順手改成(2)丟給官方了 稍微想一下就知道index會比較慢了,每個loop都要算 volumes + i*n (array element大小) (2) 每個loop只要 vol += n 這邊我沒想到Jim會連這個也要求要照coding style,就直接寫auto& i了 想說是trivial的東西,因為每個範例都這樣寫 被要求改成 auto &vol void OBSBasic::ClearVolumeControls() {     //(1)     VolControl *control;     for (size_t i = 0; i < volumes.size(); i++) {         control = volumes[i];         delete control;     }     //(2)     for (auto &vol : volumes)         delete vol;     volumes.clear(); } asm code https://hastebin.com/jasikeqada.pl void OBSBasic::ClearVolumeControls() { 00007FF61D43C0B0 mov q...

OBS ndi 把影像傳到另一台電腦做壓縮, transfer video to another computer for encoding

NewTek's NDI® 是透用IP來傳送影音的技術 安裝這個plugin後,OBS就能使用NDI接收和傳送,正常是把ip camera拿來用 這個plugin會用到Qt,要自己build的必需和OBS所用Qt同版本,OBS更新可能就要更新 https://github.com/Palakis/obs-ndi 遊戲機把影像和丟出去,不做h264壓縮 (x264或硬體,交給另一台電腦來處理),降低系統使用資源 NDI在傳送時還是會壓縮 (比h264運算量少,資料比較大,會吃更多網路頻寬) 完全不影響遊戲機要用擷取卡/盒,讓另一台電腦擷取畫面實況,NDI只是省錢的替代方案 兩台電腦整體消耗資源會增加,如果電腦直接壓縮沒問題就不推薦 目前多數是高品質實況會影響遊戲體驗,用兩台高等級電腦來實況? 新版改善硬體壓縮後,對遊戲影響變小,也許不太需要了? (v23後新增功能) https://obsproject.com/mantis/view.php?id=610

講個我爸hinet 網路升速的笑話

因為hinet一直打電話來,我爸覺得太煩了,就答應升速了 20->35M 結果測速的數值 17,xxM,這樣根本差太多了吧,35M怎麼樣也該跑到2x 18M不到,根本用原本的20M就差不多跑這個數字了 他平常的使用習慣,只用手機,也不太看影片 就算35M能跑到,也沒有升級的價值 hinet的人來把p874換成p880就能跑到35M了 我爸最後有聽我的話,把網路退掉不升速, 換到一台p880

Qt style note

暫存區,還會修改 QWidget. setStyle() 不會拿ownership,要用setParent()才會一起清掉 我修正OBS一個memory leak ? QString styleName = slider->style()->objectName(); QStyle *style; style = QStyleFactory::create(styleName); if (!style) {     style = new SliderAbsoluteSetStyle(); } else {     style = new SliderAbsoluteSetStyle(style); } style->setParent(slider); slider->setStyle(style);

Use findstr on Windows to find text in files and command outputs

https://www.ghacks.net/2018/05/04/use-findstr-on-windows-to-find-text-in-files-and-elsewhere/ 1709似乎沒有這個指令,等更新後?

Windows win hotkey, 熱鍵

 win + https://www.techrepublic.com/blog/windows-and-office/the-complete-list-of-windows-logo-keyboard-shortcuts/ Windows+Ctrl+Shift+B 重啟顯卡驅動,可暫時解決win10 1803,chrome卡住的問題 reset graphic card driver 解決一些遊戲lag,或是記憶體無法釋放問題 Ctrl+Windows logo key +B     Switch to the program that displayed a message in the notification area.

Android VLC 中文字幕無法顯示/亂碼,display Chinese subtitle incorrectly

測試環境 Android 6.01, VLC player 3.05 字幕會變成方塊/亂碼,無法正常顯示,原因為VLC找不到字型或編碼有錯 這可能非最佳解法,對Android沒那麼熟 首先要先確認字幕檔編碼和VLC設定一樣 (自動偵測錯誤時,改utf-8通常能解決) 如果編碼沒錯,下一步是修正缺少的字型 下載google提供的NotoSansCJK-Regular.ttc字型 https://github.com/googlei18n/noto-cjk/blob/master/NotoSansCJK-Regular.ttc 或 https://www.google.com/get/noto/help/cjk/ 把 NotoSansCJK-Regular.ttc 複製到 /system/fonts/就可以了 (需要root或adb) 如果要讓其他app使用這個字型,應該還要修改/system/etc/fonts.xml 詳細改法,有興趣的人可以google看看,我沒有處理 這個修正法背後的原理,VLC寫死使用的字型 實際上,不是每隻手機都有預裝這字型 (google的原生系統有,其他家沒放?) http://git.videolan.org/gitweb.cgi/vlc.git/?p=vlc.git;a=blobdiff;f=modules/codec/libass.c;h=8004feb138ecad850106f015cb12fe38c0611e94;hp=8a73497422aa17c8d3f032e795a37cc67b2cd131;hb=8a15910d9f8e7d860f29d0e9803c756970d8cf74;hpb=4b898d321d77436204b573d066c61261d037f275 正確的方法,應該Android VLC要提供設定字幕字型 (desktop版就有這設定) MX Player字幕顯示就沒有問題,個人感覺效能上MX Player也比VLC好 VLC強在整體功能比較多 (也比較肥大)