OBS Studio コードリーティング日記 #7 ; window表示まで

前回のmain関数の続きで今回はメインのwindowが表示されるまでコードリーディングをします。

(OBS StudioのVer30、windows用の処理を参照)

run_program関数

run_program関数は前回のmain関数と同様にobs-app.cpp内で処理されています。

Qtの大枠処理ではQApplicationを継承したOBSAppでexec()を実行し、

OBSのウィンドウはQMainWindowを継承したOBSBasicでshow()をそれぞれ実行しています。

クラス関係とファイル名の概要は下図。

 

起動処理(obs-app.cppファイル内)

以下、obs-app.cppの2320行目からの処理内容。

プロファイラ設定

実行速度計測の為、プロファイラを用意します。

プロファイラデータはユーザーフォルダ内のobs-studioフォルダ(~AppData/Roaming/obs-studio/)以下のprofiler_dataに書き込まれます。

概要のみ参照する場合はlogsフォルダ内のtxtデータにも記載されています。

profile_register_rootで”run_program_init”を設定しているので、以降はProfileScope(“関数名”)で呼び出すとroot以下に呼び出された階層と共に各処理時間が計測されていきます。

下記はログデータ内のプロファイラー結果の例。

16:00:12.735: run_program_init: 2121.05 ms
16:00:12.735:  ┣OBSApp::AppInit: 60.845 ms
16:00:12.735:  ┃ ┗OBSApp::InitLocale: 2.42 ms
16:00:12.735:  ┗OBSApp::OBSInit: 1983.53 ms
16:00:12.735:    ┣obs_startup: 4.057 ms
16:00:12.735:    ┗OBSBasic::OBSInit: 1240.27 ms

 

Qt設定

setHighDpiScaleFactorRoundingPolicy:高DPIディスプレイ用設定

addLibraryPath:実行フォルダを登録

qputenv:Qtの最適化の無効化

  • コメントに説明有。ウィジェットの交差判定を止めることでホットキー処理などを高速に処理させている。

 

OBSAppクラスのインスタンス作成

2387行目で変数名をprogramとしてインスタンスを作成しています。

以下ではQtアプリの大枠処理として開始関数のprogram.exec()をするため準備をしていきます。

  • OBSAppコンストラクタ(1401行目~)
    • 主な処理はQt設定の続き。
  •  起動時のエラー処理やログファイルの作成
    • ここでエラーが見つかるとQMessageBoxで警告を出す。
  • OBSInit関数(1668行目~)
    • 主な処理はmainウィンドウのインスタンス化
      • Log記録後、1738行目でOBSBasic(QMainWindow)のインスタンスを作成。
        • OBSBasicのコンストラクタ内(window-basic-main.cpp)でメインウィンドウの中にある各ドック(ウィジットウィンドウ)の設定処理を実施。
      • OBSBasic::Init()の実行
        • OBSBasicクラスとOBSAppクラスどちらにもOBSInit関数があるので注意
        • 主な処理はコンフィグファイルの設定反映やプラグイン読み出し、ホットキーの設定etc。
        • show()の実行は2172行目

上記の流れでOBSBasic::Init()の実行後、2586行目でprogram.exec()が実行されます。(OBSBasicクラスの実装はwindow-basic-main.cppファイル内)

sam

sam

流山おおたかの森Techブログの管理人です。 お仕事のご依頼などはmail or Twitter[https://twitter.com/sam_sumario]で連絡頂けると反応出来ます。
Previous post OBS Studio コードリーティング日記 #6 ; main関数
Next post DeepSpeed[v0.8.3]をWindowsにインストールする方法

コメントを残す

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