SunVideo Plus 1.3 ユーザーマニュアル: SunVideo Plus の XIL 関連の属性

| 前 | 次 | 目次 |
SunVideo Plus 1.3 ユーザーマニュアル

# 第 5 章

# SunVideo Plus の XIL 関連の属性

この章では、SunVideo Plus に固有の XIL 関連の属性について説明します。この章を読むにあたっては、ビデオ圧縮および画像作成の概念と、『XIL Programmer's Guide』に説明されている XIL 機能を理解していることが前提になります。

XIL は、繰り延べ実行方式で動作します。繰り延べ実行では、画像分子別にグループ化できる特定の原始動作シーケンスを探し出して、実行時間を短縮します。(このようにして高速化される画像分子は、この章の「画像分子」の節に記載されているとおりです。) 一般的な XIL プログラミングの詳細については、『Solaris XIL 1.0, Imaging Library Programmer's Guide』を参照してください。開発者キットには、いろいろな XIL サンプルプログラムのソースコードが付属しています。XIL および SunVideo Plus カードを使用するにあたっては、これらのサンプルプログラムを参考にしてください。

`MMACo1k` は、SunVideo Plus カード用の XIL ソフトウェアドライバです。`MMACo1k` とのインタフェースには、以下の XIL 呼び出しを使用します。

- `xil_device_create`(3)

- `xil_device_set_value`(3)

- `xil_create_from_device`(3)

- `xil_get_device_attribute`(3)

- `xil_set_device_attrribute`(3)

`xil_device_create`(3) のデバイスパラメータには、`MMACo1k` を指定します。`xil_create_from_device`(3) には、デバイスパラメータとして `MMACo1k` を指定し、`deviceObj` パラメータとして、 NULL を指定することができます。NULL の場合は、`/dev/o1k0` が開かれます。これ以外のデバイス (たとえば、`/dev/o1k1`) を開くには、`MMACo1k` デバイスを作成してから、`xil_device_set_value`(3) に、このデバイスとともに `DEVICE_NAME` 属性を設定します。このとき返される画像は、3 つの帯域からなる 640x480 (NTSC) または 768x576 (PAL) の YUV 画像になります。

## 属性の概要

SunVideo の属性には、一部、SunVideo Plus には適用することができないものがあります。バイナリレベルの互換性を維持するため、SunVideo Plus では、そうした属性を制限付きでサポートしています。

デバイス属性を設定する方法は 2 とおりあります。1 つは、`xil_create_from_device`(3) 関数を使用してデバイスイメージを作成する前に、`xil_device_create`(3) と `xil_device_set_value`(3) 関数を呼び出す方法、もう 1 つは、`xil_create_from_device`(3) を呼び出した後に `xil_device_set_value`(3) を呼び出す方法です。いくつかの属性 (`DEVICE_NAME` など) は、最初の方法で設定する必要があり、以下でもそのように説明しています。詳細は、「属性に関する注意事項」を参照してください。

`MMACo1k` デバイスに使用できる一般的なデバイス属性は以下のとおりであり、これらの属性は、SunVideo でもサポートされています。

- DEVICE_NAME

- FORMAT

- IMAGE_SKIP

- PORT_V

- MAX_BUFFERS

- PORT

- NUM_BUFFER

- FIRST_SCANLINE

- FULL_BUFFERS

- FLUSH_BUFFERS

- FORMAT_V

以下の属性は、SunVideo Plus では何の働きもしません。SunVideo とのバイナリおよびソースレベルでの互換性を維持するため、SunVideo Plus は、これらの属性を無視するか、適切な方法で処理します。

- MPEG_RATE_CONTROL

- MPEG_FIXED_QUANT

- MPEG_WEIGHTS

- FILE DESCRIPTOR

- FRAME_NUMBER

- TIMESTAMP

以下は、SunVideo Plus のビデオ属性です。

- HUE

- H261_PIP

- CHROMA_GAIN_V

- CHROMA_GAIN_U

- BRIGHTNESS

- CONTRAST

- H261_BIT_RATE

- H261_MAX_QUANT

- H261_IBLOCK_REFRESH

- H261_FUR

以下では、属性を詳細にわたって説明します。属性には、「設定専用」と「取得専用」の種別があることに注意してください。この種別は、各属性の「アクセス種別」の項目に記されています。属性の一部は、SunVideo Plus のコントロールパネルにも含まれています。属性には、その項目値の「デフォルト値」の前にアスタリスク (*) が付いているものがあります。そうした属性には、デフォルト値が示されていますが、実際にデフォルト値になるのは、コントロールパネルから、あるいはそれまでの XIL の属性設定呼び出しによって最後に設定された値です。詳細は、「SunVideo Plus コントロールパネルと XIL 属性」を参照してください。

## 一般的な属性

### DEVICE_NAME

DEVICE_NAME 属性は、`o1k` (SunVideo Plus) デバイスのパス名を設定します。この属性は、デバイスイメージを作成する前に `xil_device_create`(3) および `xil_device_set_value`(3) 関数を使用して設定する必要があります。

アクセス種別: 設定 / 取得
データ型: char *
デフォルト値: /dev/o1k0

### PORT_V

PORT_V 属性は、3 つある入力ポートのうち、ビデオ信号を取得するポートを指定します。

0 | S_VIDEO ポート
1 | コンポジットビデオ #1 ポート
2 | コンポジットビデオ #2 ポート

アクセス種別: 設定 / 取得
データ型: int
デフォルト値: 1

### PORT

PORT 属性は、ポートを設定するためのストリングインタフェースです。

S VIDEO | S_VIDEO ポート
COMPOSITE VIDEO 1 | コンポジットビデオ #1 ポート
COMPOSITE VIDEO 2 | コンポジットビデオ #2 ポート

アクセス種別: 設定 / 取得
データ型: char *
* デフォルト値: COMPOSITE VIDEO 1

### FORMAT_V

FORMAT_V 属性は、入力ビデオ方式が不明の場合に 0、PAL 方式の場合に 1、NTSC 方式の場合に 2 を返します。詳細は、「ビデオポート、ビデオ方式、ビデオ方式の自動検出」を参照してください。

アクセス種別: 取得のみ
データ型: int

### FORMAT

FORMAT 属性は、取得されたビデオの方式 (NTSC、PAL、UNKNOWN のいずれか) を返します。詳細は、「ビデオポート、ビデオ方式、ビデオ方式の自動検出」を参照してください。

アクセス種別: 取得のみ
データ型: char *

### IMAGE_SKIP

IMAGE_SKIP 属性は、取得中にスキップする画像数を設定して、その値を返します。IMAGE_SKIP 属性を使用して、画像の流れを調整することができます。たとえば、保安カメラ用のアプリケーションでこの属性を使用して、30 秒間隔で画像を提供するように設定することができます。

また IMAGE_SKIP は、特定のネットワーク帯域幅に合うようにフレームレートを制限するために利用することもできます。たとえば、約 10 fps のレートで NTSC フレームを取得するには、IMAGE_SKIP 属性を 2 に設定します。この場合、SunVideo Plus カードは 3 枚に 1 枚の割合でフレームを取得します。

アクセス種別: 設定 / 取得
データ型: int
デフォルト値: 0

### MAX_BUFFERS

MAX_BUFFERS 属性は、アプリケーションが圧縮呼び出しを使用して読み出すのを待っている間に、XIL SunVideo Plus ドライバが保持する圧縮フレーム数の上限値を設定して、返します。この値は、1 枚から 10 枚の範囲である必要があります。下図を参照してください。設定された値はクリップされ、使用可能なメモリーに合うバッファー数を指示します。

#### 図 5-1 最高バッファー数

アクセス種別: 設定 / 取得
データ型: integer
デフォルト値: 2

### NUM_BUFFERS

NUM_BUFFERS 属性は、圧縮フレームの保持に使用できる実際のバッファー数を示す整数を返します。NUM_BUFFERS 値は、MAX_BUFFERS 属性値以下です。

有効な値が返されるのは、最初の取得 (または取得 / 圧縮) 動作が行われた後です。

アクセス種別: 設定のみ
データ型: integer

### FULL_BUFFERS

FULL_BUFFERS 属性は、有効なデータを含む、現在のバッファー数を示す整数を返します。有効な値が返されるのは、最初の取得 (または取得 / 圧縮) 動作が行われた後です。

アクセス種別: 取得のみ
データ型: integer

### FLUSH_BUFFERS

FLUSH_BUFFERS 属性を設定した場合は、フレームを保持しているバッファーをすべてフラッシュしてから、次の画像が取得されます。フラッシュ後、FULL_BUFFERS 属性はゼロに設定されます。属性設定呼び出しの入力値は無視されます。

アクセス種別: 設定のみ
データ型: void

## ビデオ関係の属性

この節では、いろいろなビデオ特性に影響を与える属性について説明します。これらの属性は、XIL プログラムあるいは 「SunVideo Plus のコントロールパネル」を使用して制御することができます。デフォルト値が示されていますが、実際にデフォルト値になるのは、コントロールパネルから、あるいは XIL プログラムの制御によって最後に設定された値です。

### HUE

HUE 属性は、入力ビデオ信号の色合いを制御します。

アクセス種別: 設定 / 取得
データ型: int (-128 〜 +127)
* デフォルト値: 0

### CHROMA_GAIN_U

CHROMA_GAIN_U 属性は、入力ビデオ信号の U 成分の利得を制御します。

アクセス種別: 設定 / 取得
データ型: int (-128 〜 +127)
* デフォルト値: 0

### CHROMA_GAIN_V

CHROMA_GAIN_V 属性は、入力ビデオ信号の V 成分の利得を制御します。

アクセス種別: 設定 / 取得
データ型: int (0 〜 511)
* デフォルト値: 180

### CONTRAST

CONTRAST 属性は、入力ビデオ信号の luma 部分のコントラストを制御します。

アクセス種別: 設定 / 取得
データ型: int (0 〜 511)
* デフォルト値: 216

### LUMA_BRIGHTNESS

LUMA_BRIGHTNESS 属性は、入力ビデオ信号の luma 部分の全体的な明るさを制御します。

アクセス種別: 設定 / 取得
データ型: int (-128 〜 +127)
* デフォルト値: 0

## H.261 関係の属性

この節では、H.261 圧縮または圧縮解除に関係する、SunVideo Plus に固有の属性について説明します。ハードウェアによる圧縮または圧縮解除を行っていない場合、これらの属性は何の働きもしません。

### H261_BIT_RATE

H261_BIT_RATE 属性は、最高圧縮ビットレートを設定します。レートは、1 秒あたりの 1000 ビット (キロビット) 単位数で表されます。たとえば、デフォルト値の 256 では、最高ビットレートは 1 秒あたり 256000 ビット (32000 バイト / 秒) になります。

アクセス種別: 設定 / 取得
データ型: int (単位: k ビット / 秒)
デフォルト値: 256

### H261_MAX_QUANT

H261_MAX_QUANT は、最大数量化因数を設定します。数量化因数が小さいほど、圧縮画像の画質が向上します。一般的に数量化因数が小さいと 1 つの画像のビット数が増加しますから、ビットレートに対するフレームレートは低下することがあります。数量化因数を大きくすると、これと逆のことが当てはまります。

アクセス種別: 設定 / 取得
データ型: int (1 〜 31)
デフォルト値: 10

### H261_IBLOCK_REFRESH

H261_IBLOCK_REFRESH 属性は、圧縮機能が H261 のマクロブロックを符号化内ブロックで更新する間隔 (単位: ミリ秒) を設定します。H261 では、132 枚のフレームごとに、各マクロブロックを符号化内ブロックとして符号化する必要があります。10 fps で圧縮するということは、最高 13 秒の間、1 つのブロックが符号化内ブロックとして符号化されない可能性があることを意味します。損失の多いネットワークでは、1 枚のフレームが失われると、圧縮された画像のブロックにひずみが生じます。最高 13 秒の間、こうした不良ブロックがリフレッシュされるのを待つということは、通常受け入れられることではありません。この属性の目的は、ネットワークを介した損失の多い H261 ストリーム送信中のマクロブロックのリフレッシュを高速化することにあります。

アクセス種別: 設定 / 取得
データ型: int
デフォルト値: 1500 (ms)

### H261_FUR

H261_FUR フラグを設定すると、H.261 の圧縮機能に高速更新要求が発行されます。基本的に、高速更新は、フレーム内フレーム / キーフレームに対する要求です。

アクセス種別: 設定 / 取得
データ型: XIL_boolean
デフォルト値: FALSE

### H261_PIP

H261_PIP フラグを設定すると、H.261 デコーダは、圧縮解除された画像の左上にローカルビュー画像を埋め込みます。ハードウェアによる圧縮を行っていない場合は、この画像はグレーになります。

アクセス種別: 設定 / 取得
データ型: XIL_boolean
デフォルト値: FALSE

### HW_DECOMPRESS_CIS

HW_DECOMPRESS_CIS 属性は、ハードウェアによる高速圧縮解除の対象となる CIS を選択します。デフォルト値の NULL は、圧縮解除画像分子が最初に検出した CIS をハードウェアによる高速圧縮解除の対象にすることを意味します。CIS を選択した場合、ハードエアによる圧縮解除画像分子が検出したその他の CIS はすべて拒否され、圧縮解除は、対応する XIL ソフトウェアデコーダによって行われます。ハードウェアによる圧縮解除を無効にするときは、-1 に設定するようにしてください。

XIL には、CIS が破壊されるタイミングを圧縮解除機能に通知する仕組みがありませんから、新しい CIS に対してハードウェアによる高速圧縮解除を行うためにも、この属性を設定する必要があります。

アクセス種別: 設定 / 取得
データ型: XilCis
デフォルト値: NULL

## 属性に関する注意事項

注 | 現時点では、XIL 1.3 は get 属性をサポートしていません。

### ビデオポート、ビデオ方式、ビデオ方式の自動検出

デフォルトでは、XIL ドライバは、デバイスイメージの作成中に、選択されているビデオポートのビデオ方式を自動的に検出します。この自動検出シーケンスは、完了するまでに最高 1.5 秒かかることがあります。ビデオ方式が判明している場合は、SunVideo Plus のコントロールパネルのビデオ方式を AUTO ではなく、既知の方式 (NTSC または PAL) に変更してください。変更することによって、ビデオ方式の自動検出が行われなくなります。

現在のところ、SunVideo Plus では、異なる方式 (NTSC および PAL) のビデオ機器を複数のビデオポートに接続して、それらを動的に切り替えられるようになっていません。SunVideo Plus ドライバは、XIL アプリケーションによってデバイスイメージが作成されているとき、選択されているビデオポートのビデオ方式を自動検出することができます。このため、いろいろなビデオ入力ポートに異なる方式のビデオ機器を接続している場合は、デバイスイメージを作成する前に、`xil_device_set_value`(3) を使用して、使用するビデオポートを設定するようにしてください。また、デフォルトのビデオポート (ポート 1) にビデオ機器を接続していない場合も、そのようにしてください。

### ハードウェアによる圧縮解除と CIS 選択

HW_DECOMPRESS_CIS 属性を使用して、ハードウェアによる高速圧縮解除機能を使用する CIS を選択することができます。複数の CIS を圧縮解除しようとするアプリケーションでは、この属性を -1 に設定するようにしてから、XIL 圧縮解除画像分子を実行するようにしてください。そうすることによって、ハードウェアデコードしない CIS に対し、圧縮解除画像分子が自身をハードウェアに接続しなくなります。HW_DECOMPRESS_CIS 属性の設定は、ハードウェアによる圧縮解除を使用する CIS に対して圧縮解除画像分子を実行する前に行ってください。

### ハードウェアによる圧縮解除と XIL デバイス

ハードウェアによる圧縮解除では、SunVideo Plus は、XIL 画像分子を高速化するという点で XIL 演算デバイスのような働きをします。圧縮解除機能だけ使用するアプリケーションの場合、「サンプルの MMACo1k デバイスイメージの作成」で説明しているような、xil デバイスとデバイスイメージの作成は必要ありません。これに対する例外は、圧縮解除に影響するデバイス固有の属性をアプリケーションで設定する場合です。XIL には、SunVideo Plus のような演算デバイスに対して特定の種類の属性を設定する手段がありません。すなわち、そうしたデバイスを明示的に開いて、属性を設定することはできません。このため、そうした属性を使用するには、xil デバイスとイメージを作成する必要があります。詳細は、「XIL ソースプログラム例」を参照してください。

アプリケーションによって直接にデバイスおよびデバイスイメージが作成されていない場合、SunVideo Plus のハードウェアを使用した XIL 圧縮解除画像分子は暗黙でその作成を行います。ただし、現状、画像分子が、アクセラレータとして使用できるハードウェアデバイスを探し出すことはありません。画像分子は、システム内の最初のデバイス (/dev/o1k0) の使用しようとします。このため、システムに複数の SunVideo Plus カードが取り付けられている場合、そのすべてをハードウェアによる高速圧縮解除デバイスとして使用する方法はただ 1 つ、アプリケーション側で明示的にデバイスおよびデバイスイメージを作成して、デバイスを作成するたびに異なるデバイス名を使用する方法です。詳細は、「XIL ソースプログラム例」を参照してください。

### 圧縮および圧縮解除の両方におけるハードウェア機能の利用

前節では、デバイスおよびデバイスイメージが作成されていない場合、SunVideo Plus の圧縮解除画像分子ハードウェアは暗黙でその作成を行うと説明しました。つまり、アプリケーションが圧縮解除画像分子を実行して、MMACo1k デバイスおよびデバイスイメージを作成していた場合、そのアプリケーションは、圧縮解除画像分子によって暗黙に作成されたデバイスとイメージを受信することになります。しかしながら、デバイスイメージの削除の面で、XIL には問題があります。このため、圧縮および圧縮解除の両方でハードウェア機能を使用する場合、アプリケーションは、最初のハードウェア圧縮解除画像分子を使用する前に明示的にデバイスおよびデバイスイメージを作成する必要があります。

### SunVideo Plus コントロールパネルと XIL 属性

SunVideo Plus コントロールパネルのビデオ関連のすべてのパラメータには、プログラムからそれらパラメータの設定を変更することを可能にする XIL 属性があります。XIL 内には、これら属性のデフォルト値はありません。コントロールパネルから設定された最新の値が、デフォルト値になります。このため、アプリケーションによって明示的にビデオ属性が設定されなかった場合は、コントロールパネル上の値が使用されます。

これは、SunVideo Plus の機能です。この機能により、XIL アプリケーションから、明るさやコントラストなどのビデオパラメータを設定する必要がなくなります。つまり、一般ユーザーは、使用するビデオ機器に合わせてこれらのビデオパラメータを 1 度だけ調整すればよく、XIL アプリケーションを実行するたびに同じ変更を行う必要はありません。

XIL 属性とコントロールパネル内のパラメータのソースは同じであることに注意してください。このため、XIL 属性設定呼び出しを使用してパラメータの設定を変更すると、コントロールパネル内の値も変更されます。たとえば、XIL アプリケーションが明るさの設定を変更して、終了した場合、次に実行される XIL アプリケーションは、また新たに明るさの設定を行わないかぎり、前のアプリケーションの設定を使用することになります。

## 画像分子

ここでは、MMACo1k デバイスが現在サポートしているカラー画像分子およびグレースケール画像分子を示します。

- カラー画像分子

  - capture > scale8nearest

  - capture > [scale8nearest >] colorconvert

  - capture > [rescale8>][scale8nearest>] ordereddither8_8

  - capture > scale8nearest > rescale8 > orderedditther8_8

- 圧縮画像分子

  - capture > [scale8nearest] compress_CellB

  - capture > [scale8nearest] compress_Jpeg

  - capture > [scale8nearest] compress_Mpeg1

  - capture > [scale8nearest] compress_H261

  - capture > [scale8nearest] compress_UYVY

- グレースケール画像分子

  - capture > scale8nearest

  - capture > [scale8nearest >[[addconst8 >] addconst8 >] addconst8

  - capture > [scale8nearest][threshold8 >] threshold8

  - capture > [scal8nearest][threshold8 >] threshold8 > addconst8

- 圧縮解除画像分子

  - decompress_H261

  - decompress_H261 > [rescale8 >] ordereddither8_8

  - decompress_H261 > colorconvert

  - decompress_H261 > [rescale8 >] ordereddither8_8 > display_ioSUNWgx

## エラー

ここでは、`MMACo1k` デバイスドライバのエラーメッセージを示します。

#### 表 5-1 `MMACo1k` のエラーメッセージ

エラーメッセージ | 説明
`MMACo1k`-1 | `MMACo1k`: invalid PORT specification (ポート指定が不正です。)
`MMACo1k`-4 | `MMACo1k`: could not open `MMACo1k` device. (`MMACo1k` デバイスを開くことができません。) このエラーの理由が、デフォルトのエラーハンドラによって出力されます。考えられる原因として以下が挙げられます。 - 別のプログラムによってデバイスが使用されている。 - デバイスがインストールされていない。 - プログラムが誤ったデバイス番号を参照している。
`MMACo1k`-5 | `MMACo1k`: could not set video characteristics. (ビデオ属性を設定することができません。) プログラムがポートの属性を設定することができません。
その他の XIL エラーメッセージについては、『XIL Programmer's Guide』の付録 B を参照してください。

## サンプルの `MMACo1k` デバイスイメージの作成

SunVideo Plus カードに接続されているデバイスイメージを作成し、ビデオポートを COMPOSITE VIDEO 2 に設定するには、以下のように入力します。

    # XilImage イメージ
    # XilDevice デバイス

イメージ = `xil_create_from_device`(state, `MMACo1k` , device);
デバイス = `xil_device_create`(state, `MMACo1k` )
`xil_device_set_value`(device, `DEVICE_NAME` , (void *) `/dev/o1k0` );
`xil_device_set_value`(device, PORT , (void *) COMPOSITE VIDEO 2 )

## XIL ソースプログラム例

開発者キットに付属している XIL サンプルには、XIL プログラミングインタフェースを使用してプログラミングするうえで最良の資料が含まれています。下記表に、それらのサンプルを示します。

#### 表 5-2 XIL ソースプログラム例

XIL ソースプログラム例 | 説明
`xil_display` | ビデオを取得し、表示するプログラムの例です。簡単にビデオレコーダーあるいはプレーヤーに変更することができます。
`xil_compress` | ビデオを圧縮するプログラムの例です。圧縮方法といろいろな圧縮形式でのディスク保存方法がわかります。H.261 のビットレート設定などの、デバイス固有の属性の設定例も含まれています。
`xil_decompress` | ビデオを圧縮解除するプログラムの例です。このサンプルでは、XIL ソフトウェアデコーダによって暗黙に圧縮解除が行われますから、たいていの場合、ハードウェアの圧縮解除機能は必要ありません。SunVideo Plus の H261 圧縮解除ハードウェア機能の使用例も含まれています。
`xil_broadcast` | ビデオを取得、圧縮し、そのビデオを、UDP を使用したネットワークを介して送信するプログラムの例です。
`xil_receive` | `xil_broadcast` からビデオを受信して、そのビデオを圧縮解除し、表示するプログラムの例です。
`xilh_broadcast` | `xil_broadcast` と同じですが、H261 が追加されています。
`xilh_receive` | `xil_receive` と同じですが、H261 が追加されています。
`o1k_conf` | XIL および `libotiaudio` を使用してポイント - ポイントの GUI テレビ会議アプリケーションです。

| 前 | 次 | 目次 |