(57)【特許請求の範囲】
【請求項１】
プロセッサおよびコンピュータ読出可能格納媒体を備え、適応出力メディアへと変換されるべき入力メディアを含むトランスコーディング要求を処理するモジュラーシステムであって、前記コンピュータ読出可能格納媒体は、前記プロセッサによって実行されるコンピュータ読出可能命令を格納しており、前記システムは、
前記入力メディアを前記適応出力メディアへと処理するトランスコーディング処理モジュールを有するトランスコーディングパイプラインモジュールと、
前記トランスコーディング要求を実行するための複数のソフトウェアモジュールを有する第１のソフトウェアモジュール群であって、前記トランスコーディングパイプラインモジュールを動的に構築する１以上のビルダモジュール、および、前記トランスコーディング要求に含まれる情報に応じて前記１以上のビルダモジュールを選択するディレクタモジュールを有する第１のソフトウェアモジュール群と、
前記トランスコーディングパイプラインモジュールのトランスコーディング処理を実行する、１以上のトランスコーディングオブジェクトモジュールを有する、複数のソフトウェアモジュールを有する第２のソフトウェアモジュール群と
を備え、
選択された前記ビルダモジュールは、前記トランスコーディングオブジェクトモジュールから前記トランスコーディング処理モジュールを作成する手段を含み、
前記第１のソフトウェアモジュール群はさらに、１以上のスクライバモジュールを有し、各スクライバモジュールは、ドキュメントの形態である前記入力メディアおよび前記適応出力メディアのオブジェクトの読出、復号、符号化、スケーリング、または、書込のうち１つを行う、システム。
【請求項２】
前記トランスコーディングパイプラインモジュールはさらに、前記１以上のビルダモジュールによって作成され、且つ、前記トランスコーディング要求の一部を処理するサブパイプラインモジュールを有する請求項１に記載のシステム。
【請求項３】
ドキュメントは、前記トランスコーディングオブジェクトモジュールによる処理に適している構造を持ち、前記ドキュメントの構造は、前記入力メディアおよび前記適応出力メディアの構造とは異なる請求項１に記載のシステム。
【請求項４】
プロセッサおよびコンピュータ読出可能格納媒体を備え、適応出力メディアへと変換されるべき入力メディアを含むトランスコーディング要求を処理するモジュラーシステムであって、前記コンピュータ読出可能格納媒体は、前記プロセッサによって実行されるコンピュータ読出可能命令を格納しており、前記システムは、
前記入力メディアを前記適応出力メディアへと処理するトランスコーディング処理モジュールを有するトランスコーディングパイプラインモジュールと、
前記トランスコーディング要求を実行するための複数のソフトウェアモジュールを有する第１のソフトウェアモジュール群であって、前記トランスコーディングパイプラインモジュールを動的に構築する１以上のビルダモジュール、および、前記トランスコーディング要求に含まれる情報に応じて前記１以上のビルダモジュールを選択するディレクタモジュールを有する第１のソフトウェアモジュール群と、
前記トランスコーディングパイプラインモジュールのトランスコーディング処理を実行する、１以上のトランスコーディングオブジェクトモジュールを有する、複数のソフトウェアモジュールを有する第２のソフトウェアモジュール群と
を備え、
選択された前記ビルダモジュールは、前記トランスコーディングオブジェクトモジュールから前記トランスコーディング処理モジュールを作成する手段を含み、
前記１以上のビルダモジュールはそれぞれ、前記ビルダモジュールの機能を示すビルダクエリ関数モジュールを含み、前記ディレクタモジュールは、前記ビルダモジュールの機能を判断し、且つ、前記トランスコーディング要求に含まれる情報と前記機能とを比較一致させるべく、前記クエリ関数モジュールと通信するビルダ選択モジュールを含む、システム。
【請求項５】
前記１以上のビルダモジュールはそれぞれさらに、前記ディレクタモジュールの前記ビルダ選択モジュールと通信して、前記トランスコーディング要求の一部を実行することが可能なほかの複数のビルダモジュールを選択するよう前記ディレクタモジュールに要求するサブビルダ選択モジュールを含む請求項４に記載のシステム。
【請求項６】
前記第２のソフトウェアモジュール群はさらに、あるドキュメントを別のドキュメントに変換するドキュメントトランスコーダモジュールを有する請求項１に記載のシステム。
【請求項７】
プロセッサおよびコンピュータ読出可能格納媒体を備え、適応出力メディアへと変換されるべき入力メディアを含むトランスコーディング要求を処理するモジュラーシステムであって、前記コンピュータ読出可能格納媒体は、前記プロセッサによって実行されるコンピュータ読出可能命令を格納しており、前記システムは、
前記入力メディアを前記適応出力メディアへと処理するトランスコーディング処理モジュールを有するトランスコーディングパイプラインモジュールと、
前記トランスコーディング要求を実行するための複数のソフトウェアモジュールを有する第１のソフトウェアモジュール群であって、前記トランスコーディングパイプラインモジュールを動的に構築する１以上のビルダモジュール、および、前記トランスコーディング要求に含まれる情報に応じて前記１以上のビルダモジュールを選択するディレクタモジュールを有する第１のソフトウェアモジュール群と、
前記トランスコーディングパイプラインモジュールのトランスコーディング処理を実行する、１以上のトランスコーディングオブジェクトモジュールを有する、複数のソフトウェアモジュールを有する第２のソフトウェアモジュール群と
を備え、
選択された前記ビルダモジュールは、前記トランスコーディングオブジェクトモジュールから前記トランスコーディング処理モジュールを作成する手段を含み、
前記トランスコーディング処理の実行中に発行されたメッセージ、エラー、および警告を格納するトランスコーディング結果モジュールと、前記入力メディアおよび前記適応出力メディアに関する情報を格納する特性化結果モジュールとを有するトランスコーダ出力データセットモジュールをさらに備える、システム。
【請求項８】
入力メディアを含むトランスコーディング要求を適応出力メディアを含むトランスコーダ出力データセットへと処理する方法であって、
前記トランスコーディング要求を受信する段階（ａ）と、
前記トランスコーディング要求の変換コマンドを読み出す段階（ｂ）と、
ソフトウェアモジュール群から、前記変換コマンドに対応付けられているプラグインプログラムを選択する段階（ｃ）と、
選択された前記プラグインプログラムを実行して、前記入力メディアを前記適応出力メディアへとトランスコードする段階（ｄ）と、
前記適応出力メディアを含む前記トランスコーダ出力データセットを生成する段階（ｆ）と
を備え、
前記段階（ｄ）は、
入力ドキュメントのコンポーネントへと前記入力メディアを抽出する段階（ｇ）と、
前記トランスコーディング要求および前記入力ドキュメントに示されている処理要求に一致するように、トランスコーディング処理を含むトランスコーディングパイプラインを作成する段階（ｈ）と、
前記トランスコーディングパイプラインから冗長なトランスコーディング処理を除去することによって、前記トランスコーディングパイプラインを最適化する段階（ｉ）と、
前記トランスコーディングパイプラインの前記トランスコーディング処理を実行して前記適応出力メディアを生成する段階（ｊ）と
を有する、方法。
【請求項９】
前記ソフトウェアモジュール群は、ドキュメントを処理する１以上のスクライバモジュールおよびディレクタモジュールを含み、前記段階（ｇ）は、
前記ディレクタモジュールを呼び出して、前記１以上のスクライバモジュールから読出スクライバモジュールを特定する段階（ｋ）と、
前記ディレクタモジュールが、前記１以上のスクライバモジュールにある全てのスクライバモジュールのリストを取得する段階（ｌ）と、
前記ディレクタモジュールが、読出クエリによって、前記全てのスクライバモジュールのリストの各スクライバモジュールに問い合わせを行う段階（ｍ）と、
前記ディレクタモジュールが、前記読出クエリに対して肯定的な返答を返す前記読出スクライバモジュールを選択する段階（ｎ）と、
前記読出スクライバモジュールが、前記入力メディアを読み出して前記入力ドキュメントを生成する段階（ｏ）と
を有する請求項８に記載の方法。
【請求項１０】
前記ソフトウェアモジュール群はさらに、前記トランスコーディングパイプラインを構築する１以上のビルダモジュールを含むビルダモジュール群およびディレクタモジュールを有し、前記段階（ｈ）は、
前記ディレクタモジュールを呼び出して、前記１以上のビルダモジュールから、前記トランスコーディング要求を満足させるための前記トランスコーディングパイプラインを構築することが可能な正しいビルダモジュールを特定する段階（ｐ）と、
前記ディレクタモジュールが、前記ビルダモジュール群に含まれる全てのビルダモジュールのリストを取得する段階（ｑ）と、
前記ディレクタモジュールが、パイプライン構築クエリで、前記全てのビルダモジュールのリストに含まれる各ビルダモジュールに対して問い合わせを行う段階（ｒ）と、
前記ディレクタモジュールが、前記正しいビルダモジュールとして、前記パイプライン構築クエリに対して肯定的な応答を返す前記ビルダモジュールを選択する段階（ｓ）と、
前記正しいビルダモジュールが、前記トランスコーディングパイプラインを作成する段階（ｔ）と
を有する請求項８に記載の方法。
【請求項１１】
前記ソフトウェアモジュール群はさらに、トランスコーディングオブジェクトモジュール群を含み、前記段階（ｔ）は、
前記正しいビルダモジュールを現在アクティブなビルダモジュールとして指定する段階（ｕ）と、
空のトランスコーディングパイプラインを現在のパイプラインとして指定して、前記トランスコーディング要求を未実行処理要求として指定する段階（ｖ）と、
未実行処理要求が見つからない場合には、段階（ｅｅ）にジャンプする段階（ｗ）と、
前記現在アクティブなビルダモジュールが、前記トランスコーディングオブジェクトモジュール群から、前記未実行処理要求を実行することが可能な一致トランスコーディングオブジェクトモジュールを特定および選択して、前記現在アクティブなビルダモジュールが前記一致トランスコーディングオブジェクトモジュールを見つけることが出来ない場合には、段階（ａａ）にジャンプする段階（ｘ）と、
前記一致トランスコーディングオブジェクトモジュールを、前記未実行処理要求を実行するべく、一致トランスコーディング処理の実行および前記現在のパイプラインの終端に前記一致トランスコーディング処理の付加を行うことが可能なものとして指定する段階（ｙ）と、
前記段階（ｗ）から前記段階（ｙ）を繰り返す段階（ｚ）と、
空のサブパイプラインを作成し、前記空のサブパイプラインを前記現在のパイプラインの終端に付加し、前記未実行処理要求を複数の未実行サブ要求に分割する段階（ａａ）と、
前記複数の未実行サブ要求のうち第１の未実行サブ要求をサポート可能なサポートビルダモジュールを前記ディレクタモジュールから取得して、前記ビルダモジュールを前記現在アクティブなビルダモジュールとして指定して、前記第１の未実行サブ要求を前記未実行処理要求として指定する段階（ｂｂ）と、
前記空のサブパイプラインを前記現在のパイプラインとして指定する段階（ｃｃ）と、
後続の未実行サブ要求それぞれを前記未実行処理要求として前記段階（ｗ）から前記段階（ｃｃ）を繰り返す段階（ｄｄ）と、
前記段階（ｔ）を終了する段階（ｅｅ）と
を含む請求項１０に記載の方法。
【請求項１２】
前記ソフトウェアモジュール群は、ドキュメントを処理する複数のスクライバモジュールを有するスクライバモジュール群およびディレクタモジュールを含み、
前記トランスコーディング要求はさらに、前記適応出力メディアの対象受信者の特性を定義するデスティネーションプロフィールを含み、前記段階（ｊ）は、
付加されたトランスコーディング処理、および、付加されたトランスコーディング処理を含む再帰的に付加されるサブパイプラインを含む前記トランスコーディングパイプラインへと実行を移行させる段階（ｆｆ）と、
深さ優先順序で前記トランスコーディング処理を実行して、前記入力ドキュメントのコンポーネントを出力ドキュメントのコンポーネントへと処理する段階（ｇｇ）と、
前記ディレクタモジュールを呼び出して、前記スクライバモジュール群から書込スクライバモジュールを特定する段階（ｈｈ）と、
前記ディレクタモジュールが、前記スクライバモジュール群の全てのスクライバモジュールのリストを取得する段階（ｉｉ）と、
前記ディレクタモジュールは、書込クエリで、前記全てのスクライバモジュールのリストの各スクライバに問い合わせを行う段階（ｊｊ）と、
前記ディレクタモジュールが、前記書込スクライバモジュールとして、前記クエリに対して肯定的な応答を返すスクライバモジュールを選択する段階（ｋｋ）と、
前記書込スクライバモジュールが、前記デスティネーションプロフィールに指定されているフォーマットで、前記出力ドキュメントを、前記トランスコーダ出力データセットの前記適応出力メディアへと変換する段階（ｌｌ）と
を有する請求項８に記載の方法。
【請求項１３】
前記段階（ｊ）は、前記実行中に発行されるメッセージ、エラー、および警告を含むトランスコーディング結果を生成する段階を有する請求項８に記載の方法。
【請求項１４】
トランスコーディング要求を受信するポートを有するコンピュータと、コンピュータ読出可能命令を含むソフトウェアモジュールを格納するメモリとを備え、入力メディアを含むマルチメディアメッセージから適応出力メディアを含む適応メッセージへと適応化し、前記マルチメディアメッセージおよび適応メッセージの制限および特性を記述しているデスティネーションプロフィールを含む前記トランスコーディング要求を処理するコンピュータシステムであって、
前記ソフトウェアモジュールは、
１以上のビルダモジュール、および、前記トランスコーディング要求に含まれる情報に応じてビルダモジュールを選択するディレクタモジュールを有し、トランスコーディングパイプラインモジュールを動的に構築する第１のソフトウェアモジュール群と、
１以上のトランスコーディングオブジェクトモジュールを含み、前記トランスコーディングパイプラインモジュールのトランスコーディング処理を実行する第２のソフトウェアモジュール群と
を備え、
選択された前記ビルダモジュールは、前記トランスコーディングオブジェクトモジュールから前記トランスコーディング処理を実行するモジュールを作成する手段を含み、
前記１以上のビルダモジュールはそれぞれ、当該ビルダモジュールの機能を示すビルダクエリ関数モジュールを有し、
前記ディレクタモジュールは、前記クエリ関数モジュールと通信して、前記ビルダモジュールの機能を決定し、当該機能と前記トランスコーディング要求に含まれる情報とを比較するビルダ選択モジュールを有する、コンピュータシステム。
【請求項１５】
コンピュータに、請求項８から請求項１３のいずれか１つに記載の方法のステップを実行させるためのプログラム。
【発明の詳細な説明】
【関連出願】
【０００１】
本願は、米国特許出願第１２／１１８，６９０号（発明者：リチャード・ノートン、出願日：２００８年５月１０日、発明の名称：「ビデオ適応化へのマルチメディア・メッセージング・サービス（ＭＭＳ）の方法およびシステム」）および米国特許出願第１２／３３４，４５２号（出願日：２００８年１２月１３日、発明の名称：「モジュラートランスコーディングパイプライン」）による恩恵を主張する。両米国出願の内容は参照により本願に組み込まれる。
【技術分野】
【０００２】
本発明は概して、マルチメディア・メッセージング・サービス（ＭＭＳ）に関する。特に、ＭＭＳメッセージに含まれているメディアを適応メッセージへと変更することに関する。
【背景技術】
【０００３】
マルチメディア・メッセージング・サービス（ＭＭＳ）は、例えば、ＵＲＬ（http://www.openmobilealliance.org/Technical/release_program/mms_v1_2.aspxhttp://www.openmobilealliance.org/release_program/mms_v1_2.html）から入手可能な、ＯＭＡマルチメディア・メッセージング・サービス仕様書、承認バージョン１．２  ２００５年５月、オープン・モバイル・アライアンス（Ｏｐｅｎ  Ｍｏｂｉｌｅ  Ａｌｌｉａｎｃｅ）、ＯＭＡ−ＥＲＰ−ＭＭＳ−Ｖ１＿２−２００５０４２９５−Ａ．ｚｉｐで説明されているように、文字、音声、静止画像、および動画像等を含むさまざまな種類のデータを主に無線ネットワークを介してピア・ツー・ピアおよびサーバ・ツー・クライアントで送信するための方法である。
【０００４】
ＭＭＳが提供する標準的な方法は上記のようなデータをカプセル化するが、データの種類については、テキスト形式、３ＧＰのビデオおよび音声／スピーチ、合成音声用のＳＰ−ＭＩＤＩ、ＪＰＥＧ静止画像等（これらの詳細については、ＵＲＬ（http://www.3gpp.org/ftp/Specs/html-info/26140.htm）から入手可能な、マルチメディア・メッセージング・サービス、メディアフォーマット、およびコーデック、３ＧＰＰ  ＴＳ  ２６．１４０、Ｖ７．１．０（２００７−０６）を参照のこと）、多く存在する標準フォーマットのうち任意のものを用いて符号化され得る。静止画像は、ＪＰＥＧ形式に符号化されることが多い。尚、ＪＰＥＧ方式については、ソフトウェアライブラリが「インディペンデントＪＰＥＧグループ（Ｉｎｄｅｐｅｎｄｅｎｔ  ＪＰＥＧ  Ｇｒｏｕｐ）」によって作成されており、ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gzで公開されている。
【０００５】
図１は、ＭＭＳシステムアーキテクチャ１００の一例を示す図である。ＭＭＳシステムアーキテクチャ１００は、起点ノード１０２、サービス配信プラットフォーム１０４と、デスティネーションノード１０６と、適応化エンジン１０８とを備える。起点ノード１０２は、ネットワーク「Ａ」１１０を介して、サービス配信プラットフォーム１０４と通信可能なデバイスである。同様に、デスティネーションノード１０６は、ネットワーク「Ｂ」１１２を介してサービス配信プラットフォーム１０４と通信可能なデバイスである。ネットワーク「Ａ」および「Ｂ」は、一連の利用可能な接続方式を図示するための一例に過ぎず、他にも多くの構成を利用することが可能である。例えば、起点ノードおよびデスティネーションノード（１０２および１０６）は、１つのネットワークを介してサービス配信プラットフォーム１０４と通信することができるとしてもよいし、起点ノード１０２は、間にネットワーク等を介在させることなく、サービス配信プラットフォーム１０４に直接接続されるとしてもよい。
【０００６】
適応化エンジン１０８は、図１に示すように、リンク１１４を介してサービス配信プラットフォーム１０４に直接接続されるとしてもよいし、またはこれに代えて、ネットワークを介して接続されるとしてもよいし、サービス配信プラットフォーム１０４に組み込まれるとしてもよい。
【０００７】
単純な事例を挙げると、起点ノード１０２が、デスティネーションノード１０６宛ての（マルチメディア）メッセージを送信するとしてよい。このメッセージは、ネットワーク「Ａ」１１０を介してサービス配信プラットフォーム１０４へと転送され、サービス配信プラットフォーム１０４から、ネットワーク「Ｂ」１１２を介してデスティネーションノード１０６へと送信される。起点ノードおよびデスティネーションノード（１０２および１０６）は、例えば、無線デバイスであってよく、ネットワーク「Ａ」および「Ｂ」（１１０および１１２）は、この場合、無線ネットワークであってよく、サービス配信プラットフォーム１０４は、マルチメディアメッセージ転送サービスを提供するコンピュータシステムであってよい。
【０００８】
別の例を挙げると、起点ノード１０２は、データネットワークを介してサービス配信プラットフォーム１０４に接続されているコンテンツプロバイダのサーバであってよい。つまり、ネットワーク「Ａ」１１０はインターネットであってよく、ネットワーク「Ｂ」１１２は、無線デバイスであるデスティネーションノード１０６に対してサービスを提供する無線ネットワークであってよい。
【０００９】
より一般的な事例を挙げると、デスティネーションノード１０６の機能に、起点ノード１０２の送信フォーマットのメッセージを受信、復号、または表示する機能が含まれない場合がある。デスティネーションノード１０６でこのメッセージを処理させるべく、起点ノード１０２から受信したメッセージを、適応化ソフトウェアモジュール１１６で修正するとしてよい。適応化ソフトウェアモジュール１１６は、コンピュータ読出可能媒体に格納されているコンピュータ読出可能命令を有し、当該メッセージがデスティネーションノード１０６に配信される前に適応化エンジン１０８で実行される。
【００１０】
図１に示した構成例によると、起点ノード１０２からデスティネーションノード１０６へのメッセージの送信は、メッセージ適応化が必要であると仮定すると、以下に記載する５段階で行われる。
１：「ソースメッセージ」が起点ノード１０２からサービス配信プラットフォーム１０４へと送信される
２：サービス配信プラットフォーム１０４は、例えば、デスティネーションノード１０６に直接問い合わせることによって、または、機能のデータベースを参照することによって、デスティネーションノード１０６の機能を判断する
３：サービス配信プラットフォーム１０４は、「ソースメッセージ」およびデスティネーションノード１０６の機能の説明を含む要求を、適応化エンジン１０８に送信する
４：適応化エンジン１０８に含まれる一連のソフトウェアモジュール１１６は、「ソースメッセージ」を「適応メッセージ」に適応化させる
５：適応化エンジン１０８は、「適応メッセージ」をサービス配信プラットフォーム１０４に戻して、サービス配信プラットフォーム１０４は「適応メッセージ」をデスティネーションノード１０６に転送する
【００１１】
マルチメディア・メッセージング・サービス（ＭＭＳ）に関してサーバ側での適応化の概略については、論文「マルチメディア・メッセージング・サービスにおけるマルチメディア適応化」（ステファン・クロンブ（Ｓｔｅｐｈａｎｅ  Ｃｏｕｌｏｍｂｅ）およびグイド・グラッセル（Ｇｕｉｄｏ  Ｇｒａｓｓｅｌ）、ＩＥＥＥコミュニケーションズ・マガジン、第４２巻、第７号、第１２０頁から第１２６頁、２００４年７月）に記載されている。
【００１２】
メディアコンテンツ作成フォーマットの多様性の増加が進む今日において、デスティネーションデバイスについて機能およびデバイス間での制限の相違が拡大しているために、拡張可能で性能および保全性が改善された、より自由度の高い適応化システムが必要となっている。
【発明の概要】
【発明が解決しようとする課題】
【００１３】
このため、本発明は、拡張可能で性能および保全性が改善された、自由度の高い適応化システムを実現するためのマルチメディア適応化の方法およびシステムを提供することを目的とする。
【課題を解決するための手段】
【００１４】
本発明の一側面によると、プロセッサおよびコンピュータ読出可能格納媒体を備え、適応出力メディアへと変換されるべき入力メディアを含むトランスコーディング要求を処理するモジュラーシステムが提供される。コンピュータ読出可能格納媒体は、プロセッサによって実行されるコンピュータ読出可能命令を格納している。当該システムは、入力メディアを適応出力メディアへと処理するトランスコーディング処理モジュールを有するトランスコーディングパイプラインモジュールと、トランスコーディング要求を実行するための複数のソフトウェアモジュールを有する第１のソフトウェアモジュール群であって、トランスコーディングパイプラインモジュールを動的に構築する１以上のビルダモジュール、および、トランスコーディング要求に含まれる情報に応じて１以上のビルダモジュールを選択するディレクタモジュールを有する第１のソフトウェアモジュール群と、トランスコーディングパイプラインモジュールのトランスコーディング処理を実行する、１以上のトランスコーディングオブジェクトモジュールを有する、複数のソフトウェアモジュールを有する第２のソフトウェアモジュール群とを備え、選択されたビルダモジュールは、トランスコーディングオブジェクトモジュールからトランスコーディング処理モジュールを作成する手段を含む。
【００１５】
トランスコーディングパイプラインモジュールはさらに、１以上のビルダモジュールによって作成され、且つ、トランスコーディング要求の一部を処理するサブパイプラインモジュールを有する。第１のソフトウェアモジュール群はさらに、１以上のスクライバモジュールを有し、各スクライバモジュールは、ドキュメントの形態である入力メディアおよび適応出力メディアのオブジェクトの読出、復号、符号化、スケーリング、または、書込のうち１つを行う。便宜上、ドキュメントは、トランスコーディングオブジェクトモジュールによる処理に適している構造を持ち、ドキュメントの構造は、入力メディアおよび適応出力メディアの構造とは異なる。
【００１６】
１以上のビルダモジュールはそれぞれ、ビルダモジュールの機能を示すビルダクエリ関数モジュールを含み、ディレクタモジュールは、ビルダモジュールの機能を判断し、且つ、トランスコーディング要求に含まれる情報と機能とを比較一致させるべく、クエリ関数モジュールと通信するビルダ選択モジュールを含む。
【００１７】
有益なことに、１以上のビルダモジュールはそれぞれさらに、ディレクタのビルダ選択モジュールと通信して、トランスコーディング要求の一部を実行することが可能なほかの複数のビルダモジュールを選択するようディレクタに要求するサブビルダ選択モジュールを含む。第２のソフトウェアモジュール群はさらに、あるドキュメントを別のドキュメントに変換するドキュメントトランスコーダモジュールを有する 。
【００１８】
本発明の実施形態に係るシステムは、トランスコーディング処理の実行中に発行されたメッセージ、エラー、および警告を格納するトランスコーディング結果モジュールと、入力メディアおよび適応出力メディアに関する情報を格納する特性化結果モジュールとを有するトランスコーダ出力データセットモジュールをさらに備える。
【００１９】
本発明の別の側面によると、入力メディアを含むトランスコーディング要求を適応出力メディアを含むトランスコーダ出力データセットへと処理する方法が提供される。当該方法は、トランスコーディング要求を受信する段階（ａ）と、トランスコーディング要求の変換コマンドを読み出す段階（ｂ）と、ソフトウェアモジュール群から、変換コマンドに対応付けられているプラグインプログラムを選択する段階（ｃ）と、選択されたプラグインプログラムを実行して、入力メディアを適応出力メディアへとトランスコードする段階（ｄ）と、適応出力メディアを含むトランスコーダ出力データセットを生成する段階（ｆ）とを備える。
【００２０】
当該方法の段階（ｄ）は、入力ドキュメントのコンポーネントへと入力メディアを抽出する段階（ｇ）と、トランスコーディング要求および入力ドキュメントに示されている処理要求に一致するように、トランスコーディング処理を含むメイントランスコーディングパイプラインを作成する段階（ｈ）と、メイントランスコーディングパイプラインから冗長なトランスコーディング処理２１８を除去することによって、メイントランスコーディングパイプラインを最適化する段階（ｉ）と、メイントランスコーディングパイプラインのトランスコーディング処理を実行して適応出力メディアを生成する段階（ｊ）とを有する。
【００２１】
上述した方法によると、ソフトウェアモジュール群は、ドキュメントを処理する１以上のスクライバモジュールおよびディレクタモジュールを含み、段階（ｇ）は、ディレクタモジュールを呼び出して、１以上のスクライバモジュールから読出スクライバモジュールを特定する段階（ｋ）と、ディレクタモジュールが、１以上のスクライバモジュールにある全てのスクライバモジュールのリストを取得する段階（ｌ）と、ディレクタモジュールが、読出クエリによって、全てのスクライバモジュールのリストの各スクライバモジュールに問い合わせを行う段階（ｍ）と、ディレクタモジュールが、読出クエリに対して肯定的な返答を返す読出スクライバモジュールを選択する段階（ｎ）と、読出スクライバモジュールが、入力メディアを読み出して入力ドキュメントを生成する段階（ｏ）とを有する。上述した方法によると、ソフトウェアモジュール群はさらに、トランスコーディングパイプラインを構築する１以上のビルダモジュールを含み、段階（ｈ）は、ディレクタモジュールを呼び出して、１以上のビルダモジュールから、トランスコーディング要求を満足させるためのトランスコーディングパイプラインを構築することが可能な正しいビルダモジュールを特定する段階（ｐ）と、ディレクタモジュールが、ビルダモジュール群に含まれる全てのビルダモジュールのリストを取得する段階（ｑ）と、ディレクタモジュールが、パイプライン構築クエリで、全てのビルダモジュールのリストに含まれる各ビルダモジュールに対して問い合わせを行う段階（ｒ）と、ディレクタモジュールが、正しいビルダモジュールとして、パイプライン構築クエリに対して肯定的な応答を返すビルダモジュールを選択する段階（ｓ）と、正しいビルダモジュールが、トランスコーディングパイプラインを作成する段階（ｔ）とを有する。
【００２２】
上述した方法によると、ソフトウェアモジュール群はさらに、トランスコーディングオブジェクトモジュール群を含み、段階（ｔ）は、正しいビルダモジュールを現在アクティブなビルダモジュールとして指定する段階（ｕ）と、空のトランスコーディングパイプラインを現在のパイプラインとして指定して、トランスコーディング要求を未実行処理要求として指定する段階（ｖ）と、未実行処理要求が見つからない場合には、段階（ｅｅ）にジャンプする段階（ｗ）と、現在アクティブなビルダモジュールが、トランスコーディングオブジェクトモジュール群から、未実行処理要求を実行することが可能な一致トランスコーディングオブジェクトモジュールを特定および選択して、現在アクティブなビルダモジュールが一致トランスコーディングオブジェクトモジュールを見つけることが出来ない場合には、段階（ａａ）にジャンプする段階（ｘ）と、一致トランスコーディングオブジェクトモジュールを、未実行処理要求を実行するべく、一致トランスコーディング処理の実行および現在のパイプラインの終端に一致トランスコーディング処理の付加を行うことが可能なものとして指定する段階（ｙ）と、段階（ｗ）から段階（ｙ）を繰り返す段階（ｚ）と、空のサブパイプラインを作成し、空のサブパイプラインを現在のパイプラインの終端に付加し、未実行処理要求を複数の未実行サブ要求に分割する段階（ａａ）と、第１の未実行サブ要求をサポート可能なサポートビルダモジュールをディレクタモジュールから取得して、ビルダモジュールを現在アクティブなビルダモジュールとして指定して、第１の未実行サブ要求を未実行処理要求として指定する段階（ｂｂ）と、空のサブパイプラインを現在のパイプラインとして指定する段階（ｃｃ）と、後続の未実行サブ要求それぞれを未実行処理要求として段階（ｗ）から段階（ｃｃ）を繰り返す段階（ｄｄ）と、段階（ｔ）を終了する段階（ｅｅ）とを含む。
【００２３】
上述した方法によると、トランスコーディング要求はさらに、適応出力メディアの対象受信者の特性を定義するデスティネーションプロフィールを含み、段階（ｊ）は、付加されたトランスコーディング処理、および、付加されたトランスコーディング処理を含む再帰的に付加されるサブパイプラインを含むメイントランスコーディングパイプラインへと実行を移行させる段階（ｆｆ）と、深さ優先順序でトランスコーディング処理を実行して、入力ドキュメントのコンポーネントを出力ドキュメントのコンポーネントへと処理する段階（ｇｇ）と、ディレクタモジュールを呼び出して、スクライバモジュール群から書込スクライバモジュールを特定する段階（ｈｈ）と、ディレクタモジュールが、スクライバモジュール群の全てのスクライバモジュールのリストを取得する段階（ｉｉ）と、ディレクタモジュールは、書込クエリで、全てのスクライバモジュールのリストの各スクライバに問い合わせを行う段階（ｊｊ）と、ディレクタモジュールが、書込スクライバモジュールとして、クエリに対して肯定的な応答を返すスクライバモジュールを選択する段階（ｋｋ）と、書込スクライバモジュールが、デスティネーションプロフィールに指定されているフォーマットで、出力ドキュメントを、トランスコーダ出力データセットの適応出力メディアへと変換する段階（ｌｌ）とを有する。
【００２４】
便宜上、段階（ｊ）は、実行中に発行されるメッセージ、エラー、および警告を含むトランスコーディング結果を生成する段階を有する。
【００２５】
本発明のさらに別の側面によると、コンピュータ読出可能格納媒体に格納されているコンピュータ読出可能命令を備え、且つ、入力メディアを適応出力メディアへとトランスコードするトランスコーディングパイプラインモジュールが提供される。当該トランスコーディングパイプラインは、それぞれが入力メディアのコンポーネントを適応出力メディアのコンポーネントへとトランスコードする１以上のトランスコーディング処理モジュールと、それぞれがトランスコーディング処理モジュールのうち少なくとも１つを有するゼロ以上のサブパイプラインモジュールとが所与の順序に沿って並べられたリストを備える。
また、上述のトランスコーディングパイプラインモジュールを作成および実行するためのモジュラーシステムが提供される。当該システムは、トランスコーディングパイプラインモジュールを動的に構築する複数のソフトウェアモジュールを有する第１のソフトウェアモジュール群であって、１以上のビルダモジュール、および、トランスコーディング要求に含まれる情報に応じてビルダモジュールを選択するディレクタモジュールを有する第１のソフトウェアモジュール群と、トランスコーディングパイプラインモジュールのトランスコーディング処理を実行する、１以上のトランスコーディングオブジェクトモジュールを含む複数のソフトウェアモジュールを有する第２のソフトウェアモジュール群とを備え、選択されたビルダモジュールは、トランスコーディングオブジェクトモジュールからトランスコーディング処理モジュールを作成する手段を含む。
【００２６】
上述したシステムによると、１以上のビルダモジュールは、トランスコーディング要求の一部を処理するサブパイプラインモジュールを作成して、サブパイプラインモジュールをトランスコーディングパイプラインモジュールへと付加するビルダモジュールを少なくとも１つ含む。便宜上、トランスコーディングオブジェクトモジュールのうち少なくとも１つは、トランスコーディング処理を実行する。
【００２７】
本発明のさらに別の側面によると、入力メディアを含むマルチメディアメッセージを適応出力メディアを含む適応メッセージへと適応化するコンピュータシステムが提供される。当該コンピュータシステムは、トランスコーディング要求を受信するポートを有するコンピュータと、コンピュータ読出可能命令を含むソフトウェアモジュールを格納するメモリとを備え、マルチメディアメッセージおよびデスティネーションプロフィールを含むトランスコーディング要求を処理する。デスティネーションプロフィールは、適応メッセージの制限および特性を記述している。当該ソフトウェアモジュールは、トランスコーディングパイプラインモジュールを動的に構築する複数のソフトウェアモジュールを有する第１のソフトウェアモジュール群であって、１以上のビルダモジュール、および、トランスコーディング要求に含まれる情報に応じてビルダモジュールを選択するディレクタモジュールを有する第１のソフトウェアモジュール群と、トランスコーディングパイプラインモジュールのトランスコーディング処理を実行する、１以上のトランスコーディングオブジェクトモジュールを含む複数のソフトウェアモジュールを有する第２のソフトウェアモジュール群とを備え、選択されたビルダモジュールは、前記トランスコーディングオブジェクトモジュールからトランスコーディング処理モジュールを作成する手段を含む。
上述したコンピュータシステムにおいて、１以上のビルダモジュールはそれぞれ、当該ビルダモジュールの機能を示すビルダクエリ関数モジュールを有し、ディレクタモジュールは、クエリ関数モジュールと通信して、ビルダモジュールの機能を決定し、当該機能とトランスコーディング要求に含まれる情報とを比較するビルダ選択モジュールを有する。
【００２８】
さらに、実行されると上述した方法の各段階を行うコンピュータ読出可能命令を備えるコンピュータ読出可能格納媒体が提供される。
【図面の簡単な説明】
【００２９】
以下の部分では、添付図面を参照しつつ一例として本発明の実施形態を説明する。図面は以下の通りである。
【図１】先行技術に係るＭＭＳシステムアーキテクチャ１００の一例を示す図である。
【図２】本発明の実施形態に係る適応化アーキテクチャ２００を示す図である。
【図３】図２の適応化アーキテクチャ２００のトランスコーダソフトウェアシステム２０４に含まれるソフトウェアモジュールを示すブロック図３００である。
【図４】図３のトランスコーダソフトウェアシステム２０４が実行する段階を示す最上位の実行フローチャート４００である。
【図５】図４の最上位の実行フローチャート４００に示す段階４０８の詳細を示す、トランスコードプログラム５０２の実行フローチャート５００である。
【図６】図５の実行フローチャート５００の段階５０６「『復号プラグイン』を実行」の詳細を示すフローチャート６００である。
【図７】図５の実行フローチャート５００の段階５０８「『パイプライン作成プラグイン』を実行」の詳細を示すフローチャート７００である。
【図８】図７の実行フローチャート７００の段階７１６「トランスコーディングパイプラインをビルドするべくビルダを実行」の詳細を示すフローチャート８００である。
【図９】図５の段階５０８でパイプライン作成プラグイン５２０によって作成されたメインパイプライン５２８のインスタンスの例である「単純メッセージパイプライン」９００を示す図である。
【図１０】図５の段階５０８でパイプライン作成プラグイン５２０によって作成されたメインパイプライン５２８のインスタンスの別の例である「非最適化メッセージパイプライン」１０００を示す図である。
【図１１】図５の段階５１０で最適化プラグイン５２２によって「非最適化メッセージパイプライン」１０００を最適化した結果得られる「最適化メッセージパイプライン」１１００を示す図である。
【図１２】図５のパイプライン実行プラグイン５２４の段階５１２「『パイプライン実行プラグイン』を実行」の詳細を示すフローチャートである。
【発明を実施するための形態】
【００３０】
本発明の実施形態は、トランスコーディング要求を受け取り、当該トランスコーディング要求で要求または示唆される処理を実行することによって当該トランスコーディング要求に含まれるデータを処理し、トランスコーディング出力を生成するためのトランスコーディングパイプラインを、一連のプログラムおよび処理から動的に構築する機能を持つ自由度の高いソフトウェアシステムを提供することを目的とする。
【００３１】
図２は、本発明の実施形態に係る適応化アーキテクチャ２００を示す図である。適応化アーキテクチャ２００は、トランスコーディング要求２０２、モジュラートランスコーダソフトウェアシステム２０４、トランスコーダ出力データセット２０６、および、１以上の任意の動的ロード共有メモリ２０８を備える。
【００３２】
トランスコーディング要求２０２は、１以上の変換コマンド２１０、１以上の入力メディア２１２、および、デスティネーションプロフィール２１４を有するデータセットである。トランスコーディング要求２０２は、トランスコーダソフトウェアシステム２０４に入力される。トランスコーダソフトウェアシステム２０４は、トランスコーディングパイプライン２１６、および、一群のソフトウェアモジュールおよびオブジェクト２２２を有する。トランスコーディングパイプライン２１６は、一連のトランスコーディング処理２１８および０以上のサブパイプライン２２０を含み、サブパイプライン２２０は、トランスコーディングパイプライン２１６と同じ性質を持つ。トランスコーダソフトウェアシステム２０４は、トランスコーディング要求２０２を入力として用いて、動的にトランスコーディングパイプライン２１６を構築して、トランスコーダ出力データセット２０６を生成する。トランスコーダ出力データセット２０６は、０以上のフィルタリング済出力メディア２２４、０以上の適応出力メディア２２６、トランスコーディング結果２２８、および、特性化結果２３０を含むとしてよい。
【００３３】
トランスコーダソフトウェアシステム２０４は、プロセッサ（不図示）を含むコンピュータと、ソフトウェアモジュールとを有する。ソフトウェアモジュールは、例えば、メモリ、ＣＤ−ＲＯＭ、ＤＶＤ等のコンピュータ読出可能媒体に格納されているコンピュータ読出可能命令を含み、当該コンピュータ読出可能命令は、プロセッサで処理されると、以下に詳述するような当該モジュールのさまざまな処理を実行する。本願では、トランスコーディングパイプライン２１６をトランスコーディングパイプラインモジュール２１６、トランスコーディング処理２１８をトランスコーディング処理モジュール２１８、サブパイプライン２２０をサブパイプラインモジュール２２０、トランスコーダ出力データセット２０６をトランスコーダ出力データセットモジュール２０６、トランスコーディング結果２２８はトランスコーディング結果モジュール２２８、特性化結果２３０を特性化結果モジュール２３０と呼ぶこともある。
【００３４】
適応化アーキテクチャ２００は、任意のプロフィールに応じて、入力メディアを出力メディアに適応させるために通常は利用されるが、当該プロフィール、つまりデスティネーションプロフィール２１４に応じた特徴を持つデスティネーションデバイスに送信されるべく、入力マルチメディアメッセージを適応化させる際に利用されるとしてもよい。このように利用される場合、入力マルチメディアメッセージは入力メディア２１２で、変換コマンド２１０は「トランスコード」の値を持ち、適応出力メディア２２６は、トランスコーディング要求２０２のデスティネーションプロフィール２１４に応じた適応メッセージ２３２としてフォーマットされる。
【００３５】
本発明に係るトランスコーダソフトウェアシステム２０４は、ＭＭＳシステムにおいて適応化を実行するべく適応化エンジン１０８（図１を参照のこと）にインストールするとしてもよいが、あるメディアフォーマットから別のメディアフォーマットへとメディアの適応化またはトランスコーディングを実行する任意のシステムにおいて利用されることが好ましいとしてもよい。
【００３６】
一般的に言うと、適応化アーキテクチャ２００のトランスコーダソフトウェアシステム２０４は、トランスコーディング要求２０２を受け取り、当該要求の内容を解釈してトランスコーディングパイプライン２１６のインスタンスを動的に構築するように設計されている。トランスコーディングパイプライン２１６は、複数のトランスコーディング処理２１８が所定の順序通りに並べられているリストまたはツリーである。
【００３７】
トランスコーディングパイプライン２１６は、完成すると最適化されるとしてよい。例えば、トランスコーディング処理２１８のツリーは、最適化された後のトランスコーディングパイプライン２１６を、入力メディア２１２をフィルタリング済出力メディアおよび／または適応出力メディア（参照番号はそれぞれ、２２４および２２６）へと適応化させる際に、より効率的に実行できるように、所定順序に沿った単純なリストに単純化されるとしてよく、さらに、冗長なトランスコーディング処理２１８は組み合わせたり、または除去するとしてよい。最適化されたトランスコーディングパイプライン２１６を実行するとさらに、他の出力、例えば、処理中に発行されたメッセージ、エラー、および警告を含むトランスコーディング結果２２８、および、結果として得られたメディア（つまり、適応出力メディア２２６およびフィルタリング済出力メディア２２４）の特性に関する情報を含む特性化結果２３０が得られるとしてよい。特性化結果２３０を生成するか否かは設定可能であり、特性化結果２３０はさらに、所与の適応化要求に関連する任意のメディア、つまり、任意の入力メディアおよび任意の出力メディアの特性を含むとしてよい。尚、フィルタリング済出力メディア２２４は、変更することなくトランスコーダソフトウェアシステム２０４を通過することがトランスコーディング要求２０２で許可されている入力メディア２１２を含む。
【００３８】
図２のトランスコーディング要求２０２は、メイン要求（または「マスタ入力要求」）であり、同じフォーマットのサブ要求に小さく分割するとしてよい。サブ要求を形成するのは、マスタ要求が記述しているタスクを達成するために必要な作業を分割するためである。一般的に、各サブ要求が含む変換コマンドは１つのみである。各サブ要求が含む入力メディアおよびデスティネーションプロフィールの数は任意としてよい。このデスティネーションプロフィールは、元々のデスティネーションプロフィール２１４の複製であってもよいし、サブプロフィールであってもよい。デスティネーションプロフィール２１４は、メッセージトランスコーディングの目的の特性を示すメッセージトランスコーディングプロフィールであってよいが、一群の単一メディアプロフィールを表すとしてもよい。一群の単一メディアプロフィールは、サブ要求を作成する際に選択されるサブプロフィールを表す。メイン要求およびサブ要求は、メディアオブジェクト（入力メディア２１２、フィルタリング済出力メディア２２４、適応出力メディア２２６）と、トランスコーダソフトウェアシステム２０４のソフトウェアコンポーネントとの間の明確なインターフェースとしてアーキテクチャ全体で利用され、トランスコーディングパイプライン２１６のトランスコーディング処理２１８を実行することによって最終的に達成されるべき作業を説明するために必要な情報を全て含む。
【００３９】
トランスコーディング要求２０２の変換コマンド２１０は、入力メディア２１２に対して実行されるべき処理を特定しており、適応出力メディアおよびフィルタリング済出力メディア（２２６および２２４）の目標特性および必要な出力メディアフォーマットは、デスティネーションプロフィール２１４で特定されている。一般的に、トランスコーディング要求２０２の各変換コマンド２１０は、「トランスコード」、「内容をフィルタリング」、または、「特性化」のうちいずれかであってよく、入力メディア２１２の一部または全てを参照するとしてよい。変換コマンドは、以下のような構造を持つ。
コマンドの識別子
コマンドの対象となる一群のメディアへの参照
コマンドについてのオプションを示す引数を提供する一群の特性／値のペア
【００４０】
変換コマンドの構造の一部として、コマンドの対象となるメディアが特定される。本例では、マスタ要求、つまりトランスコーディング要求２０２が、一群の入力メディア、つまり入力メディア２１２および１以上の変換コマンド２１０を特定する。いずれの変換コマンド２１０も、構造内でのみ、マスタ要求の一部であるメディアを参照することができる。
【００４１】
変換コマンド２１０について他にバリエーションを定義するとしてもよい。変換コマンド２１０のバリエーションをサポートするために必要な機能を持つモジュールを追加することによって、トランスコーダソフトウェアシステム２０４の構造でサポートされるとしてよい。トランスコーダソフトウェアシステム２０４は、非常に自由度が高く、機能を容易に追加できるように構成されている。この点については、本発明の実施形態を説明する上で明らかにしていく。
【００４２】
以下の部分では、トランスコーダソフトウェアシステム２０４でトランスコーディング要求２０２に含まれる情報を処理することでトランスコーディングパイプライン２１６を動的に作成するプロセスをより詳細に説明する。
【００４３】
トランスコーディング要求２０２が単純な（且つ、最も一般的な）構成の場合、入力メディア２１２およびデスティネーションプロフィール２１４を引数として持つ命令と考えられ得る変換コマンド２１０は１つのみである。例えば、変換コマンド２１０「トランスコード」は、デスティネーションプロフィール２１４（デスティネーションが電子メールを受信する際には、例えば、最大画像サイズに制限されている等、制限があることを示すとしてよい）に応じて入力メディア２１２（例えば、ＭＭＳメッセージ）をトランスコードするように、解釈される。
【００４４】
トランスコーディング要求２０２は通常、入力メディアのうち１以上（つまり、入力メディア２１２）と、出力メディアのうち１以上（つまり、適応出力メディア２２６およびフィルタリング済出力メディア２２４）との間の関係を指し示す。しかし、後続の処理によっては、出力メディアが後続のトランスコーディング要求２０２で入力メディアとして利用されるような、再帰的関係が定められている場合がある。１つの要求（マスタ要求またはそのサブ要求のうち１つ）に記述されている作業を完了させるためには複数の段階に分けて実行することが必要な場合が多い。「中間出力」メディアが作成される場合が多い。「中間出力」メディアは、１つの処理を実行した結果作成されるメディアである。後続の処理で入力として利用されるべきものである。「中間出力」メディアが最終的な適応出力メディア２２６に含まれることは絶対にない。「中間出力」メディアは、処理対象のメディアの一時的な中間状態を表している。これは、上述した特許出願、第１２／１１８，６９０号（出願日：２００８年５月１０日、発明の名称：「ビデオ適応化へのマルチメディア・メッセージング・サービス（ＭＭＳ）の方法およびシステム」）で詳細な例を挙げて説明されている。このような自由度があることによって、入力メッセージを１つのメディアビデオファイルである出力に変換するという複雑なトランスコーディングタスクを実行することが可能となる。このような変換を実現するためには、最終目標である出力メディアに到達するまでに多数の「中間出力」メディアを作成する必要がある場合もある。尚、出力メディアは、入力メッセージの内容を所望の出力フォーマットで表現するビデオファイルである。
【００４５】
図３は、適応化アーキテクチャ２００のトランスコーダソフトウェアシステム２０４に含まれるソフトウェアモジュール、つまり、一群のソフトウェアモジュールおよびオブジェクト２２２を示すブロック図３００である。一群のソフトウェアモジュールおよびオブジェクト２２２は以下を有する。
制御プログラムモジュール３０４
ディレクタモジュール３０６
プラグインマネージャ３０８
複数のビルダ３１２を含むビルダ群３１０
複数のスクライバ３１６を含むスクライバ群３１４
複数のトランスコーディングプラグイン３２０を含むトランスコーディングプラグイン群３１８
複数のプラグインプログラム３２４を含むプラグインプログラム群３２２
トランスコーディングオブジェクト３２８のトランスコーディングオブジェクト群３２６
ドキュメントトランスコーダ３３２のドキュメントトランスコーダ群３３０
【００４６】
一群のソフトウェアモジュールおよびオブジェクト２２２は、コンピュータによって処理されるべくコンピュータ読出可能媒体、例えば、メモリ、ＣＤ−ＲＯＭ、ＤＶＤ等に格納されているコンピュータ読出可能命令を含むソフトウェアモジュールを含む。この場合、制御プログラム３０４は制御プログラムモジュール３０４、ディレクタ３０６はディレクタモジュール３０６、プラグインマネージャ３０８はプラグインマネージャモジュール３０８、ビルダ３１２はビルダモジュール３１２、スクライバ３１６はスクライバモジュール３１６、トランスコーディングプラグイン３２０はトランスコーディングプラグインモジュール３２０、プラグインプログラム３２４はプラグインプログラムモジュール３２４、トランスコーディングオブジェクト３２８はトランスコーディングオブジェクトモジュール３２８、ドキュメントトランスコーダ３３２はドキュメントトランスコーダモジュール３３２とも呼ばれる。
【００４７】
尚、本明細書において、「トランスコーディングオブジェクト」という用語は、群またはライブラリにあるコミットしていないソフトウェアオブジェクトを意味し、「トランスコーディング処理」という用語は、トランスコーディングパイプラインに付加されているオブジェクトを意味する。
【００４８】
一群のソフトウェアモジュールおよびオブジェクト２２２は、２つの別個のソフトウェアモジュール群を含む。第１の群３３４は、トランスコーディング要求２０２を分析して、第２の群３３６から選択したオブジェクトを付加することによってトランスコーディングパイプライン２１６を組立てる機能を持つ。第２の群３３６は、トランスコーディングオブジェクト群３２６、ドキュメントトランスコーダ群３３０、および、動的ロード共有メモリ２０８にあるその他のトランスコーディングオブジェクトを含む。第１の群は、階層構造になったソフトウェアモジュール群であるビルダ群３１０、スクライバ群３１４、トランスコーディングプラグイン群３１８、およびプラグインプログラム群３２２を含み、これらはすべて、ディレクタ３０６の制御の元、プラグインマネージャ３０８によって管理される。
【００４９】
ブロック図３００にはさらに、プラグインマネージャ３０８に接続されている動的ロード共有メモリ２０８が図示されている。動的ロード共有メモリ２０８およびプラグインマネージャ３０８は共に、コンピュータによって読み出されて処理されるべくコンピュータ読出可能格納媒体、例えば、メモリ、ＣＤ−ＲＯＭ、ＤＶＤ等に格納されているコンピュータ読出可能命令を含む。
【００５０】
制御プログラム３０４は、トランスコーダソフトウェアシステム２０４全体を制御する。例えば、トランスコーダソフトウェアシステム２０４がインストールされている適応化エンジン１０８の入出力システムから、トランスコーディング要求２０２を受信する手段を含む。トランスコーディング要求２０２を分析して、トランスコーダソフトウェアシステム２０４の機能を判断し、プラグインプログラム３２４のうち１つ、つまり、トランスコーディング要求２０２の各変換コマンド２１０と対応付けられる特定のプラグインプログラム３２４を選択する。
【００５１】
トランスコーディング要求２０２の変換コマンド２１０によって呼び出されるプラグインプログラム３２４は、サービス提供対象となる変換コマンド２１０に応じてカスタマイズされるとしてよい。本発明の実施形態の範囲では、３つの変換コマンド２１０「トランスコード」、「内容をフィルタリング」、および「特性化」に対応して３つの異なるプラグインプログラム３２４が定義されている。プラグインプログラム３２４は、非常に単純なテキスト言語で書かれており、各プラグインプログラム３２４は、トランスコーディングプラグイン３２０のうち１つの名称をＰとすると「Ｐを実行」という形式のステートメントから成るステートメント列を含む。プラグインプログラム３２４はさらに、「ループ（ｌｏｏｐ）」および「移動（ｇｏｔｏ）」等の制御ステートメントを含むとしてよい。トランスコーダソフトウェアシステム２０４の機能を拡張することと、追加の変換コマンド２１０に対応することとを目的として、新たなプラグインプログラム３２４を設計するが、これは容易に実現され得る。
【００５２】
トランスコーディングプラグイン３２０は、トランスコーディングパイプライン２１６の一側面を処理するべく設計されているソフトウェアモジュールである。プラグインプログラム３２４から呼び出された一連のトランスコーディングプラグイン３２０によってプラグインプログラム３２４のカスタマイズが可能となり、その後の（おそらくは異なる）パイプライン処理タスクのために新しいプラグインプログラム３２４を容易に作成することができるようになる。現在定義されているトランスコーディングプラグイン３２０には、「復号プラグイン」、「パイプライン作成プラグイン」、「最適化プラグイン」、「パイプライン実行プラグイン」、「特性化プラグイン」、および、「セッション設定解除プラグイン」が含まれる。
【００５３】
少数のトランスコーディングプラグイン３２０はカスタマイズされたプログラムを含むが、大半のトランスコーディングプラグイン３２０は、メディアの実際の処理は、一群のソフトウェアモジュールおよびオブジェクト２２２のうち他のモジュラーコンポーネントおよび再利用可能コンポーネントにさせる。トランスコーディング要求２０２を処理するためのソフトウェアコンポーネントを正確に動的に選択する方法は、本発明の実施形態の革新的な概念の１つである。
【００５４】
プラグインマネージャ３０８は、ビルダ群３１０、スクライバ群３１４、トランスコーディングプラグイン群３１８、およびプラグインプログラム群３２２を格納する格納部である。また、追加のビルダ３１２、トランスコーディングプラグイン３２０、およびトランスコーディングオブジェクト３２８を含んでいる、動的ロード共有メモリ２０８への接続も行う。プラグインマネージャ３０８は、ディレクタ３０６によるこれらのソフトウェアモジュールおよびオブジェクトへのアクセスを管理する。
【００５５】
ディレクタ３０６は、ビルダ群３１０およびスクライバ群３１４を管理する。ディレクタ３０６は、プラグインプログラム３２４のうち１つによって呼び出されて、特定のスクライバ機能を満たす１つのスクライバ３１６をスクライバ群３１４から選択するスクライバ選択モジュール３０６ａを含む。同様に、ディレクタ３０６は、プラグインプログラム３２４のうち別の１つによって呼び出されて、特定のビルダ機能を満たす１つのビルダ３１２をビルダ群３１０から選択するビルダ選択モジュール３０６ｂを含む。
【００５６】
ディレクタ３０６のビルダ選択モジュール３０６ｂはさらに、ビルダ３１２のうち１つによって呼び出されて、別の特定のビルダ機能を満たす別の１つのビルダ３１２をビルダ群３１０から選択するとしてもよい。例えば、ある１つのビルダ３１２は、複雑なジョブを行う機能を持つものとして指定されているが、この複雑なジョブを行うためには、一部を下請けに出して別のビルダ３１２に行わせる必要がある。
【００５７】
ディレクタ３０６は、選択すべきスクライバまたはビルダを検索する際に、プラグインマネージャ３０８を介して、動的ロード共有メモリ２０８に設けられている外部のスクライバおよびビルダにもアクセスする。
【００５８】
スクライバ３１６は、ドキュメント（「ドキュメント」の定義は以下を参照のこと）としてメディアオブジェクトの読出、復号、符号化、スケーリング、および書込のいずれかを行う機能を持つ独自のソフトウェアオブジェクトである。スクライバ３１６はさらに、Ｘが処理機能を表す場合に「（Ｘ）はサポートされているか」という形式で呼び出されるスクライバクエリ関数モジュール３１６ａを含む。スクライバクエリ関数は、スクライバが「Ｘ」をサポートしている場合には「ＴＲＵＥ」と返し、「Ｘ」をサポートしていなければ「ＦＡＬＳＥ」を返す。
【００５９】
ディレクタ３０６は、処理「Ｘ」を実行する機能を持つスクライバを見つけるよう要求されると、プラグインマネージャ３０８から全スクライバリスト（つまり、スクライバ群３１４、および、動的ロード共有メモリ２０８にあるスクライバのリスト）を取得して、「（Ｘ）はサポートされているか」というスクライバ質問関数でリストに記載されている各スクライバを呼び出して、「ＴＲＵＥ」と返答する最初のスクライバを選択する。条件を満たすスクライバが見つからない場合はエラーとなり、エラーハンドリングに引き継がれる（以下を参照のこと）。
【００６０】
スクライバ３１６のうち１つが、例えば、トランスコーディング要求２０２から１つのＭＭＳメディアオブジェクト（入力メディア２１２）を全て読み出して、そのコンポーネント（ヘッダ、各メディア添付ファイル）およびメディアオブジェクトの構造を記述するレコードを、「ドキュメント」として適応化エンジン１０８のメモリに格納する機能を持つ「読出ＭＭＳスクライバ」であるとしてよい。
【００６１】
簡単な実装例として全スクライバリストを用いて検索を行うとしてもよいが、他のより高効率の検索アルゴリズムを利用するとしてもよい。
【００６２】
各スクライバの特定の機能は当該スクライバに組み込まれているので、スクライバ質問関数に対して「ＴＲＵＥ」と返答することができ、その後に呼び出された場合に必要な処理を実行することができる。一般的に、スクライバ３１６は、例えば、完全ＭＭＳメッセージ等の複雑なメディアオブジェクトを含むメディアオブジェクトのローカルなメモリ内表現であるドキュメントに対して「作業」を行う機能を持つ。ここで、「作業」とは、読出、復号、符号化、スケーリング、書込を含む。スクライバは、自己完結型オブジェクトである。各スクライバは、特定の種類のメディアに対して作業を行う機能を持つ（読出、書込等）。スクライバが実装する機能は、スクライバ自体の一部として符号化されているか、または、動的ロード共有メモリとの協働が必要となる場合もある。ある特定のスクライバは、物理的な入力を読み出して、それからメモリ表現を作成するとしてよい。別のスクライバは、メモリ表現から物理的な出力表現を作成するとしてよい。物理的な入力メディアまたは出力メディアとは、実際のメディアファイルを意味する。一方、メモリ表現とは、メモリ構造に準拠するように解析および処理されたファイルを意味する。
【００６３】
トランスコーディング処理２１８（図２）は、トランスコーディングパイプライン２１６に付加されたトランスコーディングオブジェクト３２８であり、トランスコーディング要求２０２に含まれている情報に対して処理を実行することによって特定のタスクを実行する。トランスコーディング処理２１８は、トランスコーディングパイプラインに付加される際に、トランスコーディング要求２０２またはサブ要求から導き出される引数が与えられる。
【００６４】
ビルダ３１２は、トランスコーディング処理２１８またはサブパイプライン２２０として、トランスコーディングパイプライン２１６に対して、どのように特定のトランスコーディングオブジェクト３２８を選択するかに関する情報を含む特別なソフトウェアオブジェクトである。ビルダ３１２は、要求を分析して当該要求を満たす情報を持っているか否かを判断する機能を持ち、これに従って特定のトランスコーディングオブジェクト３２８を選択する。
【００６５】
ビルダ３１２は、スクライバ３１６と同様に、Ｘが処理機能を表す場合に「（Ｘ）はサポートされているか」という形式で呼び出されるビルダクエリ関数モジュール３１２ａを有する。ビルダ質問関数は、ビルダが「Ｘ」をサポートしている場合には「ＴＲＵＥ」と返し、「Ｘ」をサポートしていなければ「ＦＡＬＳＥ」を返す。
【００６６】
ビルダクエリ関数モジュール３１２ａが「（Ｘ）はサポートされているか」という呼び出しによって問い合わせを受けると、ビルダは引数で伝えられる要求の詳細を調査する。ビルダは、その要求を処理すべきか否かを判断するべく、特定の要求特性を探す。探す対象の特性は、一意的なもので、別のビルダによって複製されることは決してない。各ビルダは、非常に具体的な目的を持って作成されている。ビルダ群全体は、「互いに基づいて構築する」という目的のもとで作成されている。このため、それぞれのビルダが対処する特定の問題については、そのほかのビルダは対処しないように、各ビルダは実装される。例えば、ビルダのうち１つは、全ての種類の画像を処理するとしてよい。別のビルダは、テキストメディアのみを処理する。さらに別のビルダは、全ての種類のオーディオ／ビデオ／アニメーションを処理する。以下に記載する説明では、どのようにＭＭＳビルダが別のビルダの情報に基づいてビルドを行って、ＭＭＳが含む添付ファイルに必要なパイプラインの一部分を作成するかの良例を記載する。ＭＭＳビルダは、出力ＭＭＳの作成、エラーの処理、および、出力ＭＭＳが（もし設定されていれば）最大出力ファイルサイズを遵守するようにする処理等その他のサポート処理のために必要な処理を追加する。処理は、特定の問題を物理的に解決するべく実装される。例えば、入力画像を出力画像にトランスコードする処理を実装するとしてよい。処理は、特定のビルダによって利用されるべく実装される。上述の画像トランスコード処理は、画像ビルダによって利用されるべく実装される。
【００６７】
ビルダ３１２はさらに、再帰的に動作することができ、他のビルダ３１２によって処理されるべきサブ要求を生成することができる。例えば、特定のビルダ３１２のインスタンスである「メッセージビルダ」は、トランスコーディングパイプライン２１６の一例である「メッセージパイプライン」（またはメインパイプライン）を構築して、メッセージ内に含まれる各メディアについてのトランスコーディングパイプラインを生成することができる別のビルダ３１２を見つけるべくディレクタ３０６に対して問い合わせをする機能を持つ。「メッセージビルダ」は、サイズ変更が必要なビデオがメッセージに含まれている場合、「ビデオビルダ」を見つけるべくディレクタ３０６に問い合わせを行う。「ビデオビルダ」は、ビルダ３１２の別のインスタンスで、ビデオのサイズ変更に特化した処理を含む「ビデオパイプライン」（トランスコーディングパイプライン２１６の一例）を生成することができる。そしてこの「ビデオパイプライン」が、サブパイプライン２２０として、「メッセージパイプライン」（または、メインパイプライン）に追加される。
【００６８】
ディレクタ３０６は、処理「Ｘ」を実行する機能を持つビルダを見つけるように要求されると、プラグインマネージャ３０８から、全ビルダリスト（つまり、ビルダ群３１０、および、動的ロード共有ライブラリ２０８にあるビルダ）を取得して、「（Ｘ）はサポートされているか」というビルダクエリ関数で各ビルダ３１２を呼び出し、「ＴＲＵＥ」と返答するビルダ３１２を選択する。
【００６９】
特定の処理をサポートする各ビルダ３１２の機能は、トランスコーディングオブジェクト３２８から特定のトランスコーディング処理２１８を作成する手段３１２ｃにある。つまり、要求された処理を実行することができるトランスコーディング処理２１８は究極的には、ビルダがプログラミングにより選択するトランスコーディングオブジェクト３２８にある。この「情報」はビルダに組み込まれていて、ビルダは、この「情報」によって、ビルダクエリ関数に対して「ＴＲＵＥ」と返答して、実行されるべく呼び出されると要求された処理を実行する（つまり、対応するトランスコーディングオブジェクト３２８をトランスコーディング処理２１８またはサブパイプラインとしてトランスコーディングパイプライン２１６に付加する）ことができる。ビルダは、実行されるべく呼び出されると、単にトランスコーディングパイプライン２１６の終端に適切なトランスコーディング処理２１８を付加するとしてよい。複数のサブ処理に分割されるようなより複雑な処理を実行するべく呼び出されると、これらのサブ処理はそれぞれ他のビルダが引き受けるとしてよい。このため、本発明の実施形態によると、ビルダはより複雑な（合成）処理を実行するべく呼び出されると、単にメインパイプラインまたはサブパイプラインを作成して、サブビルダ選択モジュール３１２ｂを用いてディレクタ３０６のビルダ選択モジュール３０６ｂを呼び出して他のビルダを見つけるので、多くの処理の組み合わせに対応するビルダを用意する必要はない。そして、他のビルダはそれぞれ、適切なトランスコーディング処理２１８をメインパイプラインまたはサブパイプラインの終端に付加する。
【００７０】
言い換えると、一連のビルダは以下のような流れで選択される。ＭＭＳビルダが、所与の入力ＭＭＳが添付ファイルを含むことを認識するとする。すると、入力された各添付ファイルを検討して、出力用の添付ファイルを作成し、作成した新しいサブ要求に両方の添付ファイルを付加する。添付ファイルは、例えば、画像添付ファイルであってよい。ＭＭＳビルダは、サブ要求にＭＭＳプロフィールを付加する。そして、当該サブ要求で、ディレクタを呼び出す。最適プロフィールビルダは、当該要求がＭＭＳメッセージを参照していることを認識する。そして、責任の一環として、メッセージプロフィールが参照している一連のプロフィールに基づき、画像プロフィールが新しい要求に適用されるべきものであると判断する。そして、ＭＭＳプロフィールを画像プロフィールに変更する。そして、この種類の要求に対処する特定のビルダを見つけるべく、ディレクタを呼び出す。ディレクタは、ビルダ群に対して問い合わせを行い、このビルダ群のうち画像ビルダが当該要求は画像トランスコーディング要求であると判断する。画像ビルダは、当該要求の特性（例えば、入力メディアが画像であり、プロフィールが画像生成を意味していること）を確認することによって、当該要求が自分が責任を持っている種類の要求であると認識する。そして、画像ビルダは、新しい要求のために画像トランスコーディング処理を作成して、戻す。最適プロフィールビルダは、ディレクタによる調査結果が成功であり、成功が返ってきたことを認識する。そして、ＭＭＳビルダは、実行したディレクタの呼び出しが成功であることを認識する。ディレクタに対して、画像トランスコーディング処理を取得するべく問い合わせを行い、当該画像トランスコーディング処理を構築中のパイプラインに付加する。
【００７１】
ドキュメントトランスコーダ３３２は、一群のソフトウェアモジュールおよびオブジェクト２２２に含まれるソフトウェアモジュールで、あるドキュメントを別のドキュメントに、例えば、電子メールドキュメントをＭＭＳドキュメントに変換することができる。ドキュメントトランスコーダ３３２は、特定のフォーマット表現を変換する際にトランスコーディング処理２１８が利用し得る関数を表す。ドキュメントトランスコーダ群３３０は、新しいドキュメント構造に変換する必要がある場合にトランスコーディング処理２１８がアクセスする「ツールボックス」として認識されるとしてよい。
【００７２】
ドキュメントトランスコーダ３３２は、入力メモリ表現から出力メモリ表現を作成するという特定の機能を持つ。入力メモリ表現および出力メモリ表現は、例えば、ＭＭＳからＭＭＳのように同じ種類であってもよいし、または、例えば、３ＧＰＰ表現をベーシックＯＭＡ表現へと変換するというように異なる種類であってもよい。このため、スクライバ３１６は、物理的リソースからメモリドキュメントを作成するか、または、メモリドキュメントから物理的出力を作成するが、一方ドキュメントトランスコーダ３３０は、あるメモリドキュメント構造を別のメモリドキュメント構造に適応させる。
【００７３】
ドキュメントトランスコーダ３３２は、スクライバおよびビルダと同様に、「（Ｘ）はサポートされているか」という関数による問い合わせを受け、あるドキュメント構造を別のドキュメント構造へと変換する要求を満足させる最良のドキュメントトランスコーダ３３２を決定するとしてよい。例えば、あるドキュメントトランスコーダ３３２は、３ＧＰＰ表現をベーシックＯＭＡ表現へと変換するとしてよい。入力ドキュメント構造が３ＧＰＰ表現であって、所望の出力ドキュメント構造がベーシックＯＭＡ表現であれば、このドキュメントトランスコーダ３３２が選択される。利用可能なドキュメントトランスコーダ３３２のリストは、プラグイン（共有ライブラリ）によって拡張することができる。
【００７４】
さまざまな構成ブロックの機能は、以下のように要約され得る。
【００７５】
トランスコーディングオブジェクト３２８は、問題を物理的に解決するための処理を実行する。例えば、入力画像を出力画像にトランスコードする。ビルダ３１２は、責任を持つ問題の一部に対処するためにどの処理が必要であるか認識している。この結果、どの処理を必要とするか正確に把握しているビルダによって、特定の処理が選択される。
【００７６】
スクライバ３１６の機能の１つに、物理的ソースを読み出した結果に基づいてメモリ表現を生成する機能がある。別のスクライバは、メモリ表現から物理的表現を作成するとしてよい。スクライバが作成するメモリ表現は、「ドキュメント」である。例えば、入力ＭＭＳが読み出されると、メモリ「ＭＭＳドキュメント」が作成される。スクライバは、物理的フォーマットとメモリ表現との間の橋渡しを行う。スクライバは、ディレクタ３０６から「（Ｘ）はサポートされているか」方式に従った問い合わせを受け、実行する必要がある作業に対して正しいスクライバを見つける。所与の要求について、正しいスクライバのみが当該要求に対応できることを「認識している」。
【００７７】
ドキュメントトランスコーダ３３２は、「ドキュメント」を適応させるべく構成されている。ドキュメントトランスコーダ３３２は、入力ドキュメントに基づき出力ドキュメントを作成する。入力および出力は、同じ種類であってもよいし、または、異なるフォーマットであってもよい。ドキュメントトランスコーダ３３２は常に、スクライバ３１６が作成したドキュメントを、入力として利用する。ドキュメントトランスコーダ３３２は、メディアのメモリ表現である「ドキュメント」のみを作成するので、「ドキュメント」間の橋渡しを行う。ドキュメントトランスコーダ３３２は、スクライバと同様に、所与のタスクを実行する正しいドキュメントトランスコーダ３３２を見つけるべく、「（Ｘ）はサポートされているか」方式に応じたクエリをディレクタ３０６から受け取るとしてよい。
【００７８】
ビルダ３１２は、トランスコーディングオブジェクト３２８であるトランスコーディング処理２１８から成るパイプラインを構築する。ビルダ３１２は、パイプラインの作成においてトランスコーディングオブジェクト１２８を利用して、入力ドキュメントに基づき出力ドキュメントを作成するべくドキュメントトランスコーダ３３２を利用する。ビルダは、各ビルダが引数として受け取るトランスコーディング要求またはサブ要求を満たすために必要な処理から成るパイプラインを作成する。
【００７９】
＜トランスコーディング要求２０２の実行＞
トランスコーダソフトウェアシステム２０４の各ソフトウェアモジュールを図３を参照しつつ説明した。以下では、トランスコーディング処理を全般的に説明する。
【００８０】
図４は、任意のトランスコーディング要求２０２を満たして、トランスコーダ出力データセット２０６を生成するべくトランスコーダソフトウェアシステム２０４が実行する段階を含む、最上位の実行フローチャート４００を示す図である。以下の段階が含まれる。
４０２  「トランスコーディング要求を受信」
４０４  「最初の変換コマンドを読出」
４０６  「対応付けられているプラグインプログラムを選択」
４０８  「選択されたプラグインプログラムを実行」
４１０  「最後の変換コマンドか」
４１２  「次の変換コマンドを読出」
４１４  「出力データセットを供給」
【００８１】
段階４０２「トランスコーディング要求を受信」において、トランスコーディング要求２０２は、コンピュータ（例えば、適応化エンジン１０８を収納しているコンピュータ）のＩ／Ｏポートを介して、トランスコーダソフトウェアシステム２０４全体を制御する制御プログラム３０４によって、受信される。
【００８２】
段階４０４「最初の変換コマンドを読出」において、制御プログラム３０４は、トランスコーディング要求２０２の最初の変換コマンド２１０を読み出して、対応付けられているプラグインプログラム３２４を決定する。この最初の変換コマンド２１０は、この時点において、現在の変換コマンド（２１０）となる。
【００８３】
段階４０６「対応付けられているプラグインプログラムを選択」において、制御プログラム３０４は、現在の変換コマンド（２１０）に対応付けられている選択されたプラグインプログラム（３２４）を選択する。
【００８４】
段階４０８「選択されたプラグインプログラムを実行」において、選択されたプラグインプログラム（３２４）を実行する。この段階の具体例の詳細は、図５を参照しつつ後述する。選択されたプラグインプログラム（３２４）の各段階を実行する際に、トランスコーディング要求２０２は、トランスコーダ出力データセット２０６の一部または全体へと処理される。
【００８５】
段階４１０「最後の変換コマンドか」において、制御プログラム３０４は、現在の変換コマンド（２１０）がトランスコーディング要求２０２に含まれる最後の変換コマンドか否か判断する。段階４１０でＹＥＳであれば、トランスコーダ出力データセット２０６が供給される（段階４１４）。ＮＯであれば、段階４１２「次の変換コマンドを読出」で次の変換コマンド（２１０）を読み出して、現在の変換コマンド（２１０）として、実行ループは段階４０６「対応付けられているプラグインプログラムを選択」に戻る。
【００８６】
段階４１４「出力データセットを供給」において、完成したトランスコーダ出力データセット２０６が、例えば、メモリに、または、コンピュータのＩ／Ｏポートを介して、ユーザに供給される。
【００８７】
図５は、段階４０８「選択されたプラグインプログラムを実行」の詳細を示す、トランスコードプログラム５０２の実行フローチャート５００を示す図である。トランスコードプログラム５０２は、図４の選択されたプラグインプログラム（３２４）の代表選択例であり、変換コマンド２１０「トランスコード」に対応する。以下の段階が含まれる。
５０４  「エラーが発生すると終了」
５０６  「『復号プラグイン』を実行」
５０８  「『パイプライン作成プラグイン』を実行」
５１０  「『最適化プラグイン』を実行」
５１２  「『パイプライン実行』を実行」
５１４  「『特性化プラグイン』を実行」
５１６  「『セッションの設定を解除』を実行」
【００８８】
一連の段階５０４から５１６は、トランスコードプログラム５０２の実際のテキスト言語の実装と解釈されるとしてよく、簡潔であることが分かる。段階５０６から５１４はそれぞれ、トランスコーディングプラグイン３２０のうち対応する１つのトランスコーディングプラグイン３２０によって実行される。具体的には以下の通りである。
【００８９】
段階５０６「『復号プラグイン』を実行」は、復号プラグイン５１８によって実行される。
【００９０】
段階５０８「『パイプライン作成プラグイン』を実行」は、パイプライン作成プラグイン５２０によって実行される。
【００９１】
段階５１０「『最適化プラグイン』を実行」は、最適化プラグイン５２２によって実行される。
【００９２】
段階５１２「『パイプライン実行』を実行」は、パイプライン実行プラグイン５２４によって実行される。
【００９３】
段階５１４「『特性化プラグイン』を実行」は、特性化プラグイン５２６によって実行される。
【００９４】
図５にはさらに、トランスコードプログラム５０２が動作するきっかけとなる一時的データオブジェクトも示されている。
入力ドキュメント５２６
図２のトランスコーディングパイプライン２１６の一例であるメインパイプライン５２８
出力ドキュメント５３０
【００９５】
段階５０４「エラーが発生すると終了」において、トランスコードプログラム５０２の例外処理が設定される。具体的には、「終了」ラベルが宣言され、「終了」ラベルよりも前の任意の段階において処理エラーが発生した場合には、実行が「終了」ラベルにジャンプするように設定される。図５に示すように、「終了」ラベルは、段階５１４「『特性化プラグイン』を実行」の開始時点に付加されている。このため、段階５０６から５１２の処理中にエラーが発生すれば、実行は即座に、間に介在する段階を飛び越えて、段階５１４にジャンプする。
【００９６】
段階５０６「『復号プラグイン』を実行」において、復号プラグイン５１８が実行され、トランスコーディング要求２０２（図２）の入力メディア２１２を分析する。入力メディア２１２自体は、メディアコンポーネントを含むものであってもよいし、または、添付ファイルを含むとしてよく、それらはすべて抽出されて入力ドキュメント５２６に書き込まれる。
【００９７】
図６は、段階５０６「『復号プラグイン』を実行」の詳細、具体的には、復号プラグイン５１８の実行を示すフローチャート６００を示す図である。以下の段階が含まれる。
６０２  「読出スクライバを特定するべく復号プラグインがディレクタを呼び出す」
６０４  「全てのスクライバを取得するべくディレクタがプラグインマネージャを呼び出す」
６０６  「プラグインマネージャが全スクライバリストを返す」
６０８  「ディレクタが各スクライバに問い合わせ」
６１０  「ディレクタが読出スクライバを選択」
６１２  「ディレクタが読出スクライバを復号プラグインに返す」
６１４  「復号プラグインが読出スクライバを呼び出して実行」
６１６  「読出スクライバが入力メディアを読み出す」
【００９８】
復号プラグイン５１８の目的は、例えばＭＭＳメッセージであるトランスコーディング要求２０２（図２）の入力メディア２１２に含まれている全ての異なるメディア添付ファイルを抽出することである。この段階は、入力メディア２１２を、トランスコーディングが行われるべき入力の全範囲を記述する入力ドキュメント５２６に変換するために必要である。
【００９９】
段階６０２「読出スクライバを特定するべく復号プラグインがディレクタを呼び出す」において、復号プラグイン５１８は、読出スクライバ６１８を特定するべくスクライバ要求をディレクタ３０６に渡す。読出スクライバ６１８は、読出スクライバモジュールとも呼ばれ、例えばＭＭＳメッセージである入力メディア２１２、またより一般的にはフォーマット「Ｘ」の入力メディア２１２を読み出すことができる。
【０１００】
段階６０４「全てのスクライバを取得するべくディレクタがプラグインマネージャを呼び出す」において、ディレクタ３０６は、全スクライバリストを取得するべくプラグインマネージャ３０８を呼び出す。つまり、スクライバ群３１４に含まれるスクライバ３１６および動的ロード共有メモリ２０８に含まれるスクライバのリストである。
【０１０１】
段階６０６「プラグインマネージャが全スクライバリストを返す」において、プラグインマネージャ３０８は、現在の全スクライバリストを返す。つまり、スクライバ群３１４に含まれるスクライバ３１６および動的ロード共有メモリ２０８に含まれるスクライバのリストである。尚、現在の全スクライバリストには、トランスコーダソフトウェアシステム２０４を更新した結果に応じてその時々に応じて追加されたスクライバが含まれるとしてよい。このため、トランスコーダソフトウェアシステム２０４が対応するフォーマットの範囲は拡大される。
【０１０２】
段階６０８「ディレクタが各スクライバに問い合わせ」において、ディレクタ３０６は現在の全スクライバリストに含まれる各スクライバを、「Ｘ」が処理機能を表す場合に「（Ｘ）はサポートされているか」という形式の「読出クエリ」で呼び出す。この場合、必要な処理能力「Ｘ」は、メディアファイル（入力メディア２１２）を読み出してドキュメントを生成する機能である。各スクライバは、スクライバクエリ関数で呼び出されると、入力メディアフォーマットを調査して（例えば、入力メディアの一部分を読み出して）このフォーマットが対応付けられているスクライバ処理でサポートされているか否か判断することによって、クエリを調査して要求されている処理を実行できるか否かを判断する。
【０１０３】
段階６１０「ディレクタが読出スクライバを選択」において、ディレクタ３０６は、現在の全スクライバリストのうち、スクライバクエリ関数に対して「ＴＲＵＥ」と返した最初のスクライバを選択し、読出スクライバ６１８とする。読出スクライバ６１８が見つかるものと仮定し、見つからない場合にはエラーとなり、図５に示すように、トランスコードプログラム５０２は終了ラベルがある段階５１４にジャンプする。
【０１０４】
段階６１２「ディレクタが読出スクライバを復号プラグインに返す」において、ディレクタ３０６は読出スクライバ６１８を復号プラグイン５１８に返す。
【０１０５】
段階６１４「復号プラグインが読出スクライバを呼び出して実行」において、復号プラグイン５１８は、入力メディア２１２を入力ドキュメント５２６に直接加工するべく、読出スクライバ６１８を呼び出す。
【０１０６】
段階６１６「読出スクライバが入力メディアを読み出す」において、読出スクライバ６１８は、入力メディア２１２を読み出して、入力メディア２１２のメディアコンポーネントを含む入力ドキュメント５２６を生成する。入力ドキュメントは、組み込まれた（添付された）メディアを含む入力メディア２１２の構造を記述する。
【０１０７】
入力メディア２１２が、ＭＭＳメッセージのように、メディアが含まれているコンテナメディアの場合、復号プラグイン５１８は、含まれているメディアそれぞれを読み出すべく再帰的に実行され、それぞれについて別個の入力ドキュメント５２６を作成するとしてよい。
【０１０８】
ここで、図５に示した次の段階の説明に戻す。
【０１０９】
段階５０８「『パイプライン作成プラグイン』を実行」において、パイプライン作成プラグイン５２０が実行されて、トランスコーディング要求２０２に含まれている情報に基づいて、メインパイプライン５２８が動的に作成される。トランスコーディング要求２０２は、この段階において、前の段階５０６で書き込まれた入力ドキュメント５２６を含む。前述したように、メインパイプライン５２８は、サブパイプライン２２０と同様にトランスコーディング処理２１８を含むとしてよい。
【０１１０】
図７は、段階５０８「『パイプライン作成プラグイン』を実行」の詳細、具体的には、パイプライン作成プラグイン５２０の実行を示すフローチャート７００を示す図である。以下の段階が含まれる。
７０２  「正しいビルダを特定するべくパイプライン作成プラグインがディレクタを呼び出す」
７０４  「全ビルダを取得するべくディレクタがプラグインマネージャを呼び出す」
７０６  「プラグインマネージャが全ビルダリストを返す」
７０８  「ディレクタが各ビルダに問い合わせを行う」
７１０  「ディレクタに対して正しいビルダが特定される」
７１２  「ディレクタは正しいビルダをパイプライン作成プラグインに返す」
７１４  「パイプライン作成プラグインは正しいビルダを呼び出して実行」
７１６  「正しいビルダが実行されてトランスコーディングパイプラインを構築」
【０１１１】
パイプライン作成プラグイン５２０の目的は、トランスコーディング要求２０２（図２）からの情報を用いてメインパイプライン５２８を構築することである。トランスコーディング要求２０２は、この段階において、前の段階５１８で作成された入力ドキュメント５２６を含む。
【０１１２】
段階７０２「正しいビルダを特定するべくパイプライン作成プラグインがディレクタを呼び出す」において、パイプライン作成プラグイン５２０は、ビルダ要求をディレクタ３０６に渡して、正しいビルダ７１８を特定する。正しいビルダ７１８は、正しいビルダモジュールとも呼ばれ、入力ドキュメント５２６に記載されているフォーマット仕様、例えば、「ＭＭＳ」に応じて、トランスコーディングパイプライン２１６の一例であるメインパイプライン５２８を構築することができる。
【０１１３】
段階７０４「全ビルダを取得するべくディレクタがプラグインマネージャを呼び出す」において、ディレクタ３０６は、全ビルダリスト、つまり、ビルダ群３１０のビルダ３１２、および、動的ロード共有ライブラリ２０８にあるビルダを取得するべく、プラグインマネージャ３０８を呼び出す。
【０１１４】
段階７０６「プラグインマネージャが全ビルダリストを返す」において、プラグインマネージャ３０８は、現在の全ビルダリスト、つまり、ビルダ群３１０のビルダ３１２、および、動的ロード共有ライブラリ２０８にあるビルダのリストを返す。尚、トランスコーダソフトウェアシステム２０４のユーザは、動的ロード共有ライブラリ２０８にビルダ（および、スクライバ等のその他のソフトウェアオブジェクト）を追加するとしてもよい。このようにユーザによって定義されるソフトウェアオブジェクトは、スクライバおよびビルダ等のソフトウェアオブジェクトにおいて正しいものを検索する際には、自動的に検索の対象に含まれる。
【０１１５】
段階７０８「ディレクタが各ビルダに問い合わせを行う」において、ディレクタ３０６は、現在の全ビルダリストに含まれる各ビルダを、「Ｘ」が処理機能を表す場合に「（Ｘ）はサポートされているか」という形式のビルダクエリ関数である「パイプライン構築クエリ」によって呼び出す。この場合、必要な処理機能「Ｘ」は、例えば、ＭＭＳメッセージを処理するためのトランスコーディングパイプラインを構築する機能である。各ビルダは、ビルダクエリ関数で呼び出されると、クエリを調査して、要求された処理を実行可能か否か判断する。トランスコーディングパイプライン（または、サブパイプライン）の構築においてさまざまなビルダが果たす役割は、パイプラインまたはサブパイプラインの構造を形成して、各ビルダが広告している処理を実行することができる適切なトランスコーディング処理２１８を最終的に付加することにある。処理自体は、トランスコーディングパイプラインが完成するまで実行されることはなく、完成した時点において、付加されたトランスコーディング処理２１８が全て実行される。
【０１１６】
段階７１０「ディレクタに対して正しいビルダが特定される」において、ディレクタ３０６は、現在の全ビルダリストのうち、ビルダクエリ関数に対して「ＴＲＵＥ」と返して要求を満たすことができる最初のビルダを正しいビルダ７１８として認識して、選択する。正しいビルダ７１８が見つかるものと仮定し、見つからない場合にはエラーとなって、図５に示すように、トランスコードプログラム５０２は終了ラベルがある段階５１４にジャンプする。正しいビルダ７１８は、例えば、「ＭＭＳビルダ」であってよい。
【０１１７】
段階７１２「ディレクタは正しいビルダをパイプライン作成プラグインに返す」において、ディレクタ３０６は、パイプライン作成プラグイン５２０に対して、正しいビルダ７１８を返す。
【０１１８】
段階７１４「パイプライン作成プラグインは正しいビルダを呼び出して実行」において、パイプライン作成プラグイン５２０は、トランスコーディング要求２０２を直接処理するべく正しいビルダ７１８を呼び出す。
【０１１９】
段階７１６「正しいビルダが実行されてトランスコーディングパイプラインを構築」において、正しいビルダ７１８はメインパイプライン５２８を生成する。一般的に、正しいビルダ７１８は、サブパイプラインが分岐部分として追加されるメインパイプライン５２８のツリーのルート部分を作成することから開始する最上位のビルダであり、最初のサブパイプラインは、正しいビルダ７１８が実行可能であると広告している処理の本質、例えば、「ＭＭＳメッセージを処理」を指し示すトランスコーディングパイプラインである。正しいビルダ７１８は、ＭＭＳメッセージを実際に処理するべく、この段階において入力ドキュメント５２６およびデスティネーションプロフィール２１４を含むトランスコーディング要求２０２を読み出して、当該メッセージの各要素を処理するべく他のビルダに協力を求める。
【０１２０】
図８は、段階７１６「正しいビルダが実行されてトランスコーディングパイプラインを構築」の詳細を示すフローチャート８００を示す図である。以下の段階を含む。
８０２  「次の未実行処理を取得」
８０４  「トランスコーディングオブジェクトを取得」
８０６  「トランスコーディングオブジェクトをパイプラインに付加」
８０８  「サブパイプラインを作成および付加」
８１０  「ディレクタからサポートビルダを取得」
８１２  「サポートビルダ、サブパイプラインで、段階７１６を再帰的に実行」
【０１２１】
段階７１６「ビルダが実行されてトランスコーディングパイプラインを構築」は、入力ドキュメント５２６に含まれる未実行処理のそれぞれについて、入力ドキュメント５２６および付加されるトランスコーディング処理２１８を分析することによって、メインパイプライン５２８を構築するべく、正しいビルダ７１８によって実行されるとしてよい。しかし、正しいビルダ７１８は、サブパイプライン２２０のインスタンスを付加して、トランスコーディング処理２１８または別のサブパイプライン２２０を当該サブパイプライン２２０に入れるべく他のビルダの協力を求めるとしてもよい。
【０１２２】
この機能は、段階７１６で与えられ、トランスコーディング処理２１８で、トランスコーディング要求２０２で指定されている全ての処理を実行するべく再帰的に呼び出されるとしてよい。
【０１２３】
段階８０２「次の未実行処理を取得」において、次の未実行処理要求をトランスコーディング要求２０２から取得する。未実行処理要求が残っていない場合（段階８０２でＮＯの場合）、段階７１６は終了する。残っている場合（ＹＥＳの場合）には、次の段階８０４に続く。
【０１２４】
段階８０４「トランスコーディングオブジェクトを取得」において、要求に一致するトランスコーディングオブジェクト３２８が、トランスコーディングオブジェクト群３２６から選択される。当該トランスコーディングオブジェクト３２８は、未実行処理要求を実行することができる。現在アクティブなビルダがトランスコーディングオブジェクト３２８で未実行処理要求が実行できない場合（段階８０４で「ＮＯ」の場合）、段階８０８にジャンプする。実行できる場合（「ＹＥＳ」の場合）、次の段階８０６に続く。
【０１２５】
段階８０６「トランスコーディングオブジェクトをパイプラインに付加」において、段階８０６で特定されたトランスコーディングオブジェクト３２８は、一致する（つまり、要求に一致する）トランスコーディング処理２１８として、現在のパイプラインの終端に付加される。現在のパイプラインとは、メインパイプライン５２８であってもよいし、または、段階７１６が再帰的に処理される場合サブパイプラインであってもよい。未実行処理要求は、この段階において、一致するトランスコーディング処理２１８で実行される。
【０１２６】
段階８０８「サブパイプラインを作成および付加」において、新しいサブパイプライン２２０が作成され、現在のパイプラインの終端に付加される。尚、段階８０４において未実行の処理は、段階８０６が実行されるまでは、実行されていない様態のままである。
【０１２７】
段階８１０「ディレクタからサポートビルダを取得」において、現在アクティブなビルダは、現在の要求を複数のサブ要求に拡張して、各サブ要求について、当該サブ要求をサポートするサポートビルダモジュールを供給するようディレクタ３０６に依頼する。このメカニズムは、正しいビルダ７１８が特定されるパイプライン作成プラグイン５２０の実行段階７０２から７１４（図７）に関する説明において詳細に記載されている。
【０１２８】
段階８１２「サポートビルダ、サブパイプラインで、段階７１６を再帰的に実行」において、段階７１６が再帰的に実行される。各サポートビルダが、対応するトランスコーディング処理２１８をサブパイプラインに付加することによって（段階８０６）対応する未実行処理を実行するか、または、再度再帰的に処理を行う。
【０１２９】
図９は、段階５０８（図５）でパイプライン作成プラグイン５２０によって作成されたメインパイプライン５２８のインスタンスの一例である「単純メッセージパイプライン」９００を示す図である。単純メッセージパイプライン９００は、サブパイプライン２２０のインスタンスである「メッセージ処理」サブパイプライン９０４へと分岐するルート９０２を含む。「メッセージ処理」サブパイプライン９０４は、トランスコーディング処理２１８のインスタンスである、「画像トランスコード処理」９０６、「テキストトランスコード処理」９０８、「表現トランスコード処理」９１０、および、「過大サイズハンドリング処理」９１２への分岐を含む。
【０１３０】
「単純メッセージパイプライン」９００が実行されると（図７の段階７１６を参照のこと）、添付されたトランスコーディング処理２１８はそれぞれ、独立して担当する処理を実行する。
「画像トランスコード処理」９０６は、デスティネーションプロフィール２１４に応じて、入力メディア２１２に含まれている画像メディアをトランスコードする。
「テキストトランスコード処理」９０８は、デスティネーションプロフィール２１４に応じて、入力メディア２１２に含まれているテキストメディアをトランスコードする。
「表現トランスコード処理」９１０は、デスティネーションプロフィール２１４に応じて、入力メディア２１２に含まれている表現を変換する。
「過大サイズハンドリング処理」９１２は、最終出力メディア（適応出力メディア２２６およびフィルタリング済出力メディア２２４）のサイズが必ず、デスティネーションプロフィール２１４で規定されている制限値を遵守していることを確認する。例えば、出力メッセージの場合は、出力メッセージのサイズがデスティネーションプロフィール２１４に記載されている最大サイズ値を超えないようにする。このため、「過大サイズハンドリング処理」は、メッセージに含まれているメディアをトランケート（ｔｒｕｎｃａｔｅ）すること、または、含まれているメディアをターゲットサイズに到達するまで除去することのうちいずれかを含む設定可能な種類の動作を実行する。
【０１３１】
通常の場合、「画像トランスコード処理」９０６、「テキストトランスコード処理」９０８、および「表現トランスコード処理」９１０のうちいずれかが、１つのメディアに対して実行される。複数のＭ個の同じ種類のメディアをトランスコードする必要がある場合、例えば、Ｍ個の画像の場合、Ｍ個の画像トランスコード処理９０６をトランスコーディングパイプラインに付加する。これは、どの種類の処理についても同じである。
【０１３２】
ここで、図５の次の段階に説明を戻す。
【０１３３】
段階５１０「『最適化プラグイン』を実行」において、最適化プラグイン５２２が実行され、先行する段階で作成されたメインパイプライン５２８を調査して、トランスコーディング処理２１８の並べ替え、組み合わせ、または、不必要であれば除去を行うとしてよい。段階５１０の結果として、メインパイプライン５２８の最適化バージョンが得られる。最適化バージョンは、入力メディア２１２をトランスコードするために必要なトランスコーディング処理２１８のみを含む。
【０１３４】
図１０は、段階５０８（図５を参照のこと）においてパイプライン作成プラグイン５２０によって作成されたメインパイプライン５２８のインスタンスの別の例である「最適化されていないメッセージパイプライン」１０００を示す図である。「最適化されていないメッセージパイプライン」１０００は、サブパイプライン２２０のインスタンスである第１の「メッセージ処理」サブパイプライン１００４に分岐するルート１００２を含む。第１の「メッセージ処理」サブパイプライン１００４は、トランスコーディング処理２１８のインスタンスである、「画像トランスコード処理」１００６、「テキストトランスコード処理」１００８、「表現トランスコード処理」１０１０、第１の「画像サイズ変更処理」１０１２、サブパイプライン２２０の別のインスタンスであり、１つのトランスコーディング処理２１８、つまり第２の「画像サイズ変更処理」１０１６へと分岐している第２の「メッセージ処理」サブパイプライン１０１４、および、「過大サイズハンドリング処理」１０１８への分岐を含む。
【０１３５】
「最適化されていないメッセージパイプライン」１０００は、「単純メッセージパイプライン」９００と同様であるが、トランスコーディング処理２１８のインスタンスが追加されており、つまり、第１および第２の「画像サイズ変更処理」１０１２および１０１６を含み、ならびに、サブパイプライン２２０のインスタンスが追加されており、つまり、第２の「メッセージ処理」サブパイプライン１０１４を含む。
【０１３６】
最適化プラグイン５２２モジュールは、「最適化されていないメッセージパイプライン」１０００で実行されると、当該パイプラインを修正して、同じ種類のサブパイプラインがないようにして、２つのサブパイプラインを結合させる。具体的には、第１および第２の「メッセージ処理」サブパイプライン１００４および１０１４は、同じ種類（「メッセージ処理」）であるので結合させる。つまり、第２の「メッセージ処理」サブパイプライン１０１４を除去して、第１の「メッセージ処理」サブパイプライン１００４の分岐となる。さらに、最適化プラグイン５２２は、同じ種類のトランスコーディング処理２１８が複数存在するか否か確認して、そのうち１つを除去するとしてもよい。「最適化されていないメッセージパイプライン」１０００の場合、第２の「画像サイズ変更処理」１０１６が冗長であり、削除されるとしてもよい。
【０１３７】
図１１は、段階５１０（図５を参照のこと）において最適化プラグイン５２２によって、例えば、「最適化されていないメッセージパイプライン」１０００を最適化することによって得られる「最適化メッセージパイプライン」１１００を示す図である。「最適化メッセージパイプライン」１１００は、第１の「メッセージ処理」サブパイプライン１００４に分岐するルート１００２を含む。第１の「メッセージ処理」サブパイプライン１００４は、トランスコーディング処理２１８のインスタンスである、「画像トランスコード処理」１００６、「テキストトランスコード処理」１００８、「表現トランスコード処理」１０１０、第１の「画像サイズ変更処理」１０１２、および「過大サイズハンドリング処理」１０１８への分岐を含む。
【０１３８】
本例によると、結果として得られた「最適化メッセージパイプライン」１１００は、冗長なサブパイプライン２２０およびトランスコーディング処理２１８、つまり、第２の「メッセージ処理」サブパイプライン１０１４および第２の「画像サイズ変更処理」１０１６を全て除去することによって、「最適化されていないメッセージパイプライン」１０００に比べて、最適化されている。他の要素は全て、そのままである。メインパイプライン５２８は、この段階において、次の段階５１２で実行される準備が整っている。
【０１３９】
ここで、図５の次の段階に説明を戻す。
【０１４０】
段階５１２「『パイプライン実行プラグイン』を実行」において、パイプライン実行プラグイン５２４が実行され、メインパイプライン５２８のトランスコーディング処理２１８を、サブパイプラインのトランスコーディング処理２１８も含め、それぞれ順次処理する。
【０１４１】
図１２は、段階５１２「『パイプライン実行プラグイン』を実行」の詳細、具体的には、パイプライン実行プラグイン５２４の実行を示すフローチャートである。以下の段階を含む。
１２０２  「メインパイプラインを取得」
１２０４  「次のトランスコーディング処理を取得」
１２０６  「トランスコーディング処理を実行」
１２０８  「ディレクタに書込スクライバを要求」
１２１０  「ディレクタが書込スクライバを返す」
１２１２  「書込スクライバに要求を発行」
１２１４  「書込スクライバが出力メディアに書込み」
【０１４２】
段階１２０２「メインパイプラインを取得」において、パイプライン実行プラグイン５２４は、ツリー形式で付加されたトランスコーディング処理２１８およびサブパイプライン２２０を全て含むソフトウェアオブジェクトであるメインパイプライン５２８に実行を移行させる。
【０１４３】
段階１２０４「次のトランスコーディング処理を取得」において、メインパイプライン５２８の次の項目が特定される。次の項目がトランスコーディング処理（２１８）である場合、実行はこのトランスコーディング処理に移行され（段階１２０４で「ＹＥＳ」）、次の段階１２０６に進む。次の項目がサブパイプラインであれば、実行はこのサブパイプラインの最初のトランスコーディング処理２１８に移行される。メインパイプライン５２８の最後に到達して、メインパイプライン５２８および全てのサブパイプラインの全てのトランスコーディング処理（２１８）の実行を終了すると、段階１２０８に進む（段階１２０６で「ＮＯ」）。
【０１４４】
段階１２０６「トランスコーディング処理を実行」においては、先行する段階で特定されたトランスコーディング処理２１８を実行する。段階１２０４および１２０６は、深さ優先順序でメインパイプライン５２８のツリー構造を進むループを形成し、メインパイプライン５２８の全てのトランスコーディング処理２１８および各サブパイプラインの全てのトランスコーディング処理２１８を実行する。尚、各サブパイプライン自体が、２次的またはより高次のサブパイプラインを含む場合もある。
【０１４５】
メインパイプライン５２８およびそのサブパイプラインの各トランスコーディング処理２１８は、（入力メディア２１２のメディアコンポーネントを含む）入力ドキュメント５２６のうち一部分を処理して、出力ドキュメント５３０を生成することによってトランスコーディング要求２０２を実行することができる自己完結型のトランスコーディングオブジェクト３２８である。メインパイプライン５２８のトランスコーディング処理２１８を実行することによって、トランスコーディング結果２２８が生成されるとしてよい。
【０１４６】
段階１２０８「ディレクタに書込スクライバを要求」において、パイプライン実行プラグイン５２４は、適応出力メディア２２６を出力ドキュメント５３０に書き込むことが出来るスクライバを特定するべく、「書込クエリ」でディレクタ３０６を呼び出す。ディレクタ３０６は、「読出」の場合について詳細に記載した段階６０４から６１０（図６を参照のこと）と同様の一連の段階において、各スクライバに対して問い合わせを行い、「書込」処理をサポートできるか否か確かめる。各スクライバは、ドキュメントの種類を調査して、サポートできる場合には「ＴＲＵＥ」と返答する。
【０１４７】
段階１２１０「ディレクタが書込スクライバを返す」において、ディレクタは、スクライバのうち１つが書込要求を処理することができることが分かると、当該スクライバを書込スクライバ１２１６（書込スクライバモジュールとも呼ぶ）として、「パイプライン実行」プラグイン５２４へと返す。
【０１４８】
段階１２１２「書込スクライバに要求を発行」において、「パイプライン実行プラグイン」は、書き込みスクライバ１２１６に実行方法を呼び出す。
【０１４９】
段階１２１４「書込スクライバが出力メディアに書込み」において、書込スクライバ１２１６は、出力ドキュメント５３０を、デスティネーションプロフィール２１４に指定されているフォーマットでトランスコーダ出力データセット２０６の適応出力メディア２２６へと変換する。適応出力メディア２２６と、（もしあれば）フィルタリング済出力メディア２２４とで、適応メッセージ２３２が構成されている。
【０１５０】
ここで、図５に示した次の段階の説明に戻す。
【０１５１】
段階５１４「『特性化プラグイン』を実行」において、特性化プラグイン５３４が実行され、トランスコーダ出力データセット２０６の特性化結果２３０が作成される。トランスコーダ出力データセット２０６の特性化結果２３０は、出力ドキュメント５３０の特性、例えば、サイズおよびメディアの数、ビデオメディアまたは画像メディアの場合には解像度等に関する情報、ならびに、トランスコーディング結果２２８の報告を含む。この特性化段階５１４は、システムの性能に関するデータを収集することを主な目的としており、トランスコーディング速度を優先する場合には省略するとしてもよい。
【０１５２】
上述したように、ドキュメントの特性化は、ドキュメントに含まれるメディアの特性化を含むとしてもよい。さらに、特性化プラグインは、トランスコーディングの対象となる入力メディアを特性化するように構成されるとしてもよい。
【０１５３】
段階５１６「『セッションの設定を解除』を実行」において、入力ドキュメント５２６、メインパイプライン５２８、および出力ドキュメント５３０等の一時ファイルを削除する。選択されたプラグインプログラム３２４によって利用されたその他のリソース（本例では、トランスコードプログラム５０２）もまた、制御プログラム３０４に実行が戻る前に、削除される。
【０１５４】
このように、マルチメディアメッセージをトランスコードするためのモジュラートランスコーダソフトウェアシステムおよび対応する方法であって、一連の複雑な、互いに関連するまたは無関係の処理をトランスコーディングパイプラインとして動的に構築するための一群のソフトウェアモジュールおよびオブジェクトを備えるモジュラートランスコーダソフトウェアシステムおよび対応する方法が提供される。トランスコーディングパイプラインは、処理の階層構造を持ち、階層構造全体を１つのパスで実行することを目的として、処理を組織化および最適化することができる。また、外部プラグインは、構築情報を変更、追加、または削除することによって、パイプラインを形成するメカニズムをカスタマイズすることができる。
【０１５５】
本発明の実施形態に係るシステムおよび方法によれば、スケーラブルで性能および保全性が改善された自由度の高い適応化システムが得られる。
【０１５６】
マルチメディアメッセージの要素を適応化させる例を参照して本発明の実施形態を説明したが、上述して方法によればその他の同様の分野でも効果が得られると考えられる。
【０１５７】
本発明の実施形態を詳細に説明したが、特許請求の範囲を超えることなく実施形態を変更および変形し得ることは当業者には明らかである。
【図１】
0005388378.tif 000002
【図２】
0005388378.tif 000003
【図３】
0005388378.tif 000004
【図４】
0005388378.tif 000005
【図５】
0005388378.tif 000006
【図６】
0005388378.tif 000007
【図７】
0005388378.tif 000008
【図８】
0005388378.tif 000009
【図９】
0005388378.tif 000010
【図１０】
0005388378.tif 000011
【図１１】
0005388378.tif 000012
【図１２】
0005388378.tif 000013