CRI Sofdec
Last Updated: 2024-09-25 20:36 p
|
Sofdec1とSofdec2では、ムービーデータの互換性がありません。
すでにSofdec1用のムービーファイル(.sfd)が手元にある場合は、再エンコードを行ってください。
(もし再エンコードが難しい場合は、サポート窓口へご連絡ください。シンプルなムービーであればSFDからUSMに変換できる可能性があります。)
Sofdec2で、Sofdec1とは動作仕様が変更になっているものがいくつかありますので説明します。
単純な関数の置き換えでは移行が出来ない部分ですので、ご注意ください。
Sofdec1では再生中のハンドルに対して、別ファイルをいきなり再生開始したり、いきなりハンドル破棄をすることが出来ました。 (代わりに再生開始やハンドル破棄の関数内で処理をブロックしていました。)
Sofdec2では再生開始やハンドル破棄は、再生停止状態のハンドルに対してのみ可能です。 同一ハンドルで別のムービーを再生したい場合は、一旦再生停止状態に遷移させてください。
Sofdec1では、エラー状態になったハンドルをいきなりハンドル破棄することが出来ました。
Sofdec2では、エラー状態のハンドルに対してハンドル破棄や再生開始関数は実行できません。 エラー状態になったら停止リクエストを発行し、STOP状態になるのを待ってからハンドル破棄してください。
Sofdec1では、同時に16個まで連結再生ファイルを登録することが出来ました。
Sofdec2では連結再生の仕様が変更になり、ファイル読み込み終了時に発生するファイル要求コールバックで次のファイルを指定します。 つまり同時に複数個のファイルを登録することは出来なくなりましたし、ファイル登録するタイミングもそのコールバックが発生した瞬間のみとなります。
あらかじめアプリケーション側でファイルリストを準備しておいて、コールバック発生時にそこから順次登録するような実装にしてください。
Sofdec1では、ハンドルを作成せずにムービーデータの先頭10セクタをメモリ指定してヘッダー解析をする機能がありました。
Sofdec2では、再生ハンドルでヘッダー解析のみを行うことが可能になりました。 再生ハンドルの作成自体には大きなワークバッファーは必要としませんし、ヘッダー解析のために読み込んだムービーデータの先頭部分はそのまま 再生開始の時にも利用されます。
Sofdec1で、ムービー再生(描画)開始のタイミングをコントロールしたい場合は、ポーズをかけて再生を開始するという手順が必要でした。
Sofdec2では、関数として再生準備のみを行うことが出来るようになりました。 criManaPlayer_Prepare 関数を実行すると再生開始の準備(読み込みとデコード)のみ行います。 ハンドル状態が CRIMANAPLAYER_STATUS_READY になった後、 criManaPlayer_Start 関数を呼ぶことで即座にビデオフレームが取得できます。
Sofdec1では、mwPlyGetFrm関数を使用すると、古いフレームをリリースせずに新しいフレームを取得できました。
Sofdec2では、複数フレームの同時取得は未対応です。今後の対応を検討しています。
mwPlyGetCurFrm関数を使っているか、mwPlyGetFrm関数でも同時に1枚しかフレームを保持していない場合は、移行に問題はありません。
Sofdec1では、複数のオーディオトラックをインタリーブしたムービーファイルの再生中に、再生するオーディオトラックを切り替えることが出来ました。
Sofdec2では、再生中のオーディオトラック変更は非対応です。 一度ムービー再生を停止してから、再度再生開始するようにしてください。
Sofdec1 で実装済みのアプリケーションを Sofdec2に移行する場合、まずは上記仕様の違いについて確認してください。
次に一連のムービー関連処理で移行のキーになりそうな部分を説明します。
(ADX1 からADX2への移行は完了しているものとします。)
Sofdec1では、ハンドル作成時にムービーの最大解像度や最大ビットレートを指定する必要がありました。
Sofdec2では、ハンドル作成自体にはパラメーターの指定はありません。 ヘッダー解析後に、そのムービーを再生するのに最適なパラメーターを取得してワークバッファーを追加で確保することになります。
※ワークバッファーの計算や設定の詳細については、 メモリ管理 を参照してください。
もし、アプリケーションで事前にムービーのパラメーターを把握している場合は、あらかじめ再生用ワークバッファーを計算して設定しておくことも可能です。
なお、Sofdec1 でメモリ関数を登録して利用していた場合は、Sofdec2でもメモリ関数の登録を利用するのが簡単です。
Sofdec1 では、フレーム取得関数が成功する=フレーム表示時刻になっている、という条件でした。
Sofdec2 では、デコード結果の参照と表示時刻の判定が別関数になりました。 Sofdec1の方式ではフレーム取得に失敗した場合の原因がわかりにくかったためです。 大きな処理の流れ自体は Sofdec1 と変わりません。
※フレーム取得手順の詳細については、 ビデオフレームの取得と表示について を参照してください。