Insta360 Airの360度USBウェブカメラ(UVC)としての性能はなかなか優秀
概要
あるしおうねさんのこちらのツイートを見て、おっ!となって検証してみました。
Insta360air、カメラアプリはカメラをはずした後の挙動が不安定だけど、カメラ自体はお手軽でいいですね。PC向けにもUVCで3008×1504のDual-Fisheyeとして普通に動きます。 pic.twitter.com/uRV0xq9N6o
— あるしおうね (@AmadeusSVX) 2017年3月15日
PCとつなぐとこんな感じ。PC接続用の硬めのケーブルも標準でついてきます。
Insta360 Airは、スマホと連携して360度カメラとして動作するというのが通常の使い方といえますが、VR/AR 関連開発者にとって見過ごせないのがそのUSBウェブカメラ、つまりUVC(USB Video Class)規格での動作です。UVC規格で動作すれば、PCやあるいはラズベリーパイ等で、様々なアプリや自作アプリから利用可能になります。
Insta360 Airから直接出力される映像はDual Fisheye(魚眼x2)形式です。今回はこのまま扱う前提での話です。
Dual Fisheyeはこのような出力になります。
※画像はカメラを寝かせた状態での結果なので参考まで。リアルタイムスティッチソフトについて
Insta360 Air用に、Windowsでリアルタイムにスティッチしてくれるソフトがあります。つまり、Dual Fisheye形式から、各種動画サイト等で一般的なEquirectangular(正距円筒図法)形式に変換した上で、ウェブカメラと同様のインタフェースで扱うことができるものです。
以下のページから、英語モードにして、"Webcam Software" というタイトルのものが、この変換用のソフトです。
今回は、利用用途として遅延を増やしたくない関係で、上記ソフトは一旦無視でいきます。Dual Fisheyeのまま使います。Unityのシェーダーとかでなんとかする前提です。
Unityのシェーダーとかの話は近いうちに書こうと思います。
amazonのリンクを置いておきますが、ヨドバシのほうがポイントがついてお得でした。
結論
先に結論を書きますが、Insta360 Air、360度対応のUSBウェブカメラとしてなかなか優秀です。MJPG 3008x1504 30フレーム というモードが特に有用で、ノイズはあるものの非常に高い解像感があります。今までTHETA SとキャプチャカードFEBON178を組み合わせていましたが、それを凌駕している印象です。特にUSB2.0環境でもつなぐだけで動作しますし、各種のウェブカメラ接続の手法がそのまま利用できます。
なお、入力したDual Fisheye画像をどう料理するかは今回は省略しますが、簡単に触れますと、右と左の正方形にわけたときに、それぞれの正方形の中央にレンズのセンターがきています。ただセンサーの配置の関係か、経度方向に4度程度傾いているようです。ご注意ください。
やや大きな難点としては、2つのレンズの間の視差がTHETAと比べると大きいため、近くのものと遠くのものを同時に綺麗に合成(スティッチ)することは難しくなります。この点はTHETA Sに分があります。Insta360 Airではスティッチソフトの高度化によってこれに対処しようとしているようです。
以下、詳細になります。
動作モード
USB2.0で動作します。USB3.0ではありません。USB3.0ではないため、帯域幅的にすべて圧縮ありのモードになります。 Insta360 AirをUSBポートに接続すると、"Video Control"という名前のデバイスが追加されます。
デバイス名: “Video Control”
MJPGエンコーディング
- 3008 x 1504 (30フレーム/秒)
- 2176 x 1088 (30フレーム/秒)
- 1472 x 736 (30フレーム/秒)
- H.264エンコーディング ※Windows10で動作させるには後述の細工が必要です。
- 2560 x 1280 (30フレーム/秒)
- 1920 x 960 (30フレーム/秒)
各エンコーディング(動画圧縮手法)について簡単に解説しておくと、MJPG (Motion JPEG)は各フレームをそれぞれJPEGで圧縮して、それをつなげて転送する方法で、最近の動画系のエンコーディング(H.264やMPEG1/2/4)と比べると圧縮率が悪い(同画質で転送量が多くなる)です。H.264は最近良く使われる動画の圧縮方法で、圧縮率の高さに定評があります。ウェブカメラにH.264を利用する手法は、USB2.0に対応しつつ解像度を上げる方法としてここ数年で広まってきています。
画質
モード間の画質比較
MJPGでの画質は、精細さは感じるものの、ノイズが常に乗る感じです。とはいえ時間でならせば平均的にはそこそこ良い色味になっているように思います。 H.264での画質は、時間、空間方向でなめらかさは出るものの、解像感でいうとMJPGより劣るという印象です。
コーデック | 解像感 | ノイズ | 総合評価 |
---|---|---|---|
MJPG | ◎ | 多い | ◎ |
H.264 | △ | 少ない | ○ |
そもそもの解像度が高いこともあり、素材としてはMJPGのほうが総合的に評価が高いです。MJPGモードの解像度の違いでは、3008x1504がもちろん解像感は高いですがJPEG由来のノイズが明らかに見えます。解像度が低いほどJPEG由来のノイズが低減される感じですので、ノイズ少ない安定した画質を求めるならば低い解像度を選択するのもアリという感じがあります。
以下、比較用の画像です。おおかた同じ場所を切り出しています。
MJPG 1472x736
MJPG 2176x1088
MJPG 3008x1504
H.264 2560x1280
THETA Sとの比較
手持ちのTHETA Sと比較してみました。THETA Sは、USB接続とHDMI接続とで画質が異なるため、両方と比較してみました。 エアコンを同じ場所から撮影して比較してみました。画像は下のほうにありますが、以下に表でまとめます。
※ちなみに、THETA SC にはHDMIポートが搭載されていないのでご注意ください。
デバイス、接続方法 | エンコーディング | 解像感 | ノイズ | 総合評価 |
---|---|---|---|---|
Insta360 Air USB | MJPG 3008x1504 | ◎ | 多い | ◎ |
THETA S USB | MJPG 1280x720 | × | 少ない | △ |
THETA S HDMI、FEBON178でキャプチャ | YUV 1920x1080 | △ | 少ない | ○ |
というわけで、Insta360 Airは、解像感の上では、直接USB接続する上ではTHETA Sよりだいぶ上、HDMI経由の場合でも「上ではないか?」という印象です。Insta360 Airのノイズは、静止画にするとだいぶ目立ちますが、動画で動いているとザワザワ感は多少あるものの、平均化されてそんなにひどい感じはないです。ノイズの多いInsta360 Airか、ノイズは少ないが多少解像感に欠けるTHETA S (HDMI)か?という選択で、嗜好によるところもありそうです。また後述しますがスティッチ難度にも違いがあります。これを考慮に入れると互角に近いかもしれません。
Insta360 Air MJPG 3008x1504 (USB直接)
THETA S 1280x720 (USB直接)
THETA S HDMI 1920x1080 (FEBON178 USB3.0にて取り込み)
遅延
ブラウザ上のストップウォッチをInsta360 Airで動画撮影しつつ、それをhunuaaで表示し、両方の画面を入れて静止画撮影して計測した遅延です。読み取りもいいかげんなため、正確なものではないですが、感覚的には合致する数字ではあります。
モード | 遅延 |
---|---|
MJPG 1472 x 736 モード | 約180ms |
MJPG 3008 x 1504 モード | 約260ms |
Windows 10での動作についての注意
Windows 10 Anniversary Update (1607)の前後で、MJPGおよびH.264の動作に問題が出ていますので注意が必要です。
MJPG
MJPGについては、Windows 10 Anniversary Updateによって一時動作不可になり、その後の更新で動作するようになったそうです。自動更新にしていれば動作する状態になっていると思います。
-
H.264については、Windows 10 Anniversary Updateによって動作不可になった後、現時点(2017/4/22)では未修正と思われます。以下の項目を御覧ください。
Windows 10でH264モードを使えない問題の解消方法
参考:
- http://news.mynavi.jp/column/windows/406/
- http://wccftech.com/fix-windows-10-webcam-issue-anniversary-update/
要はregeditで以下の2つのキーを追加します。
HKEY_LOCAL_MACHINE > SOFTWARE > Microsoft > Windows Media Foundation > Platform 内に以下のキーを作る
- タイプ: DWORD (32-bit) Value
- キー名: EnableFrameServerMode
- 値: 0
HKEY_LOCAL_MACHINE > SOFTWARE > WOW6432Node > Microsoft > Windows Media Foundation > Platform 内に以下のキーを作る
- タイプ: DWORD (32-bit) Value
- キー名: EnableFrameServerMode
- 値: 0
デメリット
三脚穴がない
Insta360 Airで微妙にこまることもあります。三脚穴がないことです。くねくね三脚のような素材のUSB延長ケーブルがついており、USBポートからなんとなく位置が固定されるのですが、USBポートってそんなに揺れに強くないので、ちょっとの振動でガタガタ揺れます。 三脚ネジに固定できる方法があると良いと思います。
三脚ネジではなくGoPro互換のマウント用ですが、3D Printできるマウントのデータが公開されているようです。 http://360rumors.blogspot.jp/2017/03/gopro-mount-for-insta360-air.html
熱を持つ
ウェブカメラとして動画を撮影している状態では、結構熱を持ちます。さわれない程ではないですが、「結構熱いな」という程度です。今のところ、それによる誤動作や停止はありませんでしたが、気になるところです。
(THETAシリーズと比較すると)スティッチが難しい
THETA S(レンズ間距離約2cm)と比較するとInsta360 Airでは4cm弱と、レンズ間の距離が2倍程度あるため、2つのレンズの間に視差が生じてしまい、近い距離にあわせてスティッチすると遠くがあわず、遠くにあわせてスティッチすると近くがあわない、という状況になります。 Insta360公式のスティッチソフトおよびアプリでは、より高度はスティッチを行うことで可能な限り解消しているようです。Dual Fisheyeを直接シェーダでマッピングするような場合は、THETA Sと比較して明らかに問題がでてきます。
USBパラメータ
以下にusbviewのアウトプットを掲載しておきます。何かの役に立つかもしれないし。
[Port1] : USB Composite Device Is Port User Connectable: yes Is Port Debug Capable: no Companion Port Number: 0 Companion Hub Symbolic Link Name: Protocols Supported: USB 1.1: yes USB 2.0: yes USB 3.0: no Device Power State: PowerDeviceD0 ---===>Device Information<===--- English product name: "Insta360 Air" ConnectionStatus: Current Config Value: 0x01 -> Device Bus Speed: High (is not SuperSpeed or higher capable) Device Address: 0x08 Open Pipes: 2 ===>Device Descriptor<=== bLength: 0x12 bDescriptorType: 0x01 bcdUSB: 0x0200 bDeviceClass: 0xEF -> This is a Multi-interface Function Code Device bDeviceSubClass: 0x02 -> This is the Common Class Sub Class bDeviceProtocol: 0x01 -> This is the Interface Association Descriptor protocol bMaxPacketSize0: 0x40 = (64) Bytes idVendor: 0x2E1A = Vendor ID not listed with USB.org as of 02-15-2012 idProduct: 0x1000 bcdDevice: 0x0100 iManufacturer: 0x01 English (United States) "Arashi Vision" iProduct: 0x02 English (United States) "Insta360 Air" iSerialNumber: 0x00 bNumConfigurations: 0x01 ---===>Open Pipes<===--- ===>Endpoint Descriptor<=== bLength: 0x07 bDescriptorType: 0x05 bEndpointAddress: 0x83 -> Direction: IN - EndpointID: 3 bmAttributes: 0x03 -> Interrupt Transfer Type wMaxPacketSize: 0x0040 = 1 transactions per microframe, 0x40 max bytes bInterval: 0x08 ===>Endpoint Descriptor<=== bLength: 0x07 bDescriptorType: 0x05 bEndpointAddress: 0x81 -> Direction: IN - EndpointID: 1 bmAttributes: 0x02 -> Bulk Transfer Type wMaxPacketSize: 0x0200 = 0x200 max bytes bInterval: 0x00 ---===>Full Configuration Descriptor<===--- ===>Configuration Descriptor<=== bLength: 0x09 bDescriptorType: 0x02 wTotalLength: 0x01B9 -> Validated bNumInterfaces: 0x02 bConfigurationValue: 0x01 iConfiguration: 0x00 bmAttributes: 0x80 -> Bus Powered MaxPower: 0xFA = 500 mA ===>IAD Descriptor<=== bLength: 0x08 bDescriptorType: 0x0B bFirstInterface: 0x00 bInterfaceCount: 0x02 bFunctionClass: 0x0E -> Video Interface Class bFunctionSubClass: 0x03 -> Video Interface Collection bFunctionProtocol: 0x00 -> PC_PROTOCOL_UNDEFINED protocol iFunction: 0x04 English (United States) "Video Control" ===>Interface Descriptor<=== bLength: 0x09 bDescriptorType: 0x04 bInterfaceNumber: 0x00 bAlternateSetting: 0x00 bNumEndpoints: 0x01 bInterfaceClass: 0x0E -> Video Interface Class bInterfaceSubClass: 0x01 -> Video Control Interface SubClass bInterfaceProtocol: 0x00 iInterface: 0x04 English (United States) "Video Control" ===>Class-Specific Video Control Interface Header Descriptor<=== bLength: 0x0D bDescriptorType: 0x24 bDescriptorSubtype: 0x01 bcdVDC: 0x0100 wTotalLength: 0x0084 -> Validated dwClockFreq: 0x08954400 = (144000000) Hz bInCollection: 0x01 baInterfaceNr[1]: 0x01 USB Video Class device: spec version 1.0 ===>Video Control Output Terminal Descriptor<=== bLength: 0x09 bDescriptorType: 0x24 bDescriptorSubtype: 0x03 bTerminalID: 0x04 wTerminalType: 0x0101 = (TT_STREAMING) bAssocTerminal: 0x00 bSourceID: 0x02 iTerminal: 0x00 ===>Video Control Extension Unit Descriptor<=== bLength: 0x1B bDescriptorType: 0x24 bDescriptorSubtype: 0x06 bUnitID: 0x02 guidExtensionCode: {BFFF09E1-E40B-42C9-9582-90FE23C07388} bNumControls: 0x06 bNrInPins: 0x01 ===>List of Connected Units and Terminal ID's baSourceID[1]: 0x06 bControlSize: 0x02 bmControls : 0x3F 0x00 D00 = 1 yes - Vendor-Specific (Optional) D01 = 1 yes - Vendor-Specific (Optional) D02 = 1 yes - Vendor-Specific (Optional) D03 = 1 yes - Vendor-Specific (Optional) D04 = 1 yes - Vendor-Specific (Optional) D05 = 1 yes - Vendor-Specific (Optional) D06 = 0 no - Vendor-Specific (Optional) D07 = 0 no - Vendor-Specific (Optional) D08 = 0 no - Vendor-Specific (Optional) D09 = 0 no - Vendor-Specific (Optional) D10 = 0 no - Vendor-Specific (Optional) D11 = 0 no - Vendor-Specific (Optional) D12 = 0 no - Vendor-Specific (Optional) D13 = 0 no - Vendor-Specific (Optional) D14 = 0 no - Vendor-Specific (Optional) D15 = 0 no - Vendor-Specific (Optional) iExtension: 0x00 ===>Video Control Extension Unit Descriptor<=== bLength: 0x1B bDescriptorType: 0x24 bDescriptorSubtype: 0x06 bUnitID: 0x06 guidExtensionCode: {FAF1672D-B71B-4793-8C91-7B1C9B7F95F8} bNumControls: 0x05 bNrInPins: 0x01 ===>List of Connected Units and Terminal ID's baSourceID[1]: 0x05 bControlSize: 0x02 bmControls : 0xFF 0x6F D00 = 1 yes - Vendor-Specific (Optional) D01 = 1 yes - Vendor-Specific (Optional) D02 = 1 yes - Vendor-Specific (Optional) D03 = 1 yes - Vendor-Specific (Optional) D04 = 1 yes - Vendor-Specific (Optional) D05 = 1 yes - Vendor-Specific (Optional) D06 = 1 yes - Vendor-Specific (Optional) D07 = 1 yes - Vendor-Specific (Optional) D08 = 1 yes - Vendor-Specific (Optional) D09 = 1 yes - Vendor-Specific (Optional) D10 = 1 yes - Vendor-Specific (Optional) D11 = 1 yes - Vendor-Specific (Optional) D12 = 0 no - Vendor-Specific (Optional) D13 = 1 yes - Vendor-Specific (Optional) D14 = 1 yes - Vendor-Specific (Optional) D15 = 0 no - Vendor-Specific (Optional) iExtension: 0x00 ===>Video Control Extension Unit Descriptor<=== bLength: 0x1B bDescriptorType: 0x24 bDescriptorSubtype: 0x06 bUnitID: 0x05 guidExtensionCode: {B42153BD-35D6-45CA-B203-4E0149B301BC} bNumControls: 0x10 bNrInPins: 0x01 ===>List of Connected Units and Terminal ID's baSourceID[1]: 0x03 bControlSize: 0x02 bmControls : 0x7F 0x7E D00 = 1 yes - Vendor-Specific (Optional) D01 = 1 yes - Vendor-Specific (Optional) D02 = 1 yes - Vendor-Specific (Optional) D03 = 1 yes - Vendor-Specific (Optional) D04 = 1 yes - Vendor-Specific (Optional) D05 = 1 yes - Vendor-Specific (Optional) D06 = 1 yes - Vendor-Specific (Optional) D07 = 0 no - Vendor-Specific (Optional) D08 = 0 no - Vendor-Specific (Optional) D09 = 1 yes - Vendor-Specific (Optional) D10 = 1 yes - Vendor-Specific (Optional) D11 = 1 yes - Vendor-Specific (Optional) D12 = 1 yes - Vendor-Specific (Optional) D13 = 1 yes - Vendor-Specific (Optional) D14 = 1 yes - Vendor-Specific (Optional) D15 = 0 no - Vendor-Specific (Optional) iExtension: 0x00 ===>Video Control Input Terminal Descriptor<=== bLength: 0x12 bDescriptorType: 0x24 bDescriptorSubtype: 0x02 bTerminalID: 0x01 wTerminalType: 0x0201 = (ITT_CAMERA) bAssocTerminal: 0x00 iTerminal: 0x00 ===>Camera Input Terminal Data wObjectiveFocalLengthMin: 0x0000 wObjectiveFocalLengthMax: 0x0000 wOcularFocalLength: 0x0000 bControlSize: 0x03 bmControls : 0x00 0x00 0x00 D00 = 0 no - Scanning Mode D01 = 0 no - Auto-Exposure Mode D02 = 0 no - Auto-Exposure Priority D03 = 0 no - Exposure Time (Absolute) D04 = 0 no - Exposure Time (Relative) D05 = 0 no - Focus (Absolute) D06 = 0 no - Focus (Relative) D07 = 0 no - Iris (Absolute) D08 = 0 no - Iris (Relative) D09 = 0 no - Zoom (Absolute) D10 = 0 no - Zoom (Relative) D11 = 0 no - PanTilt (Absolute) D12 = 0 no - PanTilt (Relative) D13 = 0 no - Roll (Absolute) D14 = 0 no - Roll (Relative) D15 = 0 no - Reserved D16 = 0 no - Reserved D17 = 0 no - Focus, Auto D18 = 0 no - Privacy D19 = 0 no - Focus, Simple D20 = 0 no - Window D21 = 0 no - Region of Interest D22 = 0 no - Reserved D23 = 0 no - Reserved ===>Video Control Processing Unit Descriptor<=== bLength: 0x0B bDescriptorType: 0x24 bDescriptorSubtype: 0x05 bUnitID: 0x03 bSourceID: 0x01 wMaxMultiplier: 0x0000 bControlSize: 0x02 bmControls : 0x7F 0x15 D00 = 1 yes - Brightness D01 = 1 yes - Contrast D02 = 1 yes - Hue D03 = 1 yes - Saturation D04 = 1 yes - Sharpness D05 = 1 yes - Gamma D06 = 1 yes - White Balance Temperature D07 = 0 no - White Balance Component D08 = 1 yes - Backlight Compensation D09 = 0 no - Gain D10 = 1 yes - Power Line Frequency D11 = 0 no - Hue, Auto D12 = 1 yes - White Balance Temperature, Auto D13 = 0 no - White Balance Component, Auto D14 = 0 no - Digital Multiplier D15 = 0 no - Digital Multiplier Limit iProcessing : 0x00 ===>Endpoint Descriptor<=== bLength: 0x07 bDescriptorType: 0x05 bEndpointAddress: 0x83 -> Direction: IN - EndpointID: 3 bmAttributes: 0x03 -> Interrupt Transfer Type wMaxPacketSize: 0x0040 = 1 transactions per microframe, 0x40 max bytes bInterval: 0x08 ===>Class-specific VC Interrupt Endpoint Descriptor<=== bLength: 0x05 bDescriptorType: 0x25 bDescriptorSubtype: 0x03 wMaxTransferSize: 0x0040 = (64) Bytes ===>Interface Descriptor<=== bLength: 0x09 bDescriptorType: 0x04 bInterfaceNumber: 0x01 bAlternateSetting: 0x00 bNumEndpoints: 0x01 bInterfaceClass: 0x0E -> Video Interface Class bInterfaceSubClass: 0x02 -> Video Streaming Interface SubClass bInterfaceProtocol: 0x00 iInterface: 0x05 English (United States) "Video Stream" ===>Video Class-Specific VS Video Input Header Descriptor<=== bLength: 0x0F bDescriptorType: 0x24 bDescriptorSubtype: 0x01 bNumFormats: 0x02 wTotalLength: 0x00FF -> Validated bEndpointAddress: 0x81 -> Direction: IN - EndpointID: 1 bmInfo: 0x00 -> Dynamic Format Change not Supported bTerminalLink: 0x04 bStillCaptureMethod: 0x02 -> Still Capture Method 2 bTriggerSupport: 0x01 -> Hardware Triggering Support bTriggerUsage: 0x00 -> Host will initiate still image capture bControlSize: 0x01 Video Payload Format 1 0x00 D00 = 0 no - Key Frame Rate D01 = 0 no - P Frame Rate D02 = 0 no - Compression Quality D03 = 0 no - Compression Window Size D04 = 0 no - Generate Key Frame D05 = 0 no - Update Frame Segment D06 = 0 no - Reserved D07 = 0 no - Reserved Video Payload Format 2 0x00 D00 = 0 no - Key Frame Rate D01 = 0 no - P Frame Rate D02 = 0 no - Compression Quality D03 = 0 no - Compression Window Size D04 = 0 no - Generate Key Frame D05 = 0 no - Update Frame Segment D06 = 0 no - Reserved D07 = 0 no - Reserved ===>Video Streaming MJPEG Format Type Descriptor<=== bLength: 0x0B bDescriptorType: 0x24 bDescriptorSubtype: 0x06 bFormatIndex: 0x01 bNumFrameDescriptors: 0x03 bmFlags: 0x00 -> Sample Size is Not Fixed bDefaultFrameIndex: 0x03 bAspectRatioX: 0x00 bAspectRatioY: 0x00 bmInterlaceFlags: 0x00 D00 = 0 non-Interlaced stream or variable D01 = 0 2 fields per frame D02 = 0 Field 1 not first D03 = 0 Reserved D4..5 = 0 Field patterns -> Field 1 only D6..7 = 0 Display Mode -> Bob only bCopyProtect: 0x00 -> Duplication Unrestricted ===>Video Streaming MJPEG Frame Type Descriptor<=== bLength: 0x1E bDescriptorType: 0x24 bDescriptorSubtype: 0x07 bFrameIndex: 0x01 bmCapabilities: 0x00 wWidth: 0x05C0 = 1472 wHeight: 0x02E0 = 736 dwMinBitRate: 0x00384000 dwMaxBitRate: 0x05A00000 dwMaxVideoFrameBufferSize: 0x00100000 dwDefaultFrameInterval: 0x00051615 = 33.333300 mSec (30.00 Hz) bFrameIntervalType: 0x01 *!*WARNING: if bFrameIntervalType is 1 then dwMinBitRate should equal dwMaxBitRate ===>Additional Discrete Frame TypeData dwFrameInterval[1]: 0x00051615 = 33.333300 mSec (30.00 Hz) ===>Video Streaming MJPEG Frame Type Descriptor<=== bLength: 0x1E bDescriptorType: 0x24 bDescriptorSubtype: 0x07 bFrameIndex: 0x02 bmCapabilities: 0x00 wWidth: 0x0880 = 2176 wHeight: 0x0440 = 1088 dwMinBitRate: 0x00384000 dwMaxBitRate: 0x05A00000 dwMaxVideoFrameBufferSize: 0x00100000 dwDefaultFrameInterval: 0x00051615 = 33.333300 mSec (30.00 Hz) bFrameIntervalType: 0x01 *!*WARNING: if bFrameIntervalType is 1 then dwMinBitRate should equal dwMaxBitRate ===>Additional Discrete Frame TypeData dwFrameInterval[1]: 0x00051615 = 33.333300 mSec (30.00 Hz) ===>Video Streaming MJPEG Frame Type Descriptor<=== --->This is the Default (optimum) Frame index bLength: 0x1E bDescriptorType: 0x24 bDescriptorSubtype: 0x07 bFrameIndex: 0x03 bmCapabilities: 0x00 wWidth: 0x0BC0 = 3008 wHeight: 0x05E0 = 1504 dwMinBitRate: 0x00384000 dwMaxBitRate: 0x05A00000 dwMaxVideoFrameBufferSize: 0x00100000 dwDefaultFrameInterval: 0x00051615 = 33.333300 mSec (30.00 Hz) bFrameIntervalType: 0x01 *!*WARNING: if bFrameIntervalType is 1 then dwMinBitRate should equal dwMaxBitRate ===>Additional Discrete Frame TypeData dwFrameInterval[1]: 0x00051615 = 33.333300 mSec (30.00 Hz) ===>Still Image Frame Type Descriptor<=== bLength: 0x17 bDescriptorType: 0x24 bDescriptorSubtype: 0x03 bEndpointAddress: 0x00 bNumImageSizePatterns: 0x04 wWidth[1]: 0x0BC0 wHeight[1]: 0x05E0 wWidth[2]: 0x0780 wHeight[2]: 0x0438 wWidth[3]: 0x0500 wHeight[3]: 0x02D0 wWidth[4]: 0x0280 wHeight[4]: 0x01E0 bNumCompressionPattern: 0x01 bCompression[1]: 0x03 ===>Color Matching Descriptor<=== bLength: 0x06 bDescriptorType: 0x24 bDescriptorSubtype: 0x0D bColorPrimaries: 0x01 bTransferCharacteristics: 0x01 bMatrixCoefficients: 0x04 *!*ERROR: bDescriptorSubtype did not exist in UVC 1.0 ===>Descriptor Hex Dump<=== bLength: 0x1C bDescriptorType: 0x24 1C 24 10 02 02 48 32 36 34 00 00 10 00 80 00 00 AA 00 38 9B 71 10 01 00 00 00 00 01 *!*ERROR: bDescriptorSubtype did not exist in UVC 1.0 ===>Descriptor Hex Dump<=== bLength: 0x26 bDescriptorType: 0x24 26 24 11 01 00 80 07 C0 03 00 00 80 07 00 00 00 0F 15 16 05 00 03 00 00 00 00 15 16 05 00 9A 5B 06 00 20 A1 07 00 *!*ERROR: bDescriptorSubtype did not exist in UVC 1.0 ===>Descriptor Hex Dump<=== bLength: 0x26 bDescriptorType: 0x24 26 24 11 02 00 00 0A 00 05 00 00 80 07 00 00 00 0F 15 16 05 00 03 00 00 00 00 15 16 05 00 9A 5B 06 00 20 A1 07 00 ===>Color Matching Descriptor<=== bLength: 0x06 bDescriptorType: 0x24 bDescriptorSubtype: 0x0D bColorPrimaries: 0x01 bTransferCharacteristics: 0x01 bMatrixCoefficients: 0x04 ===>Endpoint Descriptor<=== bLength: 0x07 bDescriptorType: 0x05 bEndpointAddress: 0x81 -> Direction: IN - EndpointID: 1 bmAttributes: 0x02 -> Bulk Transfer Type wMaxPacketSize: 0x0200 = 0x200 max bytes bInterval: 0x00 ===>Additional Error Checking<=== PASS: number of MJPEG frame descriptors (3) == number of frame descriptors (3) specified in MJPEG format descriptor(s)