(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-02-24
(45)【発行日】2023-03-06
(54)【発明の名称】ワークフローを処理する方法及び装置
(51)【国際特許分類】
G06F 9/48 20060101AFI20230227BHJP
【FI】
G06F9/48 370
(21)【出願番号】P 2021552526
(86)(22)【出願日】2020-09-25
(86)【国際出願番号】 US2020052687
(87)【国際公開番号】W WO2021062134
(87)【国際公開日】2021-04-01
【審査請求日】2021-09-03
(32)【優先日】2019-09-28
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2020-09-21
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】520353802
【氏名又は名称】テンセント・アメリカ・エルエルシー
(74)【代理人】
【識別番号】100107766
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100135079
【氏名又は名称】宮崎 修
(72)【発明者】
【氏名】ソダガァ,イラジ
【審査官】坂庭 剛史
(56)【参考文献】
【文献】特開2007-221323(JP,A)
【文献】特開2009-294856(JP,A)
【文献】特開2007-200106(JP,A)
【文献】特開2002-049497(JP,A)
【文献】特開2019-159602(JP,A)
【文献】特開平07-093168(JP,A)
【文献】特開平11-143727(JP,A)
【文献】米国特許出願公開第2008/0307332(US,A1)
【文献】米国特許出願公開第2009/0150891(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/48
(57)【特許請求の範囲】
【請求項1】
ワークフローを処理する方法であって、
前記ワークフローのワークフロー情報を、処理回路により受信するステップと、
前記ワークフロー情報に基づいて、入力データを処理する前記ワークフローを生成するステップであって、前記ワークフローは複数の処理タスクと第1バッファリング・タスクとを含み、前記複数の処理タスクは第1処理タスクと第2処理タスクとを含む、ステップと、
前記第1処理タスクをランニング状態に入れるステップであって、該ランニング状態では、前記入力データのサブセットが、前記第1処理タスクにより処理され、第1被処理サブセット・データとして前記第1バッファリング・タスクへ出力される、ステップと、
前記第1バッファリング・タスクで格納された前記第1被処理サブセット・データの量が第1閾値に等しいことに基づいて、前記第1処理タスクを前記ランニング状態から停止状態へ遷移させるステップであって、前記第1処理タスクの状態情報は前記停止状態において保存されている、ステップと、
前記第1処理タスクが前記停止状態へ遷移した後に、前記第2処理タスクをランニング状態に入れるステップであって、該ランニング状態では、前記第1バッファリング・タスクで格納された前記第1被処理サブセット・データが前記第2処理タスクにより処理される、ステップと
を含む方法。
【請求項2】
前記第2処理タスクは、処理される第1被処理サブセット・データを第2被処理サブセット・データとして、第2バッファリング・タスクへ前記ランニング状態において出力するように構成されており、
前記方法は、更に、
(i)前記第2バッファリング・タスクで格納された前記第2被処理サブセット・データの量が第2閾値に等しいこと、及び(ii)前記第1バッファリング・タスクで格納された前記第1被処理サブセット・データの量が前記第2処理タスクに提供されたことのうちの1つに基づいて、前記第2処理タスクを前記ランニング状態から停止状態へ遷移させるステップであって、前記第2処理タスクの状態情報は前記停止状態において保存されている、ステップと、
を更に含む、請求項1に記載の方法。
【請求項3】
前記第1バッファリング・タスクは、前記第1バッファリング・タスクで格納された前記第1被処理サブセット・データの量が前記第1閾値に等しいことを示すイベントを生成するように構成されている、請求項1又は2に記載の方法。
【請求項4】
前記第1バッファリング・タスクは、FIFOバッファを用いて設定される先入れ先出し(FIFO)タスクであり、前記FIFOバッファは、前記第1閾値以上のFIFO長を有し、
前記FIFOタスクは、
前記FIFOタスクで格納された前記第1被処理サブセット・データの量が前記第1閾値に等しいことを示すイベントを生成し、且つ
前記FIFOタスクで格納された前記第1被処理サブセット・データの量が前記第2処理タスクに提供されたことを示す別のイベントを生成する
ように設定されている、請求項3に記載の方法。
【請求項5】
前記入力データのサブセットは、前記入力データの複数のサブセットのうちの1つである、請求項1-4のうちの何れか1項に記載の方法。
【請求項6】
前記第1処理タスクのライフサイクルは、停止状態と、前記ランニング状態、エラー状態、及び廃止状態のうちの1つとの間の遷移を含む、請求項1-5のうちの何れか1項に記載の方法。
【請求項7】
前記ワークフローは、前記第1バッファリング・タスクを含む複数のバッファリング・タスクを含み、
前記複数の処理タスクの各入力は、前記入力データのうちの1つ、及び前記複数のバッファリング・タスクのうちの1つ以上、からのものであり、且つ
前記複数の処理タスクのうちの1つのみが、任意の時点で前記ランニング状態にあることを許容される、請求項1-6のうちの何れか1項に記載の方法。
【請求項8】
前記入力データは、前記入力データの前記サブセットと、前記入力データの別のサブセットとを含み、
前記ワークフローは、前記第1バッファリング・タスクを含む複数のバッファリング・タスクを含み、
前記複数の処理タスクの各入力は、前記入力データのうちの1つ、及び前記複数のバッファリング・タスクのうちの1つ以上、からのものであり、
前記入力データの前記サブセットを、前記複数の処理タスクにより順に処理し;
前記入力データの前記サブセットが前記複数の処理タスクにより処理された後に、前記入力データの他のサブセットを、前記複数の処理タスクにより順に処理し、前記複数の処理タスクにおける残りの処理タスクは停止状態にあり、及び
前記複数の処理タスクのうちの1つのみが、任意の時点で前記ランニング状態にあることを許容される、請求項1-
7のうちの何れか1項に記載の方法。
【請求項9】
複数のワークフローを処理する方法であって、前記方法は、
前記複数のワークフローのワークフロー情報を、処理回路により受信するステップと、
前記ワークフロー情報に基づいて、入力データを処理する前記複数のワークフローを生成するステップであって、前記複数のワークフローのうちの少なくとも1つは複数の処理タスクを含み、前記複数のワークフローは、第1ワークフローと第2ワークフローとを含む、ステップと、
前記第1ワークフローをランニング状態に入れるステップであって、該ランニング状態では、前記入力データのサブセットが、前記第1ワークフローにより処理され、第1被処理サブセット・データとしてバッファリング・タスクへ出力される、ステップと、
前記バッファリング・タスクで格納された前記第1被処理サブセット・データの量が閾値に等しいことに基づいて、前記第1ワークフローを前記ランニング状態から停止状態へ遷移させるステップであって、前記第1ワークフローの状態情報は前記停止状態において保存されている、ステップと、
前記第1ワークフローが前記停止状態へ遷移した後に、前記第2ワークフローをランニング状態に入れるステップであって、該ランニング状態では、前記バッファリング・タスクで格納された前記第1被処理サブセット・データが前記第2ワークフローにより処理される、ステップと
を含む方法。
【請求項10】
前記バッファリング・タスクは、前記バッファリング・タスクで格納された前記第1被処理サブセット・データの量が前記閾値に等しいことを示すイベントを生成するように構成されている、請求項9に記載の方法。
【請求項11】
前記バッファリング・タスクは、FIFOバッファを用いて設定される先入れ先出し(FIFO)タスクであり、前記FIFOバッファは、前記閾値以上のFIFO長を有し、
前記FIFOタスクは、
前記FIFOタスクで格納された前記第1被処理サブセット・データの量が前記閾値に等しいことを示すイベントを生成し、且つ
前記FIFOタスクで格納された前記第1被処理サブセット・データの量が前記第2ワークフローに提供されたことを示す別のイベントを生成する
ように設定されている、請求項10に記載の方法。
【請求項12】
前記入力データのサブセットは、前記入力データの複数のサブセットのうちの1つである、請求項9-11のうちの何れか1項に記載の方法。
【請求項13】
請求項1-12のうちの何れか1項に記載の方法を実行する処理回路を有する装置。
【発明の詳細な説明】
【背景技術】
【0001】
参照による援用
本願は、2020年9月21日付で出願された米国特許出願第17/027,569号「ステップ・イネーブル化されたワークフローのための方法及び装置」に対する優先権を主張しており、その米国特許出願は2019年9月28日付けで出願された米国仮出願第62/907,626号「クラウド・コンピューティングのためのステートフル・ステップ・イネーブル化されたワークフロー」に対する優先権を主張している。先行する出願の開示全体は、参照により全体的に本願に援用される。
【0002】
技術分野
本開示は、1つ以上のワークフローの処理を含むデータ処理に一般的に関連する実施形態を説明している。
【0003】
背景
ここに記載される背景の説明は、本開示の状況を一般的に提示するためのものである。目下の発明者の仕事は、その仕事がこの背景のセクションだけでなく、出願時における従来技術としての適格性を有しない可能性のある説明の態様にも及ぶ範囲内において、本開示に対する従来技術として明示的にも黙示的にも認められていない。
【0004】
ワークフローは、データ処理システムにおいて、メディア・データのようなデータを処理するためのデータ処理に使用することができる。幾つかの例において、ワークフローは多数の処理タスクを含む。多数のタスクがデータを処理するために並列的に進行する場合、データ処理システムは大量のリソースを捧げる必要がある。
【発明の概要】
【0005】
開示される態様は、ワークフローを処理する方法及び装置を提供する。装置はワークフローのワークフロー情報を受信するように構成された処理回路を含む。処理回路は、ワークフロー情報に基づいて、入力データを処理するワークフローを生成することが可能である。ワークフローは複数の処理タスクと第1バッファリング・タスクとを含む。複数の処理タスクは第1処理タスクと第2処理タスクとを含むことが可能である。処理回路は、第1処理タスクをランニング状態に入れることが可能であり、ランニング状態では、入力データのサブセットが、第1処理タスクにより処理され、第1被処理サブセット・データとして第1バッファリング・タスクへ出力される。処理回路は、第1バッファリング・タスクで格納された第1被処理サブセット・データの量が第1閾値に等しいことに基づいて、第1処理タスクをランニング状態から停止状態へ遷移させることが可能である。第1処理タスクの状態情報は停止状態において保存することが可能である。第1処理タスクが停止状態へ遷移した後に、処理回路は、第2処理タスクをランニング状態に入れることが可能であり、該ランニング状態では、第1バッファリング・タスクで格納された第1被処理サブセット・データが第2処理タスクにより処理される。
【0006】
実施形態において、第2処理タスクは、処理される第1被処理サブセット・データを第2被処理サブセット・データとして、第2バッファリング・タスクへランニング状態において出力するように構成されている。
処理回路は、(i)第2バッファリング・タスクで格納された第2被処理サブセット・データの量が第2閾値に等しいこと、及び(ii)第1バッファリング・タスクで格納された第1被処理サブセット・データの量が第2処理タスクに提供されたことのうちの1つに基づいて、第2処理タスクをランニング状態から停止状態へ遷移させることが可能である。第2処理タスクの状態情報は停止状態において保存されることが可能である。
【0007】
実施形態において、第1バッファリング・タスクは、第1バッファリング・タスクで格納された第1被処理サブセット・データの量が第1閾値に等しいことを示すイベントを生成するように構成されている。例えば、第1バッファリング・タスクは、FIFOバッファを用いて設定される先入れ先出し(FIFO)タスクである。FIFOバッファは、第1閾値以上のFIFO長を有することが可能である。FIFOタスクは、FIFOタスクで格納された第1被処理サブセット・データの量が第1閾値に等しいことを示すイベントを生成するように構成される。FIFOタスクは、FIFOタスクで格納された第1被処理サブセット・データの量が第2処理タスクに提供されたことを示す別のイベントを生成するように構成される。
【0008】
実施形態において、入力データのサブセットは、入力データの複数のサブセットのうちの1つである。
【0009】
実施形態において、第1処理タスクのライフサイクルは、停止状態と、ランニング状態、エラー状態、及び廃止状態のうちの1つとの間の遷移を含む。
【0010】
実施形態において、ワークフローは、第1バッファリング・タスクを含む複数のバッファリング・タスクを含む。複数の処理タスクの各入力は、入力データのうちの1つ、及び複数のバッファリング・タスクのうちの1つ以上、からのものである。複数の処理タスクのうちの1つのみが、任意の時点でランニング状態にあることを許容される。
【0011】
実施形態において、入力データは、入力データのサブセットと、入力データの別のサブセットとを含む。ワークフローは、第1バッファリング・タスクを含む複数のバッファリング・タスクを含む。複数の処理タスクの各入力は、入力データのうちの1つ、及び複数のバッファリング・タスクのうちの1つ以上、からのものである。処理回路は、入力データのサブセットを、複数の処理タスクにより順に処理することが可能である。入力データのサブセットが複数の処理タスクにより処理された後に、処理回路は、入力データの他のサブセットを、複数の処理タスクにより順に処理することが可能である。複数の処理タスクにおける残りの処理タスクは停止状態にあるとすることが可能である。複数の処理タスクのうちの1つのみが、任意の時点でランニング状態にあることを許容される。
【0012】
開示される態様は、複数のワークフローを処理する方法及び装置を提供する。装置は、複数のワークフローのワークフロー情報を受信するように構成される処理回路を含む。処理回路は、ワークフロー情報に基づいて、入力データを処理する複数のワークフローを生成する。複数のワークフローのうちの少なくとも1つは複数の処理タスクを含み、複数のワークフローは、第1ワークフローと第2ワークフローとを含む。処理回路は、第1ワークフローをランニング状態に入れることが可能であり、ランニング状態では、入力データのサブセットが、第1ワークフローにより処理され、第1被処理サブセット・データとしてバッファリング・タスクへ出力される。処理回路は、バッファリング・タスクで格納された第1被処理サブセット・データの量が閾値に等しいことに基づいて、第1ワークフローをランニング状態から停止状態へ遷移させることが可能である。第1ワークフローの状態情報は停止状態において保存されることが可能である。第1ワークフローが停止状態へ遷移した後に、第処理回路は、2ワークフローをランニング状態に入れることが可能であり、ランニング状態では、第1バッファリング・タスクで格納された第1被処理サブセット・データが第2ワークフローにより処理される。
【0013】
一例において、第1バッファリング・タスクは、バッファリング・タスクで格納された第1被処理サブセット・データの量が閾値に等しいことを示すイベントを生成するように構成されている。一例において、バッファリング・タスクは、FIFOバッファを用いて設定されるFIFOタスクである。FIFOバッファは、閾値以上のFIFO長を有する。FIFOタスクは、FIFOタスクで格納された第1被処理サブセット・データの量が閾値に等しいことを示すイベントを生成するように構成される。FIFOタスクは、FIFOタスクで格納された第1被処理サブセット・データの量が第2ワークフローに提供されたことを示す別のイベントを生成するように構成される。
【0014】
一例において、入力データのサブセットは、入力データの複数のサブセットのうちの1つである。
【0015】
本開示の側面はまた、ビデオ復号化のためにコンピュータによって実行された場合に、1つ以上のワークフローを処理するための任意の方法をコンピュータに実行させる命令を格納する非一時的なコンピュータ読み取り可能な媒体を提供する。
【図面の簡単な説明】
【0016】
開示される対象事項の更なる特徴、性質、及び種々の利点は、以下の詳細な説明及び添付の図面からより明らかになるであろう。
【0017】
【
図1】本開示の実施形態による例示的なデータ処理システムを示す。
【0018】
【
図2A】本開示の実施形態によるワークフローの例を示す。
【
図2B】本開示の実施形態によるワークフローの例を示す。
【
図2C】本開示の実施形態によるワークフローの例を示す。
【0019】
【
図2D】本開示の実施形態による複数のワークフローの例を示す。
【0020】
【
図3】本開示の実施形態によるステップ・ベースのワークフローにおけるタスクの一例を示す。
【0021】
【
図4A】本開示の実施形態による処理タスクの例示的なタスク・ライフサイクルを示す。
【0022】
【
図4B】本開示の実施形態によるワークフローの例示的なタスク・ライフサイクルを示す。
【0023】
【
図5】本開示の実施形態による処理タスクの例示的なタスク・ライフサイクルを示す。
【0024】
【
図6】本開示の実施形態によるプロセスを要約したフロー・チャートを示す。
【0025】
【
図7】本開示の実施形態によるプロセスを要約したフロー・チャートを示す。
【0026】
【
図8】本開示の実施形態によるプロセスを要約したフロー・チャートを示す。
【0027】
【
図9】実施形態によるコンピュータ・システムの概略図を示す。
【発明を実施するための形態】
【0028】
開示の態様は、データ処理(例えば、ネットワークにおけるメディア処理)に関連する。データ処理ソース(例えば、ネットワーク・ベースのメディア処理(NBMP)ソース)は、要求されるデータ処理(例えば、要求されるメディア処理)を記述し、処理されるべきデータ(例えば、メディア・データ)の制御情報を提供することができる。従って、ワークフロー・マネージャ(例えば、NBMPワークフロー・マネージャ)は、ワークフロー(例えば、メディア処理ワークフロー、NBMPワークフロー)を確立することが可能であり、ワークフローは準備できていることをデータ処理ソース(例えば、NBMPソース)に通知することが可能であり、そしてデータ処理を開始することができる。次いで、データ・ソース(例えば、メディア・ソース)は、例えば、処理のためにネットワークへデータを送信することを開始することができる。
【0029】
一般に、ワークフローは、処理タスク又はタスク(例えば、メディア処理タスク)を含むことができる。接続されたグラフは、接続を利用して処理タスク間の入力/出力関係を表すことにより、ワークフローを表現することができる。従って、ワークフローは、処理タスクの接続されたグラフとして考察することが可能である。各タスクは、ビデオ復号化、ビデオ・スティッチング、ビデオ符号化などのオペレーション(例えば、メディア処理オペレーション)を実行することができる。ワークフロー・マネージャは、各タスク及びワークフロー出力を構成及び監視することにより、ワークフローの正しいオペレーションを保証することができる。ワークフロー・マネージャは、処理ファンクション(メディア処理ファンクションなど)を選択し、処理ファンクション(メディア処理ファンクションなど)を、それぞれのタスクとしてインスタンス化することを、例えばデータ処理ソース(例えば、NBMPソースなど)から受け取ったワークフロー記述に基づいて行うように構成されることが可能である。
【0030】
処理タスクを実行するように構成された処理エンティティ(例えば、メディア処理エンティティ)が、確立され、ロードされ、インスタンス化され、及びモニタリングされることが可能である。アプリケーション・プログラミング・インターフェース(API)のようなインターフェースは、データ処理ソースとワークフロー・マネージャとの間、ワークフロー・マネージャと処理タスクとAPIとの間で規定され、適切なファンクションを発見することができる。一般に、データ処理システム又はプラットフォーム(例えば、NBMPプラットフォーム)は、データ・フォーマット(例えば、メディア・フォーマット)及びプロトコル・アグノスティックであるとすることが可能である。データ処理システムは、データ・ソース(例えば、メディア・ソース)、ワークフロー・マネージャ、及びタスク間で交換されるデータのためのデータ(例えば、メディア・データ)、メタデータ、及び補助情報フォーマットを識別し、シグナリングすることが可能である。
【0031】
データ処理フレームワーク(例えば、NBMPフレームワーク)は、データ処理のためにデジタル・ネットワークを介して接続される様々なエンティティ間のデータ・フォーマットとAPIの両方を含むインターフェースを定めることができる。ユーザーは、効率的でインテリジェントな処理のために、ユーザー・オペレーションに遠隔的にアクセスして設定することができる。データは、例えば、ネットワークにアップロードすることが可能であり、処理タスクはインスタンス化されることが可能であり、処理タスクは更に構成されることが可能である。データ処理フレームワークは、データ処理パイプライン(例えば、メディア処理パイプライン)の動的な作成、並びに被処理データ及びメタデータに対するリアルタイムでの又は遅延した方法でのアクセスを可能にする。データ処理パイプライン内のデータ・ソース、ワークフロー・マネージャ、及びデータ処理エンティティの間で使用されるデータ及びメタデータ・フォーマットは指定されることが可能である。
【0032】
データ処理フレームワークは、クライアント(例えば、クリエータ、サービス・プロバイダ、デジタルメディアの消費者)が、例えば、ネットワークにおいてデータ処理エンティティによって実行されるべきデータ処理オペレーションを記述することを可能にする。ワークフローは、インターフェース(例えば、NBMP API)を介してアクセス可能なデータ処理ファンクションのセットを構成することによって記述することが可能である。データ処理エンティティ(例えば、メディア処理エンティティ(MPE))は、データ・ソースから受信したデータ及び関連するメタデータに適用される処理タスク、又は他のタスクを実行することができる。データ処理エンティティ(例えば、MPE)は、処理タスクの構成、管理、及び監視のためのファンクションを提供することができる。データ処理タスクは、データ及びメタデータ入力に適用され、データ・シンク(例えば、メディア・シンク)又は他のデータ処理タスク(例えば、メディア処理タスク)によって消費されるデータ及び関連するメタデータ出力を生成するプロセスであるとすることが可能である。
【0033】
データ処理フレームワークは、ストリーミング、ファイル配信、プッシュ・ベースのプログレッシブ・ダウンロード、ハイブリッド配信、マルチパス、ヘテロジニアス・ネットワーク環境のような様々な配信方法をサポートすることができる。
【0034】
図1は、本開示の実施形態による例示的なデータ処理システム(例えば、NBMPシステム、NBMP参照アーキテクチャ、NBMPアーキテクチャ)(100)を示す。データ処理システム(100)は、データ・ソース(例えば、NBMPソース、NBMPソース・エンティティ)(101)、ワークフロー・マネージャ(例えば、NBMPワークフロー・マネージャ)(103)、ファンクション・リポジトリ(105)、データ・ソース又はデータ・ソース・エンティティ(例えば、メディア・ソース、メディア・ソース・エンティティ)(111)、データ処理エンティティ(例えば、MPE)(113)、データ・シンク又はデータ・シンク・エンティティ(例えば、メディア・シンク又はメディア・シンク・エンティティ)(115)、第三者エンティティ及び/又は類似のもののような複数のエンティティを含むことができる。データ処理システム(100)は、追加のデータ・ソース、データ・シンク、及び/又はデータ処理エンティティを含むことができる。データ処理システム(100)は、ネットワーク内の1つ以上の処理エンティティにわたってデータを処理することができる。データに対する種々のデータ及び制御情報(又は制御データ)のような情報は、データ処理システム(100)内の複数のエンティティの間で通信されることが可能である。
【0035】
議論のための状況を提供するために、以下、データ処理システム(100)はNBMPシステム(100)として説明される。説明は、任意のデータ処理システムに適切に適合させることが可能である。
【0036】
NBMPソース(101)は、ネットワークにおけるメディア処理を表すか、又は他の方法で示すことが可能である。ファンクション・リポジトリ(105)は、様々なNBMPファンクションのNBMPファンクション記述を含むことができる。NBMPソース(101)及びワークフロー・マネージャ(103)は、ファンクション・リポジトリ(105)からNBMPファンクションの説明又はファンクションを取り出すことができます。NBMPファンクションは、スタンドアロンの自己完結型メディア処理オペレーションの実装及び/又はオペレーションの対応する記述の実装を指すことが可能である。
【0037】
処理タスク又はタスクは、MPE(113)によって実行されるNBMPファンクションのランタイム・インスタンスを指すことが可能である。NBMPワークフロー又はワークフローは、要求されたメディア処理を達成する1つ以上の接続されたタスクのグラフ(例えば、有向非循環グラフ(DAG))によって表現されることが可能である。ワークフロー・マネージャ(103)は、例えばワークフロー記述ドキュメント(WDD)に基づいて、タスクを提供し、タスクを接続して、ワークフローを作成、制御、管理、及び監視することが可能である。
【0038】
メディア・ソース(111)は、ワークフローによって処理されるべきメディア・コンテンツ(例えば、メディア・データ、補足情報など)を提供することが可能である。補足情報は、メディア・データに関連するメタデータ又は補助情報を含むことが可能である。メディア・ソース(111)は、ワークフローに対する入力を提供することができる。メディア・シンク(115)は、ワークフローの出力を消費することができる。MPE (113)は、1つ以上のメディア処理タスクを実行して、メディア・コンテンツを処理することができる。
【0039】
NBMPシステム(100)における様々なエンティティ(例えば、NBMPソース(101)、ワークフロー・マネージャ (103)、MPE(113))は、メディア・サービス・リクエストを呼び出し、応答するためにAPIを使用することができる。APIは、NBMPワークフローAPI、ワークフローAPI、ファンクション・ディスカバリAPI、及びタスクAPIを含むことが可能である。ワークフローAPIは、NBMPソース(101)とワークフロー・マネージャ(103)の間のインターフェースを提供することができる。タスクAPIは、ワークフロー・マネージャ(103)とメディア処理タスクの間のインターフェースを提供することが可能である。ファンクション・ディスカバリAPIは、ワークフロー・マネージャ(103)/NBMPソース(101)とファンクション・リポジトリ(105)の間のインターフェースを提供することが可能である。
【0040】
前述のNBMPインターフェースは、ネットワーク内のメディア処理ワークフローの作成と制御に使用することが可能である。NBMPシステム(100)は、コントロール・プレーンとメディア・プレーン(又はメディア・データ・プレーン)に分割することが可能である。コントロール・プレーンは、ワークフローAPI、ファンクション・ディスカバリAPI、及びタスクAPIを含むことが可能である。
【0041】
ワークフローAPIは、メディア処理ワークフローを作成及び制御するために、NBMPソース(101)により使用されることが可能である。NBMPソース(101)は、ワークフローAPI を使用してワークフロー・マネージャ(103)と通信し、ネットワークにおけるメディア処理を設定及び制御することが可能である。ワークフロー・リソース(WR)をワークフローAPIのオペレーションに含めることにより、NBMPソース(101)がリクエストをワークフロー・マネージャ(103)に送ると、ワークフロー・マネージャ(103)は、WR、包含されているWDD、及び対応する記述子(descriptor)を解析し、要求されたオペレーションに応じて、適切なアクションを実行することができる。その後、ワークフロー・マネージャ(103)は、レスポンスとともにリクエストを確認することができる。ワークフローAPIオペレーションは、ワークフローを作成するkと(例えば、CreateWorkflow)、ワークフローを更新すること(例えば、UpdateWorkflow)、ワークフローを削除すること(例えば、DeleteWorkflow)、ワークフローを検索すること(RetrieveWorkflow)などを含むことが可能である。
【0042】
ファンクション・ディスカバリAPIは、ワークフロー・マネージャ(103)及び/又はNBMPソース(101)がメディア処理ワークフローの一部としてロードすることが可能なメディア処理ファンクションを発見するための手段を提供することができる。
【0043】
タスクAPIは、タスク(例えば、MPE(113)により実行されるタスク1及びタスク2)を、実行時に設定及び監視するために、ワークフロー・マネージャ(103)によって使用されることが可能である。タスクAPIは、例えばタスクのためのリソースがMPE (113)で割り当てられた後に、ワークフロー・マネージャ(103)によるメディア処理タスクの設定のためのインターフェースを定めることが可能である。タスクAPIのオペレーションは、タスクを生成すること(例えば、CreateTask)、タスクを更新すること(例えば、UpdateTask)、タスクを取得すること(例えば、GetTaskなど)、タスクを削除すること(例えば、DeleteTask)を含むことが可能である。
【0044】
メディア・プレーンにおいて、NBMPソース(111)とタスクの間、及びタスク間にメディア・フォーマット、メタデータ、及び補足情報フォーマットを定めることが可能である。
【0045】
ワークフロー記述(WD)は、NBMPソース(101)からワークフロー・マネージャ(103)へ渡されることが可能である。WDは、入力データ、出力データ、ファンクション、その他のワークフローに対する条件のような情報を記述することが可能である。
【0046】
ワークフロー・マネージャ(103)は、NBMPソース(101)からWDDを受け取り、要求されるメディア処理のためのワークフローを構築することができる。ワークフローのプロシジャにおいて、メディア処理ファンクションが、例えばファンクション・リポジトリ(105)から選択されることが可能であり、次いで、対応するメディア処理タスクが設定され、1つ以上のMPE(例えば、MPE(113)を含む)のセットに分配されることが可能である。
【0047】
ファンクション・リポジトリ(105)によって提供されるファンクションのセットは、NBMPソース(101)及びワークフロー・マネージャ(103)によって読み込まれることが可能である。実施形態において、NBMPソース(101)は、ファンクション・リポジトリ(105)内の一組のファンクションを使用して、ワークフローの作成を要求する。従って、NBMPソース(101)は、ワークフローのためのファンクションを選択するように構成される。NBMPソース(101)は、以下で説明されるようにワークフローの作成を要求することが可能である。NBMPソース(101)は、メディア処理タスクの説明を使用することが可能であり、ワークフローはその説明により作成されることになり、また、メディア処理タスクの入力及び出力の接続を定めるために接続マップを指定することができる。ワークフロー・マネージャ(103)が、NBMPソース(101)から上記の情報を受け取ると、ワークフロー・マネジャ(103)は、個々のファンクション名に基づいてメディア処理タスクをインスタンス化し、接続マップに従ってメディア処理タスクを接続することができる。
【0048】
代替的に、NBMPソース(101)は、一組のキーワードを使用してワークフローの作成をリクエストし、そのキーワードによってワークフロー・マネージャ(103)はワークフローを構築することができる。従って、NBMPソース(101)は、ワークフローに挿入されるべきファンクションのセットを認識していなくてもよい。NBMPソース(101)は、以下で説明されるようにワークフローの作成をリクエストすることが可能である。NBMPソース(101)は、一組のキーワードを使用することが可能であり、そのキーワードによってワークフロー・マネージャ(103)は適切なファンクションを見つけることが可能であり、適切なワークフロー記述を使用してワークフローの条件を指定することが可能である。
【0049】
ワークフロー・マネージャ(103)は、NBMPソース(101)から上記の情報(例えば、キーワードのセット)を受け取ると、ワークフロー・マネジャ(103)は、例えば処理記述子で指定されるキーワードを用いて、適切なファンクションを探索することによって、ワークフローを作成することができる。次いで、ワークフロー・マネージャ(103)は、ワークフロー記述内の他の記述子を使用してメディア処理タスクを提供し、メディア処理タスクを接続して最終的なワークフローを作成することができる。
【0050】
ワークフロー・マネージャ(103)の処理モデルは以下のように説明することができる。
【0051】
ワークフロー・マネージャ(103)は、以下のような利用可能なメディア処理ファンクションを発見することができる。NBMPファンクション・リポジトリ(105)は、リクエストされた処理に応じることが可能なメディア処理ファンクションを外部エンティティが問い合わせることを可能にするために、ファンクション・ディスカバリ・インターフェース(又はAPI)を提供することができる。ワークフロー・マネージャ(103)は、メディア処理ファンクションの探索可能なリストを提供するディレクトリ・サービスにアクセスすることができる。ワークフロー・マネージャ(103)は、ワークフロー記述内のメディア処理タスクの説明を使用して、ワークフローに適切なファンクションを見つけることができる。
【0052】
ワークフローのメディア処理タスクの選択は、以下のように説明することができる。メディア処理のリクエストがNBMPソース(101)から受信された場合、ワークフロー・マネージャ(103)は、ファンクション・リポジトリ(105)を探索して、ワークフローを充足することが可能なすべての利用可能なファンクションのリストを見つけることが可能である。NBMPソース(101)からのワークフロー記述を使用して、ワークフロー・マネージャ(103)は、ファンクション・リポジトリ(105)からファンクションを発見してワークフローを実装することが可能であり、ワークフローはMBMPソース(101)からのメディア処理のための情報に依存することが可能である。メディア処理のための情報は、入力及び出力の記述、要求される処理の記述、及びファンクション・ディレクトリ(105)におけるファンクションの他の記述子の情報を含むことが可能である。ソース・リクエストの、ワークフローに含まれるべき適切なメディア処理タスクへのマッピングは、ネットワークにおけるNBMPの実装の一部である可能性がある。タスク生成時に入力ソースを入力ポート名及び出力ポート名で参照及びリンクするには、入力ポート及び出力ポートは、入力ストリームに対する参照を行うために使用されることが可能である。
【0053】
タスクとしてインスタンス化されるべき適切なファンクションを探索することは、ファンクション・ディスカバリAPIを使用してワークフロー・マネージャ(103)によって実行されることが可能である。代替的に、ワークフロー・マネージャ(103)は、ファンクション・ディスカバリAPIを使用して、ファンクション・リポジトリ(105)内の全部又は一部の適切なファンクションの詳細情報を取り出すことができる。次いで、ワークフロー・マネージャ(103)は、NBMPソース(101)からのメディア処理のための情報を、各ファンクションの様々な記述子と比較することができる。
【0054】
選択されたメディア処理は、ワークフローにおいて設定されることが可能である。ワークフローに含まれるべきファンクションが識別された場合、NBMPワークフロー・マネージャ(103)は、そのファンクションをそれぞれのタスクとしてインスタンス化してタスクを構築し、その結果、タスクをワークフローに追加することができる。NBMPワークフロー・マネージャ(103)は、NBMPソース(101)から受け取ったメディア処理情報からコンフィギュレーション・データを抽出し、対応するタスクを設定することができる。タスクの構成は、タスクAPI(例えば、NBMPタスクAPI)を用いて実行することができる。
【0055】
タスクの割り当てと配分は以下のように説明することができる。ワークフロー・マネージャ(103)は、ワークフローを使用して、処理の配備を実行し、メディア処理エンティティを構成することができる。一例において、計算負荷の重いメディア処理リクエストの場合、ワークフロー・マネージャ(103)は、複数の計算インスタンスをセット・アップし、ワークロードを、複数の計算インスタンス間に分散することができる。従って、ワークフロー・マネージャ(103)は、必要に応じて複数の計算インスタンスを接続して構築することができる。一例において、ワークフロー・マネージャ(103)は、同じタスクを複数のインスタンスに割り当て、選択されたスケジューリング・メカニズムを使用して、複数のインスタンス間でワークロードを分散するロード・バランサーを提供する。別の例では、ワークフロー・マネージャ(103)は、同じタスクの異なるオペレーションを異なるインスタンス(例えば、並列オペレーション)に割り当てる。上記の両方の例において、ワークフロー・マネージャ(103)は、インスタンス間のワークフロー・パスをセット・アップすることが可能であり、従って、適切なワークロードを首尾よく実現することができる。ワークフロー・マネージャ(103)は、処理されたメディア・データ/ストリームを、ワークフロー・グラフ内の次のタスクにプッシュするように(又はプル・メカニズムによりそれらを使用可能にするように)タスクを構成することができる。
【0056】
ワークフロー・マネージャ(103)は、NBMPソース(101)からWDDを受け取った場合に、ワークフロー・マネージャ(103)は、ワークフローに挿入されるべきメディア処理ファンクションの選択を行うことが可能である。ワークフローに含まれるタスクのリストがコンパイルされると、ワークフロー・マネージャ(103)は、ワークフローを準備するためにタスクを接続することができる。
【0057】
ワークフロー・マネージャ(103)は、WDDから、グラフ(例えば、DAG)によって表現されるようなワークフローを生成することができる。
図2Aは、本開示の実施形態によるグラフ(例えば、DAG)(200A)の一例を示す。DAG(200A)は、複数のノード(T1)-(T6)及び複数のリンク(又は接続)(202)-(208)を含むことが可能である。一例において、DAG(200A)はワークフロー(200A)を表現する。
【0058】
DAG(200A)の各ノードは、ワークフロー(200A)におけるメディア処理タスクを表現することが可能である。DAG(200A)においての第1ノード(例えば、ノード(T1))を第2ノード(例えば、ノード(T2))に接続するリンク(例えば、リンク(202))は、第1ノード(例えば、ノード(T1))の出力の伝達を、第2ノード(例えば、ノード(T2))への入力として表現することができる。
【0059】
一般に、ワークフローは、適切な任意数の入力(又はワークフロー入力)及び適切な任意数の出力(又はワークフロー出力)を含むことが可能である。ワークフロー入力は、メディア・ソース(111)、他のワークフロー(単数又は複数)、及び/又は類似のものに接続することが可能であり、ワークフロー出力は、メディア・シンク(115)、他のワークフロー(単数又は複数)、及び/又は類似のものに接続することが可能である。ワークフロー(200A)は、入力(201)と出力(209),(210)を有する。幾つかの実施形態において、ワークフロー(200A)は、中間ノードからの1つ以上の出力を有することが可能である。
【0060】
図4Aは、本開示の実施形態によるメディア処理タスクの例示的なタスク・ライフサイクル(400)を示す。タスク・ライフサイクル(400)は、他のタイプの処理タスクに適用することが可能である。メディア処理タスクは、メディア処理タスクの実行の様々な時点で様々な状態間を遷移することができる。タスク・ライフサイクル(400)における様々な状態は、インスタンス化された状態(401)、アイドル状態(402)、ランニング状態(403)、エラー状態(404)、廃止状態(405)及び/又は同様なものを含むことが可能である。
【0061】
インスタンス化された状態(401):メディア処理タスクがワークフロー・マネージャ(103)によって、例えば、onInstantiation遷移を用いて表現されるようなインフラストラクチャ・マネジャのサービスによって、インスタンス化される場合に、メディア処理タスクはインスタンス化された状態(401)にある。(例えば、onTaskConfiguration遷移を用いて表現されるように)メディア処理タスクが設定されると、インスタンス化された状態(401)は、アイドル状態(402)に遷移(又は変更)することができる。代替的に、(例えば、onTermination遷移を用いて表現されるように)メディア処理タスクが終了した場合、メディア処理タスクは廃止状態(405)に移ることが可能である。
【0062】
アイドル状態(402):メディア処理タスクがインスタンス化された状態(401)にあり、(例えば、onTaskConfiguration遷移を用いて表現されるように)ワークフロー・マネージャ(103)がタスク・コンフィギュレーションを実行することが可能である場合、メディア処理タスクはアイドル状態(402)に移行することができる。アイドル状態(402)では、メディア処理タスクは、適切な処理とともに設定される。(例えば、onStart遷移を用いて表現されるように)メディア処理タスクが開始されると、メディア処理タスクはランニング状態(403)に移行することができる。代替的に、アイドル状態(402)において、メディア処理タスクは再設定され、アイドル状態(402)に留まることが可能である。アイドル状態(402)において、メディア処理タスクが終了した場合(例えば、onTermination遷移を用いて表現されるように)、メディア処理タスクは廃止状態(405)に移行することができる。アイドル状態(402)において、メディア処理タスクがリセットされた場合(例えば、onReset遷移を用いて表現されるように)、メディア処理タスクは、インスタンス化された状態(401)に移行することができる。
【0063】
ランニング状態(403):メディア処理タスクがアイドル状態(402)にあり、(例えば、onStart遷移を利用して)メディア処理タスクが開始される場合に、メディア処理タスクはアイドル状態(402)からランニング状態(403)へ移行することが可能である。ランニング状態(403)において、MPE(113)に割り当てられたメディア処理タスクは、メディア処理タスクがワークフローにおける先行するメディア処理タスク又はMBMPソース(101)の何れかから受信したデータ(例えば、メディア・ソース(111)からのメディア・データ)を処理することができる。代替的に、ランニング状態(403)において、(例えば、onTaskConfiguration遷移を用いて表現されるように)ワークフロー・マネージャ(103)がメディア処理タスクの再設定を実行することが可能であり、かつ、再設定がメディア処理タスクの現在のメディア/メタデータ・ストリームに対する実行とともに再設定を処理する結果となった場合、メディア処理タスクは、ランニング状態(403)に留まることが可能である。ランニング状態(403)において、(例えば、onStop遷移を用いて表現されるように)メディア処理タスクが停止した場合、又は(例えば、onCompletion遷移を用いて表現されるように)完了した場合、メディア処理タスクはアイドル状態(402)に移行することができる。ランニング状態(403)において、メディア処理タスクがエラーに遭遇した場合(例えば、onError遷移を用いて表現されるように)、メディア処理タスクはエラー状態(404)に移行することができる。ランニング状態(403)において、メディア処理タスクが終了した場合(例えば、onTermination遷移で表現されるように)、メディア処理タスクは廃止状態(405)に移行することができる。
【0064】
エラー状態(404):メディア処理タスクがエラーに遭遇し、メディア・データ又はメタデータを処理することができない場合、メディア処理タスクはエラー状態(404)にある可能性がある。エラーに対処した場合(例えば、onErrorHandling遷移を用いて表現されるように)、メディア処理タスクは、アイドル状態(402)に戻ることが可能である。代替的に、メディア処理タスクが、インスタンス化された状態(401)に移行できるように、エラー状態(404)の間に、(例えば、onReset遷移を使用して表現されるように)メディア処理タスクはリセットされることが可能である。エラー状態(404)において、メディア処理タスクが終了した場合、メディア処理タスクは廃止状態(405)に移されることが可能である。
【0065】
廃止状態(405):メディア処理タスクがワークフロー・マネージャ(103)によって終了できた場合、メディア処理タスクは廃止状態(405)にある可能性がある。メディア処理タスクは廃棄されることが可能であり、再利用することはできない。
【0066】
メディア処理タスクの状態は、一般的な記述子の「状態(state)」パラメータに反映することが可能である。幾つかの例において、onError遷移を除く上記の遷移の各々は、ワークフロー・マネージャ(103)によって開始されるタスク・オペレーションによって生じる可能性がある。OnError遷移は、メディア処理タスクの内部状態変化に起因して生じる可能性がある。
【0067】
図4Bは、本開示の実施形態によるワークフローの例示的なワークフロー・ライフサイクル(410)を示す。ワークフローは、ワークフローの実行の様々な時点で様々な状態間を遷移することができる。ワークフロー・ライフサイクル(410)における様々な状態は、インスタンス化された状態(411)、アイドル状態(412)、ランニング状態(413)、エラー状態(414)、廃止状態(415)及び/又は類似するものを含むことができる。
【0068】
インスタンス化された状態(411):ワークフローがワークフロー・マネージャ(103)によって、(例えば、onInstantiation遷移を用いて表現されるように)インフラストラクチャ・マネジャのサービスによって、インスタンス化される。場合に、メディア処理タスクはインスタンス化された状態(401)にある。(例えば、onWorkflowConfig遷移を用いて表現されるように)ワークフローが設定されると、ワークフローは、アイドル状態(412)に移行することができる。代替的に、インスタンス化された状態(411)にある場合に(例えば、onTermination遷移を用いて表現されるように)ワークフローが終了した場合、ワークフローは廃止状態(415)に移ることが可能である。
【0069】
アイドル状態(412):ワークフローがインスタンス化された状態(412)にあり、(例えば、onWorkflowConfig遷移を用いて表現されるように)ワークフロー・マネージャ(103)がワークフロー・コンフィギュレーションを実行することが可能である場合、ワークフローはアイドル状態(412)に移行することができる。アイドル状態(412)において、1つ以上のMPEが(例えば、インフラストラクチャ・マネジャにより)セット・アップされ、MPEで進行しているタスクが準備されて設定される。(例えば、onStart遷移を用いて表現されるように)ワークフローが開始されると、ワークフローはランニング状態(413)に移行することができる。代替的に、アイドル状態(412)において、ワークフローは再設定されることが可能である。ワークフローは、メディア・データ又はメタデータの到着を待機するアイドル状態(412)に留まることが可能である。アイドル状態(412)において、ワークフローが終了した場合(例えば、onTermination遷移を用いて表現されるように)、ワークフローは廃止状態(415)に移行することができる。アイドル状態(412)において、ワークフローがリセットされた場合(例えば、onReset遷移を用いて表現されるように)、ワークフローは、インスタンス化された状態(4101)に移行することができる。
【0070】
ランニング状態(413):ワークフローがアイドル状態(412)にあり、(例えば、onStart遷移を利用して)ワークフローが開始される場合に、ワークフローはアイドル状態(412)からランニング状態(413)へ移行することが可能である。ランニング状態(413)において、NBMPソース(101)からのデータは、ワークフロー内においてMPEによって処理されることが可能である。代替的に、ランニング状態(413)において、(例えば、onWorkflowConfig遷移を用いて表現されるように)ワークフロー・マネージャ(103)がワークフローの再設定を実行することが可能であり、かつ、再設定が現在のメディア/メタデータ・ストリームに対する実行とともに再設定を処理する結果となった場合、ワークフローは、ランニング状態(413)に留まることが可能である。ランニング状態(413)において、(例えば、onStop遷移を用いて表現されるように)ワークフローが停止した場合、又は(例えば、onCompletion遷移を用いて表現されるように)処理が完了した場合、ワークフローはアイドル状態(412)に移行することができる。ランニング状態(413)において、ワークフローがエラーに遭遇した場合(例えば、onError遷移を用いて表現されるように)、ワークフローはエラー状態(414)に移行することができる。ランニング状態(413)において、ワークフローが終了した場合(例えば、onTermination遷移で表現されるように)、ワークフローは廃止状態(415)に移行することができる。
【0071】
エラー状態(414):ワークフローがエラーに遭遇し、ワークフローの処理を続けることができない場合、ワークフローはエラー状態(414)にある可能性がある。エラーに対処した場合(例えば、onErrorHandling遷移を用いて表現されるように)、ワークフローは、アイドル状態(412)に戻ることが可能である。代替的に、ワークフローが、インスタンス化された状態(411)に移行できるように、エラー状態(414)の間に、(例えば、onReset遷移を使用して表現されるように)ワークフローはリセットされることが可能である。エラー状態(414)において、ワークフローが終了した場合、ワークフローは廃止状態(415)に移されることが可能である。
【0072】
廃止状態(415):ワークフローがワークフロー・マネージャ(103)によって終了できた場合、ワークフローは廃止状態(415)にある可能性がある。ワークフローは再び使用されるワークフローのためにインスタンス化されることが可能である。
【0073】
幾つかの例において、onError遷移を除く上記の遷移の各々は、NBMPソース(101)によって開始されるワークフロー・オペレーションによって生じることが可能である。OnError遷移は、ワークフローの内部状態の変化に起因して生じる可能性がある。
【0074】
一例において、クラウド上でメディアを処理する概念が、NBMPプロジェクトによって発展される。しかしながら、NBMPの設計は、監視、報告、及び通知に関して単一の方法を提供しない。幾つかの例において、報告又は通知のためのメッセージ・フォーマットは定められていない。
【0075】
幾つかの例において、NBMPワークフローの部分的な進行は許可されず、従ってワークフロー内のすべてのタスクが、動作するワークフローのためにインスタンス化されることとなり、すべてのタスクは同時に動作することになる。従って、前提となるプラットフォームは、ワークフロー内のすべてのタスクにリソース(計算リソース、メモリ・リソース、帯域幅など)を同時に割り当てることになる。リソースのかなりの配分は、利用可能ではないかもしれないし、又は利用可能ではあるが高コストであるかもしれない。
【0076】
パブリックの、プライベートの、又はハイブリッドのクラウド・サービスを利用することにより、メディアの処理効率を向上させ、メディア・サービスをより迅速かつ低コストで展開し、大規模な配備をもたらす能力を提供するために、本開示の態様は、ワークフロー内のタスクを、一度に1つのステップで及び/又は一度に1つのステップ・グループで動作又は進行することを可能にする方法及び装置を提供する。上記のファンクション又はステップ・バイ・ステップ・モードは、同時にワークフロー全体を実行するのに十分なリソース(例えば、メモリ・リソース、計算リソースなど)がない場合に有利である。本開示において開示される方法及び実施形態は、クラウド・コンピューティングにおける任意の適切なワークフローの実装において、又はワークフローを利用する任意の適切なプラットフォームにおいて使用することが可能である。
【0077】
本開示の態様によれば、バッファリング・ファンクション(例えば、後述するような先入れ先出しファンクション)のようなステップ・モード・ファンクションを、ワークフローに追加することが可能である。ステップ・モード・ファンクションは、1つのワークフロー又は複数のワークフローのうちの複数のワークフローにおけるタスクに対して、ステップ・ベースのオペレーション又はステップ・バイ・ステップのオペレーションを可能にすることができる。従って、複数のステップがデータを処理するために使用される。ステップ・モードを使用すると、ワークフローは別々にタスクを実行することができ、従って、残りのタスクが進行していない間に、ワークフロー内のタスクのサブセットを同時に進行させることができる。例えば、ワークフローは6つのタスクを含む。一例において、タスクのサブセットが1つのタスクを含み、そしてその1つのタスクは、他の5つのタスクが進行していない間に、ランニング状態でデータを処理することができる。他の5つのタスクは、非ランニング状態(例えば、後述する停止状態)にある可能性があり、データを処理しない。別の例では、タスクのサブセットが2つのタスクを含み、そして2つのタスクは、他の4つのタスクが進行していない間に、同時に実行することができる。
【0078】
別の例では、複数のワークフローは、第1ワークフローと第2ワークフローとを含む。第1ワークフローがデータを処理するために進行している場合に、第2ワークフローは非ランニング状態(例えば、後述する停止状態)にあり、データを処理しない。
【0079】
実施形態において、ワークフローのタスクによって処理されるメディア・データは、メディア・データの複数のサブセットを含むことが可能である。本開示の態様によれば、メディア・データは、複数のサブセットのうちの1つ以上のユニットで処理されることが可能であり、ステップ・モード(又はステップ・バイ・ステップ)で処理することが可能である。ステップ・サイズは、複数のサブセットのうちの1つ以上であるとすることが可能である。幾つかの例において、ステップ・サイズは、バッファ・ファンクションが対応するタスクをトリガするイベントを生成する前に、バッファ・ファンクションのために設定されたバッファに格納可能なデータの最大量のような、ステップ・モード・ファンクションの特性によって決定される。
【0080】
最大ステップ・サイズは、メディア・データ全体を表すことが可能であり、メディア・データは1ステップで処理される。一例では、メディア・データは100フレームを含み、10個のサブセットを含む。各サブセットは10個のフレームを含む。メディア・データは、100フレームのステップ・サイズを有する単一ステップで処理されることが可能である。代替的に、メディア・データは、10フレームのステップ・サイズを有する10ステップで処理することが可能である。
【0081】
各タスクは、1つ以上のステップで実行することが可能であり、メディア・データの複数のサブセットのうちの1つを1ステップで処理することが可能である。ワークフロー内のタスクは、異なるステップ・サイズを有することが可能である。タスクは同じステップ・サイズを有しない可能性があるので、特定のタスクは、他のステップが処理できる前又は実行を開始できる前に、複数のステップを実行する可能性がある。例えば、メディア・データは100個のフレーム(又はピクチャ)を含む。タスク(T1)は10個のフレームを1ステップで処理することが可能であり、タスク(T2)は20個のフレームを1ステップで使用する。タスク(T1)の出力は、タスク(T2)の入力に対するデータを提供する。従って、タスク(T1)は(T2)が進行していない間に2つのステップを実行することができる。タスク(T1)が2つのステップを実行し、20個の処理されたフレームを生成した後に、タスク(T1)は一時停止(進行していない)をすることが可能であり、タスク(T2)はタスク(T1)からの20個のフレームを処理することができる。上述の説明では、タスク(T1)はタスク(T1)が停止するまでに2つのステップを実行することが可能であり、タスク(T2)はタスク(T2)が停止するまでに1つステップを実行することが可能である。
【0082】
タスク実行の各ステップにおいて、メディア・データ(例えば100フレーム)の一部分(例えば10フレームのような、複数のサブセットのうちの1つ)を処理することが可能であり、限られた持続時間(又は限定された長さ、限られたサイズ)を有するタスクの出力(タスク出力と言及される)を生成することが可能である。その後、タスクの状態情報(例えば、内部状態及びデータ)を保存又は格納することが可能であり、タスクを一時停止させることが可能である(例えば、後述するようにタスクは一停止状態に遷移する)。幾つかの例では、タスクに割り当てられたリソースを解放することができる。そして、次のタスクが、例えば、停止状態から以前の維持状態へ読み出されることが可能であり、次のタスクの入力時にデータを処理し、限られた継続時間を有する出力を生成するように実行することができる。続いて、次のタスクを一時停止させることが可能であり、次のタスクの内部状態やデータを保存することが可能であり、プロセスは別のタスクに続く。
【0083】
ワークフローのステップ・プロセス(又はステップ・ベース・プロセス)の利点は以下のように説明することができる。ワークフローは、限られたリソース又は削減されたリソースで実行されることが可能であり、なぜならワークフロー内の唯1つ又は少数のタスクのみが同時に動作(又は進行)し、ワークフロー内の他のタスクは一時停止させられるからである。クラウド・サービスを利用するために、トラフィックの多い時間帯や1日のうちの高価な時間帯にワークフローを一時停止することで、運用コストを削減することができる。例えば、ワークフローは、インターネット上における重いトラフィック期間のような高トラフィック時間では停止することが可能である。ワークフローは、完全に直列化される場合があり、例えば、初期タスクを一度に実行してメディア・データ(例えば、ムービー)を処理する一方、ワークフロー内の他のタスクは進行せず、そして、次のタスクに移行してメディア・データ全体を処理する一方、ワークフロー内の他のタスクは進行しない。例えば、ステップのサイズ(又は1つのステップで処理するデータ量)は、メディア・データ全体であるとすることが可能である。従って、初期タスク(T1)は、ムービー全体を1ステップで実行又は処理することができる。種々の計算の複雑性を伴うタスクは、同じハードウェア上で実行することができる。より単純なタスクのステップはより速く実行することが可能であるが、より複雑なタスクのステップの実行はより多くの時間を要する可能性がある。
【0084】
本開示の態様は、上述のステップ・モデルに基づいて、ファンクション及び実行タスクのためのチャンク処理モード又はステップ・モデルを提供する。チャンクは、10フレームのような、1ステップで処理されるデータの単位を指すことが可能である。ファンクション又は対応するタスクは、チャンク処理モードをサポートするように、例えば、ある程度のデータ量を処理するように設計することができる。
【0085】
開示の態様は、バッファリング・ファンクション(例えば、先入れ先出し(FIFO)ファンクション又はNBMP FIFOファンクション)を説明する。バッファは、バッファリング・ファンクション用に設定することが可能であり、例えばFIFOバッファはFIFOファンクション用に設定することが可能である。実施形態において、バッファリング・ファンクション(例えば、FIFOファンクション)は、以下の特性を有するように定めることが可能である。(i)バッファ長又はサイズ。これは、シングル入力及びシングル出力の所定長、又はFIFOキューのFIFO長のような設定成パラメータによって定められる。(ii)バッファリング・ファンクションは、以下に説明するように、エンプティ・イベント及びフル・イベントのようなイベントをサポートすることが可能である。エンプティ・イベントは、バッファ(例えば、FIFOキュー)が空の場合(例えば、バッファに格納されたデータが対応するタスクによって読み込まれるか、又は対応するタスクに提供される場合)に生じる可能性がある。バッファ(例えば、FIFOキュー)が一杯の場合、フル・イベントが生じる可能性がある。幾つかの例において、バッファリング・ファンクション(例えば、FIFOファンクション)は、X%(又は%X)イベントをサポートすることができる。Xは、0より大きく100以下の値のような設定パラメータであるとすることが可能である。一例において、Xは100より小さく、X%イベントは部分的なフル・イベントと言及することが可能である。X%イベントは、バッファ(例えば、FIFOキュー)がX%フルである場合に生じることが可能である。バッファがX%フルである場合、イベント(又はX%イベント)を生成することが可能である。Xに対する1つ又は複数の値が、コンフィギュレーション・パラメータとして設定されることが可能である。バッファリング・ファンクション(例えば、FIFOファンクション)を実装するバッファリング・タスク(例えば、FIFOタスク)は、
図4Aを参照して説明したのと同じタスク・ライフサイクルを有することが可能であり、詳細な説明は簡略化の目的で省略される。
【0086】
バッファリング・ファンクションの利点は以下のように説明することができる。バッファリング・ファンクション(例えば、FIFOファンクション)は、適切な任意の適切なプラットフォームで実装することが可能なシンプルなファンクションであり、そのプラットフォームは、バッファ又はキュー(例えば、FIFOキュー)を提供し、キャッシュ・メモリ、ランダム・アクセス・メモリ、長期ストレージ(ソリッド・ステート及びハード・ディスクなど)を含む。イベント(例えば、エンプティ・イベント、フル・イベント、部分的なフル・イベント)は、バッファの空性、充填性及び部分的な充填性に基づいて生成することが可能である。従って、バッファリング・タスクは、バッファリング・タスクの状況を、ワークフロー・マネージャ(103)に効率的に通知することができる。
【0087】
開示の態様によれば、ワークフローは、1つ以上のバッファリング・タスク(例えば、FIFOタスク)をワークフローに追加することによって、ステップ・イネーブル化されたワークフロー(又は、ステップ・ベースのワークフロー、ステップ・バイ・ステップのワークフロー、ステップ進行可能なワークフロー)に変換することが可能である。ステップ・イネーブル化されたワークフローは、ステップ・モード・オペレーションで動作することが可能である。バッファリング・タスクは、2つのタスクの間に挿入することが可能である。その2つのタスクは、タスクAとタスクBを含むことが可能であり、タスクAの出力がタスクBの入力に提供される。
【0088】
図2A-
図2Bを参照すると、ワークフロー(200A)はレギュラー・ワークフロー(200A)と言及することが可能である。一例において、レギュラー・ワークフロー(200A)は、ステップ・ベースのワークフローではない。レギュラー・ワークフロー(200A)は、少なくとも1つのバッファリング・タスクをレギュラー・ワークフロー(200A)に挿入することによって、ステップ・ベースのワークフロー(例えば、ワークフロー(200B))に変換することが可能である。一般に、ステップ・ベースのワークフローのタスクは、処理対象のデータをタスクに提供する第1数の入力バッファリング・タスクと、タスクによって処理されるデータを格納する第2数の出力バッファリング・タスクとを有することが可能である。第1数は、0、1、2等のような適切な任意の非負整数であるとすることが可能である。第2数は、0、1、2等のような適切な任意の非負整数であるとすることが可能である。幾つかの例では、
図2Bに示すように、ステップ・ベースのワークフローへの各ワークフロー入力(例えば(201))に対して、バッファリング・タスクは提供されていない。幾つかの例では、ステップ・ベースのワークフローへのワークフロー入力に対して、少なくとも1つのバッファリング・タスクが提供される。幾つかの例では、
図2Bに示すように、ステップ・ベースのワークフローからの各ワークフロー出力(例えば、(209)又は(210))に対して、バッファリング・タスクは提供されていない。幾つかの例では、ステップ・ベースのワークフローからのワークフロー出力に対して、少なくとも1つのバッファリング・タスクが提供される。
【0089】
図2Bに示す例では、それぞれのリンク(202)-(208)に対してバッファリング・タスク(例えば、FIFOタスク(231)-(237))がそれぞれ設けられている。例えば、タスク(T1)はワークフロー入力に接続され、入力バッファリング・タスクには接続されていない。タスク(T1)は、1つの出力バッファリング・タスク(231)に接続される。タスク(T2)は、1つの入力バッファリング・タスク(231)と、2つの出力バッファリング・タスク(232)-(233)とに接続される。タスク(T5)は、2つの入力バッファリング・タスク(233)及び(235)に接続され、1つの出力バッファリング・タスク(237)に接続される。
【0090】
各リンク(例えば、リンク(202))は、ワークフロー(200B)の2つのタスク(タスク(T1)-(T2))間の接続である。リンク(例えば(202))は、2つのタスクのうちの1つ(例えば(T1))から、別のタスク(例えば(T2))へのデータ転送を表現することができる。バッファリング・タスク(231)-(237)は、上述のバッファリング・ファンクションからインスタンス化することが可能である。一例において、バッファリング・タスク(231)-(237)は、FIFOファンクションからインスタンス化されるFIFOタスクを含む。
【0091】
一般に、バッファリング・タスクに接続されるタスク・ペア(又は2つのタスク)は、バッファリング・タスクに関する「接続元(connect from)」タスクと「接続先(connect to)」タスクとを含むことが可能である。バッファリング・タスク(231)及びバッファリング・タスク(231)によって接続されるタスク・ペア(T1)-(T2)を参照すると、タスク(T1)はバッファリング・タスク(231)の「接続元」タスクと呼ばれ、タスク(T2)はバッファリング・タスク(231)の「接続先」タスクと呼ばれる。ワークフロー(200B)は、7つのバッファリング・タスク(231)-(237)に対応する7つのタスク・ペアを含む。
【0092】
(「接続元」タスクと「接続先」タスクとを含む)タスク・ペア間にバッファリング・タスクを追加することは、「接続元」タスクを実行して出力を生成し、バッファリング・タスクのために設定されるバッファを満たす間に、「接続先」タスクは進行しないことを許容することができる。「接続元」タスクは、バッファがフル又は部分的にフルになるまで(例えば、X%フル)、「接続元」タスクは「接続元」タスクの入力に接続されたバッファから、処理に十分なデータを有することが可能である。
【0093】
タスク(例えば(T1))が、ワークフロー(200B)内の他のタスク(例えば(T2)-(T6))から独立して進行できる時間長は、タスクの入力と出力に接続されるバッファリング・タスクによって決定されることが可能である。タスク入力に接続されるバッファリング・タスクは、入力バッファリング・タスク(又は入力バッファ)と言及することが可能であり、タスク出力に接続されるバッファリング・タスクは出力バッファリング・タスク(又は出力バッファ)と言及することが可能である。一般に、バッファ又はキューのサイズ(又は上述のバッファ長)及び充満性のレベル(X%で記述されるようなもの)は、タスクが実行できるステップの最大サイズ(又は最大ステップ・サイズ)を定めることが可能である。例えば、バッファ長が10フレームであり、充満性のレベルが80%である場合、ステップの最大長又は最大ステップ・サイズは8フレームである。
【0094】
一例において、ワークフロー(200B)におけるタスク(例えば(T2))に関し、タスクの入力バッファ(例えば(231))が空ではなく、タスクの出力バッファ(例えば(232)-(233))が空である場合、タスク(例えば(T2))はワークフロー(200B)内の他のタスク(例えば(T1)及び(T3)-(T6))とは独立して実行することが可能である。一例において、タスクの入力バッファがいずれも空ではなく、タスクの出力バッファのいずれもX%フルではない場合(ここで、Xは100未満の事前に設定された値である)、タスク(例えば(T2))は、ワークフロー(200B)内の他のタスク(例えば(T1)及び(T3)-(T6))とは独立して実行することが可能である。
【0095】
一例において、ステップ・イネーブル化されたワークフロー内の1つ以上のタスクはデータを処理するように進行することが可能である一方、ステップ・イネーブル化されたワークフロー内の残りのタスクは進行しない。
図2Bを参照すると、バッファリング・タスク(231)が省略された場合、タスク(T1)-(T2)は同時にデータを処理するように進行することが可能である一方、タスク(T3)-(T6)は進行せず、非ランニング状態(例えば、停止状態)にある。
【0096】
レギュラー(非ステップ・ベース)ワークフローをステップ・ベースのワークフローに変換する利点は以下のとおりである。変換は比較的シンプルであり、ワークフローのトポロジー又は複雑性に依存せず、従って、教師無し方式で実行することが可能である。
【0097】
各バッファリング・ファンクション又はバッファリング・タスクのバッファ長は独立に定めることが可能である。従って、ワークフロー内のバッファリング・タスクのバッファ長は異なる可能性がある。各タスクのステップ・サイズは別々に選択することが可能である。従って、ワークフロー(200B)におけるタスク((T1)-(T6))のステップ・サイズは異なる可能性がある。
【0098】
図3は、本開示の実施形態によるステップ・ベースのワークフローにおけるタスク(301)の例を示す。タスク(301)は、対応するファンクションからインスタンス化されることが可能である。一例において、ワークフローによって処理されるべきメディア・データは、メディア・データの複数のサブセットを含むことが可能である。1つのステップで、タスク(301)は、ステップ・サイズ(302)を有するメディア・データの複数のサブセットのうちの1つを処理することができる。一例において、タスク(301)がメディア・データの複数のサブセットのうちの1つを処理する場合に、ワークフロー内の他のタスクは進行していない。別の例では、タスク(301)がメディア・データの複数のサブセットのうちの1つを処理する場合に、ワークフロー内の1つ以上の他のタスクが同時に進行する一方、ワークフロー内の残りのタスクは進行しない。タスク(301)は、ステップ・サイズ(302)を有するメディア・データの複数のサブセットのうちの別の1つを別のステップで処理することができる。
【0099】
タスク(301)は、ビデオ・ステッチのような適切な任意のメディア処理方法を実現することができる。例えば、第1カメラからのビデオ1及び第2カメラからのビデオ2は、メタデータに基づいてタスク(301)によってスティッチングされることが可能である。タスク(301)は、スティッチングされたビデオであるビデオ3及びビデオ4を出力することができる。ビデオ4は、インデキシングのような異なるオペレーションに対応することが可能である。10フレームというステップ・サイズを有するステップ・モードで実行されるタスク(301)を含むステップ・ベースのワークフローでは、ビデオ1からの10フレームとビデオ2からの10フレームとが各ステップでスティッチングされて、ビデオ3の10フレームを出力することが可能である。
【0100】
図4Aを参照して上述したように、処理タスク又はタスク(例えば、メディア処理タスク)は、様々な状態間を遷移することができる。タスク・ライフサイクルにおける様々な状態は、インスタンス化された状態(401)、アイドル状態(402)、ランニング状態(403)、エラー状態(404)、廃止状態(405)を含むことが可能である。
【0101】
図5は、本開示の実施形態による処理タスク又はタスク(例えば、メディア処理タスク)の例示的なタスク・ライフサイクル(500)を示す。一例において、タスク・ライフサイクル(500)は、拡張されたタスク・ライフサイクル(例えば、NBMP拡張タスク・ライフサイクル)(500)である。本開示の態様によれば、停止状態(406)(灰色で示されている)を、拡張されたタスク・ライフサイクル(500)に追加することが可能である。停止状態(406)に関連する新しい遷移は、破線の矢印で示されている。
【0102】
停止状態(406)では、タスクは如何なるオペレーションもストップし、入力を受け付けず、出力も生成しない。更に、停止状態(406)では、タスクは、タスクの状態情報(例えば、内部状態、メモリ)を保存(例えば、記憶)する。一般に、停止状態(406)にあるタスクは、ランニング状態(403)、エラー状態(404)、廃止状態(405)のような他の状態に遷移することができる。タスクは、(例えば、onPause遷移により)ランニング状態(403)から停止状態(406)へ状態を変更することができる。タスクは、(例えば、OnContinue遷移により)停止状態(406)からランニング状態(403)へ状態を変更することができる。タスクが停止状態(406)にある間にエラーが発生した場合、(例えば、OnError遷移により)タスクの状態はエラー状態(404)に変更することができる。停止状態(406)のタスクは、(例えば、onTermination遷移により)廃止状態に変更することができる。
【0103】
タスク・ライフサイクル(400)を拡張タスク・ライフサイクル(500)に拡張する利点は:遷移(
図5では破線矢印で示される4つの遷移)が限定された1つの追加的な状態(停止状態)が追加されており、従って、顕著な複雑性は追加されないことである。
【0104】
図6は、本開示の実施形態によるプロセス(600)を要約したフロー・チャートを示す。プロセス(600)は、適切な任意の数のワークフロー入力及び適切な任意の数のワークフロー出力を有する適切な任意のステップ・イネーブル化されたワークフローのオペレーションに適用することができる。ステップ・イネーブル化されたワークフローは、適切な任意の数の処理タスクと、2つのタスクを接続する適切な任意のリンクとを含むことが可能である。ステップ・イネーブル化されたワークフローは、バッファリング・タスク(例えば、FIFOタスク)を含むことが可能であり、バッファリング・タスクは、それぞれのリンクで提供されることが可能である。ステップ・イネーブル化されたワークフローの処理タスクのステップ・サイズは、バッファリング・タスクによって決定することが可能である。
【0105】
一例において、ステップ・イネーブル化されたワークフローはワークフロー(200B)である。タスク(T1)-(T6)の各々は、
図5を参照して説明したタスク・ライフサイクル(500)、様々な状態(401)-(406)、及び対応する遷移を有することが可能である。例えば、ステップ・イネーブル化されたワークフロー(200B)はアイドル状態(412)にあり、バッファリング・タスク(例えば、FIFOタスク(231)-(237))のバッファ(例えば、FIFOバッファ又はFIFOキュー)は空である。一例では、処理される入力データ(例えば、メディア・データ)は、1000フレームを含む。ステップ・サイズは10フレームである。従って、入力データは、入力データの複数のサブセットに分割され、ここで、各サブセットのサイズは10フレームである。
【0106】
ワークフロー(200B)のステップ・バイ・ステップ(又はステップ・ベース、ステップ・イネーブル)のオペレーションは、以下のようにして実現することが可能である。適切な任意のデータ処理システム(例えば、NBMPシステム)は、ワークフロー(200B)のステップ・バイ・ステップ・オペレーションを実現することができる。以下の説明は、データ処理システム(100)について与えられており、適切な任意のデータ処理システム(例えば、NBMPシステム)に適切に適合させることができる。
【0107】
(S610)において、初期タスクが、例えばワークフロー・マネージャ(103)によって識別されることが可能である。初期タスクの各入力は、ワークフロー入力であるとすることが可能である。例えば、初期タスクの全ての入力は、データ・ソース(例えば、メディア・ソース)(111)に接続される。初期タスクは、Ti0,Ti1,...,TiNとしてラベル付けすることが可能であり、ここで、Nは非負の整数である。
図2Bを参照すると、ワークフロー(200B)で識別される初期タスクは、タスク(T1)を含み、ここで、Ti0は(T1)であり、Nは0である。
【0108】
(S620)において、識別された初期タスクに関し、Ti0は、Ti1,...,TiNが続く入力データのサブセット(例えば、10フレーム)を処理するために進行を開始することができる。初期タスクの各々について、初期タスクは、例えば、それぞれのバッファリング・タスク(例えば、FIFOタスク)の対応する出力バッファ(例えば、FIFOキュー)が一杯になるまで、1つのステップを実行することができる。ここで、初期タスクは(T1)である。
【0109】
ワークフロー・マネージャ(103)はリクエストを(T1)に送り、タスク(T1)をランニング状態(403)に移動させることが可能である。
【0110】
(T1)は、例えば、入力データ(例えば、メディア・データ)の10フレームを処理し、例えば第1閾値まで、出力バッファリング・タスク(231)を充填するように進行することが可能である。出力バッファに格納されたデータ量が第1閾値に等しい場合、出力バッファ・タスクはイベントを生成し、通知をワークフロー・マネージャ(103)に送ることができる。出力バッファリング・タスク(231)がX%フルである場合、出力バッファリング・タスク(231)は、X%FULLイベントを発行又は生成し、X%フル・イベントの通知をワークフロー・マネージャ(103)に送ることができる。第1閾値は、バッファ長とパラメータXに基づいて決定することができる。例えば、バッファ長は20フレームであり、Xは50であり、そして第1閾値は10フレームである。処理タスクのステップ・サイズは、バッファリング・タスクの閾値に基づいて決定することができる。
【0111】
上述したように、X%フルは、出力バッファリング・タスク(231)が完全にフル又は部分的にフルであることを示すことが可能であり、ここで、Xは100以下である。一例において、出力バッファリング・タスク(231)が完全にフル(例えば、X=100)である場合、出力バッファリング・タスク(231)は、FULLイベントを発行し、通知をワークフロー・マネージャ(103)に送ることができる。別の例において、出力バッファリング・タスク(231)が部分的にフルである(例えば、Xが100未満である)場合、出力バッファリング・タスク(231)は、部分的なFULLイベントを発行し、通知をワークフロー・マネージャ(103)に送ることができる。FULLイベントと部分的なFULLイベントは、同一であるか、又は異なる可能性がある。一例において、部分的なFULLイベントはFULLイベントと同一であり、従って出力バッファリング・タスク(231)がX%フルである場合に、FULLイベントが生成される。
【0112】
ワークフロー・マネージャ(103)は、リクエストをタスク(T1)に送り、タスク(T1)をランニング状態(403)から停止状態(406)に移動させることができる。停止状態(406)では、タスク(T1)の状態情報(例えば、内部ファンクションの状態や値)を維持(格納)することができる。
【0113】
(S620)は、初期タスクの各々に対して繰り返すことが可能である。(T1)の上記の説明は、他の初期タスクに適切に適合させることが可能である。
【0114】
(S630)において、ワークフロー・マネージャ(103)は後続のタスクを識別することが可能であり、ここで、後続のタスクのすべての入力は空でないバッファリング・タスク(例えば、FIFOタスク)に接続されている。後続のタスクは、Tj0,Tj1,...,TjMのようにラベル付けすることが可能であり、ここで、Mは非負の数である。
図2Bを参照すると、空でないバッファリング・タスクは、タスク(T1)によって処理される入力データのサブセットを格納するバッファリング・タスク(231)を含む。(S630)で識別される後続のタスクは(T2)を含み、従ってTj0=(T2)であり、Mは0である。
【0115】
(S640)において、識別された後続のタスクに関し、Tj0は、Tj1,...,TjMが続く入力データのサブセットを更に処理するように進行を開始することができる。後続のタスクの各々について、対応する出力バッファリング・タスク(例えば、各FIFOタスクのFIFOキュー)がフルになるまで、後続のタスクを進行することができる。ここで、後続のタスクは(T2)である。
【0116】
ワークフロー・マネージャ(103)はリクエストを(T2)に送り、タスク(T2)をランニング状態(403)に遷移させることができる。
【0117】
(T2)は、例えば、(T1)によって処理された10フレームを更に処理し、出力バッファリング・タスク(例えば、(232)-(233))を、例えば第2閾値まで充填するように進行することが可能である。
【0118】
出力バッファリング・タスクの1つ(例:(232)又は(233))がX%フルである場合、出力バッファリング・タスクの1つは、上記のようにX%FULLイベントを発行又は生成し、X%フル・イベントの通知をワークフロー・マネージャ(103)に送ることができる。
【0119】
ワークフロー・マネージャ(103)は、リクエストをタスク(T2)に送り、タスク(T2)をランニング状態(403)から停止状態(406)に遷移させることができる。停止状態(406)では、タスク(T2)の内部情報(内部ファンクションの状態や値など)を維持することができる。
【0120】
(S640)は、後続の各タスクに対して繰り返すことが可能である。(T2)に対する上記の説明は、他の後続のタスクに適切に適合させることが可能である。
【0121】
(S650)において、処理対象の残りの処理タスクが後続タスクであるかどうかを判定することが可能である。上述のように、後続タスクのすべての入力は、空でないバッファリング・タスクである。残りのタスクは後続タスクであると判定された場合、プロセス(600)は(S630)に戻り、新たに識別された後続タスクに対して(S630)及び(S640)が繰り返される。残りのタスクは後続タスクでないと判定された場合、プロセス(600)は(S660)に進む。
【0122】
例えば、タスク(T3)は新たに識別された後続タスクであり、(S640)がタスク(T3)に対して繰り返される。その後、(S650)と(S630)が繰り返され、タスク(T4)-(T5)は新たな後続タスクとして識別され、(S640)が(T4)-(T5)に対して繰り返される。最終的に、(T6)が識別され、(S640)が(T6)に対して繰り返される。
【0123】
一般に、ワークフロー(200B)内のすべてのタスクが進行するまで、例えば10フレームを処理するまで、空でないバッファリング・タスクに接続された入力を有する残りの後続タスクに対して、(S630)及び(S640)を反復することが可能である。その後、残りのタスクは後続タスクであると判断されず、プロセス(600)は(S660)に進む。
【0124】
(S660)において、入力データの処理が残っているかどうかが判定される。処理されるべき入力データが確認されない場合、プロセス(600)は(S699)に進み、終了する。処理されるべき入力データが確認されると、プロセス(600)は(S610)に戻り、入力データの別のサブセット(例えば、別の10フレーム)について、(S610),(S620),(S630),(S640)及び(S650)を反復する。
【0125】
プロセス(600)は適切に適合させることができる。プロセス(600)におけるステップは、修正及び/又は省略されることが可能である。追加的なステップを追加することが可能である。適切な任意の実行順序を使用することができる。上述の例において、1つのステップで、1つのタスクが実行されると、ワークフロー(200B)内の他のタスクは進行していない(例えば、停止状態(406)にある)。別の例において、1つ以上のタスクを1つのステップで同時に実行する一方、ワークフロー内の他のタスクを進行させいないことが可能である(例えば、停止状態(406))。ワークフロー(200B)内のタスクは、一度に実行され、その後、停止状態(406)に移行することが可能である。続いて、別のタスクを別のステップで実行することができる。代替的に、ワークフロー(200B)内のタスクは、停止状態(406)に遷移する前に、連続的なステップで実行することができる。
【0126】
プロセス(600)及び/又はステップ・バイ・ステップ・ワークフロー(200B)の利点は、以下のように説明することができる。データ処理システム(例えば、NBMPシステム)(100)(例えば、ワークフロー・マネージャ(103))が処理(600)を実行するためのロジックはシンプルである。伝搬モデルは、ワークフロー入力から開始し、各タスクの1つのステップを実行し、次いでタスクの出力に接続されたタスクを実行することができる。プロセス(600)及び/又はワークフロー(200B)は、複数のステップでワークフローの出力を生成することができる。ステップはイベントによってトリガされる可能性があり、従ってワークフロー管理は非常に効率的である。
【0127】
図5に示すように、停止状態(406)をデータ処理オペレーション(例えば、NBMPオペレーション)に追加することができる。例えば、一般記述子は、タスクの状態を記述するための状態パラメータを有する。状態パラメータは、停止状態(406)を記述するために、値「停止した(paused)」又は「停止する(pause)」を使用することができる。
【0128】
タスクを停止状態(406)に設定するために、ワークフロー・マネージャ(103)は、「pause」又は「paused」に設定された状態パラメータとともに、CreateTask又はUpdateTaskを使用することが可能である。タスクが進行している場合に(例えば、ランニング状態(403)において)、タスクは停止状態(406)に移行することができる。タスクが進行していない場合(例えば、アイドル状態(402)にある場合)、タスクは、例えば、アイドル状態(402)からランニング状態(403)へ移行し、その後にランニング状態(403)から停止状態(406)に移行することが可能である。
【0129】
停止状態(406)は、クラウド・プラットフォームにより管理することが可能であり、クラウド・リソース・マネージャは、例えばタスクが停止状態(406)にある場合に、タスクの内部状態やデータを格納することができる。
【0130】
一例において、停止状態が、ワークフローのワークフロー・ライフサイクルに追加される。ワークフロー・ライフサイクルにおける様々な状態は、
図4Bで説明されたように、インスタンス化された状態(411)、アイドル状態(412)、ランニング状態(413)、エラー状態(414)、及び廃止状態(415)を含むことができる。更に、様々な状態は、停止状態を含むことが可能である。一例において、停止状態とランニング状態(413)、エラー状態(414)、及び廃止状態(415)のうちの1つとの間で、ワークフローが遷移する。一例において、ワークフローが停止状態にあるとき場合に、ワークフローの状態情報を格納することが可能である。
【0131】
バッファ長(例:FIFO長)は以下に説明するように決定することができる。バッファ長は、バッファリング・ファンクションの設定パラメータである。一例において、バッファ長は、バッファリング・ファンクションの唯一の設定パラメータである。バッファ長がゼロである場合、バッファリング・ファンクションに対応するバッファリング・タスクを介して接続される2つのタスクは、ステップ・モードで動作することはできない。一例において、バッファ長がゼロである場合、FIFOタスクを介して接続される2つのタスクは、同時に、又は連続モードで動作する。バッファ長が無限大である場合、バッファリング・タスクに接続されるタスクは、第1ステップで動作し、第1ステップでデータを完全に処理することができる。その後、バッファリング・タスクからつながっている別のタスクは、第2ステップで動作することができる。
【0132】
様々な例において、バッファ長はゼロから無限大になるまでの間で変化する。バッファ長の選択は、各タスクの機能性、各タスクにおけるデータ処理の粒度、出力を生成するタスクの入力の適切な最小サイズ、(ワークフロー及びワークフロー内のタスクを配備する前提システムにおけるメモリ、ストレージ、及び/又はバッファの)可用性、及び/又は類似のものを含む、様々な要因に依存する可能性がある。
【0133】
ステップ・ベースのワークフローの上記の設計は、ワークフロー全体に適用することが可能であり、例えば、ワークフローは、ワークフロー入力又はワークフロー出力においてバッファリング・タスクを実装することによって、ステップ・バイ・ステップに実行することが可能である。上記のアプローチの利点は、ワークフローの個々のタスクをステップ・イネーブルにすることはできないかもしれないが、ワークフローをステップで処理することは可能な点である。従って、ワークフローはステップ毎に実行することが可能である。従って、プラットフォーム・リソースがセッション全体を1ステップで実行するために連続的に利用可能ではない場合、1つ以上のワークフローは、残りのワークフローが進行していない間に(例えば、停止状態にある間に)、進行することが可能である。ワークフローがマルチ・ワークフロー・セットアップの一部であり、各ワークフローがステップ・バイ・ステップで実行することが可能な場合、すべてのワークフローが同時に進行するわけではない。
【0134】
図2Cは、本開示の実施形態によるワークフロー(200C)の一例を示す。ワークフロー(200C)は、処理タスク(複数のタスク)(T4)-(T9)を含む。一例において、処理タスク(T4)-(T9)のうちの2つの間にバッファリング・タスクは挿入されておらず、処理タスク(T4)-(T9)はデータを処理するために同時に進行することが可能であり、ステップ・イネーブルではない。1つ以上のバッファリング・タスクを、ワークフロー入力及び/又はワークフロー出力に挿入することが可能であり、従って、ワークフロー(200C)は、ステップ・モードで又は一度に1つのステップで実行することが可能である。ステップ・サイズは、X%フルネスで定義されるようなX及びバッファ長に基づいて決定されることが可能である。一例において、バッファリング・タスク(271)がワークフロー入力(255)で提供され、バッファリング・タスク(272)がワークフロー出力(263)で提供される。一例において、ワークフロー(200C)は、(i)及び(ii)のうちの1つの条件が充足されるまで、データを処理するように動作し、(i)は、バッファリング・タスク(271)に格納されたデータがワークフロー(200C)に提供されること(例えば、バッファリング・タスク(271)は空であること)であり、(ii)はバッファリング・タスク(272)に格納されたデータの量が、バッファリング・タスク(272)のために設定された閾値に等しいことである。閾値は、バッファ長及びパラメータXに基づいて決定することが可能である。一例において、ステップ・サイズは閾値に合致する。ワークフロー(200C)に対する上記の説明は、ワークフローがステップ・イネーブル・タスクを含む場合にも適切に適合させることが可能である。
【0135】
図2Dは、本開示の実施形態による複数のワークフロー(280)の一例を示す。複数のワークフロー(280)は、ワークフロー(200C)及びワークフロー(200D)を有するワークフローのカスケードを含むことが可能である。ワークフロー(200C)は、
図2Cで説明されている。ワークフロー(200D)は、入力データをタスク(T1)に提供するワークフロー入力(251)と、入力データをワークフロー(200C)に提供するワークフロー出力(255)とを伴う処理タスク(T1)-(T3)を含む。従って、ワークフロー(200D)のワークフロー出力(255)は、ワークフロー(200C)のワークフロー入力(255)である。
【0136】
バッファリング・タスク(271)は、ワークフロー(200C)と(200D)の間に挿入されており、従って複数のワークフロー(280)がステップ・モードで動作し、ここで、ワークフロー(200D)がデータを処理する間に、ワークフロー(200C)は非ランニング状態にあり、データを処理するようには進行しない。
【0137】
バッファリング・タスクがワークフロー入力又はワークフロー出力で提供されている場合、ワークフローはステップ・モードで実行することが可能である。ワークフローが進行することが可能な(又はワークフロー内のタスクが進行することが可能な)ステップ・サイズは、閾値、例えばバッファリング・タスク用に設定されたバッファに格納することが可能なデータの最大量、に基づいて決定することが可能である。閾値は、バッファ長とX%におけるパラメータXに基づいて決定することが可能である。
【0138】
開示の態様によれば、ステップ動作できないタスクを含むレギュラー・ワークフロー(又はステップ・イネーブル化されていないワークフロー)を、シンプルなバッファリング・ファンクション(又はバッファリング・タスク)を使用することによって、ステップ動作可能なタスクを含むステップ動作可能なワークフローに変換することが可能である。バッファリング・ファンクション又はタスクは、すべての適切なプラットフォームで実装できるように効率的である可能性がある。各バッファリング・タスクに対するバッファ長の選択は、柔軟であるとすることが可能であり、従って、各タスクに対するステップ・サイズは、高い柔軟性で設計することが可能である。イベント(例えば、フル・イベント)駆動のステップ・プロセスは、設計を簡素化し、ワークフローの管理を効率的にすることが可能である。タスクの実行ごとに1つのステップを通じてワークフローを伝搬してゆくワークフロー・アルゴリズムは、シンプルである。ワークフローの出力は、複数のステップで生成することが可能である。タスク・ライフサイクル(400)から拡張タスク・ライフサイクル(500)への拡張は最小限であり、従って、拡張により追加される複雑性は最小限である。バッファリング長は、バッファ・タスクの設定の一例として使用されているが、他のユニットが使用されてもよい。
【0139】
開示の態様によれば、ワークフロー入力、ワークフロー出力、又はワークフロー内の2つのタスク間に、バッファリング・タスクが提供される場合、ワークフローはステップ・モードで実行することが可能である。ワークフローは、ステップ・バイ・ステップで実行することが可能であり、従って、ワークフローは、データがワークフローに入力される場合に、データ(例えば、メディア・データ)を処理するために連続的には進行しない。その代わりに、ワークフローは、第1ステップでデータの第1サブセットを処理することが可能である。データの処理された第1サブセットを出力した後、ワークフローは、第2ステップでデータの第2サブセットを処理することが可能である。各ステップでデータを処理するためにワークフローが実行できる(又はワークフロー内のタスクが実行できる)ステップ・サイズは、閾値、例えばバッファリング・タスク用に設定されたバッファに格納することが可能なデータの最大量、に基づいて決定することが可能である。閾値は、バッファ長とX%におけるパラメータXに基づいて決定することが可能である。
【0140】
ステップ・バイ・ステップのワークフローは、適切な任意の方法を用いて達成することが可能である。一例において、ワークフローは、
図2Bに示すように、ワークフロー内のタスク間に提供されるバッファリング・タスク(例えば、FIFOタスク)を含むことが可能である。ワークフロー内の1つ以上のタスクは、他のタスクが非ランニング状態(例えば、停止状態)にある間に、同時にランニング状態で実行することが可能であり、従って、すべてのタスクを同時に実行する際に使用されるリソース(例えば、計算リソース、メモリ・リソース)を削減することができる。
【0141】
開示の態様によれば、ワークフローのワークフロー情報は、処理回路により受信されることが可能である。ワークフロー情報に基づいて、ワークフローは、入力データを処理するために生成されることが可能である。ワークフローは、複数の処理タスクと第1バッファリング・タスクとを含む。複数の処理タスクは、第1処理タスク及び第2処理タスクを含むことが可能である。第1処理タスクは、ランニング状態に入れられることが可能であり、入力データのサブセットが第1の処理タスクによって処理され、ランニング状態では、入力データのサブセットが、第1処理タスクにより処理され、第1被処理サブセット・データとして第1バッファリング・タスクへ出力される。一例では、以後、第1処理タスクは、第1バッファリング・タスクに格納された第1被処理サブセット・データの量が第1閾値に等しいことに基づいて、ランニング状態(403)から停止状態(406)に遷移させられることが可能である。第1処理タスクの状態情報は、停止状態(406)において記憶することが可能である。第1処理タスクが停止状態(406)に遷移した後に、第2処理タスクをランニング状態に入れることが可能であり、ランニング状態では、第1バッファリング・タスクに格納された第1被処理サブセット・データが第2処理タスクによって処理される。一例では、入力データのサブセットは、入力データの複数のサブセットのうちの1つである。
【0142】
実施形態において、ランニング状態にある第2処理タスクは、処理された第1被処理サブセット・データを第2被処理サブセット・データとして第2バッファリング・タスクに出力することが可能である。更に、第2被処理タスクは、(i)第2バッファリング・タスクで格納された第2被処理サブセット・データの量が第2閾値に等しいこと、及び(ii)第1バッファリング・タスクで格納された第1被処理サブセット・データの量が第2処理タスクに提供されたことのうちの1つに基づいて、ランニング状態から停止状態へ遷移させることが可能である。第2処理タスクの状態情報は停止状態において保存されることが可能である。
【0143】
第1バッファリング・タスクは、第1バッファリング・タスクで格納される第1被処理サブセット・データの量が第1閾値に等しいことを示すイベントを生成するように構成することが可能である。一例において、第1バッファリング・タスクは、FIFOバッファを用いて設定されるFIFOタスクである。FIFO長は第1閾値以上であるとすることが可能である。FIFOタスクは、FIFOタスクで格納された第1被処理サブセット・データの量が第1閾値に等しいことを示すイベント(例えば、フル・イベント)を生成するように構成されることが可能である。FIFOタスクは、FIFOタスクで格納された第1被処理サブセット・データの量が第2処理タスクに提供されたことを示す別のイベント(例えば、エンプティ・イベント)を生成するように構成されることが可能である。
【0144】
実施形態において、ワークフローは、第1バッファリング・タスクを含む複数のバッファリング・タスクを含む。複数の処理タスクの各入力は、入力データのうちの1つ、及び複数のバッファリング・タスクのうちの1つ以上、からのものであり、且つ複数の処理タスクのうちの1つのみが、任意の時点でランニング状態にあることを許容されている。一例において、入力データは、入力データのサブセットと、入力データの別のサブセットとを含む。入力データのサブセットは、複数の処理タスクにより順に処理することが可能である。入力データのサブセットが複数の処理タスクにより処理された後に、入力データの他のサブセットを、複数の処理タスクにより順に処理する間に、複数の処理タスクにおける残りの処理タスクは停止状態にあるとすることが可能である。
【0145】
別の例では、ワークフロー内のタスク間にバッファリング・タスクは提供されていない。その代わりに、
図2C-2Dに示すように、ワークフローのワークフロー入力及びワークフロー出力に、バッファリング・タスクが提供される。従って、このワークフローは、ステップ・バイ・ステップで実行することが可能であり、比較的短時間の間(例えば、ステップを実行する時間の間)リソースを占有する可能性があり、ステップ間で、より高い優先順位を有する他のワークフロー/タスクのためにリソース(例えば、計算リソース、メモリ・リソース)を解放することができる。
【0146】
開示の態様によれば、複数のワークフローのワークフロー情報は、処理回路により受信することが可能である。ワークフロー情報に基づいて、入力データを処理するために複数のワークフローを生成することが可能である。複数のワークフローのうちの少なくとも1つは複数の処理タスクを含む。複数のワークフローは、第1ワークフローと第2ワークフローとを含むことが可能である。第1ワークフローはランニング状態に入ることが可能であり、ランニング状態では、入力データのサブセットが、第1ワークフローにより処理され、第1被処理サブセット・データとしてバッファリング・タスクへ出力される。バッファリング・タスクで格納された第1被処理サブセット・データの量が閾値に等しいことに基づいて、第1ワークフローを、ランニング状態から停止状態へ遷移させることが可能である。第1ワークフローの状態情報は停止状態(406)において保存することが可能である。第1ワークフローが停止状態へ遷移した後に、第2ワークフローはランニング状態に入ることが可能であり、ランニング状態では、第1バッファリング・タスクで格納された第1被処理サブセット・データが第2ワークフローにより処理される。一例において、入力データのサブセットは、入力データの複数のサブセットのうちの1つである。第1バッファリング・タスクに関する上記の説明は、バッファリング・タスクに適用することが可能であり、従って、詳細な説明は簡略化のため省略する。
【0147】
ステップ・サイズは、例えば、バッファリング・タスクのプロパティに基づいて変化することが可能である。一例において、ステップ・サイズは処理されるデータ全体の長さに以上であり、1つのステップは、ワークフロー又は各タスクのために使用される。代替的に、データはチャンク(例えば、データの複数のサブセット)に分割することが可能であり、チャンクのデータを処理するために、複数のステップが実行される。
【0148】
NBMP FIFOファンクションは、FIFOバッファ・オペレーションを使用することが可能である。FIFOファンクションは、FIFOバッファが空である、一杯である、又は部分的に満たされている場合に、イベントを発行することが可能である。
【0149】
実施形態において、レギュラー又はステップ・イネーブル化されていないワークフローは、バッファリング・ファンクション(例えば、NBMP FIFOファンクション)又はバッファリング・タスク(例えば、FIFOタスク)を使用して、ステップ・イネーブル化されたワークフロー(例えば、ワークフロー(200B))に変換されることが可能である。ステップ動作可能なワークフローは、ステップ動作可能なワークフロー内の各タスクが、一度に1つのステップで実行できる一方、ステップ動作可能なワークフロー内の他のタスクは「停止」状態(406)にあるようにすることが可能である。停止状態(406)にある場合、他のタスクはスリープ状態である。例えば、他のタスクの各々は、オペレーションを停止し、入力を受け入れず、出力を生成せず、停止状態(406)にあるタスクの状態情報(例えば、それぞれの内部情報)を保存する。
【0150】
ワークフローは、一度に1つのタスクを実行することにより、ステップごとにマルチ・ステージ・プロセスで動作することが可能であり、従ってワークフローはデータを処理し、出力をステップごとに生成することが可能である。被処理データは、次のステージにおける更なる処理のために、タスクをバッファリングするように構成されたバッファに格納することが可能である。従って、データは、ワークフロー内のタスクを介してステップ毎に移動することが可能であり、ワークフローの出力はステップ毎に生成されることが可能である。
【0151】
拡張タスク・ライフサイクル(500)は、タスクの内部状態とデータを保存することを可能にする停止状態を含む。タスクが停止状態にある間に、タスクの内部状態とデータは保存される。タスクの内部状態とデータは次のステップで使用することが可能である。
【0152】
拡張タスク・ライフサイクル(500)を有するタスクを管理するための新たなオペレーションのセットは、各タスクの状態を停止状態に変更したり、停止状態から他の状態へ変更したりすることを可能にする。
【0153】
複数のワークフローのカスケードにおけるワークフローは、ワークフロー入力及びワークフロー出力においてバッファリング・タスクを含めることが可能であり、従って、ワークフローはステップで処理することが可能である。
【0154】
図7は、本開示の実施形態によるプロセス(700)を要約したフロー・チャートを示す。一例において、プロセス(700)は、メディア・データのような入力データを処理するために、データ処理システム(例えば、NBMPシステム)(100)を使用して実行される。幾つかの実施形態では、プロセス(700)は、ソフトウェア命令で実行され、従って、処理回路がソフトウェア命令を実行すると、処理回路はプロセス(700)を実行する。プロセスは(S701)から始まり、(S710)に進む。
【0155】
(S710)において、ワークフローのワークフロー情報は処理回路により受信することが可能である。一例において、ワークフロー情報は、ワークフロー・マネージャ(例えば、ワークフロー・マネージャ(103))によって、データ処理ソース(例えば、NBMPソース(101))から受信される。
【0156】
(S720)において、ワークフロー情報に基づいて、入力データを処理するワークフローを生成することが可能である。ワークフローは、複数の処理タスク及び第1バッファリング・タスクを含むことが可能である。複数の処理タスクは、第1処理タスク及び第2処理タスクを含むことが可能である。ワークフローは、
図2Bで説明されたように、ステップ・イネーブル化されたワークフローである。第1バッファリング・タスクは、上述したように、対応するバッファリング・ファンクションからインスタンス化することができる。一例において、入力データは、入力データのサブセットを有する入力データの複数のサブセットを含む。一例では、入力データの各サブセットのサイズは、第1閾値に対応する。
【0157】
(S730)において、第1処理タスクはランニング状態に入ることが可能であり、ランニング状態では、入力データのサブセットが、第1処理タスクにより処理され、第1被処理サブセット・データとして第1バッファリング・タスクに出力される。一例では、第1処理タスクが、入力データのサブセットを処理するためにランニング状態にある場合に、第2処理タスクは、上述のように、非ランニング状態(例えば、停止状態)にある。第1バッファリング・タスクは、第1被処理サブセット・データを記憶し、第1被処理サブセット・データを第2処理タスクに提供するように構成することが可能である。
【0158】
(S740)において、第1バッファリング・タスクで格納された第1被処理サブセット・データの量が第1閾値に等しいことに基づいて、第1処理タスクをランニング状態から停止状態へ遷移させることが可能である。第1処理タスクの状態情報は停止状態で保存されることが可能である。
【0159】
一例において、第1バッファリング・タスクで格納された第1被処理サブセット・データの量が第1閾値に等しい場合、イベント(例えば、上記のFULLイベント、X%イベント)を、例えば第1バッファリング・タスクによって生成することが可能であり、通知をワークフロー・マネージャに送ることが可能である。その後、ワークフロー・マネージャは、リクエストを第1処理タスクに送り、第1処理タスクをランニング状態から停止状態に遷移させることができる。
【0160】
バッファリング・タスク(入力バッファリング・タスクと言及される)が第1処理タスクに入力を提供し、バッファリング・タスクに格納されたデータが第1処理タスクに提供された場合、第1処理タスクをランニング状態から停止状態へ遷移させることができる。例えば、バッファリング・タスクは、バッファリング・タスクに格納されたデータが第1処理タスクに提供された場合に、空のイベントを生成することが可能であり、通知をワークフロー・マネージャに送ることが可能である。その後、ワークフロー・マネージャは、リクエストを第1処理タスクに送り、第1処理タスクをランニング状態から停止状態へ遷移させることが可能である。
【0161】
一例において、入力バッファリング・タスクで格納されたデータが第1処理タスクに提供された場合や、第1バッファリング・タスクで格納された第1被処理サブセットのデータの量が第1閾値に等しい場合に、第1処理タスクをランニング状態から停止状態へ遷移させることが可能である。
【0162】
(S750)において、第1処理タスクが停止状態に遷移した後に、第2処理タスクをランニング状態に入れることが可能であり、ランニング状態では、第1バッファリング・タスクで格納された第1被処理サブセット・データが第2処理タスクにより処理される。一例では、第1処理タスクが停止状態にある間に、第2処理タスクは第1被処理サブセット・データを処理するように進行する。従って、第1処理タスクと第2処理タスクは同時には進行せず、順に進行する。
【0163】
プロセス(700)は適切に適合させることが可能である。プロセス(700)におけるステップは、修正及び/又は省略されることが可能である。追加的なステップを追加することが可能である。適切な任意の実行順序を使用することが可能である。
【0164】
一例において、ランニング状態にある第2処理タスクは、処理された第1被処理サブセット・データを第2被処理サブセット・データとして、第2バッファリング・タスクへ出力する。第2バッファリング・タスクは、第2被処理サブセット・データを記憶し、第2被処理サブセット・データを、複数の処理タスク内の第3処理タスクへ提供するように構成することが可能である。(S750)の後に、第2被処理タスクは、(i)第2バッファリング・タスクで格納された第2被処理サブセット・データの量が第2閾値に等しいこと、及び(ii)第1バッファリング・タスクで格納された第1被処理サブセット・データの量が第2処理タスクに提供されたこと(例えば、第1バッファリング・タスク用に設定されたバッファが空であること)のうちの1つに基づいて、ランニング状態から停止状態へ遷移させることが可能である。第2処理タスクの状態情報は停止状態において保存されることが可能である。
【0165】
図8は、本開示の実施形態によるプロセス(800)を要約したフロー・チャートを示す。一例において、プロセス(800)は、メディア・データのような入力データを処理するために、データ処理システム(例えば、NBMPシステム)(100)を使用して実行される。幾つかの実施形態では、プロセス(800)は、ソフトウェア命令で実行され、従って、処理回路がソフトウェア命令を実行すると、処理回路はプロセス(800)を実行する。プロセスは(S801)から始まり、(S810)に進む。
【0166】
(S810)において、複数のワークフローのワークフロー情報は処理回路により受信することが可能である。一例において、ワークフロー情報は、ワークフロー・マネージャ(例えば、ワークフロー・マネージャ(103))によって、データ処理ソース(例えば、NBMPソース(101))から受信される。
【0167】
(S820)において、ワークフロー情報に基づいて、入力データを処理する複数のワークフローを生成することが可能である。複数のワークフローのうちの少なくとも1つは、複数の処理タスクを含むことが可能である。複数の処理タスクは、第1処理タスク及び第2処理タスクを含むことが可能である。第1ワークフロー及び第2ワークフローのうちの少なくとも1つは、
図2Cで説明されたように、入力バッファリング・タスク又は出力バッファリング・タスクを有する。
【0168】
(S830)において、第1ワークフローはランニング状態に入ることが可能であり、ランニング状態では、入力データのサブセットが、第1ワークフローにより処理され、第1被処理サブセット・データとしてバッファリング・タスクに出力される。一例では、第1ワークフローが、入力データのサブセットを処理するためにランニング状態にある場合に、第2ワークフローは、上述のように、非ランニング状態(例えば、停止状態)にある。一例において、第1バッファリング・タスクは、第1被処理サブセット・データを記憶し、第1被処理サブセット・データを第2ワークフローに提供するように構成することが可能である。バッファリング・タスクは、上述したように、対応するバッファリング・ファンクションからインスタンス化することができる。
【0169】
(S840)において、第1バッファリング・タスクで格納された第1被処理サブセット・データの量が第1閾値に等しいことに基づいて、第1ワークフローをランニング状態から停止状態へ遷移させることが可能である。第1ワークフローの状態情報は停止状態で保存されることが可能である
【0170】
一例において、第1バッファリング・タスクで格納された第1被処理サブセット・データの量が第1閾値に等しい場合、イベント(例えば、上記のFULLイベント、X%イベント)を、例えば第1バッファリング・タスクによって生成することが可能であり、通知をワークフロー・マネージャに送ることが可能である。その後、ワークフロー・マネージャは、リクエストを第1ワークフローに送り、第1ワークフローをランニング状態から停止状態に遷移させることができる。
【0171】
一例において、バッファリング・タスク(入力バッファリング・タスクと言及される)が第1ワークフローに入力を提供し、バッファリング・タスクに格納されたデータが第1ワークフローに提供された場合、第1ワークフローをランニング状態から停止状態へ遷移させることができる。例えば、入力バッファリング・タスクは、入力バッファリング・タスクに格納されたデータが第1ワークフローに提供された場合に、空のイベントを生成することが可能であり、通知をワークフロー・マネージャに送ることが可能である。その後、ワークフロー・マネージャは、リクエストを第1ワークフローに送り、第1ワークフローをランニング状態から停止状態へ遷移させることが可能である。
【0172】
一例において、入力バッファリング・タスクで格納されたデータが第1ワークフローに提供された場合や、バッファリング・タスク(又は出力バッファリング・タスク)で格納された第1被処理サブセットのデータの量が閾値に等しい場合に、第1ワークフローをランニング状態から停止状態へ遷移させることが可能である。
【0173】
(S850)において、第1ワークフローが停止状態に遷移した後に、第2ワークフローをランニング状態に入れることが可能であり、ランニング状態では、バッファリング・タスクで格納された第1被処理サブセット・データが第2ワークフローにより処理される。一例では、第1ワークフローが停止状態にある間に、第2ワークフローは第1被処理サブセット・データを処理するように進行する。従って、第1ワークフローと第2ワークフローは同時には進行せず、順に進行する。
【0174】
プロセス(800)は適切に適合させることが可能である。プロセス(800)におけるステップは、修正及び/又は省略されることが可能である。追加的なステップを追加することが可能である。適切な任意の実行順序を使用することが可能である。
【0175】
上述の技術は、コンピュータ読み取り可能な命令を用いてコンピュータ・ソフトウェアとして実施することが可能であり、1つ以上のコンピュータ読み取り可能な媒体に物理的に記憶することができる。
【0176】
本開示の方法及び実施形態は、別々に又は任意の順序で組み合わせて使用することが可能である。更に、方法(又は実施形態)、ファンクション、又はタスクの各々は、処理回路(例えば、1つ以上のプロセッサ、又は1つ以上の集積回路)によって実施されてもよい。一例では、1つ以上のプロセッサは、非一時的なコンピュータ読み取り可能な媒体に格納されたプログラムを実行する。
【0177】
上述の技術は、コンピュータ読み取り可能な命令を用いてコンピュータ・ソフトウェアとして実施することが可能であり、1つ以上のコンピュータ読み取り可能な媒体に物理的に記憶することができる。例えば、
図9は、開示された対象事項の特定の実施形態を実施するのに適したコンピュータ・システム(900)を示す。
【0178】
コンピュータ・ソフトウェアは適切な任意のマシン・コード又はコンピュータ言語を使用してコーディングされることが可能であり、アセンブリ、コンパイル、リンク、又は類似のメカニズムの対象となる可能性があり、1つ以上のコンピュータ中央処理装置(CPU)、グラフィックス処理装置(GPU)などによって、直接的に又はインターオペレーション、マイクロコード実行を介して実行することが可能な命令を含むコードを作成する。
【0179】
命令は、例えば、パーソナル・コンピュータ、タブレット・コンピュータ、サーバー、スマートフォン、ゲーム・デバイス、モノのインターネット等を含む、種々の種類のコンピュータ又はその構成要素において実行することができる。
【0180】
コンピュータ・システム(900)について
図9に示す構成要素は、本質的に例示的なものであり、本開示の実施形態を実施するコンピュータ・ソフトウェアの使用範囲又はファンクションに関する如何なる制限も示唆するようには意図されていない。また、構成要素の構成は、コンピュータ・システム(900)の例示的な実施形態に示される構成要素の任意の1つ又は組み合わせに関する何らかの従属性又は要件を有するものとして解釈されるべきではない。
【0181】
コンピュータ・システム(900)は、特定のヒューマン・インターフェース入力デバイスを含むことが可能である。このようなヒューマン・インターフェース入力デバイスは、例えば、触覚入力(例えば、キーストローク、スワイプ、データ・グローブの動き)、オーディオ入力(例えば、声、拍手)、視覚入力(例えば、ジェスチャ)、嗅覚入力(図示せず)を介して、1人以上の人間ユーザーによる入力に応答することができる。また、ヒューマン・インターフェース・デバイスは、オーディオ(例えば、スピーチ、音楽、周囲音)、画像(例えば、走査画像、静止画像カメラから得られる写真画像)、ビデオ(例えば、2次元ビデオ、立体ビデオを含む3次元ビデオ)のような、人間による意識的な入力に必ずしも直接的に関係しない特定のメディアを捉えるために使用することができる。
【0182】
入力ヒューマン・インターフェース・デバイスは、キーボード(901)、マウス(902)、トラックパッド(903)、タッチ・スクリーン(910)、データ・グローブ(図示せず)、ジョイスティック(905)、マイクロホン(906)、スキャナ(907)、カメラ(908)(各々1つしか描かれていない)のうちの1つ以上を含んでもよい。
【0183】
コンピュータ・システム(900)は、特定のヒューマン・インターフェース出力デバイスを含むことも可能である。このようなヒューマン・インターフェース出力デバイスは、例えば、触覚出力、音、光、及び嗅覚/味覚を通じて、1人以上の人間ユーザーの感覚を刺激することができる。このようなヒューマン・インターフェース出力デバイスは、触覚出力デバイス(例えば、タッチ・スクリーン(910)、データ・グローブ(図示せず)、ジョイスティック(905)による触覚フィードバックであるが、入力デバイスとして機能しない触覚フィードバック・デバイスが存在することも可能である)、オーディオ出力デバイス(例えば、スピーカー(909)、ヘッドフォン(図示せず))、視覚的出力デバイス(例えば、CRTスクリーン、LCDスクリーン、プラズマ・スクリーン、OLEDスクリーンを含むスクリーン(910)であり、各々はタッチ・スクリーン入力機能を備えているか又は備えておらず、各々は触覚フィードバック機能を備えているか又は備えておらず、それらのうちの一部は、2次元視覚出力又は立体画像出力のような手段による3次元出力を出力することが可能であるかもしれない;仮想現実眼鏡(図示せず)、ホログラフィック・ディスプレイ及びスモーク・タンク(図示せず))、並びにプリンタ(図示せず)を含んでもよい。
【0184】
コンピュータ・システム(900)は、CD/DVD等の媒体(921)を有するCD/DVD ROM/RW(920)を含む光媒体(921)、サム・ドライブ(922)、リムーバブル・ハード・ドライブ又はソリッド・ステート・ドライブ(923)、テープ及びフロッピー・ディスク(図示せず)のようなレガシー磁気媒体、セキュリティ・ドングル(図示せず)のような特化されたROM/ASIC/PLDベースのデバイスのような、人間がアクセスできる記憶装置及びそれらの関連媒体を含むことも可能である。
【0185】
当業者は、ここで開示される対象事項に関連して使用される用語「コンピュータ読み取り可能な媒体」は、伝送媒体、搬送波、又は他の一時的な信号を包含しないことも理解するはずである。
【0186】
コンピュータ・システム(900)は、1つ以上の通信ネットワークへのインターフェースを含むことも可能である。ネットワークは、例えば、無線、有線、光であるとすることが可能である。ネットワークは、更に、ローカル、ワイド・エリア、メトロポリタン、車両産業、リアルタイム、遅延耐性などであり得る。ネットワークの例は、イーサーネット(登録商標)、無線LANのようなローカル・エリア・ネットワーク、セルラ・ネットワーク(GSM、3G、4G、5G、LTEなどを含む)、TVの有線又は無線のワイド・エリア・デジタル・ネットワーク(ケーブルTV、衛星TV、及び地上放送TVを含む)、CANBusを含む車両産業などを含む。特定のネットワークは、一般に、特定の汎用データ・ポート又は周辺バス(949)(例えば、コンピュータ・システム(900)のUSBポート)に接続される外部ネットワーク・インターフェース・アダプタを必要とし;他のネットワークは、一般に、後述するシステム・バスに対する接続によって、コンピュータ・システム(900)のコアに統合される(例えば、イーサーネット・インターフェースはPCコンピュータ・システムに、セルラ・ネットワーク・インターフェースはスマートフォン・コンピュータ・システムに統合される)。これらのネットワークのいずれかを使用して、コンピュータ・システム(900)は、他のエンティティと通信することができる。このような通信は、片方向性受信専用(例えば、放送テレビ)、片方向性送信専用(例えば、特定のCANバス・デバイスへのCANバス)、又は、双方向性、例えばローカル又はワイド・エリア・デジタル・ネットワークを使用する他のコンピュータ・システムに対するものであるとすることが可能である。特定のプロトコル及びプロトコル・スタックは、上述のように、それらのネットワーク及びネットワーク・インターフェースの各々で使用することができる。
【0187】
前述のヒューマン・インターフェース・デバイス、ヒューマン・アクセス可能記憶装置、ネットワーク・インターフェースは、コンピュータ・システム(900)のコア(940)に接続することが可能である。
【0188】
コア(940)は、1つ以上の中央処理装置(CPU)(941)、グラフィックス処理装置(GPU)(942)、フィールド・プログラマブル・ゲート・アレイ(FPGA)(943)の形式の専用プログラマブル処理装置、特定のタスク用のハードウェア・アクセラレータ(944)などを含むことができる。これらのデバイスは、リード・オンリ・メモリ(ROM)(945)、ランダム・アクセス・メモリ(946)、内部大容量ストレージ、例えば内的なユーザーがアクセスできないハードドライブ、SSD等(947)と共に、システム・バス(948)を介して接続することができる。幾つかのコンピュータ・システムでは、システム・バス(948)は、追加のCPU、GPUなどによる拡張を可能にするために、1つ以上の物理プラグの形態でアクセス可能であるとすることが可能である。周辺装置は、コアのシステム・バス(948)に直接的に又は周辺バス(949)を介して取り付けることが可能である。周辺バスのアーキテクチャは、PCI、USBなどを含む。
【0189】
CPU(941)、GPU(942)、FPGA(943)、アクセラレータ(944)は、上記のコンピュータ・コードを構成することが可能な特定の命令を組み合わせて実行することが可能である。そのコンピュータ・コードは、ROM(945)又はRAM(946)に記憶することが可能である。過渡的なデータはRAM(946)に記憶することが可能であり、永続的なデータは例えば内部大容量ストレージ(947)に記憶することが可能である。任意のメモリ・デバイスに対する高速記憶及び検索はキャッシュ・メモリを使用することによって可能になり、キャッシュ・メモリは、1つ以上のCPU(941)、GPU(942)、大容量ストレージ(947)、ROM(945)、RAM(946)などと密接に関連付けることが可能である。
【0190】
コンピュータ読み取り可能な媒体は、様々なコンピュータ実装動作を実行するためのコンピュータ・コードをそこに所有することが可能である。媒体及びコンピュータ・コードは、本開示の目的に関して特別に設計され構築されるものであるとすることが可能であり、或いはそれらはコンピュータ・ソフトウェア分野の当業者にとって周知であり入手可能な種類のものであるとすることが可能である。
【0191】
限定によるものではない一例として、アーキテクチャ(900)、具体的にはコア(940)を有するコンピュータ・システムは、1つ以上の有形のコンピュータ読み取り可能な媒体に具現化されたソフトウェアをプロセッサ(CPU、GPU、FPGA、アクセラレータ等を含む)が実行した結果として機能を提供することができる。そのようなコンピュータ読み取り可能な媒体は、コア内部の大容量ストレージ(947)又はROM(945)のような非一時的な性質のコア(940)の特定のストレージと同様に、上述のようなユーザーがアクセス可能な大容量ストレージに関連する媒体であるとすることが可能である。本開示の様々な実施形態を実装するソフトウェアは、そのようなデバイスに記憶され、コア(940)によって実行されることが可能である。コンピュータ読み取り可能な媒体は、特定のニーズに応じて、1つ以上のメモリ・デバイス又はチップを含むことが可能である。ソフトウェアは、コア(940)及び具体的にはその中のプロセッサ(CPU、GPU、FPGAなどを含む)が、本願で説明される特定のプロセス又は特定のプロセスの特定の部分を実行することを引き起こすことが可能であり、その実行は、RAM (946)に記憶されたデータ構造を定義し、ソフトウェアによって定義されたプロセスに従ってそのようなデータ構造を修正することを含む。追加的又は代替的に、コンピュータ・システムは、回路(例えば、アクセラレータ(944))内で配線された、又は他の方法で具現化されたロジックの結果として機能を提供することが可能であり、これは、本願で説明される特定のプロセス又は特定のプロセスの特定の部分を実行するためのソフトウェアの代わりに、又はそれと共に動作することが可能である。ソフトウェアに対する言及はロジックを含み、必要に応じてその逆も可能である。コンピュータ読み取り可能な媒体に対する言及は、実行のためのソフトウェアを記憶する回路(例えば、集積回路(IC))、実行のためのロジックを具体化する回路、又は適切な場合にはその両方を含むことが可能である。本開示は、ハードウェア及びソフトウェアの適切な任意の組み合わせを包含する。
【0192】
本開示は、幾つかの例示的な実施形態を説明してきたが、本開示の範囲内に該当する、変更、置換、及び種々の代替均等物が存在する。従って、本願で明示的に図示も説明もされていないが、本開示の原理を具現化し従って本願の精神及び目的の範囲内にある多くのシステム及び方法を、当業者は案出することができるであろうということは理解されるであろう。