本開示は、概して、ワイヤレスシンクデバイスがワイヤレスシンクデバイスと通信することができるシステムについて説明する。通信セッションの一部として、ワイヤレスソースデバイスが、ワイヤレスシンクデバイスにオーディオおよびビデオデータを送信することができ、ワイヤレスシンクデバイスは、ワイヤレスシンクデバイスにおいて受信されたユーザ入力をワイヤレスソースデバイスに送信することができる。このようにして、ワイヤレスシンクデバイスのユーザが、ワイヤレスソースデバイスを制御し、ワイヤレスソースデバイスからワイヤレスシンクデバイスに送信されているコンテンツを制御することができる。
図1Aは、本開示の技法のうちの1つまたは複数を実装し得る例示的なソース/シンクシステム100を示すブロック図である。図1Aに示すように、システム100は、通信チャネル150を介してシンクデバイス160と通信するソースデバイス120を含む。ソースデバイス120は、オーディオ/ビデオ(A/V)データ121を記憶するメモリと、ディスプレイ122と、スピーカー123と、オーディオ/ビデオエンコーダ124(エンコーダ124とも呼ばれる)と、オーディオ/ビデオ制御モジュール125と、送信機/受信機(TX/RX)ユニット126とを含み得る。シンクデバイス160は、ディスプレイ162と、スピーカー163と、オーディオ/ビデオデコーダ164(デコーダ164とも呼ばれる)と、送信機/受信機ユニット166と、ユーザ入力(UI)デバイス167と、ユーザ入力処理モジュール(UIPM:user input processing module)168とを含み得る。図示したコンポーネントは、ソース/シンクシステム100のための1つの例示的な構成をなすにすぎない。他の構成は、図示したコンポーネントよりも少数のコンポーネントを含み得るか、または図示したコンポーネント以外の追加のコンポーネントを含み得る。
図1Aの例では、ソースデバイス120は、オーディオ/ビデオデータ121のビデオ部分をディスプレイ122上で表示することができ、オーディオ/ビデオデータ121のオーディオ部分をスピーカー123上で出力することができる。オーディオ/ビデオデータ121は、ソースデバイス120にローカルに記憶され、ファイルサーバ、ハードドライブ、外部メモリ、ブルーレイ(登録商標)ディスク、DVD、または他の物理記憶媒体など、外部記憶媒体からアクセスされ得るか、あるいはインターネットなどのネットワーク接続を介してソースデバイス120にストリーミングされ得る。いくつかの事例では、オーディオ/ビデオデータ121は、ソースデバイス120のカメラとマイクロフォンとを介してリアルタイムでキャプチャされ得る。オーディオ/ビデオデータ121は、ムービー、テレビ番組、または音楽など、マルチメディアコンテンツを含み得るが、また、ソースデバイス120によって生成されたリアルタイムコンテンツをも含み得る。そのようなリアルタイムコンテンツは、たとえば、ソースデバイス120上で動作しているアプリケーションによって生成されるか、または、たとえば、ビデオテレフォニーセッションの一部として、キャプチャされたビデオデータであり得る。より詳細に説明するように、そのようなリアルタイムコンテンツは、いくつかの事例では、ユーザが選択するために利用可能なユーザ入力オプションのビデオフレームを含み得る。いくつかの事例では、オーディオ/ビデオデータ121は、ビデオのフレーム上にオーバーレイされたユーザ入力オプションを有するムービーまたはTV番組のビデオフレームなど、異なるタイプのコンテンツの組合せであるビデオフレームを含み得る。
ディスプレイ122とスピーカー123とを介してオーディオ/ビデオデータ121をローカルでレンダリングすることに加えて、ソースデバイス120のオーディオ/ビデオエンコーダ124は、オーディオ/ビデオデータ121を符号化することができ、送信機/受信機ユニット126は、符号化されたデータを通信チャネル150を介してシンクデバイス160に送信することができる。シンクデバイス160の送信機/受信機ユニット166は、符号化されたデータを受信し、オーディオ/ビデオデコーダ164は、符号化されたデータを復号し、復号されたデータをディスプレイ162とスピーカー163とを介して出力する。このようにして、ディスプレイ122とスピーカー123とによってレンダリングされているオーディオおよびビデオデータは、ディスプレイ162とスピーカー163とによって同時にレンダリングされ得る。オーディオデータおよびビデオデータは、フレームで構成されることができ、オーディオフレームは、レンダリングされるときにビデオフレームと時間同期されることができる。
オーディオ/ビデオエンコーダ124およびオーディオ/ビデオデコーダ164は、代替的にMPEG−4、Part10、Advanced Video Coding(AVC)と呼ばれるITU−T H.264規格、またはH.265規格と呼ばれることがある新生の高効率ビデオコーディング(HEVC:high efficiency video coding)規格など、任意の数のオーディオおよびビデオ圧縮規格を実装し得る。多くの他のタイプのプロプライエタリなまたは規格化された圧縮技法も使用され得る。概して、オーディオ/ビデオデコーダ164は、オーディオ/ビデオエンコーダ124の逆のコーディング操作を実行するように構成される。図1Aには示されていないが、いくつかの態様では、A/Vエンコーダ124およびA/Vデコーダ164は、それぞれオーディオエンコーダおよびデコーダと統合されることができ、適切なMUX−DEMUXユニット、または他のハードウェアおよびソフトウェアを含んで、共通のデータストリームまたは別個のデータストリーム中のオーディオとビデオの両方の符号化を処理することができる。
以下でより詳細に説明するように、A/Vエンコーダ124は、上記で説明したビデオ圧縮規格を実装することに加えて、他の符号化機能も実行することができる。たとえば、A/Vエンコーダ124は、A/Vデータ121がシンクデバイス160に送信されるより前に、A/Vデータ121に様々なタイプのメタデータを追加することができる。いくつかの事例では、A/Vデータ121は、符号化された形態でソースデバイス120に記憶されるかまたはソースデバイス120において受信され、したがってA/Vエンコーダ124によるさらなる圧縮を必要としないことがある。
図1Aは、通信チャネル150がオーディオペイロードデータとビデオペイロードデータとを別個に搬送することを示しているが、いくつかの事例では、ビデオペイロードデータとオーディオペイロードデータとは共通のデータストリームの一部であり得ることを理解されたい。適用可能な場合、MUX−DEMUXユニットは、ITU H.223マルチプレクサプロトコル、またはユーザデータグラムプロトコル(UDP)などの他のプロトコルに準拠し得る。オーディオ/ビデオエンコーダ124およびオーディオ/ビデオデコーダ164はそれぞれ、1つまたは複数のマイクロプロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、ディスクリート論理、ソフトウェア、ハードウェア、ファームウェア、あるいはそれらの任意の組合せとして実装され得る。オーディオ/ビデオエンコーダ124およびオーディオ/ビデオデコーダ164の各々は、1つまたは複数のエンコーダまたはデコーダ中に含まれ得、そのいずれも複合エンコーダ/デコーダ(コーデック)の一部として統合され得る。したがって、ソースデバイス120およびシンクデバイス160の各々は、本開示の技法のうちの1つまたは複数を実行するように構成された専用の機械を備え得る。
ディスプレイ122およびディスプレイ162は、陰極線管(CRT)、液晶ディスプレイ(LCD)、プラズマディスプレイ、発光ダイオード(LED)ディスプレイ、有機発光ダイオード(OLED)ディスプレイ、または別のタイプのディスプレイデバイスなど、様々なビデオ出力デバイスのいずれかを備え得る。これらまたは他の例では、ディスプレイ122および162は、それぞれ発光型ディスプレイ(emissive display)または透過型ディスプレイ(transmissive display)であり得る。ディスプレイ122およびディスプレイ162はまた、それらが同時に入力デバイスとディスプレイデバイスの両方であるような、タッチディスプレイであり得る。そのようなタッチディスプレイは、ユーザがそれぞれのデバイスにユーザ入力を与えることを可能にする、静電容量式、抵抗式、または他のタイプのタッチパネルであり得る。
スピーカー123は、ヘッドフォン、シングルスピーカーシステム、マルチスピーカーシステム、またはサラウンドサウンドシステムなど、様々なオーディオ出力デバイスのいずれかを備え得る。さらに、ディスプレイ122およびスピーカー123はソースデバイス120の一部として示され、ディスプレイ162およびスピーカー163はシンクデバイス160の一部として示されているが、ソースデバイス120およびシンクデバイス160は、実際には複数のデバイスのシステムであり得る。一例として、ディスプレイ162はテレビジョンであり得、スピーカー163はサラウンドサウンドシステムであり得、デコーダ164は、ディスプレイ162とスピーカー163とにワイヤード接続またはワイヤレス接続された外部ボックスの一部であり得る。他の例では、シンクデバイス160は、タブレットコンピュータまたはスマートフォンなど、単一のデバイスであり得る。さらに他の場合、ソースデバイス120およびシンクデバイス160は、同様のデバイスであり、たとえば、両方がスマートフォン、タブレットコンピュータなどである。この場合、一方のデバイスはソースとして動作し得、他方はシンクとして動作し得る。これらの役割は、後続の通信セッションでは逆になることもある。さらに他の場合、ソースデバイスは、スマートフォン、ラップトップまたはタブレットコンピュータなど、モバイルデバイスを備えることができ、シンクデバイスは、(たとえば、AC電源コードを用いた)より固定型のデバイスを備えることができ、その場合、ソースデバイスは、シンクデバイスを介して大群衆への提示のためにオーディオおよびビデオデータを配信し得る。
送信機/受信機ユニット126および送信機/受信機ユニット166は、それぞれ、様々なミキサ、フィルタ、増幅器、および信号変調のために設計された他のコンポーネント、ならびに、1つまたは複数のアンテナ、およびデータを送受信するために設計された他のコンポーネントを含み得る。通信チャネル150は、概して、ビデオデータをソースデバイス120からシンクデバイス160に送信するのに好適な任意の通信媒体、または様々な通信媒体の集合体を表す。通信チャネル150は、通常、Wi−FiやBluetooth(登録商標)などと同様の比較的短距離の通信チャネルである。ただし、通信チャネル150は、この点において必ずしも限定されるものではなく、無線周波数(RF)スペクトルまたは1つまたは複数の物理伝送線路など、任意のワイヤレスまたはワイヤード通信媒体、あるいはワイヤレス媒体とワイヤード媒体との任意の組合せを備え得る。他の例では、通信チャネル150は、ワイヤードまたはワイヤレスローカルエリアネットワーク、ワイドエリアネットワーク、あるいはインターネットなどのグローバルネットワークなど、パケットベースネットワークの一部を形成することさえある。さらに、通信チャネル150は、ピアツーピアリンクを作り出すためにソースデバイス120とシンクデバイス160とによって使用され得る。ソースデバイス120およびシンクデバイス160は、IEEE802.11規格ファミリーからの規格などの通信プロトコルを使用して通信チャネル150を通じて通信し得る。ソースデバイス120およびシンクデバイス160は、たとえば、ソースデバイス120およびシンクデバイス160が、ワイヤレスアクセスポイントまたはいわゆるホットスポットなど、中間物を使用せずに互いと直接通信するように、Wi−Fi Direct規格に従って通信し得る。ソースデバイス120およびシンクデバイス160はまた、ネットワーク輻輳を回避または低減するためにトンネルドダイレクトリンクセットアップ(TLDS:tunneled direct link setup)を確立することができる。本開示の技法について時にはWi−Fiに関して説明するが、これらの技法の態様は他の通信プロトコルにも適合し得ることが企図される。限定ではなく例として、ソースデバイス120とシンクデバイスとの間のワイヤレス通信は、直交周波数分割多重化(OFDM)技法を利用し得る。これらに限定するものではないが、時分割多元接続(TDMA)、周波数分割多元接続(FDMA)、符号分割多元接続(CDMA)、あるいはOFDM、FDMA、TDMAおよび/またはCDMAの任意の組合せを含む、多種多様な他のワイヤレス通信技法も使用され得る。WiFi(登録商標) DirectおよびTDLSは、比較的短距離の通信セッションをセットアップするように意図されている。ここにおける比較的短距離は、たとえば、70メートル未満を指し得るが、ノイズの多いまたは遮るもののある環境では、デバイス間の距離は、35メートル未満など、さらに短いものであり得る。
ソースデバイス120から受信されたデータを復号およびレンダリングすることに加えて、シンクデバイス160は、また、ユーザ入力デバイス167からユーザ入力を受信することができる。ユーザ入力デバイス167は、たとえば、キーボード、マウス、トラックボールまたはトラックパッド、タッチスクリーン、ボイスコマンド認識モジュール、あるいは他のそのようなユーザ入力デバイスであり得る。UIPM168は、ユーザ入力デバイス167によって受信されたユーザ入力コマンドを、ソースデバイス120が解釈することが可能であるデータパケット構造へとフォーマットする。そのようなデータパケットは、送信機/受信機166によって、通信チャネル150を介してソースデバイス120に送信される。送信機/受信機ユニット126はデータパケットを受信し、A/V制御モジュール125は、ユーザ入力デバイス167によって受信されたユーザ入力コマンドを解釈するためにデータパケットをパースする。データパケット中で受信されたコマンドに基づいて、A/V制御モジュール125は、符号化および送信されているコンテンツを変更することができる。このようにして、シンクデバイス160のユーザが、リモートで、およびソースデバイス120と直接対話することなしに、ソースデバイス120によって送信されているオーディオペイロードデータおよびビデオペイロードデータを制御することができる。シンクデバイス160のユーザがソースデバイス120に送信し得るコマンドのタイプの例は、オーディオおよびビデオデータを巻き戻し、早送りし、一時停止し、および再生するためのコマンド、ならびにズーム、回転、スクロールのためのコマンドなどを含む。また、ユーザは、たとえばオプションのメニューから、選択を行い、その選択をソースデバイス120に送信し得る。
さらに、シンクデバイス160のユーザは、ソースデバイス120上のアプリケーションを起動し、制御することが可能であり得る。たとえば、シンクデバイス160のユーザは、ソースデバイス120に記憶された写真編集アプリケーションを起動し、そのアプリケーションを使用して、ソースデバイス120にローカルに記憶された写真を編集することが可能であり得る。シンクデバイス160は、実際には写真がソースデバイス120上で編集されているのだが、その写真がシンクデバイス160上でローカルで編集されているように見え、感じられる、ユーザエクスペリエンスをユーザにもたらすことができる。そのような構成を使用して、デバイスユーザは、いくつかのデバイスとともに使用するための1つのデバイスの機能を活用することが可能であり得る。たとえば、ソースデバイス120は、大量のメモリとハイエンド処理能力とをもつスマートフォンであり得る。ソースデバイス120のユーザは、スマートフォンを、スマートフォンが通常使用されるすべての設定および状況において使用し得る。しかしながら、ムービーを見るとき、ユーザは、より大きいディスプレイスクリーンをもつデバイス上でムービーを見ることを望み得、その場合、シンクデバイス160は、タブレットコンピュータあるいはさらに大きいディスプレイデバイスまたはテレビジョンであり得る。電子メールを送りたいまたは電子メールに応答したいときには、ユーザは、キーボードを備えたデバイスを使用することを望み得、その場合、シンクデバイス160はラップトップであり得る。どちらの場合にも、ユーザは、シンクデバイスと対話しているが、処理の大半は依然としてソースデバイス120(この例ではスマートフォン)によって実行され得る。この特定の動作コンテキストでは、処理の大半がソースデバイス120によって実行されるので、シンクデバイス160は、シンクデバイス160がソースデバイス120によって行われている処理を行うように求められている場合よりも、より少ないリソースを用いた、より低コストのデバイスであり得る。いくつかの例では、ソースデバイスとシンクデバイスの両方が(タッチスクリーンコマンドなどの)ユーザ入力を受信することが可能であり得、本開示の技法は、所与のセッションにおいてそれらのデバイスの機能をネゴシエートおよび/または識別することによって、二方向対話を容易にし得る。
一部の構成では、A/V制御モジュール125は、ソースデバイス125のオペレーティングシステムによって実行されているオペレーティングシステムプロセスであり得る。しかしながら、他の構成では、A/V制御モジュール125は、ソースデバイス120上で動作しているアプリケーションのソフトウェアプロセスであり得る。そのような構成では、ユーザ入力コマンドは、ソフトウェアプロセスによって解釈されることができ、その結果、シンクデバイス160のユーザは、ソースデバイス120上で動作しているオペレーティングシステムとは対照的に、ソースデバイス120上で動作しているアプリケーションと直接対話している。オペレーティングシステムとは対照的にアプリケーションと直接対話することによって、シンクデバイス160のユーザは、ソースデバイス120のオペレーティングシステムに対してネイティブでないコマンドのライブラリへのアクセスを有し得る。さらに、アプリケーションと直接対話することにより、コマンドが、異なるプラットフォーム上で動作しているデバイスによってより容易に送信され、処理されることが可能になり得る。
ソースデバイス120は、ワイヤレスシンクデバイス160において適用されるユーザ入力に応答することができる。そのような対話型アプリケーション設定では、ワイヤレスシンクデバイス160において適用されるユーザ入力は、通信チャネル150を通じてワイヤレスディスプレイソースに送り戻され得る。一例では、シンクデバイス160が、シンクデバイス160において適用されるユーザ入力をソースデバイス120に送信できるようにするために、ユーザインターフェースバックチャネル(UIBC:user interface back channel)とも呼ばれる逆方向チャネルアーキテクチャが実装され得る。逆方向チャネルアーキテクチャは、ユーザ入力をトランスポートするための上位レイヤメッセージと、シンクデバイス160およびソースデバイス120においてユーザインターフェース機能をネゴシエートするための下位レイヤフレームとを含み得る。UIBCは、シンクデバイス160とソースデバイス120との間のインターネットプロトコル(IP)トランスポートレイヤ上に存在し得る。このようにして、UIBCは、開放型システム間相互接続(OSI)通信モデルにおいてトランスポートレイヤよりも上にあり得る。一例では、OSI通信は、7つのレイヤ(1−物理、2−データリンク、3−ネットワーク、4−トランスポート、5−セッション、6−プレゼンテーション、および7−アプリケーション)を含む。この例では、トランスポートレイヤよりも上にあるとは、レイヤ5、レイヤ6、およびレイヤ7を指す。ユーザ入力データを含んでいるデータパケットの信頼性の高い送信と順次配信とを促進するために、UIBCは、伝送制御プロトコル/インターネットプロトコル(TCP/IP)またはユーザデータグラムプロトコル(UDP)など、他のパケットベース通信プロトコルの上で動作するように構成され得る。UDPおよびTCPは、OSIレイヤアーキテクチャにおいて並列に動作することができる。TCP/IPにより、シンクデバイス160およびソースデバイス120は、パケットロスの場合に再送信技法を実装することが可能になる。
場合によっては、ソースデバイス120に位置するユーザ入力インターフェースとシンクデバイス160に位置するユーザ入力インターフェースとの間にミスマッチが存在し得る。そのようなミスマッチによってもたらされる潜在的な問題を解決し、そのような状況下での良好なユーザエクスペリエンスを促進するために、ユーザ入力インターフェース機能ネゴシエーションが、通信セッションを確立するより前に、または通信セッション全体を通じて様々な時間に、ソースデバイス120とシンクデバイス160との間で行われ得る。このネゴシエーションプロセスの一部として、ソースデバイス120とシンクデバイス160とは、ネゴシエートされたスクリーン解像度に関して同意し得る。シンクデバイス160が、ユーザ入力に関連付けられた座標データを送信するときには、シンクデバイス160は、ディスプレイ162から取得された座標データを、ネゴシエートされたスクリーン解像度に一致するようにスケーリングすることができる。一例では、シンクデバイス160が1280×720解像度を有し、ソースデバイス120が1600×900解像度を有する場合、それらのデバイスは、たとえば、それらのネゴシエートされた解像度として1280×720を使用し得る。ネゴシエートされた解像度は、シンクデバイス160の解像度に基づいて選択され得るが、ソースデバイス120の解像度または何らかの他の解像度も使用され得る。1280×720のシンクデバイスが使用される例では、シンクデバイス160は、取得されたx座標をソースデバイス120に送信するより前に、その座標を1600/1280倍でスケーリングすることができ、同様に、シンクデバイス160は、取得されたy座標をソースデバイス120に送信するより前に、その座標を900/720でスケーリングすることができる。他の構成では、ソースデバイス120は、取得された座標をネゴシエートされた解像度にスケーリングすることができる。そのスケーリングは、シンクデバイス160がソースデバイス120よりも高い解像度のディスプレイを使用するのか、またはその逆であるのかに基づいて、座標範囲を増加または減少させ得る。
さらに、いくつかの事例では、シンクデバイス160における解像度は、通信セッション中に変動し、ディスプレイ122とディスプレイ162との間のミスマッチをもたらす可能性がある。ユーザエクスペリエンスを改善し、適切な機能を保証するために、ソース/シンクシステム100は、スクリーン正規化のための技法を実装することによって、ユーザ対話ミスマッチを低減するまたは防止するための技法を実装し得る。ソースデバイス120のディスプレイ122とシンクデバイス160のディスプレイ162とは、異なる解像度および/または異なるアスペクト比を有し得る。さらに、いくつかの設定では、シンクデバイス160のユーザは、ソースデバイス120から受信されたビデオデータが、シンクデバイス160のディスプレイ162の全部よりも小さい部分をカバーするウィンドウにおいてレンダリングされるように、ソースデバイス120から受信されたビデオデータのためのディスプレイウィンドウをサイズ変更する能力を有し得る。別の例示的な設定では、シンクデバイス160のユーザは、横長モード(landscape mode)または縦長モード(portrait mode)のいずれかでコンテンツを閲覧するオプションを有し得、それらのモードの各々は、ユニークな座標および異なるアスペクト比を有する。そのような状況では、マウスクリックまたはタッチイベントが起こる座標など、シンクデバイス160において受信されたユーザ入力に関連付けられた座標は、その座標への修正なしにソースデバイス120によって処理されることが可能でないことがある。したがって、本開示の技法は、シンクデバイス160において受信されたユーザ入力の座標を、ソースデバイス120に関連付けられた座標にマッピングすることを含み得る。このマッピングは、本明細書では正規化とも呼ばれ、以下でさらに詳細に説明するように、このマッピングはシンクベースまたはソースベースのいずれかであり得る。
シンクデバイス160によって受信されるユーザ入力は、たとえばドライバレベルで、UIモジュール167によって受信され、シンクデバイス160のオペレーティングシステムに渡され得る。シンクデバイス160上のオペレーティングシステムは、ディスプレイ表面上のどこでユーザ入力が行われたかに関連付けられた座標(x
SINK,y
SINK)を受信することができる。この例では、(x
SINK,y
SINK)は、マウスクリックまたはタッチイベントが行われたディスプレイ162の座標であり得る。ディスプレイ162上でレンダリングされているディスプレイウィンドウは、ディスプレイウィンドウのサイズを記述するx座標長さ(L
DW)とy座標幅(W
DW)とを有し得る。ディスプレイウィンドウは、また、ディスプレイウィンドウのロケーションを記述する左上隅座標(a
DW,b
DW)も有し得る。L
DW、W
DW、および左上座標(a
DW,b
DW)に基づいて、ディスプレイウィンドウによってカバーされるディスプレイ162の部分が決定され得る。たとえば、ディスプレイウィンドウの右上隅は座標(a
DW+L
DW,b
DW)に位置し得、ディスプレイウィンドウの左下隅は座標(a
DW,b
DW+W
DW)に位置し得、ディスプレイウィンドウの右下隅は座標(a
DW+L
DW,b
DW+W
DW)に位置し得る。シンクデバイス160は、入力がディスプレイウィンドウ内の座標において受信された場合、その入力をUIBC入力として処理することができる。言い換えれば、関連付けられた座標(x
SINK,y
SINK)を備えた入力は、以下の条件が満たされる場合、UIBC入力として処理され得る。
ユーザ入力がUIBC入力であると決定した後、その入力に関連付けられた座標は、ソースデバイス120に送信されるより前に、UIPM168によって正規化され得る。ディスプレイウィンドウ外にあると決定された入力は、非UIBC入力としてシンクデバイス160によってローカルで処理され得る。
上述のように、入力座標の正規化は、ソースベースまたはシンクベースのいずれかであり得る。シンクベースの正規化を実装するときには、ソースデバイス120は、ディスプレイ122のためのサポートされるディスプレイ解像度(L
SRC,W
SRC)を、ビデオデータとともにまたはビデオデータとは切り離して、シンクデバイス160に送ることができる。サポートされるディスプレイ解像度は、たとえば、機能ネゴシエーションセッションの一部として送信され得るか、または通信セッション中の別の時間に送信され得る。シンクデバイス160は、ディスプレイ162のためのディスプレイ解像度(L
SINK,W
SINK)と、ソースデバイス120から受信されたコンテンツを表示するウィンドウのためのディスプレイウィンドウ解像度(L
DW,W
DW)と、ディスプレイウィンドウのための左上隅座標(a
DW,b
DW)とを決定することができる。上記で説明したように、ユーザ入力に対応する座標(x
SINK,y
SINK)がディスプレイウィンドウ内にあると決定されたときには、シンクデバイス160のオペレーティングシステムは、変換関数を使用して座標(x
SINK,y
SINK)をソース座標(x
SRC,y
SRC)にマッピングすることができる。(x
SINK,y
SINK)を(x
SRC,y
SRC)に変換するための例示的な変換関数は、以下の通りであり得る。
したがって、受信されたユーザ入力に対応する座標を送信するときには、シンクデバイス160は、(xSINK,ySINK)において受信されたユーザ入力のための座標(xSRC,ySRC)を送信することができる。以下でより詳細に説明するように、座標(xSRC,ySRC)は、たとえば、シンクデバイス160において受信されたユーザ入力をUIBCを通じてソースデバイス120に送信するために使用されるデータパケットの一部として送信され得る。入力座標がデータパケット中に含まれるものとして説明される、本開示の他の部分全体にわたって、それらの座標は、ソース/シンクシステム100がシンクベースの正規化を実装する事例において上記で説明したように、ソース座標に変換され得る。
ソース/シンクシステム100がソースベースの正規化を実装するときには、ローカル入力ではなくUIBC入力である(すなわち、ディスプレイウィンドウ外ではなくディスプレイウィンドウ内にある)と決定されたユーザ入力について、上記の計算は、シンクデバイス160ではなくソースデバイス120において実行され得る。そのような計算を容易にするために、シンクデバイス160は、LDW,WDWについての値、ならびにディスプレイウィンドウについてのロケーション情報(たとえばaDW,bDW)、ならびに(xSINK,ySINK)についての座標を、ソースデバイス120に送信することができる。これらの送信された値を使用して、ソースデバイス120は、上記の式3および式4に従って(xSRC,ySRC)についての値を決定することができる。
シンクベースの正規化の他の実装形態では、シンクデバイス160は、ディスプレイ162上のどこでユーザ入力イベントが行われるかではなく、ディスプレイウィンドウ内のどこでユーザ入力イベントが行われるかを記述する、ユーザ入力に関する座標(x
DW,y
DW)を送信することができる。そのような実装形態では、座標(x
DW,y
DW)は、(L
DW,W
DW)に関する値とともにソースデバイスに120に送信され得る。これらの受信された値に基づいて、ソースデバイス120は、以下の変換関数に従って(x
SRC,y
SRC)を決定することができる。
シンクデバイス160は、以下の関数に基づいてx
DWとy
DWとを決定することができる。
本開示が、たとえばデータパケットにおいて、ユーザ入力に関連付けられた座標を送信することについて記載するときには、これらの座標の送信は、上記で説明したようにシンクベースまたはソースベースの正規化を含み得、および/あるいはシンクベースまたはソースベースの正規化を実行するのに必要な任意の追加情報を含み得る。
UIBCは、クロスプラットフォームユーザ入力データを含む、様々なタイプのユーザ入力データをトランスポートするように設計され得る。たとえば、ソースデバイス120は、iOS(登録商標)オペレーティングシステムを実行することができ、一方、シンクデバイス160は、Android(登録商標)またはWindows(登録商標)など、別のオペレーティングシステムを実行する。プラットフォームにかかわらず、UIPM168は、A/V制御モジュール125にとって理解可能な形態で、受信されたユーザ入力をカプセル化することができる。多くの異なるタイプのソースデバイスおよびシンクデバイスが、それらが異なるプラットフォーム上で動作するかどうかにかかわらず、プロトコルを利用できるようにするために、いくつかの異なるタイプのユーザ入力フォーマットがUIBCによってサポートされ得る。一般入力フォーマットが定義されることができ、プラットフォーム固有入力フォーマットが両方ともサポートされることができ、したがって、ユーザ入力がUIBCによってソースデバイス120とシンクデバイス160との間で通信され得る方法のフレキシビリティがもたらされる。
図1Aの例では、ソースデバイス120は、スマートフォン、タブレットコンピュータ、ラップトップコンピュータ、デスクトップコンピュータ、Wi−Fi対応テレビジョン、またはオーディオおよびビデオデータを送信することが可能な他のデバイスを備えることができる。シンクデバイス160は、同様に、スマートフォン、タブレットコンピュータ、ラップトップコンピュータ、デスクトップコンピュータ、Wi−Fi対応テレビジョン、またはオーディオおよびビデオデータを受信し、ユーザ入力データを受信することが可能な他のデバイスを備えることができる。いくつかの事例では、シンクデバイス160は、ディスプレイ162、スピーカー163、UIデバイス167、およびA/Vエンコーダ164が、すべて、別個であるが相互動作可能なデバイスの一部であるような、複数のデバイスのシステムを含み得る。ソースデバイス120は、同様に、単一のデバイスではなく、複数のデバイスのシステムであることができる。
本開示では、ソースデバイスという用語は、概して、オーディオ/ビデオデータを送信しているデバイスを指すために使用され、シンクデバイスという用語は、概して、ソースデバイスからオーディオ/ビデオデータを受信しているデバイスを指すために使用される。多くの場合、ソースデバイス120およびシンクデバイス160は、一方のデバイスがソースとして動作し、他方がシンクとして動作する、同様または同一のデバイスであることができる。さらに、これらの役割は、異なる通信セッションでは逆になることがある。したがって、1つの通信セッションにおけるシンクデバイスは、後続の通信セッションではソースデバイスになり得、その逆もまた同様である。
図1Bは、本開示の技法を実装し得る例示的なソース/シンクシステム101を示すブロック図である。ソース/シンクシステム101は、ソースデバイス120とシンクデバイス160とを含み、それらの各々は、図1Aについて上記で説明した方法で機能し、動作し得る。ソース/シンクシステム101はシンクデバイス180をさらに含む。上記で説明したシンクデバイス160と同様の方法で、シンクデバイス180は、ソースデバイス120からオーディオおよびビデオデータを受信し、確立されたUIBCを通じてソースデバイス120にユーザコマンドを送信し得る。いくつかの構成では、シンクデバイス160とシンクデバイス180とは、互いに独立して動作することができ、ソースデバイス120において出力されるオーディオおよびビデオデータは、シンクデバイス160とシンクデバイス180とにおいて同時に出力され得る。代替構成では、シンクデバイス160は1次シンクデバイスであり得、シンクデバイス180は2次シンクデバイスであり得る。そのような例示的な構成では、シンクデバイス160とシンクデバイス180とは結合されることができ、シンクデバイス160はビデオデータを表示することができ、シンクデバイス180は対応するオーディオデータを出力する。さらに、いくつかの構成では、シンクデバイス160は伝送されたビデオデータのみを出力することができ、シンクデバイス180は伝送されたオーディオデータのみを出力する。
図2は、ソースデバイス220の一例を示すブロック図である。ソースデバイス220は、図1A中のソースデバイス120と同様のデバイスであることができ、ソースデバイス120と同じ方法で動作することができる。ソースデバイス220は、ローカルディスプレイ222と、ローカルスピーカー223と、プロセッサ231と、メモリ232と、トランスポートユニット233と、ワイヤレスモデム234とを含む。図2に示すように、ソースデバイス220は、トランスポート、記憶、および表示のためにA/Vデータを符号化および/または復号する1つまたは複数のプロセッサ(すなわちプロセッサ231)を含み得る。A/Vデータは、たとえばメモリ232において記憶され得る。メモリ232は、A/Vファイル全体を記憶することができ、または、たとえば、別のデバイスまたはソースからストリーミングされた、A/Vファイルの一部分を単純に記憶する、より小さいバッファを備えることができる。トランスポートユニット233は、符号化A/Vデータをネットワークトランスポートのために処理することができる。たとえば、符号化A/Vデータは、プロセッサ231によって処理され、ネットワーク上での通信のためにトランスポートユニット233によってネットワークアクセスレイヤ(NAL:Network Access Layer)ユニットにカプセル化されることができる。NALユニットは、ワイヤレスモデム234によってネットワーク接続を介してワイヤレスシンクデバイスに送られることができる。ワイヤレスモデム234は、たとえば、IEEE802.11規格ファミリーのうちの1つを実装するように構成されたWi−Fiモデムであり得る。
また、ソースデバイス220は、A/Vデータをローカルで処理し、表示することができる。具体的には、ディスプレイプロセッサ235は、ローカルディスプレイ222上で表示されるようにビデオデータを処理することができ、オーディオプロセッサ236は、スピーカー223上での出力のためにオーディオデータを処理することができる。
図1Aのソースデバイス120に関して上記で説明したように、ソースデバイス220は、また、シンクデバイスからユーザ入力コマンドを受信し得る。このようにして、ソースデバイス220のワイヤレスモデム234は、NALユニットなどのカプセル化されたデータパケットを受信し、カプセル化されたデータユニットをカプセル化解除のためにトランスポートユニット233に送る。たとえば、トランスポートユニット233は、NALユニットからデータパケットを抽出することができ、プロセッサ231は、ユーザ入力コマンドを抽出するためにデータパケットをパースすることができる。ユーザ入力コマンドに基づいて、プロセッサ231は、ソースデバイス220によってシンクデバイスに送信されている符号化A/Vデータを調整することができる。このようにして、図1AのA/V制御モジュール125に関して上記で説明した機能は、完全にまたは部分的に、プロセッサ231によって実装され得る。
図2のプロセッサ231は、概して、これらに限定するものではないが、1つまたは複数のデジタル信号プロセッサ(DSP)、汎用マイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブル論理アレイ(FPGA)、他の等価な集積回路またはディスクリート論理回路を含む、多種多様なプロセッサのうちのいずれか、あるいはそれらの何らかの組合せを表す。図2のメモリ232は、これらに限定するものではないが、シンクロナスダイナミックランダムアクセスメモリ(SDRAM)などのランダムアクセスメモリ(RAM)、読取り専用メモリ(ROM)、不揮発性ランダムアクセスメモリ(NVRAM)、電気的消去可能プログラマブル読取り専用メモリ(EEPROM(登録商標))、フラッシュメモリなどを含む、多種多様な揮発性または不揮発性メモリのうちのいずれかを備え得る。メモリ232は、オーディオ/ビデオデータならびに他の種類のデータを記憶するためのコンピュータ可読記憶媒体を備え得る。メモリ232は、本開示で説明する様々な技法を実行することの一部としてプロセッサ231によって実行される命令およびプログラムコードをさらに記憶し得る。
図3に、シンクデバイス360の一例を示す。シンクデバイス360は、図1A中のシンクデバイス160と同様のデバイスであり得、シンクデバイス160と同じ方法で動作し得る。シンクデバイス360は、1つまたは複数のプロセッサ(すなわちプロセッサ331)と、メモリ332と、トランスポートユニット333と、ワイヤレスモデム334と、ディスプレイプロセッサ335と、ローカルディスプレイ362と、オーディオプロセッサ336と、スピーカー363と、ユーザ入力インターフェース376とを含む。シンクデバイス360は、ワイヤレスモデム334において、ソースデバイスから送られたカプセル化されたデータユニットを受信する。ワイヤレスモデム334は、たとえば、IEEE802.11規格ファミリーからの1つまたは複数の規格を実装するように構成されたWi−Fiモデムであり得る。トランスポートユニット333は、カプセル化されたデータユニットをカプセル化解除することができる。たとえば、トランスポートユニット333は、カプセル化されたデータユニットから符号化ビデオデータを抽出し、符号化A/Vデータを、出力のために復号され、レンダリングされるように、プロセッサ331に送ることができる。ディスプレイプロセッサ335は、ローカルディスプレイ362上で表示されるように復号ビデオデータを処理することができ、オーディオプロセッサ336は、スピーカー363上での出力のために復号オーディオデータを処理することができる。
オーディオおよびビデオデータをレンダリングすることに加えて、ワイヤレスシンクデバイス360は、また、ユーザ入力インターフェース376を通じてユーザ入力データを受信することができる。ユーザ入力インターフェース376は、これらに限定するものではないが、タッチディスプレイインターフェース、キーボード、マウス、ボイスコマンドモジュール、(たとえば、カメラベースの入力キャプチャ機能をもつ)ジェスチャキャプチャデバイスを含む、いくつかのユーザ入力デバイスのうちのいずれか、またはいくつかのユーザ入力デバイスのうちの他のユーザ入力デバイスを表すことができる。ユーザ入力インターフェース376を通じて受信されたユーザ入力は、プロセッサ331によって処理され得る。この処理は、本開示で説明する技法に従って、受信されたユーザ入力コマンドを含むデータパケットを生成することを含み得る。生成されると、トランスポートユニット333は、そのデータパケットを、UIBCを通じたワイヤレスソースデバイスへのネットワークトランスポートのために処理し得る。
図3のプロセッサ331は、1つまたは複数のデジタル信号プロセッサ(DSP)、汎用マイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブル論理アレイ(FPGA)、他の等価な集積回路またはディスクリート論理回路など、広範囲のプロセッサのうちの1つまたは複数、あるいはそれらの何らかの組合せを備え得る。図3のメモリ332は、これらに限定するものではないが、シンクロナスダイナミックランダムアクセスメモリ(SDRAM)などのランダムアクセスメモリ(RAM)、読取り専用メモリ(ROM)、不揮発性ランダムアクセスメモリ(NVRAM)、電気的消去可能プログラマブル読取り専用メモリ(EEPROM)、フラッシュメモリなどを含む、多種多様な揮発性または不揮発性メモリのいずれかを備え得る。メモリ232は、オーディオ/ビデオデータならびに他の種類のデータを記憶するためのコンピュータ可読記憶媒体を備え得る。メモリ332は、本開示で説明する様々な技法を実行することの一部としてプロセッサ331によって実行される命令とプログラムコードとをさらに記憶することができる。
図4に、通信チャネル150を通じて通信するために図1Aの送信機/受信機126と送信機/受信機166とによって使用され得る、例示的な送信機システム410および受信機システム450のブロック図を示す。送信機システム410において、いくつかのデータストリームについてのトラフィックデータがデータソース412から送信(TX)データプロセッサ414に与えられる。各データストリームは、それぞれの送信アンテナを通じて送信され得る。TXデータプロセッサ414は、各データストリームについてのトラフィックデータを、そのデータストリームのために選択された特定のコーディングスキームに基づいてフォーマットし、コーディングし、インターリーブする。
各データストリームについてのコード化データは、直交周波数分割多重化(OFDM)技法を使用してパイロットデータと多重化され得る。これらに限定するものではないが、時分割多元接続(TDMA)、周波数分割多元接続(FDMA)、符号分割多元接続(CDMA)、あるいはOFDM、FDMA、TDMAおよび/またはCDMAの任意の組合せを含む、多種多様な他のワイヤレス通信技法も使用され得る。
図4に一致して、パイロットデータは、通常、既知の方法で処理される既知のデータパターンであり、チャネル応答を推定するために受信機システムにおいて使用され得る。次いで、各データストリームの多重化されたパイロットおよびコード化データは、変調シンボルを提供するために、そのデータストリームに関して選択された特定の変調スキーム(たとえば、2位相シフトキーイング(BPSK)、4位相シフトキーイング(QPSK)、M−PSK、またはM−QAM(直交振幅変調)、ここでMは2のべき乗であり得る)に基づいて変調(たとえば、シンボルマッピング)される。各データストリームについてのデータレート、コーディング、および変調は、メモリ432に結合され得るプロセッサ430によって実行される命令によって決定され得る。
次いで、データストリームに関する変調シンボルがTX MIMOプロセッサ420に与えられ、TX MIMOプロセッサ420はさらに(たとえば、OFDMについて)その変調シンボルを処理し得る。次いで、TX MIMOプロセッサ420は、NT個の変調シンボルストリームをNT個の送信機(TMTR)422a〜422tに与えることができる。いくつかの態様では、TX MIMOプロセッサ420は、データストリームのシンボルと、シンボルがそこから送信されるアンテナとに、ビームフォーミング重みを適用する。
各送信機422は、それぞれのシンボルストリームを受信し、処理して、1つまたは複数のアナログ信号を提供し、さらに、それらのアナログ信号を調整(たとえば、増幅、フィルタ処理、およびアップコンバート)して、MIMOチャネルを通じた送信に適した被変調信号を提供することができる。次いで、送信機422a〜422tからのNT個の被変調信号は、それぞれ、NT個のアンテナ424a〜424tから送信される。
受信機システム450において、送信された被変調信号は、NR個のアンテナ452a〜452rによって受信され、各アンテナ452からの受信信号は、それぞれの受信機(RCVR)454a〜454rに与えられる。受信機454は、それぞれの受信信号を調整(たとえば、フィルタ処理、増幅、およびダウンコンバート)し、調整された信号をデジタル化してサンプルを提供し、さらにそれらのサンプルを処理して、対応する「受信」シンボルストリームを提供する。
次いで、受信(RX)データプロセッサ460は、NR個の受信機454からNR個の受信シンボルストリームを受信し、特定の受信機処理技法に基づいて処理して、NT個の「検出」シンボルストリームを提供する。次いで、RXデータプロセッサ460は、各検出シンボルストリームを復調し、デインターリーブし、復号して、データストリームについてのトラフィックデータを復元する。RXデータプロセッサ460による処理は、送信機システム410におけるTX MIMOプロセッサ420およびTXデータプロセッサ414によって実行される処理と相補的なものである。
メモリ472と結合され得るプロセッサ470は、どのプリコーディング行列を使用すべきかを定期的に決定する。逆方向リンクメッセージは、通信リンクおよび/または受信データストリームに関する様々なタイプの情報を含み得る。次いで、逆方向リンクメッセージは、データソース436からいくつかのデータストリームについてのトラフィックデータをも受信するTXデータプロセッサ438によって処理され、変調器480によって変調され、送信機454a〜454rによって調整され、送信機システム410に送り戻される。
送信機システム410において、受信機システム450からの被変調信号は、アンテナ424によって受信され、受信機422によって調整され、復調器440によって復調され、RXデータプロセッサ442によって処理されて、受信機システム450によって送信された逆方向リンクメッセージが抽出される。次いで、プロセッサ430は、ビームフォーミング重みを決定するためにどのプリコーディング行列を使用すべきかを決定し、次いで、抽出されたメッセージを処理する。
図5Aは、機能ネゴシエーションセッションの一部としてのソースデバイス520とシンクデバイス560との間の例示的なメッセージ転送シーケンスを示すブロック図である。機能ネゴシエーションは、ソースデバイス520とシンクデバイス560との間のより大きい通信セッション確立プロセスの一部として行われ得る。このセッションは、たとえば、基礎をなす接続性規格としてのWi−Fi DirectまたはTDLSによって確立され得る。Wi−Fi DirectまたはTDLSセッションを確立した後、シンクデバイス560は、ソースデバイス520とのTCP接続を開始することができる。TCP接続を確立することの一部として、ソースデバイス520とシンクデバイス560との間の通信セッションを管理するために、リアルタイムストリーミングプロトコル(RTSP:real time streaming protocol)を実行する制御ポートが確立されることができる。
ソースデバイス520は、概して、図1Aのソースデバイス120について上記で説明したのと同じ方法で動作し得、シンクデバイス560は、概して、図1Aのシンクデバイス160について上記で説明したのと同じ方法で動作し得る。ソースデバイス520とシンクデバイス560とが接続を確立した後、ソースデバイス520とシンクデバイス560とは、機能ネゴシエーション交換の一部としてそれらのデバイスの後続の通信セッションのために使用されるべきパラメータのセットを決定し得る。
ソースデバイス520とシンクデバイス560とは、メッセージのシーケンスを通じて機能をネゴシエートし得る。それらのメッセージは、たとえば、リアルタイムストリーミングプロトコル(RTSP)メッセージであり得る。ネゴシエーションの任意の段階において、RTSP要求メッセージの受信側が、RTSP OK以外のRTSPステータスコードを含むRTSP応答で応答することができ、その場合、メッセージ交換は、パラメータの異なるセットを用いて再試行されることができ、または機能ネゴシエーションセッションは終了されることができる。
ソースデバイス520は、シンクデバイス560がサポートするRTSP方法のセットを決定するために、シンクデバイス560に第1のメッセージ(RTSP OPTIONS要求メッセージ)を送ることができる。ソースデバイス520から第1のメッセージを受信すると、シンクデバイス560は、シンク560によってサポートされるRTSP方法をリストする第2のメッセージ(RTSP OPTIONS応答メッセージ)で応答することができる。また、第2のメッセージは、RTSP OKステータスコードを含み得る。
ソースデバイス520に第2のメッセージを送った後に、シンクデバイス560は、ソースデバイス520がサポートするRTSP方法のセットを決定するために、第3のメッセージ(RTSP OPTIONS要求メッセージ)を送ることができる。シンクデバイス560から第3のメッセージを受信すると、ソースデバイス520は、ソースデバイス520によってサポートされるRTSP方法をリストする第4のメッセージ(RTSP OPTIONS応答メッセージ)で応答することができる。また、第4のメッセージはRTSP OKステータスコードを含むことができる。
第4のメッセージを送った後に、ソースデバイス520は、ソースデバイス520にとって関心のある機能のリストを指定するために、第5のメッセージ(RTSP GET_PARAMETER要求メッセージ)を送ることができる。シンクデバイス560は第6のメッセージ(RTSP GET_PARAMETER応答メッセージ)で応答することができる。第6のメッセージはRTSPステータスコードを含み得る。RTSPステータスコードがOKである場合、第6のメッセージは、また、シンクデバイス560によってサポートされる、第5のメッセージ中で指定されたパラメータに対する応答パラメータを含むことができる。シンクデバイス560は、シンクデバイス560がサポートしない第5のメッセージ中のパラメータを無視することができる。
第6のメッセージに基づいて、ソース520は、通信セッションのために使用されるべきパラメータの最適セットを決定することができ、シンクデバイス560に第7のメッセージ(RTSP SET_PARAMETER要求メッセージ)を送ることができる。第7のメッセージは、ソースデバイス520とシンクデバイス560との間の通信セッション中に使用されるべきパラメータセットを含み得る。第7のメッセージは、通信セッションをセットアップするためにRTSP Setup要求中で使用されるべきユニバーサルリソース識別子(URI:Universal Resource Identifier)を記述するwfd−presentation−urlを含むことができる。wfd−presentation−urlは、シンクデバイス560がセッション確立交換中に後のメッセージのために使用できるURIを指定する。このパラメータ中で指定されたwfd−url0値およびwfd−url1値は、第7のメッセージ中のwfd−client−rtp−ports中のrtp−port0値およびrtp−port1値の値に対応することができる。この事例におけるRTPは、概して、UDPの上で動作することができるリアルタイムプロトコルを指す。
第7のメッセージを受信すると、シンクデバイス560は、第7のメッセージ中で指定されたパラメータを設定することが成功したかどうかを示すRTSPステータスコードをもつ、第8のメッセージで応答することができる。上述のように、ソースデバイスとシンクデバイスとの役割は、異なるセッションでは逆になるかまたは変化し得る。通信セッションをセットアップするメッセージの順序は、場合によっては、ソースとして動作するデバイスを定義し、シンクとして動作するデバイスを定義し得る。
図5Bは、機能ネゴシエーションセッションの一部としてのソースデバイス560とシンクデバイス520との間の別の例示的なメッセージ転送シーケンスを示すブロック図である。図5Bのメッセージ転送シーケンスは、図5Aについて上記で説明した転送シーケンスのより詳細な図を与えることを目的とする。図5Bでは、メッセージ「1b.GET_PARAMETER応答」は、サポートされる入力カテゴリー(たとえば一般およびHIDC)のリストとサポートされる入力タイプの複数のリストとを識別するメッセージの一例を示す。サポートされる入力カテゴリーのリストのサポートされる入力カテゴリーの各々は、サポートされるタイプの関連付けられたリスト(たとえばgeneric_cap_listおよびhidc_cap_list)を有する。図5Bでは、メッセージ「2a.SET_PARAMETER要求」は、サポートされる入力カテゴリー(たとえば一般およびHIDC)の第2のリストと、サポートされるタイプの複数の第2のリストとを識別する、第2のメッセージの一例である。サポートされる入力カテゴリーの第2のリストのサポートされる入力カテゴリーの各々は、サポートされるタイプの関連付けられた第2のリスト(たとえばgeneric_cap_listおよびhidc_cap_list)を有する。メッセージ「1b.GET_PARAMETER応答」は、シンクデバイス560によってサポートされる入力カテゴリーと入力タイプとを識別する。メッセージ「2a.SET_PARAMETER要求」は、ソースデバイス520によってサポートされる入力カテゴリーと入力タイプとを識別するが、それは、ソースデバイス520によってサポートされるすべての入力カテゴリーおよび入力タイプの包括的なリストではないことがある。代わりに、メッセージ「2a.SET_PARAMETER要求」は、シンクデバイス560によってサポートされるものとしてメッセージ「1b.GET_PARAMETER応答」中で識別された入力カテゴリーおよび入力タイプのみを識別し得る。このようにして、メッセージ「2a.SET_PARAMETER要求」中で識別される入力カテゴリーおよび入力タイプは、メッセージ「1b.GET_PARAMETER応答」中で識別された入力カテゴリーおよび入力タイプのサブセットを構成し得る。
図6は、シンクデバイスによって生成され、ソースデバイスに送信され得る、データパケットの一例を示す概念図である。データパケット600の態様については、図1Aを参照して説明するが、説明する技法は、追加のタイプのソース/シンクシステムに適用可能であり得る。データパケット600は、ペイロードデータ650がそれに後続する、データパケットヘッダ610を含み得る。ペイロードデータ650は、1つまたは複数のペイロードヘッダ(たとえばペイロードヘッダ630)をさらに含み得る。データパケット600は、たとえば、シンクデバイス160のユーザが、ソースデバイス120によって送信されているオーディオ/ビデオデータを制御できるように、図1Aのシンクデバイス160からソースデバイス120に送信され得る。そのような場合、ペイロードデータ650は、シンクデバイス160において受信されたユーザ入力データを含み得る。ペイロードデータ650は、たとえば、1つまたは複数のユーザコマンドを識別し得る。シンクデバイス160は、1つまたは複数のユーザコマンドを受信することができ、受信されたコマンドに基づいて、データパケットヘッダ610とペイロードデータ650とを生成することができる。データパケット600のデータパケットヘッダ610のコンテンツに基づいて、ソースデバイス120は、シンクデバイス160において受信されたユーザ入力データを識別するためにペイロードデータ650をパースすることができる。ペイロードデータ650中に含まれているユーザ入力データに基づいて、ソースデバイス120は、ソースデバイス120からシンクデバイス160に送信されているオーディオおよびビデオデータを何らかの方法で変更し得る。
本開示で使用する「パース」および「パーシング」という用語は、概して、ビットストリームからデータを抽出するためにビットストリームを分析するプロセスを指す。抽出されると、データは、たとえば、ソースデバイス120によって処理されることができる。データを抽出することは、たとえば、ビットストリーム中の情報がどのようにフォーマットされているかを識別することを含み得る。以下でより詳細に説明するように、データパケットヘッダ610は、ソースデバイス120とシンクデバイス160の両方にとって既知である規格化されたフォーマットを定義し得る。ただし、ペイロードデータ650は、多くの可能な方法のうちの1つでフォーマットされ得る。データパケットヘッダ610をパースすることによって、ソースデバイス120は、ペイロードデータ650がどのようにフォーマットされているかを決定することができ、したがって、ソースデバイス120は、ペイロードデータ650から1つまたは複数のユーザ入力コマンドを抽出するためにペイロードデータ650をパースすることができる。これは、ソースシンク通信においてサポートされ得る異なるタイプのペイロードデータの観点からフレキシビリティを与えることができる。以下でより詳細に説明するように、ペイロードデータ650は、ペイロードヘッダ630などの1つまたは複数のペイロードヘッダをも含み得る。そのような場合、ソースデバイス120は、ペイロードヘッダ630についてのフォーマットを決定するためにデータパケットヘッダ610をパースし、次いで、ペイロードデータ650の残りについてのフォーマットを決定するためにペイロードヘッダ630をパースし得る。
図620は、データパケットヘッダ610がどのようにフォーマットされ得るかについての概念図である。行615における番号0〜15は、データパケットヘッダ610内のビットロケーションを識別することを目的としており、データパケットヘッダ610内に含まれている情報を実際に表すことを目的としていない。データパケットヘッダ610は、バージョンフィールド621と、タイムスタンプフラグ622と、予約済みフィールド623と、入力カテゴリーフィールド624と、長さフィールド625と、オプションのタイムスタンプフィールド626とを含む。
図6の例では、バージョンフィールド621は、シンクデバイス160によって実装されている特定の通信プロトコルのバージョンを示し得る3ビットフィールドである。バージョンフィールド621中の値は、データパケットヘッダ610の残りをどのようにパースすべきか、ならびにペイロードデータ650をどのようにパースすべきかを、ソースデバイス120に通知し得る。図6の例では、バージョンフィールド621は、8つの異なるバージョンについてのユニークな識別子を可能にする、3ビットフィールドである。他の例では、より多いまたはより少ないビットがバージョンフィールド621に専用とされ得る。
図6の例では、タイムスタンプフラグ(T)622は、タイムスタンプフィールド626がデータパケットヘッダ610中に存在するか否かを示す1ビットフィールドである。タイムスタンプフィールド626は、ソースデバイス120によって生成され、シンクデバイス160に送信された、マルチメディアデータに基づくタイムスタンプを含んでいる、16ビットフィールドである。タイムスタンプは、たとえば、ビデオのフレームがシンクデバイス160に送信されるより前に、ソースデバイス120によって該ビデオのフレームに割り当てられる、連続値であり得る。タイムスタンプフラグ622は、たとえば、タイムスタンプフィールド626が存在することを示すための「1」を含むことができ、また、タイムスタンプフィールド626が存在しないことを示すための「0」を含むことができる。データパケットヘッダ610をパースし、タイムスタンプフィールド626が存在すると決定すると、ソースデバイス120は、タイムスタンプフィールド626中に含まれるタイムスタンプを処理することができる。データパケットヘッダ610をパースし、タイムスタンプフィールド626が存在しないと決定すると、ソースデバイス120は、データパケットヘッダ610中にタイムスタンプフィールドが存在しないので、長さフィールド625をパースした後にペイロードデータ650をパースし始めることができる。
存在する場合、タイムスタンプフィールド626は、ペイロードデータ650のユーザ入力データが取得されたときにワイヤレスシンクデバイス160において表示されていたビデオデータのフレームを識別するためのタイムスタンプを含むことができる。タイムスタンプは、たとえば、ソースデバイス120がシンクデバイス160にビデオのフレームを送信するより前に、ソースデバイス120によってビデオのフレームに追加され得る。したがって、ソースデバイス120は、ビデオのフレームを生成し、そのフレームのビデオデータ中に、たとえばメタデータとして、タイムスタンプを埋め込むことができる。ソースデバイス120は、タイムスタンプとともに、ビデオフレームをシンクデバイス160に送信することができ、シンクデバイス160は、ビデオのフレームを表示することができる。ビデオのフレームがシンクデバイス160によって表示されている間、シンクデバイス160は、ユーザからユーザコマンドを受信することができる。シンクデバイス160がユーザコマンドをソースデバイス120に転送するためにデータパケットを生成するときには、シンクデバイス160は、ユーザコマンドが受信されたときにシンクデバイス160によって表示されていたフレームのタイムスタンプをタイムスタンプフィールド626中に含めることができる。
タイムスタンプフィールド626がヘッダ中に存在するデータパケット600を受信すると、ワイヤレスソースデバイス120は、ペイロードデータ650のユーザ入力データが取得された時にシンクデバイス160において表示されているビデオのフレームを識別し、タイムスタンプによって識別されるフレームのコンテンツに基づいてユーザ入力データを処理することができる。たとえば、ユーザ入力データが、タッチディスプレイに適用されたタッチコマンド、またはマウスポインタのクリックである場合、ソースデバイス120は、ユーザがディスプレイにタッチコマンドを適用したかまたはマウスをクリックした時に表示されているフレームのコンテンツを決定することができる。いくつかの事例では、ペイロードデータを適切に処理するためにフレームのコンテンツが必要とされ得る。たとえば、ユーザタッチまたはマウスクリックに基づくユーザ入力は、タッチまたはクリックの時にディスプレイ上に何が示されていたかに依存し得る。タッチまたはクリックは、たとえば、アイコンまたはメニューオプションに対応し得る。ディスプレイのコンテンツが変化している事例では、タイムスタンプフィールド626中に存在するタイムスタンプは、タッチまたはクリックを正しいアイコンまたはメニューオプションに整合させるために、ソースデバイス120によって使用され得る。
ソースデバイス120は、追加的にまたは代替的に、タイムスタンプフィールド626中のタイムスタンプを、ビデオの現在レンダリングされているフレームに適用されているタイムスタンプと比較し得る。タイムスタンプフィールド626のタイムスタンプを現在のタイムスタンプと比較することによって、ソースデバイス120は、ラウンドトリップ時間を決定することができる。ラウンドトリップ時間は、概して、フレームがソースデバイス120によって送信された時点から、そのフレームに基づくユーザ入力がシンクデバイス160からソースデバイス120に戻って受信された時点までに経過した時間量に対応する。ラウンドトリップ時間は、ソースデバイス120にシステムレイテンシの指示を与えることができ、ラウンドトリップ時間がしきい値よりも大きい場合、ソースデバイス120は、入力コマンドが古いディスプレイフレームに適用されたという仮定の下で、ペイロードデータ650中に含まれているユーザ入力データを無視し得る。ラウンドトリップ時間がしきい値よりも小さいときには、ソースデバイス120は、ユーザ入力データを処理し、ユーザ入力データに応答して、送信されているオーディオ/ビデオコンテンツを調整し得る。しきい値は、プログラマブルであることができ、異なるタイプのデバイス(または異なるソースシンク組合せ)が、許容可能なラウンドトリップ時間について異なるしきい値を定義するように構成され得る。
図6の例では、予約済みフィールド623は、データパケットヘッダ610とペイロードデータ650とをパースする際にソース120によって使用される情報を含まない8ビットフィールドである。ただし、(バージョンフィールド621中で識別される)特定のプロトコルの将来のバージョンが、予約済みフィールド623を利用し得、その場合、ソースデバイス120は、データパケットヘッダ610をパースするために、および/またはペイロードデータ650をパースするために、予約済みフィールド623中の情報を使用し得る。予約済みフィールド623は、バージョンフィールド621とともに、すでに使用中のフォーマットおよび特徴を根本的に変更することなしに、特徴を拡張し、特徴をデータパケットフォーマットに追加するための機能を潜在的に与える。
図6の例では、入力カテゴリーフィールド624は、ペイロードデータ650中に含まれているユーザ入力データについての入力カテゴリーを識別するための4ビットフィールドである。シンクデバイス160は、入力カテゴリーを決定するためにユーザ入力データをカテゴリー分類し得る。ユーザ入力データをカテゴリー分類することは、たとえば、コマンドがそこから受信されたデバイスに基づくか、またはコマンド自体のプロパティに基づき得る。入力カテゴリーフィールド624の値は、場合によってはデータパケットヘッダ610の他の情報とともに、ペイロードデータ650がどのようにフォーマットされているかをソースデバイス120に対して識別する。このフォーマッティングに基づいて、ソースデバイス120は、シンクデバイス160において受信されたユーザ入力を決定するためにペイロードデータ650をパースすることができる。
図6の例では入力カテゴリー624が4ビットであるので、16個の異なる入力カテゴリーが識別され得る可能性がある。1つのそのような入力カテゴリーは、ペイロードデータ650のユーザ入力データが、ソースデバイス120とシンクデバイス160の両方によって実行されているプロトコルにおいて定義される一般情報要素を使用してフォーマットされていることを示すための、一般入力フォーマットであり得る。一般入力フォーマットは、以下でより詳細に説明するように、シンクデバイス160のユーザがアプリケーションレベルでソースデバイス120と対話することを可能にする、一般情報要素を利用し得る。
別のそのような入力カテゴリーは、ペイロードデータ650のユーザ入力データが、入力データを受信するために使用される入力デバイスのタイプに基づいてフォーマットされていることを示すための、ヒューマンインターフェースデバイスコマンド(HIDC:human interface device command)フォーマットであり得る。デバイスのタイプの例は、キーボード、マウス、タッチ入力デバイス、ジョイスティック、カメラ、(カメラベースの入力デバイスなどの)ジェスチャキャプチャデバイス、および遠隔制御装置を含む。入力カテゴリーフィールド624中で識別され得る他のタイプの入力カテゴリーは、ペイロードデータ650中のユーザデータがシンクデバイス160から出ていないことを示すためのフォワーディング入力フォーマット、またはオペレーティングシステム固有フォーマット、およびペイロードデータ650がボイスコマンドを含むことを示すためのボイスコマンドフォーマットを含む。
長さフィールド625は、データパケット600の長さを示すための16ビットフィールドを備え得る。長さは、たとえば、8ビットの単位で示され得る。データパケット600が16ビットのワードでソースデバイス120によってパースされるとき、データパケット600は16ビットの整数までパディングされ得る。長さフィールド625中に含まれている長さに基づいて、ソースデバイス120は、ペイロードデータ650の終了(すなわちデータパケット600の終了)と新しい後続のデータパケットの開始とを識別することができる。
図6の例で与えられるフィールドの様々なサイズは、単に説明を目的としたものであり、それらのフィールドは、図6に示すものとは異なる数のビットを使用して実装され得ることが意図されている。さらに、データパケットヘッダ610は、上記で説明したすべてのフィールドよりも少数のフィールドを含み得るか、または上記で説明していない追加のフィールドを使用し得ることも企図される。実際、本開示の技法は、パケットの様々なデータフィールドのために使用される実際のフォーマットの観点から、フレキシブルであり得る。
ペイロードデータ650のフォーマッティングを決定するためにデータパケットヘッダ610をパースした後、ソースデバイス120は、ペイロードデータ650中に含まれているユーザ入力コマンドを決定するためにペイロードデータ650をパースすることができる。ペイロードデータ650は、ペイロードデータ650のコンテンツを示すそれ自体のペイロードヘッダ(ペイロードヘッダ630)を有し得る。このようにして、ソースデバイス120は、データパケットヘッダ610のパーシングに基づいてペイロードヘッダ630をパースし、次いで、ペイロードヘッダ630のパーシングに基づいて残りのペイロードデータ650をパースし得る。
たとえば、データパケットヘッダ610の入力カテゴリーフィールド624が、一般入力がペイロードデータ650中に存在することを示す場合、ペイロードデータ650は一般入力フォーマットを有し得る。したがって、ソースデバイス120は、一般入力フォーマットに従ってペイロードデータ650をパースすることができる。一般入力フォーマットの一部として、ペイロードデータ650は、各入力イベントがそれ自体の入力イベントヘッダを有する、一連の1つまたは複数の入力イベントを含むことができる。以下の表1は、入力ヘッダ中に含まれ得るフィールドを識別する。
一般入力イベント(IE:input event)識別情報(ID:identification)フィールドは、入力タイプを識別するための一般入力イベント識別情報を識別する。一般IE IDフィールドは、たとえば、長さが1オクテットであり得、以下の表2から選択された識別情報を含み得る。この例のように、一般IE IDフィールドが8ビットである場合、256個の異なるタイプの入力(0〜255と識別される)が識別可能であり得るが、必ずしも256個の識別情報すべてが関連付けられた入力タイプを必要とするわけではない。上記256個の一部は、シンクデバイス160とソースデバイス120とによって実装されているいかなるプロトコルの将来のバージョンとの将来の使用のためにも予約され得る。表2では、たとえば、一般IE ID9〜255は、関連付けられた入力タイプを有しないが、将来、入力タイプを割り当てられ得る。
入力イベントヘッダ中の長さフィールドは、記述フィールドの長さを識別し、記述フィールドは、ユーザ入力を記述する情報要素を含む。記述フィールドのフォーマッティングは、一般IE IDフィールド中で識別される入力のタイプに依存し得る。したがって、ソースデバイス120は、一般IE IDフィールド中で識別される入力タイプに基づいて記述フィールドのコンテンツをパースし得る。入力イベントヘッダの長さフィールドに基づいて、ソースデバイス120は、ペイロードデータ650中の1つの入力イベントの終了と新しい入力イベントの開始とを決定することができる。以下でより詳細に説明するように、1つのユーザコマンドはペイロードデータ650中で1つまたは複数の入力イベントとして記述され得る。
表2は、それぞれ、入力タイプを識別するために使用され得る対応する一般IE IDを用いた、入力タイプの一例を与える。
各入力タイプに関連付けられた記述フィールドは異なるフォーマットを有し得る。左マウスダウン/タッチダウンイベント、左マウスアップ/タッチアップイベント、およびマウス移動/タッチ移動イベントの記述フィールドは、たとえば、以下の表3中で識別される情報要素を含み得るが、他の例では他のフォーマットも使用され得る。
ポインタの数は、入力イベントに関連付けられたタッチまたはマウスクリックの数を識別し得る。各ポインタは、ユニークなポインタIDを有し得る。たとえば、マルチタッチイベントが3本指タッチを含む場合、入力イベントは、それぞれユニークなポインタIDを用いた、3つのポインタを有し得る。各ポインタ(すなわち各指のタッチ)は、そのタッチがどこで行われたかに対応する、対応するx座標およびy座標を有し得る。
単一のユーザコマンドが一連の入力イベントとして記述され得る。たとえば、3本指スワイプが、アプリケーションを閉じるためのコマンドである場合、3本指スワイプは、3つのポインタを用いたタッチダウンイベント、3つのポインタを用いたタッチ移動イベント、および3つのポインタを用いたタッチアップイベントとして、ペイロードデータ650中で記述され得る。タッチダウンイベントの3つのポインタは、タッチ移動イベントおよびタッチアップイベントの3つのポインタと同じポインタIDを有し得る。ソースデバイス120は、それらの3つの入力イベントの組合せを3本指スワイプとして解釈することができる。
キーダウンイベントまたはキーアップイベントの記述フィールドは、たとえば、以下の表4中で識別される情報要素を含み得る。
ズームイベントの記述フィールドは、たとえば、以下の表5中で識別される情報要素を含み得る。
水平スクロールイベントまたは垂直スクロールイベントの記述フィールドは、たとえば、以下の表6中で識別される情報要素を含み得る。
上記の例は、一般入力カテゴリーの場合にペイロードデータがフォーマットされ得るいくつかの例示的な方法を示している。データパケットヘッダ610の入力カテゴリーフィールド624が、フォワーディングされたユーザ入力など、異なる入力カテゴリーを示す場合、ペイロードデータ650は異なる入力フォーマットを有し得る。フォワーディングされたユーザ入力の場合、シンクデバイス160は、サードパーティデバイスからユーザ入力データを受信し、そのユーザ入力データを解釈することなしにその入力をソースデバイス120にフォワーディングし得る。したがって、ソースデバイス120は、フォワーディングされたユーザ入力フォーマットに従ってペイロードデータ650をパースすることができる。たとえば、ペイロードデータ650のペイロードヘッダ630は、ユーザ入力がそこから取得されたサードパーティデバイスを識別するためのフィールドを含み得る。そのフィールドは、たとえば、サードパーティデバイスのインターネットプロトコル(IP)アドレス、MACアドレス、ドメインネーム、または何らかの他のそのような識別子を含み得る。ソースデバイス120は、サードパーティデバイスの識別子に基づいてペイロードデータの残りをパースすることができる。
シンクデバイス160は、一連のメッセージを介してサードパーティデバイスと機能をネゴシエートすることができる。シンクデバイス160は、次いで、機能ネゴシエーションプロセスの一部としてソースデバイス120との通信セッションを確立することの一部としてソースデバイス120にサードパーティデバイスのユニークな識別子を送信することができる。代替的に、シンクデバイス160は、サードパーティデバイスを記述する情報をソースデバイス120に送信し得、その情報に基づいて、ソースデバイス120は、サードパーティデバイスについてのユニークな識別子を決定することができる。サードパーティデバイスを記述する情報は、たとえば、サードパーティデバイスを識別するための情報および/またはサードパーティデバイスの機能を識別するための情報を含み得る。ユニークな識別子がソースデバイス120によって決定されるのかシンクデバイス160によって決定されるのかにかかわらず、シンクデバイス160が、サードパーティデバイスから取得されたユーザ入力をもつデータパケットを送信するときには、シンクデバイス160は、ソースデバイス120がユーザ入力の起点を識別することができるように、ユニークな識別子をデータパケット中に、たとえばペイロードヘッダ中に、含めることができる。
データパケットヘッダ610の入力カテゴリーフィールド624が、ボイスコマンドなど、さらに異なる入力カテゴリーを示す場合、ペイロードデータ650は、さらに異なる入力フォーマットを有することがある。ボイスコマンドの場合、ペイロードデータ650はコード化オーディオを含み得る。ボイスコマンドのオーディオを符号化および復号するためのコーデックが、一連のメッセージを介してソースデバイス120とシンクデバイス160との間でネゴシエートされ得る。ボイスコマンドを送信するために、タイムスタンプフィールド626は音声サンプリング時間値を含み得る。そのような場合、タイムスタンプフラグ622は、タイムスタンプが存在することを示すように設定され得るが、上記で説明したタイムスタンプの代わりに、タイムスタンプフィールド626は、ペイロードデータ650の符号化オーディオについての音声サンプリング時間値を含み得る。
いくつかの例では、ボイスコマンドが、上記で説明したように一般コマンドとして送信され得、その場合、入力カテゴリーフィールド624は、一般コマンドフォーマットを識別するように設定され得、予約済み一般IE IDのうちの1つがボイスコマンドに割り当てられ得る。ボイスコマンドが一般コマンドとして送信される場合、音声サンプリングレートは、データパケットヘッダ610のタイムスタンプフィールド626中に存在し得るか、またはペイロードデータ650中に存在し得る。
キャプチャされたボイスコマンドデータの場合、ボイスデータは、複数の方法でカプセル化され得る。たとえば、ボイスコマンドデータは、コーデックとタイムスタンプとを識別するためにペイロードタイプを提供できるRTPを使用してカプセル化されることができ、そのタイムスタンプは、サンプリングレートを識別するために使用される。RTPデータは、オプションのタイムスタンプを用いてまたは用いずに、上記で説明した一般ユーザ入力フォーマットを使用してカプセル化されることができる。シンクデバイス160は、TPC/IPを使用してソースデバイス120にボイスコマンドデータを搬送する一般入力データを送信することができる。
前に説明したように、座標が、データパケット600などのデータパケットの一部として、たとえばペイロードデータ650中に含まれるとき、その座標は、ネゴシエートされた解像度、ディスプレイウィンドウ座標、正規化座標、またはシンクディスプレイに関連付けられた座標、に基づいてスケーリングされた座標に対応し得る。いくつかの事例では、データパケット中で受信された座標を正規化するためにソースデバイスが使用するために、追加情報がデータパケット中に含まれるかまたは別個に送信され得る。
特定のデータパケットについての入力カテゴリーにかかわらず、データパケットヘッダはアプリケーションレイヤパケットヘッダであり得、データパケットはTCP/IPを通じて送信され得る。TCP/IPは、パケットロスの場合に、シンクデバイス160およびソースデバイス120が再送信技法を実行することを可能にし得る。データパケットは、ソースデバイス120のオーディオデータまたはビデオデータを制御するために、あるいはソースデバイス120上で動作しているアプリケーションを制御するためなどの他の目的で、シンクデバイス160からソースデバイス120に送られ得る。
図7Aは、シンクデバイスとソースデバイスとの間で機能をネゴシエートする例示的な方法のフローチャートである。図示した例示的な方法は、シンクデバイス160(図1A)または360(図3)によって実行され得る。いくつかの例では、コンピュータ可読記憶媒体(たとえば、メモリ332)が、実行されたときに、本明細書で説明するフローチャートのうちの1つまたは複数における示されたステップのうちの1つまたは複数を実行することを1つまたは複数のプロセッサ(たとえば、プロセッサ331)に行わせる、命令、モジュール、またはアルゴリズムを記憶し得る。
図7Aの方法は、シンクデバイス160がソースデバイス120から第1のメッセージを受信する(701)ことを含む。そのメッセージは、たとえば、パラメータ入手要求(get parameter request)を含み得る。第1のメッセージに応答して、シンクデバイス160はソースデバイス120に第2のメッセージを送り得る(703)。第2のメッセージは、たとえば、サポートされる入力カテゴリーの第1のリストとサポートされるタイプの複数の第1のリストとを識別するパラメータ入手応答(get parameter response)を含むことができ、サポートされる入力カテゴリーの第1のリストのサポートされる入力カテゴリーの各々は、サポートされるタイプの関連付けられた第1のリストを有する。サポートされる入力カテゴリーは、たとえば、図6の入力カテゴリーフィールド624のために使用されるのと同じカテゴリーに対応し得る。上記の表2は、特定の入力カテゴリー(この例では一般入力)のためのサポートされるタイプの一例を表す。シンクデバイス160はソースデバイス120から第3のメッセージを受信し得る(705)。第3のメッセージは、たとえば、パラメータ設定要求(set parameter request)を含み得、パラメータ設定要求は、通信のためのポートと、サポートされる入力カテゴリーの第2のリストと、サポートされるタイプの複数の第2のリストとを識別し、サポートされる入力カテゴリーの第2のリストのサポートされる入力カテゴリーの各々は、サポートされるタイプの関連付けられた第2のリストを有し、第2のリストのサポートされるタイプの各々は、第1のリストのタイプのサブセットを含む。シンクデバイス160はソースデバイス120に第4のメッセージを送信し得る(707)。第4のメッセージは、たとえば、第2のリストのタイプが有効にされたことを確認するためのパラメータ設定応答(set parameter response)を備え得る。シンクデバイス160はソースデバイス120から第5のメッセージを受信し得る(709)。第5のメッセージは、たとえば、ソースデバイス120とシンクデバイス160との間の通信チャネルが有効にされたことを示す第2のパラメータ設定要求を含み得る。その通信チャネルは、たとえば、ユーザ入力バックチャネル(UIBC:user input back channel)を備え得る。シンクデバイス160はソースデバイス120に第6のメッセージを送信し得る(711)。第6のメッセージは、たとえば、シンクデバイス160による第2のパラメータ設定要求の受信を確認する第2のパラメータ設定応答を含み得る。
図7Bは、シンクデバイスとソースデバイスとの間で機能をネゴシエートする例示的な方法のフローチャートである。図示した例示的な方法は、ソースデバイス120(図1A)または220(図2)によって実行され得る。いくつかの例では、コンピュータ可読記憶媒体(たとえば、メモリ232)が、実行されたときに、フローチャート中の示したステップのうちの1つまたは複数を実行することを1つまたは複数のプロセッサ(たとえば、プロセッサ231)に行わせる、命令、モジュール、またはアルゴリズムを記憶し得る。
図7Bの方法は、ソースデバイス120がシンクデバイス160に第1のメッセージを送信する(702)ことを含む。第1のメッセージは、たとえば、パラメータ入手要求を含むことができる。ソースデバイス120は、シンクデバイス160から第2のメッセージを受信し得る(704)。第2のメッセージは、たとえば、サポートされる入力カテゴリーの第1のリストとサポートされるタイプの複数の第1のリストとを識別するパラメータ入手応答を含むことができ、サポートされる入力カテゴリーの第1のリストのサポートされる入力カテゴリーの各々は、サポートされるタイプの関連付けられた第1のリストを有する。ソースデバイス120は、シンクデバイス160に第3のメッセージを送信し得る(706)。第3のメッセージは、たとえば、通信のためのポートと、サポートされる入力カテゴリーの第2のリストと、サポートされるタイプの複数の第2のリストとを識別するパラメータ設定要求を含むことができ、サポートされる入力カテゴリーの第2のリストのサポートされる入力カテゴリーの各々は、サポートされるタイプの関連付けられた第2のリストを有し、第2のリストのサポートされるタイプの各々は、第1のリストのタイプのサブセットを含む。ソースデバイス120は、シンクデバイス160から第4のメッセージを受信し得る(708)。第4のメッセージは、たとえば、第2のリストのタイプが有効にされたことを確認するためのパラメータ設定応答を含むことができる。ソースデバイス120は、シンクデバイス160に第5のメッセージを送信し得る(710)。第5のメッセージは、たとえば、ソースデバイス120とシンクデバイス160との間の通信チャネルが有効にされたことを示す第2のパラメータ設定要求を含むことができる。その通信チャネルは、たとえば、ユーザ入力バックチャネル(UIBC)を含み得る。ソースデバイス120は、シンクデバイス160から第6のメッセージを受信し得る(712)。第6のメッセージは、たとえば、シンクデバイス160による第2のパラメータ設定要求の受信を確認する第2のパラメータ設定応答を含むことができる。
図8Aは、本開示による、ワイヤレスシンクデバイスからワイヤレスソースデバイスにユーザ入力データを送信する例示的な方法のフローチャートである。図示した例示的な方法は、シンクデバイス160(図1A)または360(図3)によって実行され得る。いくつかの例では、コンピュータ可読記憶媒体(たとえば、メモリ332)が、実行されたときに、フローチャート中の図示したステップのうちの1つまたは複数を実行することを1つまたは複数のプロセッサ(たとえば、プロセッサ331)に行わせる、命令、モジュール、またはアルゴリズムを記憶し得る。
図8Aの方法は、ワイヤレスシンクデバイス160などのワイヤレスシンクデバイスにおいてユーザ入力データを取得する(801)ことを含む。ユーザ入力データは、たとえば、ワイヤレスシンクデバイス360に関して示したユーザ入力インターフェース376など、ワイヤレスシンクデバイス160のユーザ入力コンポーネントを通じて取得され得る。追加的に、シンクデバイス160は、ユーザ入力データを、たとえば、一般、フォワーディングされた、またはオペレーティングシステム固有として、カテゴリー分類し得る。シンクデバイス160は、次いでユーザ入力データに基づいてデータパケットヘッダを生成し得る(803)。データパケットヘッダは、アプリケーションレイヤパケットヘッダであり得る。データパケットヘッダは、フィールドの中でも特に、ユーザ入力データに対応する入力カテゴリーを識別するためのフィールドを備え得る。入力カテゴリーは、たとえば、一般入力フォーマットまたはヒューマンインターフェースデバイスコマンドを備え得る。シンクデバイス160は、さらにデータパケットを生成し(805)、データパケットは、生成されたデータパケットヘッダおよびペイロードデータを含む。一例では、ペイロードデータは、受信されたユーザ入力データを含み得、1つまたは複数のユーザコマンドを識別し得る。シンクデバイス160は、次いで、ワイヤレスソースデバイス(たとえば、図1Aのソースデバイス120または図2のソースデバイス220)に生成されたデータパケットを送信し得る(807)。シンクデバイス160は、たとえば図3に示したようなトランスポートユニット333およびワイヤレスモデム334を含む、データパケットの転送を可能にするコンポーネントを備え得る。シンクデバイス160はTCP/IPを通じてデータパケットを転送し得る。
図8Bは、本開示による、ワイヤレスソースデバイスにおいてワイヤレスシンクデバイスからユーザ入力データを受信する例示的な方法のフローチャートである。図示した例示的な方法は、ソースデバイス120(図1A)または220(図2)によって実行され得る。いくつかの例では、コンピュータ可読記憶媒体(たとえば、メモリ232)が、実行されたときに、フローチャート中の図示したステップのうちの1つまたは複数を実行することを1つまたは複数のプロセッサ(たとえば、プロセッサ231)に行わせる、命令、モジュール、またはアルゴリズムを記憶し得る。
図8Bの方法は、データパケットを受信する(802)ことを含み、データパケットは、特に、データパケットヘッダとペイロードデータとを含み得る。ペイロードデータは、たとえば、ユーザ入力データを含み得る。ソースデバイス120は、たとえば図2に関して示したような、トランスポートユニット233およびワイヤレスモデム234を含む、データパケットの転送を可能にする通信コンポーネントを備え得る。ソースデバイス120は、次いで、ペイロードデータ中に含まれているユーザ入力データに関連付けられた入力カテゴリーを決定するために、データパケット中に含まれるデータパケットヘッダをパースし得る(804)。ソースデバイス120は、決定された入力カテゴリーに基づいてペイロードデータを処理し得る(806)。図8Aおよび図8Bに関して説明したデータパケットは、概して、図6に関して説明したデータパケットの形態をとることができ、ソースデバイスにおいてオーディオ/ビデオデータおよびアプリケーションを制御するために使用され得る。
図9Aは、本開示に従ってワイヤレスシンクデバイスからワイヤレスソースデバイスにユーザ入力データを送信する例示的な方法のフローチャートである。図示した例示的な方法は、シンクデバイス160(図1A)または360(図3)によって実行され得る。いくつかの例では、コンピュータ可読記憶媒体(たとえば、メモリ332)が、実行されたときに、フローチャート中の図示したステップのうちの1つまたは複数を実行することを1つまたは複数のプロセッサ(たとえば、プロセッサ331)に行わせる、命令、モジュール、またはアルゴリズムを記憶し得る。
図9Aの方法は、ワイヤレスシンクデバイス160などのワイヤレスシンクデバイスにおいてユーザ入力データを取得する(901)ことを含む。ユーザ入力データは、たとえば、図3に関して示したユーザ入力インターフェース376など、ワイヤレスシンクデバイス160のユーザ入力コンポーネントを通じて取得され得る。シンクデバイス160は、次いでペイロードデータを生成し(903)、ペイロードデータはユーザ入力データを記述し得る。一例では、ペイロードデータは、受信されたユーザ入力データを含むことができ、1つまたは複数のユーザコマンドを識別することができる。シンクデバイス160は、さらにデータパケットを生成し得(905)、データパケットは、データパケットヘッダと生成されたペイロードデータとを備える。シンクデバイス160は、次いで、ワイヤレスソースデバイス(たとえば、図1Aのソースデバイス120または図2のソースデバイス220)に生成されたデータパケットを送信し得る(907)。シンクデバイス160は、たとえば、トランスポートユニット333およびワイヤレスモデム334など、データパケットの転送を可能にするコンポーネントを備え得る。データパケットは、TCP/IPを通じてワイヤレスソースデバイスに送信されることができる。
図9Bは、本開示による、ワイヤレスソースデバイスにおいてワイヤレスシンクデバイスからユーザ入力データを受信する例示的な方法のフローチャートである。図示した例示的な方法は、ソースデバイス120(図1A)または220(図2)によって実行され得る。いくつかの例では、コンピュータ可読記憶媒体(たとえば、メモリ232)が、実行されたときに、フローチャート中の図示したステップのうちの1つまたは複数を実行することを1つまたは複数のプロセッサ(たとえば、プロセッサ231)に行わせる、命令、モジュール、またはアルゴリズムを記憶し得る。
図9Bの方法は、シンクデバイス360からデータパケットを受信する(902)ことを含み、データパケットは、特に、データパケットヘッダとペイロードデータとを含み得る。一例では、ペイロードデータは、たとえば、入力タイプ値などのユーザ入力の詳細を記述するデータを備え得る。ソースデバイス120は、たとえば図2に関して示したような、トランスポートユニット233およびワイヤレスモデム234を含む、データパケットの転送を可能にする通信コンポーネントを備え得る。ソースデバイス120は、次いで、ペイロードデータ中の入力タイプフィールド中の入力タイプ値を決定するためにデータパケットをパースし得る(904)。ソースデバイス120は、決定された入力タイプ値に基づいて、ユーザ入力の詳細を記述するデータを処理し得る(906)。図9Aおよび図9Bに関して説明したデータパケットは、概して、図6に関して説明したデータパケットの形態をとり得る。
図10Aは、本開示による、ワイヤレスシンクデバイスからワイヤレスソースデバイスにユーザ入力データを送信する例示的な方法のフローチャートである。図示した例示的な方法は、シンクデバイス160(図1A)または360(図3)によって実行され得る。いくつかの例では、コンピュータ可読記憶媒体(たとえば、メモリ332)が、実行されたときに、フローチャート中の図示したステップのうちの1つまたは複数を実行することを1つまたは複数のプロセッサ(たとえば、プロセッサ331)に行わせる、命令、モジュール、またはアルゴリズムを記憶し得る。
図10Aの方法は、ワイヤレスシンクデバイス160などのワイヤレスシンクデバイスにおいてユーザ入力データを取得する(1001)ことを含む。ユーザ入力データは、たとえば、図3に関して示したようなユーザ入力インターフェース376など、ワイヤレスシンクデバイス160のユーザ入力コンポーネントを通じて取得され得る。シンクデバイス160は、次いでユーザ入力に基づいてデータパケットヘッダを生成し得る(1003)。データパケットヘッダは、フィールドの中でも特に、タイムスタンプフィールドがデータパケットヘッダ中に存在するかどうかを示すためのタイムスタンプフラグ(たとえば、1ビットフィールド)を備え得る。タイムスタンプフラグは、たとえば、タイムスタンプフィールドが存在することを示すための「1」を含むことができ、タイムスタンプフィールドが存在しないことを示すための「0」を含むことができる。タイムスタンプフィールドは、たとえば、ソースデバイス120によって生成されたタイムスタンプを含んでいる16ビットフィールドであり得、送信より前にビデオデータに追加され得る。シンクデバイス160は、さらにデータパケットを生成し(1005)、データパケットは、生成されたデータパケットヘッダとペイロードデータとを含む。一例では、ペイロードデータは、受信されたユーザ入力データを含み得、1つまたは複数のユーザコマンドを識別し得る。シンクデバイス160は、次いでワイヤレスソースデバイス(たとえば、図1Aのソースデバイス120または図2のソースデバイス220)に生成されたデータパケットを送信し得る(1007)。シンクデバイス160は、たとえば図3に関して示したような、トランスポートユニット333およびワイヤレスモデム334を含む、データパケットの転送を可能にするコンポーネントを備え得る。データパケットは、TCP/IPを通じてワイヤレスソースデバイスに送信されることができる。
図10Bは、本開示による、ワイヤレスソースデバイスにおいてワイヤレスシンクデバイスからユーザ入力データを受信する例示的な方法のフローチャートである。図示した例示的な方法は、ソースデバイス120(図1A)または220(図2)によって実行され得る。いくつかの例では、コンピュータ可読記憶媒体(たとえば、メモリ232)が、実行されたときに、フローチャート中の図示したステップのうちの1つまたは複数を実行することを1つまたは複数のプロセッサ(たとえば、プロセッサ231)に行わせる、命令、モジュール、またはアルゴリズムを記憶し得る。
図10Bの方法は、ワイヤレスシンクデバイス160からデータパケットを受信する(1002)ことを含み、データパケットは、特に、データパケットヘッダとペイロードデータとを含み得る。ペイロードデータは、たとえば、ユーザ入力データを含み得る。ソースデバイス120は、たとえば図2に関して示したような、トランスポートユニット233およびワイヤレスモデム234を含む、データパケットの転送を可能にする通信コンポーネントを備え得る。ソースデバイス120は、次いでデータパケット中に含まれるデータパケットヘッダをパースし得る(1004)。ソースデバイス120は、タイムスタンプフィールドがデータパケットヘッダ中に存在するかどうかを決定し得る(1006)。一例では、ソースデバイス120は、データパケットヘッダ中に含まれるタイムスタンプフラグ値に基づいて決定を行うことができる。データパケットヘッダがタイムスタンプフィールドを含む場合、ソースデバイス120は、タイムスタンプフィールド中にあるタイムスタンプに基づいてペイロードデータを処理し得る(1008)。図10Aおよび図10Bに関して説明したデータパケットは、概して、図6に関して説明したデータパケットの形態をとり得、ソースデバイスにおいてオーディオ/ビデオデータを制御するために使用され得る。
図11Aは、本開示による、ワイヤレスシンクデバイスからワイヤレスソースデバイスにユーザ入力データを送信する例示的な方法のフローチャートである。図示した例示的な方法は、シンクデバイス160(図1A)または360(図3)によって実行され得る。いくつかの例では、コンピュータ可読記憶媒体(たとえば、メモリ332)が、実行されたときに、フローチャート中の図示したステップのうちの1つまたは複数を実行することを1つまたは複数のプロセッサ(たとえば、プロセッサ331)に行わせる、命令、モジュール、またはアルゴリズムを記憶し得る。
図11Aの方法は、ワイヤレスシンクデバイス160などのワイヤレスシンクデバイスにおいてユーザ入力データを取得する(1101)ことを含む。ユーザ入力データは、たとえば、図3に関して示したユーザ入力インターフェース376など、ワイヤレスシンクデバイス160のユーザ入力コンポーネントを通じて取得され得る。シンクデバイス160は、次いでユーザ入力に基づいてデータパケットヘッダを生成し得る(1103)。データパケットヘッダは、フィールドの中でも特に、タイムスタンプフィールドを含むことができる。タイムスタンプフィールドは、たとえば、ワイヤレスソースデバイス120によって生成され、ワイヤレスシンクデバイス160に送信された、マルチメディアデータに基づくタイムスタンプを含む、16ビットフィールドを備え得る。タイムスタンプは、ワイヤレスシンクデバイスに送信されるより前に、ワイヤレスソースデバイス120によってビデオデータのフレームに追加されていることがある。タイムスタンプフィールドは、たとえば、ユーザ入力データがキャプチャされた時にワイヤレスシンクデバイス160において表示されているビデオデータのフレームに関連付けられたタイムスタンプを識別し得る。シンクデバイス160は、データパケットをさらに生成し(1105)、データパケットは、生成されたデータパケットヘッダとペイロードデータとを含む。一例では、ペイロードデータは、受信されたユーザ入力データを含み得、1つまたは複数のユーザコマンドを識別し得る。シンクデバイス160は、次いで、ワイヤレスソースデバイス(たとえば、図1Aのソースデバイス120または図2のソースデバイス220)に生成されたデータパケットを送信し得る(1107)。シンクデバイス160は、たとえば図3に関して示したような、トランスポートユニット333およびワイヤレスモデム334を含む、データパケットの転送を可能にするコンポーネントを備え得る。データパケットはTCP/IPを通じてワイヤレスソースデバイスに送信され得る。
図11Bは、本開示による、ワイヤレスソースデバイスにおいてワイヤレスシンクデバイスからユーザ入力データを受信する例示的な方法のフローチャートである。図示した例示的な方法は、ソースデバイス120(図1A)または220(図2)によって実行され得る。いくつかの例では、コンピュータ可読記憶媒体(たとえば、メモリ232)が、実行されたときに、フローチャート中の図示したステップのうちの1つまたは複数を実行することを1つまたは複数のプロセッサ(たとえば、プロセッサ231)に行わせる、命令、モジュール、またはアルゴリズムを記憶し得る。
図11Bの方法は、ワイヤレスシンクデバイス160などのワイヤレスシンクデバイスからデータパケットを受信する(1102)ことを含み、データパケットは、特に、データパケットヘッダとペイロードデータとを含み得る。ペイロードデータは、たとえば、ユーザ入力データを含み得る。ソースデバイス120は、たとえば図2に関して示したような、トランスポートユニット233およびワイヤレスモデム234を含む、データパケットの転送を可能にする通信コンポーネントを備え得る。ソースデバイス120は、次いでデータパケットヘッダ中のタイムスタンプフィールドを識別し得る(1104)。ソースデバイス120は、タイムスタンプフィールド中にあるタイムスタンプに基づいてペイロードデータを処理し得る(1106)。ペイロードデータを処理することの一部として、上記タイムスタンプに基づいて、ソースデバイス120は、ユーザ入力データが取得された時にワイヤレスシンクデバイスにおいて表示されているビデオデータのフレームを識別し、そのフレームのコンテンツに基づいてペイロードデータを解釈することができる。タイムスタンプに基づいてペイロードデータを処理することの一部として、ソースデバイス120は、上記タイムスタンプを、ソースデバイス120によって送信されているビデオの現在のフレームに関する現在のタイムスタンプと比較することができ、上記タイムスタンプと現在のタイムスタンプとの間の時間差がしきい値よりも小さいことに応答して、ペイロードデータ中で記述されたユーザ入力コマンドを実行する、または上記タイムスタンプと現在のタイムスタンプとの間の時間差がしきい値よりも大きいことに応答して、ペイロードデータ中で記述されたユーザ入力コマンドを実行しないことができる。図11Aおよび図11Bに関して説明したデータパケットは、概して、図6に関して説明したデータパケットの形態をとり得、ソースデバイスにおいてオーディオ/ビデオデータを制御するために使用され得る。
図12Aは、本開示による、ワイヤレスシンクデバイスからワイヤレスソースデバイスにユーザ入力データを送信する例示的な方法のフローチャートである。図示した例示的な方法は、シンクデバイス160(図1A)または360(図3)によって実行され得る。いくつかの例では、コンピュータ可読記憶媒体(たとえば、メモリ332)が、実行されたときに、フローチャート中の図示したステップのうちの1つまたは複数を実行することを1つまたは複数のプロセッサ(たとえば、プロセッサ331)に行わせる、命令、モジュール、またはアルゴリズムを記憶し得る。
図12Aの方法は、ワイヤレスシンクデバイス160などのワイヤレスシンクデバイスにおいてユーザ入力データを取得する(1201)ことを含む。一例では、ユーザ入力データはボイスコマンドデータであり得、ボイスコマンドデータは、たとえば、図3中のユーザ入力インターフェース376中に含まれるボイスコマンド認識モジュールなど、ワイヤレスシンクデバイス160のユーザ入力コンポーネントを通じて取得され得る。シンクデバイス160は、ユーザ入力に基づいてデータパケットヘッダを生成し得る(1203)。シンクデバイス160は、また、ペイロードデータも生成することができ(1205)、ペイロードデータはボイスコマンドデータを含み得る。一例では、ペイロードデータは、また、受信されたユーザ入力データも含み得、1つまたは複数のユーザコマンドを識別し得る。シンクデバイス160は、さらにデータパケットを生成し(1207)、データパケットは、生成されたデータパケットヘッダとペイロードデータとを備える。シンクデバイス160は、次いでワイヤレスソースデバイス(たとえば、図1Aのソースデバイス120または図2のソースデバイス220)に生成されたデータパケットを送信し得る(1209)。シンクデバイス160は、たとえば図3に関して示したような、トランスポートユニット333およびワイヤレスモデム334を含む、データパケットの転送を可能にするコンポーネントを備え得る。データパケットは、TCP/IPを通じてワイヤレスソースデバイスに送信されることができる。
図12Bは、本開示による、ワイヤレスソースデバイスにおいてワイヤレスシンクデバイスからユーザ入力データを受信する例示的な方法のフローチャートである。図示した例示的な方法は、ソースデバイス120(図1A)または220(図2)によって実行され得る。いくつかの例では、コンピュータ可読記憶媒体(たとえば、メモリ232)が、実行されたときに、フローチャート中の図示したステップのうちの1つまたは複数を実行することを1つまたは複数のプロセッサ(たとえば、プロセッサ231)に行わせる、命令、モジュール、またはアルゴリズムを記憶し得る。
図12Bの方法は、データパケットを受信する(1202)ことを含み、データパケットは、特に、データパケットヘッダとペイロードデータとを含み得る。ペイロードデータは、たとえば、ボイスコマンドデータなどのユーザ入力データを含み得る。ソースデバイス120は、たとえば図2に関して示したような、トランスポートユニット233およびワイヤレスモデム234を含む、データパケットの転送を可能にする通信コンポーネントを備え得る。ソースデバイス120は、次いで、ペイロードデータがボイスコマンドデータを含むかどうかを決定するために、データパケット中に含まれるペイロードデータをパースし得る(1204)。図12Aおよび図12Bに関して説明したデータパケットは、概して、図6に関して説明したデータパケットの形態をとり得、ソースデバイスにおいてオーディオ/ビデオデータを制御するために使用され得る。
図13Aは、本開示による、ワイヤレスシンクデバイスからワイヤレスソースデバイスにユーザ入力データを送信する例示的な方法のフローチャートである。図示した例示的な方法は、シンクデバイス160(図1A)または360(図3)によって実行され得る。いくつかの例では、コンピュータ可読記憶媒体(たとえば、メモリ332)が、実行されたときに、フローチャート中の図示したステップのうちの1つまたは複数を実行することを1つまたは複数のプロセッサ(たとえば、プロセッサ331)に行わせる、命令、モジュール、またはアルゴリズムを記憶し得る。
図13Aの方法は、ワイヤレスシンクデバイス160などのワイヤレスシンクデバイスにおいてユーザ入力データを取得する(1301)ことを含む。一例では、ユーザ入力データはマルチタッチジェスチャであり得、マルチタッチジェスチャは、たとえば、UI167または図3のユーザ入力インターフェース376など、ワイヤレスシンクデバイス160のユーザ入力コンポーネントを通じて取得され得る。一例では、マルチタッチジェスチャは、第1のタッチ入力と第2のタッチ入力とを含み得る。シンクデバイス160は、ユーザ入力に基づいてデータパケットヘッダを生成し得る(1303)。シンクデバイス160は、また、ペイロードデータも生成し得(1305)、ペイロードデータは、第1のタッチ入力イベントについてのユーザ入力データを第1のポインタ識別情報に関連付け、第2のタッチ入力イベントについてのユーザ入力データを第2のポインタ識別情報に関連付け得る。シンクデバイス160は、さらにデータパケットを生成し得(1307)、データパケットは、生成されたデータパケットヘッダとペイロードデータとを含む。シンクデバイス160は、次いで、ワイヤレスソースデバイス(たとえば、図1Aのソースデバイス120または図2のソースデバイス220)に生成されたデータパケットを送信し得る(1309)。シンクデバイス160は、たとえば図3に関して示したような、トランスポートユニット333およびワイヤレスモデム334を含む、データパケットの転送を可能にするコンポーネントを備え得る。データパケットはTCP/IPを通じてワイヤレスソースデバイスに送信され得る。
図13Bは、本開示による、ワイヤレスソースデバイスにおいてワイヤレスシンクデバイスからユーザ入力データを受信する例示的な方法のフローチャートである。図示した例示的な方法は、ソースデバイス120(図1A)または220(図2)によって実行され得る。いくつかの例では、コンピュータ可読記憶媒体(たとえば、メモリ232)が、実行されたときに、フローチャート中の図示したステップのうちの1つまたは複数を実行することを1つまたは複数のプロセッサ(たとえば、プロセッサ231)に行わせる、命令、モジュール、またはアルゴリズムを記憶し得る。
図13Bの方法は、データパケットを受信する(1302)ことを含み、データパケットは、特に、データパケットヘッダとペイロードデータとを含み得る。ペイロードデータは、たとえば、マルチタッチジェスチャなどのユーザ入力データを含み得る。ソースデバイス120は、たとえば図2に示したような、トランスポートユニット233およびワイヤレスモデム234を含む、データパケットの転送を可能にする通信コンポーネントを備え得る。ソースデバイス120は、次いで、ペイロードデータ中に含まれるユーザ入力データを識別するために、データパケット中に含まれるペイロードデータをパースし得る(1304)。一例では、識別されたデータは、第1のポインタ識別情報を用いた第1のタッチ入力イベントについてのユーザ入力データと、第2のポインタ識別情報を用いた第2のタッチ入力イベントについてのユーザ入力データとを含み得る。ソースデバイス120は、次いで、第1のタッチ入力イベントについてのユーザ入力データと第2のタッチ入力イベントについてのユーザ入力データとをマルチタッチジェスチャとして解釈し得る(1306)。図13Aおよび図13Bに関して説明したデータパケットは、概して、図6に関して説明したデータパケットの形態をとり得、ソースデバイスにおいてオーディオ/ビデオデータを制御するために使用され得る。
図14Aは、本開示による、ワイヤレスシンクデバイスからワイヤレスソースデバイスにユーザ入力データを送信する例示的な方法のフローチャートである。図示した例示的な方法は、シンクデバイス160(図1A)または360(図3)によって実行され得る。いくつかの例では、コンピュータ可読記憶媒体(たとえば、メモリ332)が、実行されたときに、フローチャート中の図示したステップのうちの1つまたは複数を実行することを1つまたは複数のプロセッサ(たとえば、プロセッサ331)に行わせる、命令、モジュール、またはアルゴリズムを記憶し得る。
図14Aの方法は、外部デバイスからワイヤレスシンクデバイス360においてユーザ入力データを取得する(1401)ことを含む。一例では、外部デバイスは、シンクデバイスに接続されたサードパーティデバイスであり得る。シンクデバイス160は、ユーザ入力に基づいてデータパケットヘッダを生成し得る(1403)。一例では、データパケットヘッダは、ユーザ入力データをフォワーディングされたユーザ入力データとして識別し得る。シンクデバイス160は、また、ペイロードデータも生成し(1405)、ペイロードデータはユーザ入力データを含み得る。シンクデバイス160は、さらにデータパケットを生成し得(1407)、データパケットは、生成されたデータパケットヘッダとペイロードデータとを含み得る。シンクデバイス160は、次いで、ワイヤレスソースデバイス(たとえば、図1Aのソースデバイス120または図2のソースデバイス220)に生成されたデータパケットを送信し得る(1409)。シンクデバイス160は、たとえば図3に関して示したような、トランスポートユニット333およびワイヤレスモデム334を含む、データパケットの転送を可能にするコンポーネントを備え得る。データパケットはTCP/IPを通じてワイヤレスソースデバイスに送信され得る。
図14Bは、本開示による、ワイヤレスソースデバイスにおいてワイヤレスシンクデバイスからユーザ入力データを受信する例示的な方法のフローチャートである。図示した例示的な方法は、ソースデバイス120(図1A)または220(図2)によって実行され得る。いくつかの例では、コンピュータ可読記憶媒体(たとえば、メモリ232)が、実行されたときに、フローチャート中の図示したステップのうちの1つまたは複数を実行することを1つまたは複数のプロセッサ(たとえば、プロセッサ231)に行わせる、命令、モジュール、またはアルゴリズムを記憶し得る。
図14Bの方法は、データパケットを受信する(1402)ことを含み、データパケットは、特に、データパケットヘッダとペイロードデータとを含み得る。ペイロードデータは、たとえば、ユーザ入力データがサードパーティデバイスからフォワーディングされたことを示すフォワーディングされたユーザ入力コマンドなどのユーザ入力データを含み得る。ソースデバイス120は、たとえば図2に関して示したような、トランスポートユニット233およびワイヤレスモデム234を含む、データパケットの転送を可能にする通信コンポーネントを備え得る。ソースデバイス120は、次いでデータパケットヘッダをパースし、ペイロードデータがフォワーディングされたユーザ入力コマンドを含むと決定し得る(1404)。ソースデバイス120は、次いで、フォワーディングされたユーザ入力コマンドに対応するサードパーティデバイスに関連付けられた識別情報を識別するために、データパケット中に含まれるペイロードデータをパースし得る(1406)。ソースデバイス120は、次いで、サードパーティデバイスの識別された識別情報に基づいてペイロードデータを処理し得る(1408)。図14Aおよび図14Bに関して説明したデータパケットは、概して、図6に関して説明したデータパケットの形態をとり得、ソースデバイスにおいてオーディオ/ビデオデータを制御するために使用され得る。
図15Aは、本開示に従ってワイヤレスシンクデバイスからワイヤレスソースデバイスにユーザデータを送信する例示的な方法のフローチャートである。図示した例示的な方法は、シンクデバイス160(図1A)または360(図3)によって実行され得る。いくつかの例では、コンピュータ可読記憶媒体(たとえば、メモリ332)が、実行されたときに、フローチャート中の図示したステップのうちの1つまたは複数を実行することを1つまたは複数のプロセッサ(たとえば、プロセッサ331)に行わせる、命令、モジュール、またはアルゴリズムを記憶し得る。
図15Aの方法は、ワイヤレスシンクデバイスにおいてユーザ入力データを取得する(1501)ことを含む。ユーザ入力データは、関連付けられた座標データを有し得る。関連付けられた座標データは、たとえば、マウスクリックイベントのロケーションまたはタッチイベントのロケーションに対応し得る。シンクデバイス160は、次いで、正規化座標データを生成するために、関連付けられた座標データを正規化し得る(1503)。シンクデバイス160は、次いで、正規化座標データを含むデータパケットを生成し得る(1505)。座標データを正規化することは、ディスプレイウィンドウの解像度と、ソースデバイス120のディスプレイ22などのソースのディスプレイの解像度との比に基づいて、関連付けられた座標データをスケーリングすることを含むことができる。ディスプレイウィンドウの解像度は、シンクデバイス160によって決定されることができ、ソースデバイスのディスプレイの解像度は、ソースデバイス120から受信されることができる。シンクデバイス160は、次いで、ワイヤレスソースデバイス120に正規化座標をもつデータパケットを送信し得る(1507)。図15Aの方法の一部として、シンクデバイス160はまた、関連付けられた座標データが、ワイヤレスソースデバイスから受信されているコンテンツのためのディスプレイウィンドウ内にあるかどうかを決定し、たとえば、関連付けられた座標データがディスプレイウィンドウ外にある場合はユーザ入力をローカルで処理し、その入力がディスプレイウィンドウ内にある場合は上述のように座標を正規化することができる。
図15Bは、本開示による、ワイヤレスソースデバイスにおいてワイヤレスシンクデバイスからユーザ入力データを受信する例示的な方法のフローチャートである。図示した例示的な方法は、ソースデバイス120(図1A)または220(図2)によって実行され得る。いくつかの例では、コンピュータ可読記憶媒体(たとえば、メモリ232)が、実行されたときに、フローチャート中の図示したステップのうちの1つまたは複数を実行することを1つまたは複数のプロセッサ(たとえば、プロセッサ231)に行わせる、命令、モジュール、またはアルゴリズムを記憶し得る。
図15Bの方法は、ワイヤレスソースデバイスにおいてデータパケットを受信することを含み、データパケットは、関連付けられた座標データをもつユーザ入力データを備える(1502)。関連付けられた座標データは、たとえば、シンクデバイスにおけるマウスクリックイベントのロケーションまたはタッチイベントのロケーションに対応し得る。ソースデバイス120は、次いで、正規化座標データを生成するために、関連付けられた座標データを正規化し得る(1504)。ソースデバイス120は、ディスプレイウィンドウの解像度とソースのディスプレイの解像度との比に基づいて、関連付けられた座標データをスケーリングすることによって、座標データを正規化することができる。ソースデバイス120は、ソースデバイスのディスプレイの解像度を決定することができ、ワイヤレスシンクデバイスからディスプレイウィンドウの解像度を受信することができる。ソースデバイスは、次いで、正規化座標データに基づいてデータパケットを処理し得る(1506)。図15Aおよび図15Bに関して説明したデータパケットは、概して、図6に関して説明したデータパケットの形態をとり得、ソースデバイスにおいてオーディオ/ビデオデータを制御するために使用され得る。
説明を簡単にするために、図7〜図15を参照しながら本開示の態様について別個に説明した。ただし、これらの様々な態様は、別個にだけでなく、互いに関連して組み合わせられ、使用され得ることが企図される。概して、本明細書で説明する機能および/またはモジュールは、ワイヤレスソースデバイスとワイヤレスシンクデバイスのいずれかまたは両方において実装され得る。このようにして、本例で説明したユーザインターフェース機能は、ワイヤレスソースデバイスとワイヤレスシンクデバイスとの間で互換的に使用され得る。
本開示の技法は、ワイヤレスハンドセット、および集積回路(IC)またはICのセット(すなわち、チップセット)を含む、多種多様なデバイスまたは装置において実装され得る。機能的態様を強調するために任意のコンポーネント、モジュールまたはユニットについて説明し、提示したが、それらの任意のコンポーネント、モジュールまたはユニットは、異なるハードウェアユニットによる実現を必ずしも必要とするとは限らない。
したがって、本明細書で説明する技法は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せで実装され得る。ハードウェアで実装される場合、モジュール、ユニットまたはコンポーネントとして説明した特徴は、集積論理デバイスに一緒に、または個別であるが相互運用可能な論理デバイスとして別々に実装され得る。ソフトウェアで実装される場合、これらの技法は、プロセッサで実行されたとき、上記で説明した方法のうちの1つまたは複数を実行する、命令を備えるコンピュータ可読媒体によって少なくとも部分的に実現され得る。コンピュータ可読媒体は、有形で非一時的なコンピュータ可読記憶媒体を備え得、パッケージング材料を含むことがあるコンピュータプログラム製品の一部を形成し得る。コンピュータ可読記憶媒体は、シンクロナスダイナミックランダムアクセスメモリ(SDRAM)などのランダムアクセスメモリ(RAM)、読取り専用メモリ(ROM)、不揮発性ランダムアクセスメモリ(NVRAM)、電気的消去可能プログラマブル読取り専用メモリ(EEPROM)、フラッシュメモリ、磁気または光学データ記憶媒体などを備え得る。本技法は、追加または代替として、命令またはデータ構造の形態でコードを搬送または通信し、コンピュータによってアクセスされ、読み取られ、および/または実行され得るコンピュータ可読通信媒体によって少なくとも部分的に実現され得る。
コードは、1つまたは複数のデジタル信号プロセッサ(DSP)など、1つまたは複数のプロセッサ、汎用マイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブル論理アレイ(FPGA)、または他の等価な集積回路またはディスクリート論理回路によって実行され得る。したがって、本明細書で使用する「プロセッサ」という用語は、前述の構造、または本明細書で説明した技法の実装に好適な他の構造のいずれかを指すことがある。さらに、いくつかの態様では、本明細書で説明した機能は、符号化および復号のために構成された専用のソフトウェアモジュールまたはハードウェアモジュール内に提供されるか、あるいは複合ビデオコーデックに組み込まれ得る。また、本技法は、1つまたは複数の回路または論理要素中に十分に実装され得る。
本開示の様々な態様について説明した。これらおよび他の態様は以下の特許請求の範囲内にある。