CRI Sofdec  Last Updated: 2024-09-25 20:36 p
複数同時ムービー再生

Sofdecでは、複数同時ムービー再生をサポートしています。

同時再生数の上限

通常、ムービーを一本再生するために、ムービーデコーダーのハンドルリソースを一つ消費します。
ハンドルリソースの上限はライブラリ初期化のパラメーターで指定します。
もし、Manaライブラリ初期化パラメーターをNULL指定した場合はハンドルリソースの上限は4になります。

[注意]
アルファムービーを再生する場合、ハンドルリソースを2個消費することに注意してください。

最大同時再生数の上限の変更

(1)  CRI Manaライブラリ初期化の設定

ムービーデコーダーのハンドルリソースの上限を変更するためには
Manaライブラリ初期化コンフィグのパラメーターを設定し、初期化を行って下さい。

例えば最大ハンドル数を8に増やす場合のサンプルコードについて下記に示します。

#define NUM_MOVIES (8) /* 最大ムービー同時再生数を8に増やす */
CriManaLibConfig config_mana; /* CRI Manaライブラリの初期化コンフィグ */
/* ユーザーアロケーターの登録 */
criMana_SetUserAllocator(user_alloc, user_free, NULL);
/* CRI Manaライブラリの初期化コンフィグにデフォルト値を設定 */
/* ムービーデコーダーのハンドル数の上限の設定 */
config_mana.max_decoder_handles = NUM_MOVIES;
/* CRI Manaライブラリの初期化 */
criMana_Initialize(&config_mana, NULL, 0);
void criMana_Initialize(const CriManaLibConfig *config, void *work, CriSint32 work_size)
ライブラリの初期化
#define criMana_SetDefaultLibConfig(p_config)
ライブラリ初期化用コンフィグ構造体にデフォルト値をセット
Definition: cri_mana.h:166
void criMana_SetUserAllocator(CriManaMallocFunc malloc_func, CriManaFreeFunc free_func, void *obj)
ユーザーアロケーターの登録
Manaライブラリ初期化パラメーター
Definition: cri_mana.h:681
CriUint32 max_decoder_handles
Definition: cri_mana.h:684
注意
ハンドルリソースを消費するのはSofdec.Primeコーデックを使用した場合のみです。
それ以外のコーデックを再生する場合はリソースは消費しません。


(2)  CRI File Systemライブラリ初期化の設定

ムービーのストリーミング再生はムービーデコーダーのハンドルリソースとは別に
ストリーミングを行うためのデータ読み込み用のローダーハンドル(CriFsLoader)、
ファイルオープン用のリソースを消費します。

動画・音声のストリーミング再生本数が多い場合、Manaライブラリとは別途、
先にFile Systemの初期化コンフィグのパラメーター(ローダーハンドル数、
ファイルオープン数の上限値)を設定し、初期化する必要があります。

ローダーハンドル数、ファイルオープン数のデフォルトは16本で設定されており、
これより大きい数のストリーミング再生を進めようとした場合、以下の
エラーコールバックが発生します。

E2008070931:Can not allocate loader handle. (Increase num_loaders of CriFsConfiguration.)

例えば17本以上の同時ストリーミング再生を行う場合は、アプリケーションから
下記のようなライブラリ初期化設定を行ってローダー数、また最大同時オープンファイル数を
増やす必要があります。

#define NUM_MOVIES (17) /* 最大同時再生数を17に増やす */
CriFsConfig config_fs; /* CRI FileSystemライブラリの初期化コンフィグ */
CriAtomExConfig config_atom_ex; /* CRI Atomライブラリの初期化コンフィグ */
CriManaLibConfig config_mana; /* CRI Manaライブラリの初期化コンフィグ */
/* ユーザーアロケーターの登録 */
criAtomEx_SetUserAllocator(user_alloc, user_free, NULL);
criMana_SetUserAllocator(user_alloc, user_free, NULL);
/*--- CRI FileSystem ---*/
/* CRI FileSystem の初期化コンフィグにデフォルト値を設定 */
criFs_SetDefaultConfig(&config_fs);
/* CRI FileSystemライブラリの初期化コンフィグを調整(※) */
/* 使用するCriFsLoaderの数 */
config_fs.num_loaders = NUM_MOVIES;
/* 最大同時オープンファイル数 */
config_fs.max_files = NUM_MOVIES;
/*--- CRI Atom ---*/
/* CRI AtomEx の初期化コンフィグにデフォルト値を設定 */
criAtomEx_SetDefaultConfig(&config_atom_ex);
/* 調整したCriFsConfigをAtomExコンフィグに設定して初期化 */
config_atom_ex.fs_config = &config_fs;
/* CRI Atomライブラリの初期化 */
criAtomEx_Initialize(&config_atom_ex, NULL, 0);
/*--- CRI Mana ---*/
/* CRI Manaライブラリの初期化コンフィグにデフォルト値を設定 */
/* ムービーデコーダーのハンドル数の上限の設定 */
config_mana.max_decoder_handles = NUM_MOVIES;
/* CRI Manaライブラリの初期化 */
criMana_Initialize(&config_mana, NULL, 0);

【補足】
※1: max_files数は、USMファイルを単独で再生する場合は同時再生する
   USM個数分指定します。USMファイルをCPKファイルにパッキングして
   再生する場合はCPKの個数を設定します。

※2: 動画の他に、ADXによる音声再生を別途同時に行う場合は、さらに
   音声分も調整してください。

※3: ストリーミング再生ではなく、メモリ再生を行う場合はnum_loaders
   やmax_filesの数値を増やす必要はありません。