CRI Sofdec  Last Updated: 2024-04-17 11:21 p
スレッドについて

Sofdec のスレッドフレームワークについて

Sofdecライブラリは、ビデオのデコード処理をアプリケーションと並列に効率的に実行できるよう、スレッドシステムを使用しています。
デコード処理は、Sofdecライブラリ初期化時に指定された「スレッドフレームワーク」に従って動作しており、 アプリケーションのスレッドフレームワークのタイプ「スレッドモデル」を指定することができます。

Sofdecで利用可能なスレッドモデルには2つのタイプがあります。 ライブラリ初期化用のパラメーター構造体 CriManaLibConfig の thread_model メンバーでスレッドモデルを指定します。

Sofdec スレッドフレームワークの種類
スレッドモデル 説明 初期化定数
マルチスレッドフレームワーク ライブラリでスレッド作成 CRIMANA_THREAD_MODEL_MULTI
シングルスレッドフレームワーク スレッド未使用 CRIMANA_THREAD_MODEL_SINGLE

Sofdec スレッドフレームワークで動作を指定できるのは、Sofdecのデコード処理の扱いのみです。
ファイル読み込みやサウンド出力処理のためのスレッドについては、ADX スレッドフレームワークの指定に従います。

また、デコードにマルチコアを使う設定(デフォルト)では、スレッドフレームワークの指定と関係なくデコード実行時に一時的にスレッドを作成します。
このスレッド作成の有無はスレッドフレームワークでは制御できません。 マルチコアデコードの設定でスレッド作成を止めることは出来ますが、性能が出なくなるためおすすめできません。

Sofdec のマルチスレッドフレームワーク

Sofdec初期化時にマルチスレッドフレームワークを選択した場合、ライブラリは内部的にスレッドを作成し、スレッド上でデコード処理を行います。
なお、デコード用スレッドは、メインよりも低い優先度で作成されます。

マルチスレッドフレームワーク使用時であっても、メインスレッド側のメインループでは定期的に criMana_ExecuteMain 関数を呼び出してください。
マルチスレッドフレームワークの場合は、 criMana_ExecuteVideoProcess 関数を呼び出す必要はありません。もし呼び出しても何も処理を行いません。

Sofdec のシングルスレッドフレームワーク

Sofdec初期化時にシングルスレッドフレームワークを選択した場合、ライブラリはデコード用スレッドを作成しません。
ムービーのデコード処理は criMana_ExecuteVideoProcess 関数を呼び出して直接実行してください。
また、メインスレッド側のメインループで定期的に criMana_ExecuteMain 関数を呼び出す必要があります。

criMana_ExecuteVideoProcess 関数はとてもCPU負荷の高い処理のため、シングルスレッドフレームワークで実行すると処理落ちの原因となります。
基本的にはデバッグ用途などで使用する設定だと認識してください。
もし、シングルスレッドフレームワークでアプリケーションを作る場合は、解像度の小さいムービーにするなどして処理落ちが発生しないように留意してください。

スレッドセーフかどうか

Sofdecの関数は原則としてスレッドセーフではありません。それぞれの関数は同一のスレッドから呼び出すようにしてください。