2-3 ミドルウェアの使用方法 |
ミドルウェアライブラリの初期化は、各コーデックに対応した初期化関数を呼び出さなければなりません。
<Sofdecの場合>mwPlyPreInitSofdec(); sbInitSystem(NJD_RESOLUTION_640x480_NTSCI, NJD_FRAMEBUFFER_MODE_ARGB8888, 1); mwPlyInitSofdec(NULL);
sbInitSystem(NJD_RESOLUTION_640x480_NTSCI, NJD_FRAMEBUFFER_MODE_ARGB8888, 1); mwPlyInitWav(MWD_PLY_MN_EXEC_VSYNC);
ミドルウェアライブラリの内部状態の更新は、メイン処理用サーバ関数(mwPlyExecServer)をnjWaitVSync関数を呼び出す前に実行します。また、ゲームフレームの開始をミドルウェアライブラリに通知するために、njWaitVSync関数の直後にmwPlyStartFrame関数を呼び出さなければなりません。
whlie (1){ njWaitVSync(); mwStartFrame(); /*ゲームフレームの開始の通知 */ : (ゲームの処理) : mwExecServer(); /*デコード処理など */ }
各コーデックによって圧縮された音声や動画データは、ミドルウェア再生ハンドルを用いて再生します。まず、各コーデック用のミドルウェア再生ハンドルを生成します。このハンドルの生成には、使用するコーデックに対応したAPIを用います。
MWPLY plysfd,plywav; plysfd = mwPlyCreateSofdec(&cprm); /*Sofdecデータ再生用ミドルウェア再生ハンドル */ plywav = mwPlyCreateWav(&cprm); /*WAVEデータ再生用ミドルウェア再生ハンドル */
ハンドルの生成には、異なるAPIを使用しますが、再生指示には同じAPIを使用することができます。
mwPlyStartFname(plysfd, "SAMPLE.SFD"); /* Sofdecデータの再生 */ mwPlyStartFname(plywav, "SAMPLE.WAV"); /* WAVEデータの再生 */
mwPlyStart関数とmwPlyStop関数により、動画や音声の再生開始と再生停止を制御します。
ミドルウェア再生ハンドルの動作状態を下記に示します。生成した直後は、STOP状態となります。再生開始後、状態は、PREP ->PLAYING ->PLAYEND と遷移します。
表2 ハンドルの状態
状態 | 説明 |
STOP | 再生が停止している状態 |
PREP | 再生の準備をしている状態 |
PLAYING | 再生中の状態 |
PLAYEND | 再生が終了した状態 |
ERROR | エラーが発生した状態 |
状態遷移図を以下に示します。
図8 状態遷移図
以下に、MPEG Sofdecを再生するサンプルプログラムを示します。
<サンプルプログラム>/* アプリケーションメイン関数 */ void main(void) { MWPLY ply; /* ミドルウェア再生ハンドル */ MWE_PLY_STAT stat; /* ハンドルの状態 */ MWS_PLY_CPRM_SFD cprm; /* ハンドル生成のパラメータ構造体 */ mwPlyPreInitSofdec(); /* 割り込みスタックなどの設定 */ sbInitSystem(NJD_RESOLUTION_640x480_NTSCI,NJD_FRAMEBUFFER_MODE_ARGB8888,1); /* * 画面やサウンドの初期化 */ mwPlyInitSofdec(NULL); /* ライブラリの初期化 */ cprm.ftype = MWD_PLY_FTYPE_SFD; cprm.dtype = MWD_PLY_DTYPE_AUTO; cprm.work = syMalloc(MWD_SFD_SIZE_WORK); cprm.wksize = MWD_SFD_SIZE_WORK; ply = mwPlyCreateSofdec(&cprm); /* ハンドルの生成 */ mwPlyStartFname(ply, SAMPLE.SFD"); /* 再生開始 */ for (;;) { njWaitVSync(); /* V-Sync待ち */ mwPlyStartFrame(); /* ゲームフレーム開始の通知 */ stat = mwPlyGetStat(ply); /* ハンドルの状態の取得 */ if ( stat == MWE_PLY_STAT_PLAYEND ) { break; } mwPlyExecServer(); /* ミドルウェアライブラリの実行 */ } mwPlyStop(ply); /* 再生停止 */ mwPlyDestroy(ply); /* ハンドルの消去 */ syFree(cprm.work); mwPlyFinishSofdec(); /* ライブラリの初期化 */ }
以下に、Waveファイルを再生するサンプルプログラムを示します。
<サンプルプログラム>/* アプリケーションメイン関数 */ void main(void) { MWPLY ply; /* ミドルウェア再生ハンドル */ MWE_PLY_STAT stat; /* ハンドルの状態 */ MWS_PLY_CPRM_WAV cprm; /* ハンドル生成のパラメータ構造体 */ /* * 画面やサウンドの初期化 */ mwPlyInitWav(MWD_PLY_MN_EXEC_VSYNC); /* ライブラリの初期化 */ cprm.sjbuf = syMalloc(MWD_PLY_ALLOC_SJBUF(48)); cprm.size = MWD_PLY_ALLOC_SJBUF(48); ply = mwPlyCreateWav(&cprm); /* ハンドルの生成 */ mwPlyStartFname(ply, "SAMPLE.WAV"); /* 再生開始 */ for (;;) { njWaitVSync(); /* V-Sync待ち */ mwPlyStartFrame(); /* ゲームフレーム開始の通知 */ stat = mwPlyGetStat(ply); /* ハンドルの状態の取得 */ if ( stat == MWE_PLY_STAT_PLAYEND ) { break; } mwPlyExecServer(); /* ミドルウェアライブラリの実行 */ } mwPlyStop(ply); /* 再生開始 */ mwPlyDestroy(ply); /* ハンドルの消去 */ syFree(cprm.sjbuf); mwPlyFinishWav(); /* ライブラリの初期化 */ }
[←] | [INDEX] | [→] |
(C)SEGA ENTERPRISES, LTD., 1999