- RealSenseTM互動開發實戰
- 王曰海 湯振宇 吳新天
- 837字
- 2019-01-03 00:39:36
2.4 I/O設備操作
SDK采集接口管理采集設備(如一個攝像頭)操作。可以通過以下組件架構來訪問采集接口及其內容:
1)每個SDK會話可能包含多個實現了采集接口的模塊。例如,系統中可能存在針對不同類型攝像頭的模塊實現。
2)每個模塊可能包含多個設備,可通過Enumerate Devices查看如何進行設備的枚舉。
3)每個設備都有一組設備屬性,可通過Get/Set Device Properties查看如何獲取或設置設備屬性。
4)每個設備可能包含多個流(音頻或視頻流),可通過Enumerate Streams查看如何進行流的枚舉。
5)每個數據流可能包含多個配置,可通過Enumerate Stream Congurations查看如何進行枚舉流配置。
1.枚舉設備
一個SDK的會話可以包含多個采集模塊,每個模塊可以管理多個設備。可以使用QueryImpl函數來枚舉每個采集模塊,通過CreateImpl函數創建模塊實例,并利用Query-Device函數獲取設備的特定信息。參考Handler函數監聽攝像頭的變化事件。
例2-15示例了如何枚舉視頻采集設備。
例2-15 枚舉視頻采集設備
//會話是一個PXCMSession實例 PXCMSession.ImplDesc desc1=new PXCMSession.ImplDesc(); desc1.group=EnumSet.of(PXCMSession.ImplGroup.IMPL_GROUP_SENSOR); desc1.subgroup=EnumSet.of(PXCMSession.ImplSubgroup.IMPL_SUBGROUP_VIDEO_CAPTURE); for (int m=0;;m++) { PXCMSession.ImplDesc desc2=new PXCMSession.ImplDesc(); if (session.QueryImpl(desc1,m,desc2).isError()) break; System.printf("Module[%d]: %d%n", m, desc2.friendlyName); PXCMCapture capture=new PXCMCapture(); session.CreateImpl(desc2, capture); //輸出所有設備信息 for (int d=0;;d++) { PXCMCapture.DeviceInfodinfo=new PXCMCapture.DeviceInfo(); if (capture.QueryDevice(d, dinfo).isError()) break; System.out.printf("Device[%d]: %d%n", d, dinfo.name); } capture.close(); }
2.獲取/設置設備屬性
可以通過Device接口成員函數獲取和設置設備屬性。例2-16展示了如何獲得或設置設備屬性。不推薦隨意改變設備的設置,這樣做可能會影響其他共享相同物理設備的應用程序。
例2-16 設置設備屬性
//設備是一個PXCMCapture裝置實例 //獲取攝像頭的彩色和深度視野 PXCMPointF32 color_fov=device.QueryColorFieldOfView(); PXCMPointF32 depth_fov=device.QueryDepthFieldOfView(); //關閉自動曝光和設置手動曝光 device.SetColorAutoExposure(false); device.SetColorExposure(0);
3.枚舉流
每個SDK設備可能有多個數據流。流信息是DeviceInfo結構的一部分,可以使用QueryDeviceInfo函數獲取流信息。例2-17展示了如何獲取流信息。
例2-17 獲取流信息
//設備是一個PXCMCapture裝置實例 PXCMCapture.DeviceInfodinfo=new PXCMCapture.DeviceInfo(); device.QueryDeviceInfo(dinfo); if ((dinfo.streams.contains(PXCMCapture.StreamType.STREAM_TYPE_COLOR)) { System.out.printf("COLOR STREAM%n"); } if ((dinfo.streams.contains(PXCMCapture.StreamType.STREAM_TYPE_DEPTH)) { System.out.printf("DEPTH STREAM%n"); }
4.枚舉流配置
每一個流可能有多個配置(顏色的格式、分辨率和幀速率)。可以使用QueryStreamPro-fileSet函數來枚舉單個流或多個流的配置。通常多個流配置之間有一定的關聯,例如紅外流的配置可能與相應的深度流密切相關。當枚舉多個流的配置時,QuerStreamProleSet函數返回所有有效流的配置組合。可以使用IstreamProleSetValid函數驗證某些流配置。例2-18展示了如何枚舉流配置。
例2-18 枚舉流配置
//設備是一個PXCMCapture裝置實例 EnumSet<PXCMCapture.StreamType> streams=EnumSet.of(PXCMCapture.StreamType.STREAM_TYPE_COLOR,PXCCapture.StreamType.STREAM_TYPE_DEPTH); for (int p=0;;p++) { PXCMCapture.Device.StreamProfileSet profiles=new PXCMCapture.Device.StreamProfileSet(); pxcmStatussts=device.QueryStreamProfileSet(streams, p, profiles); if (sts.isError()) break; System.out.printf("color[%d]: %dx%d%n", p, profiles.color.imageInfo.width, profiles.color.imageInfo.height); System.out.printf("color[%d]: %dx%d%n", p, profiles.color.imageInfo.width, profiles.color.imageInfo.height); }