DSPコンポーネントの利用方法 (overview)

このページでは DSP ライブラリで提供している各種コンポーネントの利用方法について説明します。

概要

TwlSDK では、DSP を用いて画像や音声データのデコード、エンコードといった処理を行うことができる DSP ライブラリを用意しています。

DSP ライブラリとして提供している機能は以下の通りです。

コンポーネント

DSP ライブラリの各機能は、ライブラリをリンクすればすぐに使えるわけではありません。
各機能は「コンポーネント」として分けられており、使いたいコンポーネントをアプリケーション側で DSP にロードしなければなりません。
各コンポーネントのロード関数(DSP_Load*())を実行した時点で、DSP は動作状態になります。なお、何らかのコンポーネントがロードされた状態でスリープに入ることは禁止されています。

DSP は WRAM-B,C をそれぞれコード領域、データ領域として使用します(詳しくはワークRAMの概要を参照)。使用するサイズ(スロット数)は各コンポーネントによって異なります。
各コンポーネントのサイズを表すマクロを定義しており、それぞれのロード関数(DSP_Load*())の説明に書いています。

コンポーネントのロード

各コンポーネントは、$TwlSDK/dspcomponents/(コンポーネント名) 以下に入っている *.a ファイルです。
このコンポーネントファイルを展開する必要があるのですが、DSP ライブラリでは各コンポーネントファイルを静的メモリに配置してオープンする
DSP_OpenStaticComponent*() を用意しています(ただし、プログラムの常駐サイズは増加します)。

サイズを小さくしたい場合、圧縮したコンポーネントファイルをメモリに配置しておき、随時伸張して FS_CreateFileFromMemory() を使用してオープンする方法をとることができます。
DSP_OpenStaticComponent*() の内部でも FS_CreateFileFromMemory()を使用しています)

コンポーネントのロードは、DSP_Load*() の引数に先ほどオープンしたコンポーネントファイルである FSFile 構造体を渡すことで行います。
また、WRAM-B, WRAM-C の中で DSP に使わせてもよいスロットを指定する必要があります。
このとき、ロードに必要な WRAM-B および WRAM-C の空きスロット数が不足している場合は失敗します。

DSP のロード関数は、必要に応じて WRAM のスロットを ARM9、DSP の両方に切り替えます。
MI_ReserveWram*() で予約されたスロットは切り替えが禁止されているため、このようなスロットを指定すると失敗してしまいます。
従って、DSP のために WRAM をあらかじめ予約する必要はありません。

ロードに必要な空き領域があるなら、それらのスロットの中から必要な領域だけを DSP が確保します。

なお、複数のコンポーネントを同時にロードして使用することはできません。

// G.711 コンポーネントを使った例
FSFile *file;
// G.711 コンポーネントファイルをオープン
DSP_OpenStaticComponentG711(file);
// ロード
DSP_LoadG711(file, 0xff, 0xff);

上の例の場合、DSP用に確保される WRAM-B, WRAM-C は各 WRAM の全スロットの中から必要な分だけ選択されます。

コンポーネントのアンロード

WRAM を空けたいためにロードしたコンポーネントを削除したいとき、またはアプリケーションのスリープ時、終了時には、DSP_Unload*()を用いてコンポーネントをアンロードする必要があります。

アンロードによって、DSP のために確保されていた WRAM-B, WRAM-C のスロットが解放されます。

// G.711 コンポーネントのアンロード
DSP_UnloadG711();

参照

DSP 機能一覧

履歴

2008/11/04 コンポーネントロード時のスリープ禁止について追記
2008/10/21 コンポーネントのアンロードが必要となる場面を追加
2008/09/03 初版