瑞芯微专栏

前面2篇我们讲解了camera的一些基础概念和知识。

本文主要讲述在瑞芯微平台上摄像头开发常用的调试命令。

0、环境

  1. soc : rk3568
  2. board: EVB1-DDR4-V10
  3. 件:Android 11
  4. Linux4.19.232
  5. Camera:ov13850

1. v4l2-utils工具包

v4l-utils工具是由Linux维护的V4L2开发工具包。

它提供了一套用于配置V4L2子设备属性的V4L2和媒体框架相关工具,测试V4L2设备,并提供开发库,如libv4l2等等。

v4l-utils工具包主要包含两个常用工具,分别是media-ctl、v4l2-ctl

瑞芯微的SDK在Buildroot固件中,已经编译好了v4l2-utils软件包里面的工具(Android通常默认支持)。

ubuntu系统安装方法:

  1. peng@ubuntu:~$ sudo apt install v4l-utils

2. media-ctl

media-ctl是v4l2-utils包中的一个工具,主要用来查看、配置Media Framework的各Entity的信息,如格式、裁剪、链接使能等。

V4l2-ctl 工具则是针对/dev/video0,/dev/video1 等 video设备,它在 video 设备上进行 set_fmt,reqbuf(申请buf),qbuf(送buf回队列),dqbuf(从队列取出buf),stream_on,stream_off 等一系列操作。

  1. n4的倍数(0,1,2,3…)
  2. /dev/videon+0:视频输出 SP主通道
  3. /dev/videon+1:视频输出 MP自身通道
  4. /dev/videon+23A统计
  5. /dev/videon+33A参数设置

1)找到video设备

拓扑结构中有多个的Entity,一些是sub device,一些是video device。前者对应的设备节点是/dev/v4l-subdev,后者对应的是/dev/video。多个的video device中,最常关注的是哪个设备可以输出图像。

  1. $ media-ctl -d /dev/media0 -e "rkisp_selfpath"
  2. /dev/video1
  3. $ media-ctl -d /dev/media0 -e "rkisp_mainpath"
  4. /dev/video0

上面两个命令分别显示出/dev/media0这个链路中,RKISP的SP及MP节点的设备路径。RKISP有两个视频输出设备,它们都能输出图像。

2)显示拓扑结构

使用以下命令可以显示拓扑结构:

  1. $ media-ctl -p -d /dev/media0

主要关注的是有没有找到Sensor的Entity。如果没有找到Sensor的Entity,说明Sensor注册有问题,请按FAQ文档排查。

例如,开发板上接上ov13850摄像头后可以看到如下的输出:

  1. rk3568_r:/ # media-ctl -d /dev/media0 -p
  2. media-ctl -d /dev/media0 -p
  3. Opening media device /dev/media0
  4. Enumerating entities
  5. Found 13 entities
  6. Enumerating pads and links
  7. Media controller API version 0.0.255
  8. Media device information
  9. ------------------------
  10. driver rkisp-vir0
  11. model rkisp0
  12. serial
  13. bus info
  14. hw revision 0x0
  15. driver version 0.0.255
  16. Device topology
  17. - entity 1: rkisp-isp-subdev (4 pads, 7 links)
  18. type V4L2 subdev subtype Unknown
  19. device node name /dev/v4l-subdev0
  20. pad0: Sink
  21. [fmt:SBGGR10/2112x1568
  22. crop.bounds:(0,0)/2112x1568
  23. crop:(0,0)/2112x1568]
  24. <- "rkisp-csi-subdev":1 [ENABLED]
  25. <- "rkisp_rawrd0_m":0 []
  26. <- "rkisp_rawrd2_s":0 []
  27. pad1: Sink
  28. <- "rkisp-input-params":0 [ENABLED]
  29. pad2: Source
  30. [fmt:YUYV2X8/2112x1568
  31. crop.bounds:(0,0)/2112x1568
  32. crop:(0,0)/2112x1568]
  33. -> "rkisp_mainpath":0 [ENABLED]
  34. -> "rkisp_selfpath":0 [ENABLED]
  35. pad3: Source
  36. -> "rkisp-statistics":0 [ENABLED]
  37. - entity 6: rkisp-csi-subdev (6 pads, 5 links)
  38. type V4L2 subdev subtype Unknown
  39. device node name /dev/v4l-subdev1
  40. pad0: Sink
  41. [fmt:SBGGR10/4224x3136]
  42. <- "rockchip-csi2-dphy0":1 [ENABLED]
  43. pad1: Source
  44. [fmt:SBGGR10/4224x3136]
  45. -> "rkisp-isp-subdev":0 [ENABLED]
  46. pad2: Source
  47. [fmt:SBGGR10/4224x3136]
  48. -> "rkisp_rawwr0":0 [ENABLED]
  49. pad3: Source
  50. [fmt:SBGGR10/4224x3136]
  51. pad4: Source
  52. [fmt:SBGGR10/4224x3136]
  53. -> "rkisp_rawwr2":0 [ENABLED]
  54. pad5: Source
  55. [fmt:SBGGR10/4224x3136]
  56. -> "rkisp_rawwr3":0 [ENABLED]
  57. - entity 13: rkisp_mainpath (1 pad, 1 link)
  58. type Node subtype V4L
  59. device node name /dev/video0
  60. pad0: Sink
  61. <- "rkisp-isp-subdev":2 [ENABLED]
  62. - entity 19: rkisp_selfpath (1 pad, 1 link)
  63. type Node subtype V4L
  64. device node name /dev/video1
  65. pad0: Sink
  66. <- "rkisp-isp-subdev":2 [ENABLED]
  67. - entity 25: rkisp_rawwr0 (1 pad, 1 link)
  68. type Node subtype V4L
  69. device node name /dev/video2
  70. pad0: Sink
  71. <- "rkisp-csi-subdev":2 [ENABLED]
  72. - entity 31: rkisp_rawwr2 (1 pad, 1 link)
  73. type Node subtype V4L
  74. device node name /dev/video3
  75. pad0: Sink
  76. <- "rkisp-csi-subdev":4 [ENABLED]
  77. - entity 37: rkisp_rawwr3 (1 pad, 1 link)
  78. type Node subtype V4L
  79. device node name /dev/video4
  80. pad0: Sink
  81. <- "rkisp-csi-subdev":5 [ENABLED]
  82. - entity 43: rkisp_rawrd0_m (1 pad, 1 link)
  83. type Node subtype V4L
  84. device node name /dev/video5
  85. pad0: Source
  86. -> "rkisp-isp-subdev":0 []
  87. - entity 49: rkisp_rawrd2_s (1 pad, 1 link)
  88. type Node subtype V4L
  89. device node name /dev/video6
  90. pad0: Source
  91. -> "rkisp-isp-subdev":0 []
  92. - entity 55: rkisp-statistics (1 pad, 1 link)
  93. type Node subtype V4L
  94. device node name /dev/video7
  95. pad0: Sink
  96. <- "rkisp-isp-subdev":3 [ENABLED]
  97. - entity 61: rkisp-input-params (1 pad, 1 link)
  98. type Node subtype V4L
  99. device node name /dev/video8
  100. pad0: Source
  101. -> "rkisp-isp-subdev":1 [ENABLED]
  102. - entity 67: rockchip-csi2-dphy0 (2 pads, 2 links)
  103. type V4L2 subdev subtype Unknown
  104. device node name /dev/v4l-subdev2
  105. pad0: Sink
  106. [fmt:SBGGR10/4224x3136]
  107. <- "m00_b_ov13850 4-0010":0 [ENABLED]
  108. pad1: Source
  109. [fmt:SBGGR10/4224x3136]
  110. -> "rkisp-csi-subdev":0 [ENABLED]
  111. - entity 70: m00_b_ov13850 4-0010 (1 pad, 1 link)
  112. type V4L2 subdev subtype Sensor
  113. device node name /dev/v4l-subdev3
  114. pad0: Source
  115. [fmt:SBGGR10/4224x3136]
  116. -> "rockchip-csi2-dphy0":0 [ENABLED]

从entity70信息中可以看到:

  • 该Entity完整的名称是:m00_b_ov13850 4-0010
  • 它是一个V4L2 subdev(Sub-Device) Sensor
  • 它对应的节点是/dev/v4l-subdev3,应用程序(如v4l2-ctl)可以打开它,并进行配置
  • 它仅有一个输出(Source)节点,记为pad0
  • 它的输出格式是[fmt:SBGGR10/4224x3136],其中SBGGR10是一种mbus-code的简称
  • 它的Source pad0 链接到"rockchip-csi2-dphy0"的pad0,并且当前的状态是 ENABLED。

拓扑结构图如下:【后面文章会详细讲解该结构图,请收藏本系列文章】

3)修改Entity的format、size

举例一,ov3850摄像头支持多个分辨率的输出,默认为1920x1080。现将输出分辨率改为640x480:

  1. media-ctl -d/dev/media0\
  2. --set-v4l2' "m00_b_ov13850 4-0010":0[fmt:SBGGR10/640x480]'

修改ov3850输出后,rkisp-isp-subdev的大小及video device crop也相应要修改。因为后级的大小不能大于前级的大小。

  1. ~/>$ media-ctl -d/dev/media0 --set-v4l2 ' "rkisp-isp-subdev":0[fmt:SBGGR10/640x480]'
  2. ~/>$ media-ctl -d/dev/media0 --set-v4l2 ' "rkisp-isp-subdev":0[crop: (0, 0)/640x480]'
  3. ~/>$ media-ctl -d/dev/media0 --set-v4l2 ' "rkisp-isp-subdev":2[crop: (0, 0)/640x480]'
  4. ~/>$ v4l2-ctl -d/dev/video0\
  5. --set-selection=target=crop, top=0, left=0, width=640, height=480

3. v4l2-ctl

v4l2-ctl的帮助信息查看:

  1. [root@RK356X:~]# v4l2-ctl -h
  2. General/Common options:
  3. --all display all information available
  4. -C, --get-ctrl <ctrl>[,<ctrl>...]
  5. get the value of the controls [VIDIOC_G_EXT_CTRLS]
  6. -c, --set-ctrl <ctrl>=<val>[,<ctrl>=<val>...]
  7. set the value of the controls [VIDIOC_S_EXT_CTRLS]
  8. -D, --info show driver info [VIDIOC_QUERYCAP]
  9. -d, --device <dev> use device <dev> instead of/dev/video0
  10. if <dev> starts with a digit, then /dev/video<dev> is used
  11. -e, --out-device <dev> use device <dev> for output streams instead of the default device as set with --device
  12. if <dev> starts with a digit, then /dev/video<dev> is used
  13. -h, --help display this help message
  14. …………

也可以进入以下网站:

  1. https://www.mankier.com/1/v4l2-ctl

1)列出所有设备

命令:

  1. v4l2-ctl --list-devices

执行结果:

  1. rk3568_r:/ # v4l2-ctl --list-devices
  2. v4l2-ctl --list-devices
  3. rkisp-statistics (platform: rkisp):
  4. /dev/video7
  5. /dev/video8
  6. rkisp_mainpath (platform:rkisp-vir0):
  7. /dev/video0
  8. /dev/video1
  9. /dev/video2
  10. /dev/video3
  11. /dev/video4
  12. /dev/video5
  13. /dev/video6

2)指定设备的预览支持格式

  1. v4l2-ctl --list-formats-ext --device /dev/video0
  2. v4l2-ctl --list-formats-ext --device /dev/video1
  1. rk3568_r:/ # v4l2-ctl --list-formats-ext --device /dev/video0
  2. v4l2-ctl --list-formats-ext --device /dev/video0
  3. ioctl: VIDIOC_ENUM_FMT
  4. Index : 0
  5. Type : Video Capture Multiplanar
  6. Pixel Format: 'UYVY'
  7. Name : UYVY 4:2:2
  8. Size: Stepwise 32x16 - 2112x1568 with step 8/8
  9. Index : 1
  10. Type : Video Capture Multiplanar
  11. Pixel Format: '422P'
  12. Name : Planar YUV 4:2:2
  13. Size: Stepwise 32x16 - 2112x1568 with step 8/8
  14. Index : 2
  15. Type : Video Capture Multiplanar
  16. Pixel Format: 'NV16'
  17. Name : Y/CbCr 4:2:2
  18. Size: Stepwise 32x16 - 2112x1568 with step 8/8
  19. Index : 3
  20. Type : Video Capture Multiplanar
  21. Pixel Format: 'NV61'
  22. Name : Y/CrCb 4:2:2
  23. Size: Stepwise 32x16 - 2112x1568 with step 8/8
  24. Index : 4
  25. Type : Video Capture Multiplanar
  26. Pixel Format: 'YM16'
  27. Name : Planar YUV 4:2:2 (N-C)
  28. Size: Stepwise 32x16 - 2112x1568 with step 8/8
  29. Index : 5
  30. Type : Video Capture Multiplanar
  31. Pixel Format: 'NV21'
  32. Name : Y/CrCb 4:2:0
  33. Size: Stepwise 32x16 - 2112x1568 with step 8/8
  34. Index : 6
  35. Type : Video Capture Multiplanar
  36. Pixel Format: 'NV12'
  37. Name : Y/CbCr 4:2:0
  38. Size: Stepwise 32x16 - 2112x1568 with step 8/8
  39. Index : 7
  40. Type : Video Capture Multiplanar
  41. Pixel Format: 'NM21'
  42. Name : Y/CrCb 4:2:0 (N-C)
  43. Size: Stepwise 32x16 - 2112x1568 with step 8/8
  44. Index : 8
  45. Type : Video Capture Multiplanar
  46. Pixel Format: 'NM12'
  47. Name : Y/CbCr 4:2:0 (N-C)
  48. Size: Stepwise 32x16 - 2112x1568 with step 8/8
  49. Index : 9
  50. Type : Video Capture Multiplanar
  51. Pixel Format: 'YU12'
  52. Name : Planar YUV 4:2:0
  53. Size: Stepwise 32x16 - 2112x1568 with step 8/8
  54. Index : 10
  55. Type : Video Capture Multiplanar
  56. Pixel Format: 'YM24'
  57. Name : Planar YUV 4:4:4 (N-C)
  58. Size: Stepwise 32x16 - 2112x1568 with step 8/8
  59. Index : 11
  60. Type : Video Capture Multiplanar
  61. Pixel Format: 'RGGB'
  62. Name : 8-bit Bayer RGRG/GBGB
  63. Size: Stepwise 32x16 - 2112x1568 with step 8/8
  64. Index : 12
  65. Type : Video Capture Multiplanar
  66. Pixel Format: 'GRBG'
  67. Name : 8-bit Bayer GRGR/BGBG
  68. Size: Stepwise 32x16 - 2112x1568 with step 8/8
  69. Index : 13
  70. Type : Video Capture Multiplanar
  71. Pixel Format: 'GBRG'
  72. Name : 8-bit Bayer GBGB/RGRG
  73. Size: Stepwise 32x16 - 2112x1568 with step 8/8
  74. Index : 14
  75. Type : Video Capture Multiplanar
  76. Pixel Format: 'BA81'
  77. Name : 8-bit Bayer BGBG/GRGR
  78. Size: Stepwise 32x16 - 2112x1568 with step 8/8
  79. Index : 15
  80. Type : Video Capture Multiplanar
  81. Pixel Format: 'RG10'
  82. Name : 10-bit Bayer RGRG/GBGB
  83. Size: Stepwise 32x16 - 2112x1568 with step 8/8
  84. Index : 16
  85. Type : Video Capture Multiplanar
  86. Pixel Format: 'BA10'
  87. Name : 10-bit Bayer GRGR/BGBG
  88. Size: Stepwise 32x16 - 2112x1568 with step 8/8
  89. Index : 17
  90. Type : Video Capture Multiplanar
  91. Pixel Format: 'GB10'
  92. Name : 10-bit Bayer GBGB/RGRG
  93. Size: Stepwise 32x16 - 2112x1568 with step 8/8
  94. Index : 18
  95. Type : Video Capture Multiplanar
  96. Pixel Format: 'BG10'
  97. Name : 10-bit Bayer BGBG/GRGR
  98. Size: Stepwise 32x16 - 2112x1568 with step 8/8
  99. Index : 19
  100. Type : Video Capture Multiplanar
  101. Pixel Format: 'RG12'
  102. Name : 12-bit Bayer RGRG/GBGB
  103. Size: Stepwise 32x16 - 2112x1568 with step 8/8
  104. Index : 20
  105. Type : Video Capture Multiplanar
  106. Pixel Format: 'BA12'
  107. Name : 12-bit Bayer GRGR/BGBG
  108. Size: Stepwise 32x16 - 2112x1568 with step 8/8
  109. Index : 21
  110. Type : Video Capture Multiplanar
  111. Pixel Format: 'GB12'
  112. Name : 12-bit Bayer GBGB/RGRG
  113. Size: Stepwise 32x16 - 2112x1568 with step 8/8
  114. Index : 22
  115. Type : Video Capture Multiplanar
  116. Pixel Format: 'BG12'
  117. Name : 12-bit Bayer BGBG/GRGR
  118. Size: Stepwise 32x16 - 2112x1568 with step 8/8
  119. rk3568_r:/ #
  120. rk3568_r:/ # v4l2-ctl --list-formats-ext --device /dev/video1
  121. v4l2-ctl --list-formats-ext --device /dev/video1
  122. ioctl: VIDIOC_ENUM_FMT
  123. Index : 0
  124. Type : Video Capture Multiplanar
  125. Pixel Format: 'UYVY'
  126. Name : UYVY 4:2:2
  127. Size: Stepwise 32x16 - 1920x1080 with step 8/8
  128. Index : 1
  129. Type : Video Capture Multiplanar
  130. Pixel Format: '422P'
  131. Name : Planar YUV 4:2:2
  132. Size: Stepwise 32x16 - 1920x1080 with step 8/8
  133. Index : 2
  134. Type : Video Capture Multiplanar
  135. Pixel Format: 'NV16'
  136. Name : Y/CbCr 4:2:2
  137. Size: Stepwise 32x16 - 1920x1080 with step 8/8
  138. Index : 3
  139. Type : Video Capture Multiplanar
  140. Pixel Format: 'NV61'
  141. Name : Y/CrCb 4:2:2
  142. Size: Stepwise 32x16 - 1920x1080 with step 8/8
  143. Index : 4
  144. Type : Video Capture Multiplanar
  145. Pixel Format: 'YM16'
  146. Name : Planar YUV 4:2:2 (N-C)
  147. Size: Stepwise 32x16 - 1920x1080 with step 8/8
  148. Index : 5
  149. Type : Video Capture Multiplanar
  150. Pixel Format: 'NV21'
  151. Name : Y/CrCb 4:2:0
  152. Size: Stepwise 32x16 - 1920x1080 with step 8/8
  153. Index : 6
  154. Type : Video Capture Multiplanar
  155. Pixel Format: 'NV12'
  156. Name : Y/CbCr 4:2:0
  157. Size: Stepwise 32x16 - 1920x1080 with step 8/8
  158. Index : 7
  159. Type : Video Capture Multiplanar
  160. Pixel Format: 'NM21'
  161. Name : Y/CrCb 4:2:0 (N-C)
  162. Size: Stepwise 32x16 - 1920x1080 with step 8/8
  163. Index : 8
  164. Type : Video Capture Multiplanar
  165. Pixel Format: 'NM12'
  166. Name : Y/CbCr 4:2:0 (N-C)
  167. Size: Stepwise 32x16 - 1920x1080 with step 8/8
  168. Index : 9
  169. Type : Video Capture Multiplanar
  170. Pixel Format: 'YU12'
  171. Name : Planar YUV 4:2:0
  172. Size: Stepwise 32x16 - 1920x1080 with step 8/8
  173. Index : 10
  174. Type : Video Capture Multiplanar
  175. Pixel Format: 'YM24'
  176. Name : Planar YUV 4:4:4 (N-C)
  177. Size: Stepwise 32x16 - 1920x1080 with step 8/8
  178. Index : 11
  179. Type : Video Capture Multiplanar
  180. Pixel Format: 'GREY'
  181. Name : 8-bit Greyscale
  182. Size: Stepwise 32x16 - 1920x1080 with step 8/8
  183. Index : 12
  184. Type : Video Capture Multiplanar
  185. Pixel Format: 'XR24'
  186. Name : 32-bit BGRX 8-8-8-8
  187. Size: Stepwise 32x16 - 1920x1080 with step 8/8
  188. Index : 13
  189. Type : Video Capture Multiplanar
  190. Pixel Format: 'RGBP'
  191. Name : 16-bit RGB 5-6-5
  192. Size: Stepwise 32x16 - 1920x1080 with step 8/8
  193. Index : 14
  194. Type : Video Capture Multiplanar
  195. Pixel Format: 'FBCG' (compressed)
  196. Name : Rockchip fbc gain
  197. Size: Stepwise 32x16 - 1920x1080 with step 8/8

3)获取指定设备的所有信息

  1. v4l2-ctl --all --device /dev/video0

设备信息如下:

  1. rk3568_r:/ # v4l2-ctl --all --device /dev/video0
  2. v4l2-ctl --all --device /dev/video0
  3. Driver Info:
  4. Driver name : rkisp_v5
  5. Card type : rkisp_mainpath
  6. Bus info : platform:rkisp-vir0
  7. Driver version : 1.8.0
  8. Capabilities : 0x84201000
  9. Video Capture Multiplanar
  10. Streaming
  11. Extended Pix Format
  12. Device Capabilities
  13. Device Caps : 0x04201000
  14. Video Capture Multiplanar
  15. Streaming
  16. Extended Pix Format
  17. Media Driver Info:
  18. Driver name : rkisp-vir0
  19. Model : rkisp0
  20. Serial :
  21. Bus info :
  22. Media version : 4.19.255
  23. Hardware revision: 0x00000000 (0)
  24. Driver version : 4.19.255
  25. Interface Info:
  26. ID : 0x0300000e
  27. Type : V4L Video
  28. Entity Info:
  29. ID : 0x0000000d (13)
  30. Name : rkisp_mainpath
  31. Function : V4L2 I/O
  32. Pad 0x01000010 : Sink
  33. Link 0x02000011: from remote pad 0x1000004 of entity 'rkisp-isp-subdev': Data, Enabled
  34. Priority: 2
  35. Format Video Capture Multiplanar:
  36. Width/Height : 2112/1568
  37. Pixel Format : 'NV12'
  38. Field : None
  39. Number of planes : 1
  40. Flags :
  41. Colorspace : Default
  42. Transfer Function : Default
  43. YCbCr Encoding : Default
  44. Quantization : Full Range
  45. Plane 0 :
  46. Bytes per Line : 2112
  47. Size Image : 4967424
  48. Crop: Left 0, Top 0, Width 2112, Height 1568
  49. Selection: crop, Left 0, Top 0, Width 2112, Height 1568, Flags:
  50. Selection: crop_bounds, Left 0, Top 0, Width 2112, Height 1568, Flags:
  51. Selection: crop, Left 0, Top 0, Width 2112, Height 1568, Flags:
  52. Selection: crop_bounds, Left 0, Top 0, Width 2112, Height 1568, Flags:
  53. User Controls
  54. exposure 0x00980911 (int) : min=4 max=3324 step=1 default=1536 value=1536
  55. Image Source Controls
  56. vertical_blanking 0x009e0901 (int) : min=192 max=29631 step=1 default=192 value=192
  57. horizontal_blanking 0x009e0902 (int) : min=576 max=576 step=1 default=576 value=576 flags=read-only
  58. analogue_gain 0x009e0903 (int) : min=16 max=248 step=1 default=16 value=16
  59. Image Processing Controls
  60. link_frequency 0x009f0901 (intmenu): min=0 max=0 default=0 value=0 flags=read-only
  61. pixel_rate 0x009f0902 (int64) : min=0 max=0 step=0 default=0 value=120000000 flags=read-only
  62. test_pattern 0x009f0903 (menu) : min=0 max=4 default=0 value=0

4) 显示摄像头参数

  1. v4l2-ctl --list-ctrls --device /dev/video0
  2. 或者
  3. v4l2-ctl -d /dev/video0 -l

显示摄像头参数

  1. rk3568_r:/ # v4l2-ctl -d /dev/video0 -l
  2. v4l2-ctl -d /dev/video0 -l
  3. User Controls
  4. exposure 0x00980911 (int) : min=4 max=3324 step=1 default=1536 value=1536
  5. Image Source Controls
  6. vertical_blanking 0x009e0901 (int) : min=192 max=29631 step=1 default=192 value=192
  7. horizontal_blanking 0x009e0902 (int) : min=576 max=576 step=1 default=576 value=576 flags=read-only
  8. analogue_gain 0x009e0903 (int) : min=16 max=248 step=1 default=16 value=16
  9. Image Processing Controls
  10. link_frequency 0x009f0901 (intmenu): min=0 max=0 default=0 value=0 flags=read-only
  11. pixel_rate 0x009f0902 (int64) : min=0 max=120000000 step=1 default=120000000 value=120000000 flags=read-only
  12. test_pattern 0x009f0903 (menu) : min=0 max=4 default=0 value=0

5)增加曝光exposure

exposure值区间为: 4-3324

命令实例:

  1. v4l2-ctl -d /dev/video0 --set-ctrl exposure=3324

6)增加图片亮度analogue_gain

analogue_gain用于设置显示的图像的亮度

analogue_gain值区间:

  1. 16-248

命令实例:

  1. v4l2-ctl -d /dev/video0 --set-ctrl analogue_gain=240

analogue_gain=16现象

analogue_gain=244现象【效果非常明显】

7)使用v4l2-ctl抓帧

  1. v4l2-ctl -d /dev/video0 --set-fmt-video=width=800,height=600,pixelformat=NV12 --stream-mmap=3 --stream-to=/sdcard/out.yuv --stream-skip=9 --stream-count=1
  2. m-mmap=3 --stream-to=/sdcard/out.yuv --stream-skip=9 --stream-count=1 <
  3. <<<<<<<<< 7.51 fps
  4. <

【看到<<<<<<<<< 7.51 fps 说明成功】

参数说明

  1. -d 摄像头对应设备文件
  2. --set-fmt-video:指定了宽高及pxielformat(用FourCC表示)。NV12即用FourCC表示的pixelformat
  3. --stream-mmap:指定buffer的类型为mmap,即由kernel分配的物理连续的或经过iommu映射的buffer
  4. --stream-to:指定帧数据保存的文件路径
  5. --stream-skip:指定丢弃(不保存到文件)前3
  6. --stream-count:指定抓取的帧数,不包括--stream-skip丢弃的数量
  7. 其他参数
  8. --set-selection,指定对输入图像进行裁剪。特别是当RKISP1的前级大小发生变化时要保证selection不大于前级输出大小。RKCIF的裁剪则是通过--set-crop参数设置的
  9. --stream-poll,该选项指示v4l2-ctl采用异步IO,即在dqbuf前先用select等等帧数据完成,从而保证dqbuf不阻塞。否则dqbuf将会阻塞直到有数据帧到来

如果支持264的可以编码为h264查看

  1. v4l2-ctl --device /dev/video0 --set-fmt-video=width=1920,height=1080,pixelformat=H264 --stream-mmap=3 --stream-to=/sdcard/output --stream-count=100
  2. v4l2-ctl --device /dev/video0 --set-fmt-video=width=1920,height=1080,pixelformat=MJPG --stream-mmap --stream-to=/sdcard/output.mjpg --stream-count=300

8)测试显示信息test_pattern

参数test_pattern,可以用于测试显示图像

  • 0:摄像头
  • 1-3 测试图片

    命令实例:
  1. v4l2-ctl -d /dev/video0 --set-ctrl test_pattern=0

test_pattern = 1



test_pattern = 2



test_pattern = 3

4. 显示图片

上一节,抓取的图片、视频要可以拷贝到ubuntu中借助借助工具ffplay查看。

1)ffplay

FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。

采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。

它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开发的。

ffplay是FFmpeg提供的一个极为简单的音视频媒体播放器(由ffmpeg库和SDL库开发),可以用于音视频播放、可视化分析 ,提供音视频显示和播放相关的图像信息、音频的波形等信息,也可以用作FFmpeg API的测试工具使用。

由于是基于FFmpeg开发所以ffmpeg支持的视音频格式它基本上都支持,不过ffplay不是图形化界面需要通过CMD命令窗口来操作。

2)官网网站

  1. http://www.ffmpeg.org/ffplay.html

3)ffplay命令选项:

  1. 基本格式: ffplay [选项] [‘输入文件’]

主要选项:

  1. -x width 强制显示宽带
  2. -y height 强制显示高度
  3. -video_size size 设置帧尺寸 设置帧尺寸大小。
  4. 适用于类似原始YUV等没有包含帧大小(WxH)的视频。
  5. 例如:ffplay -pixel_format yuv420p -video_size 320x240 -framerate 5 yuv420p_320x240.yuv
  6. -pixel_format format 设置像素格式。
  7. -volume vol 设置起始音量。音量范围[0 ~100]
  8. -window_title title 设置窗口标题(默认为输入文件名)
  9. -loop number 设置播放循环次数
  10. -showmode mode 设置显示模式,可用的模式值:0 显示视频,1 显示音频波形,2 显示音频频谱。缺省为0,如果视频不存在则自动选择2
  11. -vf filtergraph 设置视频滤镜
  12. -af filtergraph 设置音频滤镜
  13. -f fmt 强制使用设置的格式进行解析。比如-f s16le
  14. -fs 以全屏模式启动
  15. -an 禁用音频(不播放声音)
  16. -vn 禁用视频(不播放视频)
  17. -sn 禁用字幕(不显示字幕)
  18. -nodisp 关闭图形化显示窗口,视频将不显示
  19. -noborder 无边框窗口
  20. -t duration 设置播放视频/音频长度,时间单位如 -ss选项
  21. -ss pos 跳转到指定的位置,注意时间单位:
  22. 比如:'55' 55 seconds,
  23. '12:03:45' ,12 hours, 03 minutes and 45 seconds,
  24. '23.189' 23.189 second
  25. -bytes 按字节进行跳转(0=off 1=on -1=auto)。
  26. -seek_interval interval 自定义左/右键定位拖动间隔(以秒为单位),默认值为10秒(代码没有看到实现)

4)显示图片

将文件/sdcard/out.yuv从板子通过adb pull命令拷贝出来,

运行于windows下:

  1. adb pull /sdcard/out.yuv

再拷贝到ubuntu中,执行以下命令显示图片【用其他可以打开yuv格式图片的工具也可以】

  1. ffplay out.yuv -f rawvideo -pixel_format nv12 -video_size 800x600

文中各种mipi技术文档,后台回复关键字:mipi

掌握了这些命令,我们就可以调试摄像头了。

后面还会继续更新几篇Camera文章,

建议大家订阅本专题!

也可以后台留言,加一口君好友yikoupeng,

拉你进高质量技术交流群。

Camera | 3.瑞芯微平台MIPI摄像头常用调试命令的更多相关文章

  1. 瑞芯微RK3399宣布系统开源,进入百余种行业市场!

    集微网消息,2月24日瑞芯微官方突然宣布, Rockchip RK3399Linux系统开源!作为Rockchip旗舰级芯片,RK3399具有高性能.高扩展.全能型应用特性. 这一重磅消息立马刷爆朋友 ...

  2. Linux下更新瑞芯微固件

    有这样的需求,是因为提供的BSP中是在windows下烧写的系统.我直接在linux下开发,每次编译后代码都要在windows下烧写,是一个很麻烦的事情.为了解决这个问题我尝试着用VirtualBox ...

  3. 9.7寸RK3188瑞芯微四核爱立顺M33平板电脑 - 深圳吉祥星晨科技有限公司 - 华强商情网

    9.7寸RK3188瑞芯微四核爱立顺M33平板电脑 - 深圳吉祥星晨科技有限公司 - 华强商情网 欢迎加入 2000人超级QQ群,平板电脑行业交流群:221371451,平板电脑产品及报价群:5765 ...

  4. 瑞芯微发布最新旗舰应用处理器-RK3588

    在瑞芯微电子第四届“开发者之春”大会上,瑞芯微推出了新一代8nm旗舰处理器-RK3588 这个芯片将采用8nm 制程工艺.基于A76+A55 内核组合,具备4K UI性能.8K VPU,拥有NPU2. ...

  5. 瑞芯微ROCK960 RK3399固件烧录总结

    1 下载固件 进入瑞芯微ROCK960下载主页 https://www.96boards.org/documentation/consumer/rock/downloads/ 选择os固件, Debi ...

  6. 瑞芯微RK3399六核-迅为3399开发板介绍

    迅为3399开发板基于瑞芯微的RK3399处理器设计,Rockchip RK3399是瑞芯微推出的一款低功耗.高性能的应用处理器芯片,该芯片基于Big.Little架构,即具有独立的NEON协同处理器 ...

  7. 瑞芯微RK3188如何配置USB摄像头支持

  8. 瑞芯微RK3188摄像头相关参数的配置

  9. 瑞芯微RKnanC芯片处理器介绍

    RKnanC是一种低成本.低功耗.高效率的数字多媒体芯片,它是基于ARM的低功耗处理器结构和硬件加速器.它是专为便携式音频产品应用,如MP3播放器等. RKnanC可以支持各种音频标准的解码,如MP3 ...

  10. 瑞芯微ROCK960 RK3399烧录image后扩容rootfs

    问题描述: RK3399开发板烧录官网提供的ubuntu镜像: Ubuntu 16.04 Server arm64(下载地址:https://www.96boards.org/documentatio ...

随机推荐

  1. python基础-元组tuple( )

    元组的定义和操作 元组的特性: 元素数量 支持多个 元素类型 任意 下标索引 支持 重复元素 支持 可修改性 不支持 数据有序 是 使用场景 不可修改.可重复的 一批数据记录场景     # 定义元组 ...

  2. 详解Web应用安全系列(5)敏感数据泄露漏洞

    在最近几年,这是最常见的,最具影响力的攻击.这个领域最常见的漏洞是不对敏感数据进行加密.在数据加密过程中,常见的问题是不安全的密钥生成和管理以及使用弱密码算法,弱协议和弱密码.特别是使用弱的哈希算法来 ...

  3. vba--数组,多个表中的程序合并到一起,设置为一个按钮

    Sub ttt() t = Timer Application.DisplayAlerts = False '清空数据 Sheets("买卖4").Select Range(&qu ...

  4. IIS部署错误HTTP Error 500.36 ASP.NET Core IIS hosting failure(out-of-process)

    错误提示 HTTP Error 500.36 - ASP.NET Core IIS hosting failure (out-of-process) The out of process reques ...

  5. Java 核心基础之static静态代码块和静态方法

    static静态代码块和静态方法 static关键字 static修饰的方法或变量,优先于对象执行,所以内存会先有static修饰的内容,后有对象的内容 可以用来修饰类的成员方法.类的成员变量,还可以 ...

  6. Spring(XML方式)简单入门

    环境准备 maven jdk Spring Eclipse 项目创建 pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0 ...

  7. [oeasy]python0069_帮助手册_pydoc_manual_document

    帮助手册 回忆上次内容   上次了解了注释 注释是为了让程序更可读 注释不会影响程序运行速度   注释分为两种 单行的 以#开头 不能是字符串当中的#   多行的 三个" 三个'     多 ...

  8. oeasy教您玩转vim - 78 - # 操作系统文件格式 fileformat

    ​ 文件系统换行格式 fileformat 回忆保留环境的细节 上次我们了解了viminfo 他能够保存 命令行历史 标记 寄存器 把他和 :mksession 一起使用就可以完美复原环境了 还有什么 ...

  9. 解决: Cannot load information for github.com

    问题在共享项目至idea时候出现:I am getting this error while sharing on GithHub in Intellije IDEA : Cannot load in ...

  10. Java maven构建命令使用总结

    实践环境 Apache Maven 3.0.5 (Red Hat 3.0.5-17) maven构建生命周期 学习Maven构建命令之前,我们不烦先简单了解下Maven构建生命周期. Maven基于构 ...