これまでファイル構成やプロジェクト構成を見て概要を整理したので、今日こそ本題のコードリーディングをしていこうと思います。

OBS StudioのVer30、windows用の処理を参照していきます。

 

メイン関数からOBSのWindow表示までの概要

UIフォルダ下にあるobs-app.cppにmain関数があります。

main関数で色々処理した後にrun_program関数に渡してwindowを表示させています。

OBSのGUIの実装はQtを使っています。

(windowの基本的な中身はwindow-basic-main.cppで実装)

 

main関数の処理

main関数とrun_program関数の関係概要は下図のような感じになっています。

先ずは水色の部分のみ解説します。

 

起動処理

  • install_dll_blocklist_hook:クラッシュ対策でdllの停止をしています(ver29~実装)
    • “win-dll-blocklist.c”ファイルのblocked_modules配列に停止dllリストが実装されています
  • アプリ起動時のクラッシュ処理
    • obs_init_win32_crash_handler
      • obs-windows.c -> obs-win-crash-handler.cでエラーハンドラ実装
    • SetErrorMode
      • SEM_FAILCRITICALERRORSをセットすることでエラーメッセージを非表示でアプリ終了させる。(WINAPI関数)
    • load_debug_privilege
      • OBSに対して「デバッグ特権」,ベース優先度の増加特権の有効化などを設定
    • base_set_crash_handler
      • クラッシュ時の保存内容等を設定する処理
  • RTWorkQ.dllのロード
    • Real-Time Work Queue:マルチメディアやリアルタイムデータ処理に関連する機能
    • ”win-wasapi.cpp”で使用する為
  • base_get_log_handler:ログ処理用
  • obs_set_cmdline_args:OBS起動時の引数処理
    • 例:コマンドラインで下記を実行するとメッセージボックス付きでhelp一覧表示をしてくれる。(珍しい気がする…)
obs64.exe -h
  • #if ALLOW_PORTABLE_MODE~:ポータブルモード時の処理
    • 主にフォルダ関連設定
    • ポータブルモードとはUSBメモリ等に入れて使いたい場合のモード
  • check_safe_mode_sentinel:セーフモード時処理
  • upgrade_settings
  • curl_global_init:libcurlを初期化。
    • URL転送ライブラリ
  • run_program

 

終了処理

OBSのwindowが閉じられたら(終了したら)ここへ戻る。

  • RTWorkQ.dllの終了
  • log_blocked_dlls:install_dll_blocklist_hookでブロックしたdllの情報をログ書き込み
  • delete_safe_mode_sentinel
  • メモリリーク情報のログファイルへの書き込み
  • base_set_log_handler
  • リスタート処理
sam

sam

流山おおたかの森Techブログの管理人です。 お仕事のご依頼などはmail or Twitter[https://twitter.com/sam_sumario]で連絡頂けると反応出来ます。
Previous post OBS Studioのプラグインの作り方 #2 GUIの追加方法
Next post OBS Studio コードリーティング日記 #7 ; window表示まで

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です