&size(24){&color(darkgreen){''ネットワークビデオ伝送評価ボード''};}; RIGHT:株式会社ウィビコム RIGHT:sales@wivicom.co.jp RIGHT:ロボット対策のため,@を全角にしてあります。 #contents #br ---- -[[SH7751R>http://www.renesas.com/jpn/products/mpumcu/32bit/sh/sh7751r/]] -[[SM501>http://www.siliconmotion.com/jp/sm501.htm]] -[[VW2010>http://www.vwebcorp.com/]] -[[KeyStream>http://www.keystream.co.jp/]] -[[SH-Linux>http://www.sh-linux.org/]] ---- **概要 [#m566d0d9] 本製品はネットワークによるマルチメディアコンテンツ伝送の開発プラットフォームです。 -大容量キャッシュ・240MHz高速動作CPU SH7751Rによって,SH-Linuxの高度な開発・実験環境を利用できます。 -無線LAN規格802.11bに対応するPCカードを搭載しています。PCカードを交換することによって802.11aなどにも容易に対応可能です。 -高解像度SXGAをサポートする高性能グラフィックチップSM501を搭載しています。複数のグラフィック・ビデオレイヤに対して,アルファやビデオキャプチャ機能を実現します。 -ビデオコーデックとしてVW2010を搭載します。MPEG-1/2/4をハードウェアデコードし,高画質なNTSCおよびVGA出力をCPUに負荷をかけることなく実現します。 -組み込み用途を想定し,低発熱・低消費電力な部品を採用しました。通常使用の範囲ではファン等による強制冷却は必要なく,MTBFの向上に寄与します。 *** 開発環境 [#hf6bd47b] #ref(wpa-devel.png,around,right); -Wireless LANドライバ --IEEE802.11b対応 --IEEE802.11a対応 -SM501 ドライバ --SXGA 16bitカラー対応 --スケーリング,色変換, アルファ,オーバーレイ対応 --動的な解像度変更,色空間変更に対応 -VWEB SDK --MPEG-1/2/4 ハードウェアデコード対応 --OSD,画像オーバーレイ対応 -クロス開発 --LinuxまたはCygwin (Windows) 上でのクロス開発が可能 --USBによるシリアルコンソール搭載 (USB-UART bridge) --NFS経由でプログラムやコンテンツにアクセス可能 --ターゲットマシン自身でROMイメージの更新が可能 #clear ***応用事例 [#d84eb064] #ref(wpa1n.png,around,right) - [[NewSoft:http://nj.newsoft.com.tw/]]社製Wireless Multimedia Systemの受信端末として機能 -- 1台の送信ホストに対し,無線によって何台でも接続・同時受信可能 (1:N通信) -- MPEG-1/2のストリーミング再生が可能(マルチメディアコンテンツ配信) -- 送信ホストのデスクトップを表示可能(プレゼンテーションなど) - LinuxをNFSサーバとして,Ad-hocモード無線通信によりオーディオ,ビデオ,画像の表示が可能 - M:N通信対応予定 #clear *** SM501機能一覧 [#h524482e] -動画over静止画 -静止画(透明色)over動画 -静止画(半透明)over動画 -ダブルバッファリングによってスムーズに切り替わる背景画像の上に, ハードウェアスケーリングされたビデオをオーバーレイ可能。 -ビデオ層に連動してスケーリングされた画像をビデオ上に半透明表示可能。 -最前面に画像を半透明表示可能。 |~共通|''画面解像度''|VGA, SVGA, XGA, SXGA| |>|>|| |~アルファ層|''色数''|65,536色,透明色使用時4,096色| |~|''ダブルバッファリング''|不可| |>|>|| |~ビデオアルファ層|''色数''|65,536色,透明色使用時4,096色| |~|''ダブルバッファリング''|不可| |>|>|| |~ビデオ層|''色数''|65,536色| |~|''ダブルバッファリング''|可| |~|''動画再生支援機能''|スケーリング,色変換| |>|>|| |~背景層|''色数''|16,777,216色,SXGA時は65,536色| |~|''ダブルバッファリング''|可| **ハードウェア [#l477f5a4] ***ご注意 [#m5d06d7a] -本製品の仕様は予告なく変更される場合があります。 ***送受信機 WPAR00 [#x6876dc0] #ref(wpar00.jpg) CENTER:''図1:'' WPAR00 #br CENTER:''表1:'' WPAR00主な仕様 |~ビデオ入力|S端子, RCAコンポジット|図1左面下| |~オーディオ入力|RCAステレオ|図1左面下| |~ビデオ出力|S端子, RCAコンポジット|図1下面左| |~オーディオ出力|RCAステレオ|図1下面左| |~アナログRGB出力|DSUB15(使用不可)|図1下面左| |~Ethernet|100BaseTX|図1右面中| |~シリアルコンソール|RS-232C|図1右面上| |~電源|DC 5V|図1上面中| |~リセットスイッチ|ボタン|図1右上| |~スイッチ|ボタン x 6|図1右上| |~ビデオADC|Philips SAA7115|| |~オーディオADC|Philips UDA1342TS|| |~ビデオDAC|Cirrus Logic CS4954|| |~オーディオDAC|Cirrus Logic CS4331|| |~CPU|Renesas 7751R|図1中央| |~MPEG Codec|Vweb VW2010|図1左上| |~Flash ROM|32MB|| |~メインメモリ|64MB|| |~ビデオメモリ|16MB|| ***受信機 WPAR01 [#vf6edd61] #ref(wpar01.jpg,center) CENTER:''図2'': WPAR01 #br CENTER:''表2:'' WPAR01主な仕様 |~ビデオ出力|S端子, RCAコンポジット|図2下面中央| |~オーディオ出力|RCAステレオ|図2下面中央| |~アナログRGB出力|DSUB15|図2下面右| |~Ethernet|100BaseTX(PCカード)|図2右面中央| |~シリアルコンソール|USB|図2下面左| |~電源|DC 5V|図2下面左| |~リセットスイッチ|ボタン|図2下面左| |~スイッチ|ボタン x 3|図2上面左| |~CPU|Renesas 7751R|図2上部中央| |~MPEG Codec|Vweb VW2010 (VW2002モード)|図2左下| |~ビデオコントローラ|Silicon Motion SM501|図2右中央| |~ビデオDAC|Cirrus Logic CS4954|| |~オーディオDAC|Cirrus Logic CS4334|| |~Flash ROM|16MB|| |~メインメモリ|64MB|| |~ビデオメモリ|8 + 16MB|| |~JTAG|14ピンJTAG(H-UID)コネクタ|| #br #ref(WPAR.en/wpa01_block.png,center) CENTER:''図3:'' ブロック図 **ソフトウェア [#ie7a4c9f] ***ご注意 [#l3f28f7a] -本ソフトウェアを使用することによって生じるいかなる被害に対しても,弊社は責任を負いません。 -本製品は閉じたネットワーク環境での評価を前提にしているため, WLANの暗号化やリモートログインの制限を行っていません。 ***ユーザーランド更新 [#u66e5de9] ユーザランドの更新はNFSを通じて行います。 +Windows SFUまたはLinux等でNFSサーバを用意し,WPARに対してexportを許可してください。 +ルートファイルシステムを書き込み可能にします。 mount -w -o remount / +NFSサーバに更新したいバイナリを置いてWPARからマウントします。 mount 1.2.3.4:/export /mnt/nfs +バイナリを更新してください。 cp /mnt/nfs/vwnet_send2 /bin cp /mnt/nfs/libvwStream.so /lib +ルートファイルシステムを読み込み専用に戻します。 mount -r -o remount / +NFSマウントを解除します。 umount /mnt/nfs ***vw_utils [#y4a355bf] CENTER:''表3:'' wpa_utilsプログラム一覧 |~プログラム名 |~引数 |~機能 | |vwdecoder|*.ini *.mpg opt...|MPEGファイルを再生してビデオ出力| |vwencoder|*.ini *.mpg opt...|ビデオ入力を符号化してMPEGファイルに保存| |vwcodec|*.ini *.mpg opt...|ビデオ入力を符号化しつつ同時に複合化してビデオ出力| |vwtranscode|*.ini opt...|トランスコード・トランスレート| |vwnet_recv|*.ini opt...|ビデオストリームを受信して再生| |vwnet_send|*.ini opt...|ビデオ入力を符号化してUDPで送信| |vwnet_codec|*.ini opt...|| |vwavi2mux||| |vwgetlog||| |vwmp42ps||| |vwps2divx||| |vwalldemo||| |vwmenudemo||| |vwosdclock||| |vwhelloworld||| |vwosdview||| - ''vwdecoder'' '''*.ini *.mpg opt...''' #br 指定されたMPEGファイルを復号化し,S端子およびコンポジットRCAビデオ出力へ映像信号を出力します。 #br iniファイルは/optディレクトリ中にあるdec_のプリフィクスを持つものを使用してください。 dec_以降のファイル名の意味は,順番にビデオフォーマット,多重化方式および映像信号種別となります。 例えばdec_mp2ps_ntsc.iniはMPEG-2 PS形式のMPEG-2ファイルを復号化してNTSC方式のビデオ信号を出力することを意味します。 #br iniファイルの任意の項目はコマンドライン引数で上書きすることができます。 #br WPAR01の場合VW2010のエンコード用メモリが搭載されていませんので-vw2002オプションを指定して デコード専用モードで動作させてください。 #br ビデオコンテンツは外部にNFSサーバを用意して供給してください。 # vwdecoder /opt/dec_mp2ps_ntsc.ini /mnt/nfs/hoge.mpg -vw2002 - ''vwencoder'' '''*.ini *.mpg opt...''' #br S端子またはコンポジットRCAビデオ入力からの映像信号を指定されたMPEGフォーマットで符号化し, 指定されたファイルに保存します。 #br S端子とコンポジットRCAの選択はvideo_input_deviceによって行います。 0xc80242がS端子,0xc40242がコンポジットとなります。 映像信号を供給しない状態ではvwencoderは動作しません。 #br iniファイルは/optディレクトリの中にあるenc_のプリフィクスを持つものを使用してください。 enc_以降のファイル名の意味は, 順番にビデオフォーマット,多重化方式,映像信号種別およびビットレートとなります。 例えばenc_mp2ps_ntsc_08m_vbr.iniはNTSC方式のビデオ信号を MPEG-2 PS 8Mbps 可変ビットレートで符号化することを意味します。 #br iniファイルの任意の項目はコマンドライン引数で上書きすることができます。 #br WPAR01の場合VW2010のエンコード用メモリが搭載されていませんのでvw_encoderは動作しません。 #br ビデオコンテンツの保存先として外部にNFSサーバを用意してください。 # vwencoder /opt/enc_mp2ps_ntsc_08m_vbr.ini /mnt/nfs/hoge.mpg ※保存されたMPEGファイルはパーミッションが000となっていますのでご注意ください。 - ''vwnet_recv'' '''*.ini opt...''' #br ネットワークから受信したビデオストリームを復号化し,指定の方式でビデオ出力します。 #br iniファイルに関してはvwdecoderと同様です。 #br vw2002オプションは必要ありません。 #br do_network=trueを指定してください。 #br portによってUDPの待ちうけポートを指定します。 #br do_multicast=trueを指定するとマルチキャストパケットを受信します。 その場合hostnameによってマルチキャストチャネルのIPアドレスを指定してください。 # vwnet_recv /opt/dec_mp2ts_ntsc.ini do_network=true port=1234 - ''vwnet_send'' '''*.ini opt...''' #br S端子またはコンポジットRCAビデオ入力からの映像信号を指定されたMPEGフォーマットで符号化し, ネットワークに送信します。 #br S端子とコンポジットRCAの選択方法はvwencoderと同様です。 #br iniファイルに関してはvwencoderと同様です。 #br do_network=trueを指定してください。 #br portによってUDPの目的ポートを指定します。 #br hostnameによって送信先IPアドレスを指定してください。 #br do_multicast=trueを指定するとマルチキャストチャネルに送信します。 # vwnet_send /opt/enc_mp2ts_ntsc_04m.ini do_network=true hostname=1.2.3.4 port=1234 ***wpa_utils(WPAR01のみ動作) [#h30426fe] CENTER:''表4:'' wpa_utilsプログラム一覧 |~プログラム名 |~引数 |~機能 | |wpa_init |1-4|画面解像度を1)VGA 2)SVGA 3)XGA 4)SXGAに設定 5)SXGA 4:3| |wpa_cls |0-3, 5|対応するフレームバッファを0クリア | |wpa_mod |addr reg32 | MMIO_base + addr番地のレジスタをreg32にセット | |wpa_mod2 |addr | MMIO_base + addr番地の値を表示 | |wpa_view |fb 0/1|fb番のフレームバッファを 0)非表示 1)表示 | |wpa_vctl |x y scale| ビデオプレーンの表示位置と縦横の倍率| |wpa_actl |tlx tly brx bry| アルファプレーンの表示領域設定| |wpa_cap |0 or 1|キャプチャの有効化・無効化| |wpa_vidtune||VGAのタイミング調整| |wpa_draw |0-3 image.ppm | fb番のフレームバッファにppmファイルを表示 | |wpa_sw |0-4| dip SWの状態を読む| - ''wpa_init'' '''n''' &br; SM501レジスタを初期化します。 nの値によって画面解像度が 1)VGA, 2)SXGA, 3)XGA に設定されます。 wpa_init実行後はすべてのフレームバッファが非表示になります。 必要に応じてwpa_view(後述)を実行してください。 # wpa_init 3 - ''wpa_cls'' '''n''' &br; nによって指定されるフレームバッファをゼロクリアします。 nとして指定可能な値は0-3,5です。 # wpa_cls 0 - ''wpa_mod'' '''addr reg32''' &br; addrによって指定されるアドレスのレジスタ値をreg32に設定します。 addrとして指定可能な範囲は0x00000000 - 0x001fffffです。 reg32として指定可能な範囲は0x00000000 - 0xffffffffです。 # wpa_mod 0x080000 0x76543210 - ''wpa_mod2'' '''addr''' &br; addrによって指定されるアドレスのレジスタ値を表示します。 addrとして指定可能な範囲は0x00000000 - 0x001fffffです。 # wpa_mod2 0x080000 - ''wpa_view'' '''n b''' &br; nによって指定されるフレームバッファを表示(b = 1)または非表示(b = 0)にします。 nとして指定可能な値は0-3です。 # wpa_view 1 1 - ''wpa_vctl'' '''tlx tly scale''' &br; ビデオプレーンの表示原点を (tlx, tly) に,拡大率を scale に設定します。 指定可能範囲は画面解像度にしたがいます。 拡大率を0.5未満に設定すると帯域の問題によって,画面が乱れることがあります。 # wpa_vctl 100, 100, 1.2 - ''wpa_actl'' '''tlx tly brx bry''' &br; アルファプレーンの表示範囲を(tlx, tly) - (brx, bry)を対角線とする矩形領域に設定します。 指定可能範囲は画面解像度にしたがいます。 # wpa_actl 100, 100, 199, 199 - ''wpa_cap'' '''b''' &br; -- b = 1のときビデオプレーンのキャプチャ機能を有効化し,ビデオプレーンの色空間をYUVに設定します。 -- b = 0のときビデオプレーンのキャプチャ機能を無効化し,ビデオプレーンの色空間をRGB565に設定します。 # wpa_cap 1 - ''wpa_draw'' '''n image.ppm''' &br; nによって指定されるフレームバッファにimage.ppmというファイル名のPPMフォーマットの画像を描画します。 nとして指定可能な値は0-3,5です。 # wpa_draw 0 wivicomlogo.ppm - ''wpa_vidtune'' &br; 本体のボタンスイッチを用いてタイミング信号の調整を行います。 # wpa_vidtune **SM501の制御(WPAR01) [#j6e294b8] SM501のレジスタへのアクセスはioctlシステムコールを, VRAMへのアクセスはLinuxのフレームバッファアーキテクチャの一部を用います。 ***レジスタへのアクセス [#h0df34bb] SM501レジスタへのアクセスにはioctlを用います。 ioctlの使用にはターゲットアーキテクチャのヘッダファイルが必要です。 # cp -R linux/include/asm-sh /usr/local/sh4-linux/include/asm レジスタ値を読み込み,変更し,書き込むサンプルコードを以下に示します。 int reg32; int value = 0xab; int mask = 0x0000ff00; // open device node int fd = open("/dev/fb0", O_RDWR); // set MMIO address ioctl(fd, 0, address); // read register value ioctl(fd, 1, ®32); // change register value reg32 &= ~mask; reg32 |= value << 8; // write register value ioctl(fd, 2, reg32); レジスタ値変更の際,予約されているビットを変更しないように注意してください。 ***画面解像度設定 [#s0bfa117] 画面解像度,ビデオタイミング信号,ドットクロック等は SM501レジスタによって完全に制御されます。 レジスタ値を変更することによって画面解像度を動的に変更することが可能です。 画面解像度設定の際には以下の点に留意願います。 - ''レジスタ値変更操作中はタイミング信号の生成を無効化してください。'' &br; これは不適切なタイミング信号による表示デバイスの破損を防止するための処置です。 - ''すべてのフレームバッファを非表示にしてください。'' &br; 解像度変更に伴って画面とVRAMの対応が変わるため, 予期しない映像が表示されます。 - ''画面情報はSM501レジスタから直接取得してください。'' &br; ドライバの制限により,レジスタ値の変更が フレームバッファアーキテクチャのvinfo, finfoなどの構造体に反映されません。 このため,これらの構造体からは正しい情報が取得できません。 ***VRAMへのアクセス [#r82693f7] SM501は7つのビデオプレーンを持っています。 本製品で使用するのは,以下の4つのプレーンです。 + アルファプレーン + ビデオアルファプレーン + ビデオプレーン + グラフィックプレーン 詳細はSM501データシートの1-12,1-23章を参照して下さい。 各プレーンにはフレームバッファのデバイスノードを通じてアクセスします。 フレームバッファの詳細はAppendix-Aを参照して下さい。 RGB565モードのグラフィックプレーン(fb0)にカラー画像data[3][w][h]を 描画するサンプルコードを以下に示します。 int xres, yres, size, i, j, idx, r, g, b; unsigned char *ptr; int fd = open("/dev/fb0", O_RDWR); size = xres * yres * 2; ptr = mmap(0, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); for (j = 0; j < yres; ++j) for (i = 0; i < xres; ++i) { idx = (x + i) * 2 + (y + j) * xres * 2; r = data[0][j][i] >> 3; g = data[1][j][i] >> 2; b = data[2][j][i] >> 3; *((unsigned short int *)(ptr + idx)) = (r << 11) | (g << 5) | b; } munmap(ptr, size);