Logitech C930e の UVC1.5 H.264情報の取得について

USB-UVCでUSB-カメラから画像を取得している時にいつもはMJPEG形式で取得しているがH.264で取得したくなった。いろいろと調べているとH.264に対応しているUSBカメラは多々あるが、USB-UVC1.5に対応している(明記されている)物がかなり少ない。

こちらのblog(Webカメラからh264動画を取得した~い~その4)ではH.264データの埋め込まれ方は3種類あると書かれています。

1. YUY2やMJPEGと同様にフォーマットディスクリプタとフレームディスクリプタを使う方法
  UVC1.5規格でのH.264対応…例えばリコーのTHETA Sがこのタイプです。
2. YUY2やMJPEGと同様にフォーマットディスクリプタとフレームディスクリプタを使う方法
  UVC1.1規格のフレームベースフォーマットでのH.264対応…例えばロジクールのC920rがこのタイプです。
3. MJPEGのペイロードに埋め込んで転送する方法
  UVC1.1規格でのH.264対応…例えばロジクールのC930eがこのタイプです。

という事で、何と、UVC1.5規格でH.264を取得しようとすると「リコーのTHETA S」が必要みたいです。が、何せこれ値段が高いのです。Amazonとだと6万円なんですけど…。ヤフオクとかでも軽く1万円は超えてます。何とかならない物かな~と思っていたところ、なんと Logitech C930e が UVC1.5に対応していると製品の紹介ページに書かれているではありませんか(先の説明と違うな…??)。早速ポチリとして手元に届き、早速Windwosにさして確認したところ……UVC1.0でした orz。何が何だか頭が混乱して分からない状況に陥りました。公式HPにUVC1.5でH.264 SVC対応って書いてあるよ? 何で? 因みにWindowsで確認したツールはUsbTreeViewです。

ググりにググってみると、世界中でC930eのUVC1.5対応の件が上がってました。ほぼ全てが「UVC1.5で取れないよ」と。そんな中、Damiano Albaniさんがディスクリプタ情報の中の bNumConfigurations の値が間違っている(意図的?)との書き込みを見つけました。また、Damiano Albaniさんは強制的にその値を変更してUVC1.5 H.264のディスクリプタ情報を取得できたと言われています(私がクレクレ星人になってみたのですが反応なし…)。取得されたデータもあります。でも肝心の何をどう変更したらその情報が取れるのかを公開してくれていません。なので書かれている内容を元に作成し、実際に取得してみました。

対応箇所を2つ。
1. Linux kernelのUSB coreの修正
2. lsusbコマンドのUVC1.5対応

Linux kernelの修正は一瞬どうしようかと思ったのですが、幸い手元にRaspberry Pi 3+という最強のおもちゃがあるのでそれを使う事にしました。

現時点での最新版のRaspberry Pi OS(32bit)をSDカードに入れて、起動確認した後、githubからkernelをダウンロードしてbuildしてkernelを置き換えて起動確認しておきます(build方法は公式サイトにあります)。

kernelのUSB core部分へC930eの時だけ bNumConfigurations を化かす(1→2にする)様に変更してbuild, そのkernelで正常起動する事を確認した後、C930eをUSBポートへ刺します。dmesgではUVC1.0でしたがそれは無視することに。lsusbで確認してみると…UVC1.5のディスクリプタ情報を取得できました。lsusbコマンドがUVC1.5に対応していなかったのでこちらもH.264の所だけ見栄え良くなるように修正しました。

lsusb_c930e_01.png

Linux kernel と lsusbコマンドのパッチを以下に置いておきます(C930eの隠れディスクリプタ情報を見るためだけのパッチです)。

OneDrive(jujurou)

後は、どうやってH.264のストリームデータを取得するかですね。
このままではGuvcviewで取得できるH.264はUVC1.0のM-JPEGペイロード内に置かれたH.264ストリームデータのままだと思われますので(C930eはUVC1.0モードと1.5モードというのが存在するらしく、何かすれば切り替える事ができるのかな…)。
スポンサーサイト



tag : USB

tag : UVC

USBカメラの詳細情報取得(Linux, Windws)

時代はテレワーク。某ウィルスのせいでUSBカメラが売れたとか…。
そんなUSBカメラですが、その性能はマチマチ。また、商品名や仕様詳細に書かれていない事がわんさかとあります。概ね最大画像サイズや最大速度くらいしか書かれてないです。正直、一般ユーザが組み込み用途で使う場合は博打に近い感覚で購入するしかないです。

LinuxやAndroid、Windowsで概ね使えるのがUSB-UVC規格に則ったカメラです。USB-UVCはUSBのクラスドライバ(USB Video Class)なので、当然USB規格の上に成り立っています。Videoクラスといってますが、実際問題常に送っているデータ内容はJPEGだったり、YUYV形式の非圧縮画像だったりで、動画規格はUSB-UVC 1.5からH.264という動画系の圧縮方法が正式に組み込まれているくらいです(それ以前にも入ってましたが、無理くり入れたって感じの規格でした)。

USBカメラの詳細情報(仕様)を確認するには上述した様に買ってみるしかありません。物によっては以下で記載する内容がWEB上に存在するものもありますがね…。そんなわけで、買った後にどの様な仕様なのか調べる方法を記載します。


■ Windwosの場合
Windows標準の機能で調べる手立ては有りません。なのでツールを使います。私が良く使うのは UsbTreeView というソフトです。これはWindows PCに繋がっているUSB機器の情報を表示してくれるソフトですが、もちろんUSB-UVCの内容も表示してくれます。左の画面にUSB-HOST Controlerを起点に繋がっている物を全て表示されるようになっていますので、そこから目当てのUSBカメラの項目をクリックすると右の画面にディスクリプタ情報が列挙されます。カメラが複数繋がていてどれを選べば良いか分からないって時はこのソフトを起動させつつUSBカメラを抜き差ししてください。抜いた時に無くなって、刺した時に現れるデバイスが該当のカメラです。

screenshot_2022-03-18_150908.png



■ Linuxでの確認方法(Ubuntu 18.04を使いました)。
それぞれ必要なツール(コマンド)はapt等で取得してください。

USBディスクリプタ情報はlsusbコマンドにvオプションを付けてで取得する事ができます。そのままだとPCに繋がっている全てのUSB機器の内容を表示するので、dオプションを使用してデバイスを指定するのが良いでしょう。

$ lsusb
$ lsusb -v -d 04f2:b722


screenshot_2022-03-18_133351.png

カメラ機能に特化した情報取得の方法としてv4l2-ctrlを使う方法もあります。

$ v4l2-ctl --all
$ v4l2-ctl --list-devices
$ v4l2-ctl --list-formats-ext
$ v4l2-ctl -d /dev/video0 --info
$ v4l2-ctl -d /dev/video0 --list-formats


screenshot_2022-03-18_135120.png screenshot_2022-03-18_135353.png
screenshot_2022-03-18_135429.png screenshot_2022-03-18_135528.png
screenshot_2022-03-18_135641.png

このカメラはMJPEG,YUYV,H.264形式に対応してますね。
MJPEGだと1920x1080, 1280x720, 640x360のサイズに対応、YUYVだと640x360に、H.264だと1920x1080, 1280x720, 640x360のサイズに対応してます。フレームレートも30fpsの様です。

ディスクリプタ情報からはもっと色々な事が分かります。カメラ自体に色味補正があるとか、同じ画像サイズで複数のfpsを選択できたり、USB規格上の話だとMax packet Sizeとして何を選択できるか(Linuxではドライバレベルで使用できる最大サイズを強制的に使用する事になります)等です。いつか記事にする…かもです。

カメラだけで何を変更できるのか、本当にその画像は取得できるのかを実際に見ながら確認できるソフトもあります。Windowsでは探しきれなかった(正確には描画ツール側で補正していない事が分からなかった)のですが、Linuxだとqv4l2というツールが有ります。画面のサイズ感や粗さを見ながらどの設定を使用するか決める事ができます。

Screenshot_from_2022-03-18_14-26-38.png Screenshot_from_2022-03-18_14-28-37_2.png

tag : USB

tag : UVC

tag : Linux

tag : Windows

メインPCのグレードアップ(CPU変更編)

さて、いよいよ最後のグレードアップです。CPUの変更……。本当はここまでするつもりは無かったのですが、SSD化を行う際に見つけたサイトに全く同じ機種でCPUを変更することをされていたブログ(blogの辺境)が有り、どうせならこれも取り入れようと思った次第です。

CPUの選定は参考にしたブログに記載されていて、TDPが同じのi7ということで Core i7 3612QM(SR0MQ) に決定です。動かなかったら元に戻す(Core i5 3210M(SR0MZ))程度の計画なのでダメもとでヤフオク!で中古のCPUを購入しました。CPUグリス、グリスクリーナーも記載されていたものを使用します。

参考にしたブログではメンテナンスマニュアルを入手され、それとYouTubeなどの動画を参考にして取り換えられたとのことですが、私はマニュアルよりもYouTubeの方が参考になりました。分解で参考になったのは以下の動画です。注意点として、LCD面と本体とを繋ぐヒンジのネジは必ず外すこと(裏面とキーボードを外した後に表面の両側のネジがあります)。これを怠ると外していないネジの部分がパキリをボジれます。私は表面を取らなくてボジれましたが、裏面を取っていたおかげで最終的に組み上げると何事もなかったかのようにヒンジが稼働してくれています。



CPU入れ替えの場面
DSC_0087.jpg ⇒ DSC_0088.jpg

CPUを入れ替えてついでにそれほど汚れていなかったのですが、ファン部分のお掃除もして組み立てて、でも念のためSSDは取り付けずに勇気を振り絞って電源ONしF2連打でBIOS画面を表示させてみると、ちゃんと Core i7 3612QM を認識していました。

DSC_0089.jpg

で、いったん電源を落としてSSDを装着して電源ONすると、無事にWindowsが起動しました。体感的に何も変化してないな~と思いつつCPU-Zで確認してみたところ……なんと、コア数とスレッド数が変化してないのです?!

ss_2021-12-09_213846.png

色々と確かめてみると、BIOSは Core i7 3612QM として認識しているが、WindowsがCore i5 3210M の認識のままの様。「CPU交換」などのキーワードでググっていると、Windwosをクリーンインストールしろと記載されているところがほとんどでしたが、それは避けたいと思いさらにググると、インプレースインストールを試してみるというのがありました。Windowsはアップグレード(既に最新になっているので上書き程度の感覚)させるが設定は引き継ぐというものです。ダメもとでやってみました。

MicrosoftのWindows10のダウンロードのページから「ツールを今すぐダウンロード」を選択してダウンロードしたソフトを実行して「個人用ファイルとアプリを引き継ぐ」を選択してインストール。何回か再起動をして私の環境では全部で2時間くらいかかりました。

その後、再度起動させて内容を確認すると、無事にWindows側でも Core i7 3612QM を認識してくれました。

ss_2021-12-10_000028.png ss_2021-12-09_235946.png

これで後3年持たせる事ができるかな。

メインPCのグレードアップ(RAM増設編)

難産であったがSSD化が成功したのでついでとばかりにRAMを増設する事にした。

このメインPCは元はRAMは4GBだったがWindows7時代に既に物足りなさを感じたので8GBにしていた。このマザーボードの本来の性能的にはMAXは8GBの2枚刺し(16GB)なのである。最近色々とアプリを起動させているのでRAMを増やしたいなと思っていたのだ。

スペック的にはPC3-10600(DDR3-1333)を刺せる事になっていたのでAmazonで「PC3-10600」の8GB 2枚組をポチった。で、家に届いたのがこちら…

DSC_0079.jpg

これ「PC3L-12800」って書いてあるのです。まじかと思いつつAmazonの購入履歴を見てもポチったのは「PC3-10600」でした。ま~早い分には持て余すだけで動作に支障は無いだろうとそのままPCに取り付けて(付けていた4GB x2は外して)起動させると何事も無かったかの様にWindowsが起動しました。

ただ不安ではあるので念のためにMemtest86+で確認したのが以下です。

DSC_0074.jpg

何と「DDR3-1596」として動いています。それも1回Pass通ってます。念のためにWindows起動時にCPU-Zで確認しても798MHzで動いているようです。嬉しい誤算ですが、モヤモヤ感が残った結果となりました。動いているから良しとします。

ss_2021-12-11_210948.png

メインPCのグレードアップ(SSD化編)

メインで使っているノートPCの起動速度(Windowsの起動、各アプリの起動等々)が遅くて耐えられなくなってきたのでグレードアップを試みることにしました。Win11が出て間もない今の時期にNew PCにするのも何だかな~と思ったのと、そもそも財源が乏しいからね…orz。今のPCを買ったのは2012年8月くらいだったかな。もう9年も使ってるんですね。あと3年はこのPCをメインとして使えるように、色々とやりました。やったことは以下の3つ。


[使用PC]
Acer Aspire V3 V3-571-H54D/K(発売日: 2012年06月03日)

[変更内容]
1. HDD→SSD変更
2. RAM増設(8GB→16GB)
3. CPU載せ替え(Core i5 3210M(SR0MZ) → Core i7 3612QM(SR0MQ))


ノートPCなのでやれることは限られている。初めに手を出したのはHDDをSSDへ変更する事。SSD化すると早くなると皆口を揃えて言っているからやってみることにした。このノートPCはスペース上HDDの口が1つしかないので実質全ドライブをSSD化する事になる。

SSDは何を選べば良いのかわからなかったので、楽天で容量をもともとついていたHDDと同じくらい(500GB)として検索して人気No1とか書いてあった WINTEN WT200-SSD-512GB にした。これが罠だとも知らず…。

DSC_0066.jpg DSC_0067.jpg

新しいPCを購入したわけではないから、やはりクローンが良い。ということで Macrium Reflect 8 Free Edition を使ってクローンを作成しました。実際はその前に AOMEI Backupper Standard というのを使ったのですが、回復パーティションの属性を付けたままクローンってのが出来なかったので、腑に落ちず Reflect 8 を試した訳です。

USB-SATA変換を使用して購入たSSDをPCへUSB経由で繋ぎ、クローン作製して、物理的に入れ替えて起動すればOK。1発で無事に起動したのですよね。体感滅茶起動が早くなりました。1回電源を入れて立ち上がるだけでは不安だったので、シャットダウンして電源ONしてみたところ……起動しません。あり得ないけど、何か手順を間違えたかなと電源ボタン5秒押しで電源OFFして再度電源ONすると……やはりWindowsの起動画面まで行きません。ちょっとパニック! BIOSが認識してくれてるか確認してみたところ、なんと認識してくれていません?! 何もする手がなくなり、夜も遅くなってしまったのでその日はモヤモヤしながら寝ました。

DSC_0068.jpg

次の日に凝りもせずSSDで起動してみるとWindowsが起動しました。前日の事もあるのでまだ安心はできません。シャットダウンして電源ONすると……起動しない。。。BIOSも認識してくれない。。。何だこの現象。元からついていたHDDでは起動するのでクローンソフトを変更してみたり、色々と試しているとどうも前回PCの電源を切ってから10分以内に電源をONすると100%認識してくれなくて、20分以内だと認識したりしなかったり、認識してもWindowsの起動画面(Winマーク)でwaitingのクルクルをひたすらまった挙句にディスクの回復画面に移行して強制的に再起動し、画面が真っ黒のままになったりする。20分以上空けるとWindowsが完全に起動してくれる。という謎の状態になってました。

同じノートPCでSSD化に成功した人は多いので、というか失敗例が出てこないので、SSDの相性か、そもそもこのSSDの初期不良を疑い、ダメもとで販売元に症状と返品をしたい旨を伝えると何と素直に返品OKと言ってくれました。SSDはデータの完全消去ができないのを知ってはいるものの個人データが入っているので ディスク消去ユーティリティ を使って中身を消去(米国家安全保障推奨方式を2回行いました)しまして返品しました。

しかし、1度SSD化の速度を体験した後にHDDに戻すとどの動作においてもイライラするようになってしまい、再度SSD化に挑戦してい見ました。今度は他のメーカー(シリコンパワー)のSSDにしました。

ss_2021-12-11_140117.png

クローンの方法はもう呆れる程試したので同じ手順でクローンを作成し、SSDから起動してみると、何事も無く起動しました。何度シャットダウン→電源ONを繰り返してもちゃんとWindowsが起動します。ホッとしたのと同時に WINTEN に対して腹が立ってきました。まっ、でもバックアップ(HDD)はあるし、SSDで起動したし、WINTENは返品で払った分も返ってくるしなので溜飲を下げました。

これで万事OKと思いきや、ドライブが1つ増えている事に気が付きました。何かと中身を見ると回復パーティションの内容でした。そう、回復パーティションが見えちゃってるのです。Windows10のディスクの管理画面でドライブ名を削除しても再起動すると現れます。diskpartを使ってドライブレターを削除しても再起動すると現れます。なんでやねんと思い、必死でググり倒したところどうもレジストリに記憶されているらしくそこを削除する必要があるとの事(Windows 10をアップデートしたらドライブが増えた場合の対処方法)でやってみるとうまく表示されなくなりました。

Fドライブに割り当てられている場合は以下の様にする。

・ HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Search\VolumeInfoCache\F: を削除
・ \HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices を選択すると右側に出てくる \DosDevices\F: を削除

SSD化でこんなに苦労するとは思ってもいなかったです。
黒ねこ時計 くろック D02
プロフィール

jujurou

Author:jujurou
運営HP:チャコの部屋
Twitter:jujurou

カレンダー
09 | 2022/10 | 11
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 - - - - -
最新記事
最新コメント
カテゴリ
ユーザタグ

ぺるけ Linux RaspberryPi 三段化 6P43P-E 全段差動プッシュプル トランジスタ式ミニワッター 6P43P TRminiWatterPart4 ギターアンプ MPD RaspberryPi_pico イーサネットコンバータ OpenOCD FON2405E DAC buildroot Bluetooth BeagleBoneBlack FM3ペリフェラル windows map UVC USB TL-WR700N FM4 ODROID-U2 mingw FM3評価ボード library ミニワッター OpenGL VMware 計測 プリアンプ Windows KiCad bitbake シングル Edison 6N6P 

月別アーカイブ
ランキング

FC2 Blog Ranking

カウンター
検索フォーム
リンク
RSSリンクの表示
QRコード
QRコード
ライセンス
クリエイティブ・コモンズ・ライセンス
Twitter