RAW10形式の入力データをCX24 MIPI CSI-2の16/24ビット出力形式にストリーミングする - KBA224387 - Community Translated (JA)
- RSS フィードを購読する
- 新着としてマーク
- 既読としてマーク
- ブックマーク
- 購読
- 印刷用ページ
- 不適切なコンテンツを報告
Community Translated by NoTa_4591161 Version: **
Translation - English: Streaming RAW10 Format Input Data to 16/24-bit Output Format in CX3 MIPI CSI-2 - KBA224387
注:この記事の内容の詳細については、AN90369-MIPI CSI-2イメージセンサーとEZ-USB®CX3のインターフェース方法をご参照願います。
1. CX3はどのようにして入力RAW10フォーマットを16/24ビット出力フォーマットにパックしますか?
回答:
CX3には、シリアルMIPIデータをパラレル形式に変換するMIPI CSI-2レシーバーがあります。パラレルデータは、固定GPIF IIブロックによってサンプリングされ、DMAチャネルを介してUSBに送信されます。
図1に示すように、CX3コンフィグレーションユーティリティを使用して、入力データ形式と出力データ形式を選択できます。
イメージセンサーがRAW 10データを1080p、30 fpsでストリーミングしていると仮定します。
- 入力データ形式としてRAW 10、出力データ形式として16ビットを選択し、[Image Sensor Configuration]タブで1080pを30 fpsでストリーミングするために必要なその他の詳細を指定します。
- 図2に示すように、[CX3 Receiver Configuration]タブに移動してMIPI CSI-2レシーバーブロックパラメーターを調整します。MIPICSI-2入力でのデータ形式はRAW10で、CX3 MIPIインターフェイスコンフィグレーションでのデータ形式はRAW10です。これは、MIPI CSI-2が入力シリアルRAW10データをパラレル10ビットデータに変換していることを意味します。
- ただし、固定GPIF IIは8/16/24ビットデータバスの設定をサポートしています。この例では、GPIF IIは16ビットデータバスモードで設定されています。したがって、1クロックあたり16ビットをサンプリングします。16ビットのうち10ビットのみが実際のデータであり、残りの6ビットは各クロックに追加のビットが埋め込まれます。これにより、ピクセルサイズが実際のピクセルサイズの1.6倍に増加します。したがって、フレームサイズは実際のフレームサイズの1.6倍に増加します。ピクセルごとに追加の6ビットを削除し、ホストアプリケーションで実際のフレームサイズを表示する必要があります。
図1. イメージセンサーの設定
図2. CX3 MIPIレシーバーの設定
上記の設定のMIPI CSI-2の設定は次のとおりです。
/* XYZ_Sensor_RAW10_Resolution0 : */
CyU3PMipicsiCfg_t XYZ_Sensor_RAW10_Resolution0 =
{
CY_U3P_CSI_DF_RAW10, /* CyU3PMipicsiDataFormat_t dataFormat */
2, /* uint8_t numDataLanes */
2, /* uint8_t pllPrd */
89, /* uint16_t pllFbd */
CY_U3P_CSI_PLL_FRS_250_500M, /* CyU3PMipicsiPllClkFrs_t pllFrs */
CY_U3P_CSI_PLL_CLK_DIV_4, /* CyU3PMipicsiPllClkDiv_t csiRxClkDiv */
CY_U3P_CSI_PLL_CLK_DIV_4, /* CyU3PMipicsiPllClkDiv_t parClkDiv */
0, /* uint16_t mClkCtl */
CY_U3P_CSI_PLL_CLK_DIV_2, /* CyU3PMipicsiPllClkDiv_t mClkRefDiv */
1920, /* uint16_t hResolution */
50 /* uint16_t fifoDelay */
};
これらの追加のピクセルあたり6ビットは、上記のMIPIの設定でCY_U3P_CSI_DF_RAW10をCY_U3P_CSI_DF_YUV422_8_2に置き換えるか、イメージセンサーの設定で出力データ形式として24ビットを選択することで削除できます。
MIPI CSIの設定で保持される出力データ形式は、ゼロのパディングを決定し、ストリーミングビデオデータ形式には影響しないことに注意してください。
これらの2つのケースについては、以下で説明します。
A. CY_U3P_CSI_DF_RAW10をCY_U3P_CSI_DF_YUV422_8_2で置き換える
CY_U3P_CSI_DF_YUV422_8_2を出力データ形式として設定すると、入ってくるRAW10データを16ビットパラレルデータにパッキングし、MIPI CSI2パラレルインターフェイス経由で送信できます。この場合、追加の埋め込みビットはありません。
この場合に変更されるのは、cyu3mipicsi.cの出力データ形式のみであることに注意してください。CX3 Receiver Configurationタブのクロック設定は変更されません。したがって、この設定は、クロック設定の変更が必要な場合には機能しない可能性があります。この問題が発生した場合は、サイプレステクニカルサポートにお問い合わせください。
RAW 10入力データ形式の16ビットへのパッキングは、次のように行われます。
- 図3に示すように、MIPI CSI2は標準のRAW 10形式でデータを受信します(出典:カメラシリアルインターフェイス2(CSI-2)のMIPIアライアンス仕様)
- 入力シリアルRAW 10データは、次のようにパラレル16ビットデータに変換されます。これはGPIF IIによってサンプリングされます。
つまり、各クロックサイクルで、GPIF IIは16ビットデータを受信します。
- 最初のクロックサイクル:P1[9:2] P2[9:2]
- 2番目のクロックサイクル:P3[9:2], P4[9:2]
- 3番目のクロックサイクル:P1[1:0], P2[1:0], P3[1:0], P4[1:0]; P5[9:2]
- 4番目のサイクル–など
図3. RAW 10送信(出典:カメラシリアルインターフェイス2のMIPIアライアンス仕様)
出力データ形式として16ビットを選択する場合、GPIF IIは16ビットデータバス形式で設定する必要があることに注意してください。RAW 10を16ビット形式にパックするには、フレームのラインサイズが16ビットの倍数でなければならないという制約があります。
B. 出力データ形式として24ビットを選択する
[Image Sensor Configuration]タブで出力データ形式として24ビットを設定すると、入ってくるRAW10データを24ビットのパラレルデータにパッキングして、MIPI CSI2パラレルインターフェイス経由で送信できます。この場合、追加の埋め込みビットはありません。
入力シリアルRAW 10データは、次のようにパラレル24ビットデータに変換され、GPIF IIによってサンプリングされます。
つまり、各クロックサイクルで、GPIF IIは24ビットデータを受信します。
- 最初のクロックサイクル
- 2番目のクロックサイクル
- 3番目のクロックサイクルなど。
出力データ形式として24ビットを選択する場合、GPIF IIは24ビットデータバス形式で構成する必要があることに注意してください。RAW 10を24ビット形式にパックするには、フレームのラインサイズが24ビットの倍数でなければならないという制約があります。
2. USBディスクリプタとプローブコントロールストラクチャをRAW 10形式でストリーミングするように設定するにはどうすればよろしいでしょうか?
Microsoftの標準UVCドライバーは、Microsoftが提供するGUID値を使用してUVCデバイスからビデオをストリーミングします。標準ドライバーはRAWビデオ形式をストリーミングできません。MicrosoftがRAWビデオ形式に提供するGUIDはありません。したがって、標準のUVCドライバーはRAW形式のビデオをストリーミングしません。
ただし、次の代替方法を使用して、再生に大きな制限があるRAW形式のビデオをストリーミングできます。完全に機能するビデオ再生のためにホストアプリケーションをカスタマイズする必要があります。
1. Microsoftによって定義されたGUID(たとえば、YUY2形式のGUID)を非圧縮ビデオストリーミング(VS)形式ディスクリプタで使用します。
2. CX3のMIPIブリッジの入力および出力データ形式に基づいて、USBディスクリプタ(非圧縮VSフォーマットディスクリプタおよび非圧縮VSフレームディスクリプタ)およびプローブコントロールストラクチャを設定します。[BJ1]
これらの設定により、UVCドライバーはUVCデータをストリーミングします。ホストアプリケーションは、手順1で割り当てたGUID値に従ってデータをデコードします。ただし、ホストアプリケーションで正確なビデオを表示することはできません。代わりに、入ってくるビデオがRAW形式であり、ホストアプリケーションが標準形式(YUY2)としてデコードするため、いくつかの色[BJ2]が表示されます。再生機能は大幅に削減されていますが、このアプローチを使用してUVCデバイスをデバッグできます。
MIPI出力データ形式の3つのバリアントを使用してRAW 10ビデオ形式をストリーミングするためのUVCディスクリプタとプローブコントロールストラクチャの例を以下に示します。この例で示すように、ファームウェアのUVCディスクリプタとプローブコントロールストラクチャに必要な変更を加えます。完全に機能するビデオ再生を取得するには、ホストアプリケーションをカスタマイズする必要があります。
例1:RAW 10出力データ形式(CY_U3P_CSI_DF_RAW10)
1920 x 1080の解像度を30 fpsでRAW 10形式でストリーミングし、次の値を使用するとします。
- Width in pixel : 1920
- Height in pixel : 1080
- Bits per pixel : 10
- Frames per second : 30
- Frame size : 1920 x 1080 x 10 bits
- Bit rate : 1920 x 1080 x 10 x 30 bits per second
この設定では、GPIF IIインターフェイスをRAW 10 MIPI出力形式の16ビットパラレルデータインターフェイスに設定する必要があるため、各ピクセルに6ビットのパディングがあり、フレームサイズが大きくなります。上記の計算は次のように変更されます。
- Width in pixel : 1920
- Height in pixel : 1080
- Bits per pixel :16 (due to padded 6 bits per pixel)
- Frames per second : 30
- Frame size : 1920 x 1080 x 16 bits
- Bit rate : 1920 x 1080 x 16 x 30 bits per second
USBディスクリプタとプローブコントロールストラクチャは次のとおりです。
/* クラス固有の非圧縮VSフォーマットディスクリプタ */
0x1B, /* ディスクリプタサイズ */
CX3_CS_INTRFC_DESCR, /* クラス固有のVSインターフェイスタイプ */
0x04, /* サブタイプ:VS_FORMAT_UNCOMPRESSED */
0x01, /* フォーマットディスクリプタインデックス */
0x04, /* この記述子に続くフレームディスクリプタの数:3 */
/* GUID、ストリーミングエンコード形式の識別に使用されるグローバルに一意の識別子:YUY2 */
0x59, 0x55, 0x59, 0x32, /* MEDIASUBTYPE_YUY2 GUID:32595559-0000-0010-8000-00AA00389B71 */
0x00, 0x00, 0x10, 0x00,
0x80, 0x00, 0x00, 0xAA,
0x00, 0x38, 0x9B, 0x71,
0x10, /* ピクセルあたりのビット数:16 */
0x01, /* このストリームの最適フレームインデックス:2(1080p) */
0x00, /* 画像のアスペクト比のX次元。ノンインターレース */
0x00, /* 画像のアスペクト比のY次元:ノンインターレース */
0x00, /* インターレースフラグ:プログレッシブスキャン、インターレースなし */
0x00, /* ビデオストリーム制限の複製:0-制限なし */
/ *クラス固有の非圧縮VSフレームディスクリプタ - 1080p @ 30fps * /
0x1E, /* ディスクリプタサイズ */
CX3_CS_INTRFC_DESCR, /* ディスクリプタタイプ */
0x05, /* サブタイプ:非圧縮フレームインターフェイス */
0x01, /* フレーム記述子インデックス:1 */
0x00, /* 静止画像のキャプチャはサポートされていません */
0x80, 0x07, /* ピクセル単位の幅:1920 */
0x38, 0x04, /* 高さ(ピクセル):1080 */
0x00, 0x80, 0x53, 0x3B, /* 最小ビットレート(ビット/秒):1080 x 1920 x 16 x 30 = 995328000 */
0x00, 0x80, 0x53, 0x3B, /* 最大ビットレート(ビット/秒):固定レートなので最小と同じ */
0x00, 0x48, 0x3F, 0x00, /* 最大ビデオまたは静止フレームサイズ(バイト)(非推奨:1920x1080 x2 */
0x15, 0x16, 0x05, 0x00, /* デフォルトのフレーム間隔(100ns単位):(1/30)x10 ^ 7 */
0x01, /* フレーム間隔タイプ:離散間隔の数 */
0x15, 0x16, 0x05, 0x00, /* フレーム間隔3:デフォルトのフレーム間隔と同じ */
/* UVCプローブコントロールストラクチャ - 1080p @ 30FPS */
uint8_t const gl1080pProbeCtrl[CX3_APP_MAX_PROBE_SETTING] = {
0x00, 0x00, /* bmHint:固定パラメーターなし */
0x01, /* 最初のビデオ形式インデックスを使用 */
0x01, /* 最初のビデオフレームインデックスを使用 */
0x15, 0x16, 0x05, 0x00, /* 100nsでの必要なフレーム間隔=(1/30)x10 ^ 7 */
0x00, 0x00, /* キーフレーム/ビデオフレーム単位のキーフレームレート*/
0x00, 0x00, /* PFrameのPFrameレート/キーフレーム単位 */
0x00, 0x00, /* 圧縮品質管理 */
0x00, 0x00, /* 平均ビットレートのウィンドウサイズ */
0x00, 0x00, /* 内部ビデオストリーミングI / Fレイテンシ(ミリ秒) */
0x00, 0x48, 0x3F, 0x00, /* バイト単位の最大ビデオフレームサイズ= 1920 x 1080 x 2 */
#ifdef CX3_UVC_1_0_SUPPORT
0x00, 0x90, 0x00, 0x00 /* デバイスが単一のペイロードで送信できるバイト数:36KB */
#else
/* UVC 1.1プローブコントロールには、UVC 1.0からの追加フィールドがある */
0x00, 0x90, 0x00, 0x00, /* デバイスが単一のペイロードで送信できるバイト数:36KB */
0x00, 0x60, 0xE3, 0x16, /* デバイスクロック */
0x00, /* フレーミング情報-非圧縮形式では無視されます */
0x00, /* 推奨されるペイロード形式のバージョン */
0x00, /* 最小ペイロード形式バージョン */
0x00 /* 最大ペイロード形式バージョン */
#endif
};
ホストアプリケーションは、ピクセルごとにパディングされた6ビットを削除して受信したRAW 10データをデコードし、正しいフレームサイズを取得してRAW10ビデオを表示する必要があることに注意してください。
例2:16ビット出力データ形式(CY_U3P_CSI_DF_YUV422_8_2)
CY_U3P_CSI_DF_RAW10を置き換えてcyu3mipicsi.cの出力形式としてCY_U3P_CSI_DF_YUV422_8_2を設定し、埋め込みゼロを削除します。
1920 x 1080の解像度をRAW 10形式で30 fpsでストリーミングするとします。ピクセル単位の幅、ピクセル単位の高さ、ピクセルあたりのビット数、1秒あたりのフレーム数、フレームサイズ、およびビットレートの計算は次のとおりです。
- Width in pixel : 1920
- Height in pixel : 1080
- Bits per pixel : 10
- Frames per second : 30
- Frame size : 1920 x 1080 x 10 bits
- Bit rate : 1920 x 1080 x 10 x 30 bits per second
上記の計算を書き直します:
- Width in pixel : 2400
- Height in pixel : 540
- Bits per pixel : 16
- Frames per second : 30
- Frame size : 1200 x 1080 x 16 bits
- Bit rate : 1200 x 1080 x 16 x 30 bits per second
ファームウェアのUVCディスクリプタとプローブコントロールストラクチャに以下の変更を加えます。
/* クラス固有の非圧縮VSフォーマットディスクリプタ */
0x1B, /* ディスクリプタサイズ */
CX3_CS_INTRFC_DESCR, /* クラス固有のVSインターフェイスタイプ */
0x04, /* サブタイプ:VS_FORMAT_UNCOMPRESSED */
0x01, /* フォーマットディスクリプタインデックス */
0x04, /* このディスクリプタに続くフレームディスクリプタ子の数:3 */
/* GUID、ストリーミングエンコード形式の識別に使用されるグローバルに一意の識別子:YUY2 */
0x59, 0x55, 0x59, 0x32, /* MEDIASUBTYPE_YUY2 GUID:32595559-0000-0010-8000-00AA00389B71 */
0x00, 0x00, 0x10, 0x00,
0x80, 0x00, 0x00, 0xAA,
0x00, 0x38, 0x9B, 0x71,
0x10, /* ピクセルあたりのビット数:16 */
0x01, /* このストリームの最適フレームインデックス:1(1080p) */
0x00, /* 画像のアスペクト比のX次元。ノンインターレース */
0x00, /* 画像のアスペクト比のY次元:ノンインターレース */
0x00, /* インターレースフラグ:プログレッシブスキャン、インターレースなし */
0x00, /* ビデオストリーム制限の複製:0-制限なし */
/* クラス固有の非圧縮VSフレーム記述子-1080p @ 30fps */
0x1E, /*ディスクリプタサイズ*/
CX3_CS_INTRFC_DESCR, /* ディスクリプタタイプ */
0x05, /* サブタイプ:非圧縮フレームインターフェイス */
0x01, /* フレーム記述子インデックス:1 */
0x00, /* 静止画像のキャプチャはサポートされていません */
0xB0, 0x04, /* ピクセル単位の幅:1200 */
0x38, 0x04, / *高さ(ピクセル):1080 * /
0x00, 0x30, 0x14, 0x25, /* 最小ビットレート(ビット/秒):1080 x 1200 x 16 x 30 = 622080000 * /
0x00, 0x80, 0x53, 0x3B, /* 最大ビットレート(ビット/秒):固定レートなので最小と同じ */
0x00, 0x8D, 0x27, 0x00, /* 最大ビデオまたは静止フレームサイズ(バイト)(非推奨:1200x1080 x2 */
0x15, 0x16, 0x05, 0x00, /* デフォルトのフレーム間隔(100ns単位):(1/30)x10 ^ 7 */
0x01, /* フレーム間隔タイプ:離散間隔の数 */
0x15, 0x16, 0x05, 0x00, /* フレーム間隔3:デフォルトのフレーム間隔と同じ */
/* UVCプローブコントロール設定 - 1080p @ 30FPS */
uint8_t const gl1080pProbeCtrl [CX3_APP_MAX_PROBE_SETTING] = {
0x00, 0x00, /* bmHint:固定パラメーターなし */
0x01, /* 最初のビデオ形式インデックスを使用 */
0x01, /* 最初のビデオフレームインデックスを使用 */
0x15, 0x16, 0x05, 0x00, /* 100nsでの必要なフレーム間隔=(1/30)x10 ^ 7 */
0x00, 0x00, /* キーフレーム/ビデオフレーム単位のキーフレームレート*/
0x00, 0x00, /* PFrameのPFrameレート/キーフレーム単位 */
0x00, 0x00, /*圧縮品質管理 */
0x00, 0x00, /* 平均ビットレートのウィンドウサイズ */
0x00, 0x00, /* 内部ビデオストリーミングI / Fレイテンシ(ミリ秒) */
0x00, 0x8D, 0x27, 0x00, /* バイト単位の最大ビデオフレームサイズ= 1200 x 1080 x 2 */
#ifdef CX3_UVC_1_0_SUPPORT
0x00, 0x90, 0x00, 0x00 /* デバイスが単一のペイロードで送信できるバイト数:36KB */
#else
/* UVC 1.1プローブコントロールには、UVC 1.0からの追加フィールドがあります */
0x00, 0x90, 0x00, 0x00, /* デバイスが単一のペイロードで送信できるバイト数:36KB */
0x00, 0x60, 0xE3, 0x16, /* デバイスクロック */
0x00, /* フレーミング情報-非圧縮形式では無視されます */
0x00, /* 推奨されるペイロード形式のバージョン */
0x00, /* 最小ペイロード形式バージョン */
0x00 /* 最大ペイロード形式バージョン */
#endif
};
例3: 24ビット出力データ形式(CY_U3P_CSI_DF_RGB888)
受信RAW10データを24ビットパラレルデータにパッキングし、MIPI CSI2パラレルインターフェイスを介して送信できるようにするには、[Image Sensor Configuration]タブで出力データ形式として24ビットを設定します。この場合、追加の埋め込みビットはありません。
RAW 10データを16ビットまたは24ビットのパラレル出力にパッキングする場合、ディスクリプタとプローブコントロールストラクチャに違いはありません。したがって、この場合も例2のディスクリプタとプローブコントロールストラクチャを使用できます。