2
0

control_values.go 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. package v4l2
  2. /*
  3. #cgo linux CFLAGS: -I ${SRCDIR}/../include/
  4. #include <linux/videodev2.h>
  5. #include <linux/v4l2-controls.h>
  6. */
  7. import "C"
  8. // ControlClass
  9. // See https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/v4l2-controls.h#L56
  10. type CtrlClass = uint32
  11. const (
  12. CtrlClassUser CtrlClass = C.V4L2_CTRL_CLASS_USER
  13. CtrlClassCodec CtrlClass = C.V4L2_CTRL_CLASS_CODEC
  14. CtrlClassCamera CtrlClass = C.V4L2_CTRL_CLASS_CAMERA
  15. CtrlClassFlash CtrlClass = C.V4L2_CTRL_CLASS_FLASH
  16. CtrlClassJPEG CtrlClass = C.V4L2_CTRL_CLASS_JPEG
  17. CtrlClassImageSource CtrlClass = C.V4L2_CTRL_CLASS_IMAGE_SOURCE
  18. CtrlClassImageProcessing CtrlClass = C.V4L2_CTRL_CLASS_IMAGE_PROC
  19. CtrlClassDigitalVideo CtrlClass = C.V4L2_CTRL_CLASS_DV
  20. CtrlClassDetection CtrlClass = C.V4L2_CTRL_CLASS_DETECT
  21. CtrlClassCodecStateless CtrlClass = C.V4L2_CTRL_CLASS_CODEC_STATELESS
  22. CtrlClassColorimitry CtrlClass = C.V4L2_CTRL_CLASS_COLORIMETRY
  23. )
  24. var (
  25. // CtrlClasses is a slice of all Control classes
  26. CtrlClasses = []CtrlClass{
  27. CtrlClassUser,
  28. CtrlClassCodec,
  29. CtrlClassCamera,
  30. CtrlClassFlash,
  31. CtrlClassJPEG,
  32. CtrlClassImageSource,
  33. CtrlClassDigitalVideo,
  34. CtrlClassDetection,
  35. CtrlClassCodecStateless,
  36. CtrlClassColorimitry,
  37. }
  38. )
  39. // CtrlType constants
  40. // See https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/videodev2.h#L1799
  41. // See https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/vidioc-queryctrl.html?highlight=v4l2_ctrl_type#c.V4L.v4l2_ctrl_type
  42. type CtrlType uint32
  43. const (
  44. CtrlTypeInt CtrlType = C.V4L2_CTRL_TYPE_INTEGER
  45. CtrlTypeBool CtrlType = C.V4L2_CTRL_TYPE_BOOLEAN
  46. CtrlTypeMenu CtrlType = C.V4L2_CTRL_TYPE_MENU
  47. CtrlTypeButton CtrlType = C.V4L2_CTRL_TYPE_BUTTON
  48. CtrlTypeInt64 CtrlType = C.V4L2_CTRL_TYPE_INTEGER64
  49. CtrlTypeClass CtrlType = C.V4L2_CTRL_TYPE_CTRL_CLASS
  50. CtrlTypeString CtrlType = C.V4L2_CTRL_TYPE_STRING
  51. CtrlTypeBitMask CtrlType = C.V4L2_CTRL_TYPE_BITMASK
  52. CtrlTypeIntegerMenu CtrlType = C.V4L2_CTRL_TYPE_INTEGER_MENU
  53. CtrlTypeCompoundTypes CtrlType = C.V4L2_CTRL_COMPOUND_TYPES
  54. CtrlTypeU8 CtrlType = C.V4L2_CTRL_TYPE_U8
  55. CtrlTypeU16 CtrlType = C.V4L2_CTRL_TYPE_U16
  56. CtrlTypeU32 CtrlType = C.V4L2_CTRL_TYPE_U32
  57. CtrlTypeArear CtrlType = C.V4L2_CTRL_TYPE_AREA
  58. CtrlTypeHDR10CLLInfo CtrlType = C.V4L2_CTRL_TYPE_HDR10_CLL_INFO
  59. CtrlTypeHDRMasteringDisplay CtrlType = C.V4L2_CTRL_TYPE_HDR10_MASTERING_DISPLAY
  60. CtrlTypeH264SPS CtrlType = C.V4L2_CTRL_TYPE_H264_SPS
  61. CtrlTypeH264PPS CtrlType = C.V4L2_CTRL_TYPE_H264_PPS
  62. CtrlTypeH264ScalingMatrix CtrlType = C.V4L2_CTRL_TYPE_H264_SCALING_MATRIX
  63. CtrlTypeH264SliceParams CtrlType = C.V4L2_CTRL_TYPE_H264_SLICE_PARAMS
  64. CtrlTypeH264DecodeParams CtrlType = C.V4L2_CTRL_TYPE_H264_DECODE_PARAMS
  65. CtrlTypeFWHTParams CtrlType = C.V4L2_CTRL_TYPE_FWHT_PARAMS
  66. CtrlTypeVP8Frame CtrlType = C.V4L2_CTRL_TYPE_VP8_FRAME
  67. CtrlTypeMPEG2Quantization CtrlType = C.V4L2_CTRL_TYPE_MPEG2_QUANTISATION
  68. CtrlTypeMPEG2Sequence CtrlType = C.V4L2_CTRL_TYPE_MPEG2_SEQUENCE
  69. CtrlTypeMPEG2Picture CtrlType = C.V4L2_CTRL_TYPE_MPEG2_PICTURE
  70. CtrlTypeVP9CompressedHDR CtrlType = C.V4L2_CTRL_TYPE_VP9_COMPRESSED_HDR
  71. CtrlTypeVP9Frame CtrlType = C.V4L2_CTRL_TYPE_VP9_FRAME
  72. )
  73. // CtrlID type for control values
  74. type CtrlID = uint32
  75. // Powerline frequency control enums
  76. // See https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/v4l2-controls.h#L100
  77. type PowerlineFrequency = uint32
  78. const (
  79. PowerlineFrequencyDisabled PowerlineFrequency = C.V4L2_CID_POWER_LINE_FREQUENCY_DISABLED
  80. PowerlineFrequency50Hz PowerlineFrequency = C.V4L2_CID_POWER_LINE_FREQUENCY_50HZ
  81. PowerlineFrequency60Hz PowerlineFrequency = C.V4L2_CID_POWER_LINE_FREQUENCY_60HZ
  82. PowerlineFrequencyAuto PowerlineFrequency = C.V4L2_CID_POWER_LINE_FREQUENCY_AUTO
  83. )
  84. // Color FX control enums
  85. // See https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/v4l2-controls.h#L114
  86. type ColorFX = uint32
  87. const (
  88. ColorFXNone ColorFX = C.V4L2_COLORFX_NONE
  89. ColorFXBlackWhite ColorFX = C.V4L2_COLORFX_BW
  90. ColorFXSepia ColorFX = C.V4L2_COLORFX_SEPIA
  91. ColorFXNegative ColorFX = C.V4L2_COLORFX_NEGATIVE
  92. ColorFXEmboss ColorFX = C.V4L2_COLORFX_EMBOSS
  93. ColorFXSketch ColorFX = C.V4L2_COLORFX_SKETCH
  94. ColorFXSkyBlue ColorFX = C.V4L2_COLORFX_SKY_BLUE
  95. ColorFXGrassGreen ColorFX = C.V4L2_COLORFX_GRASS_GREEN
  96. ColorFXSkinWhiten ColorFX = C.V4L2_COLORFX_SKIN_WHITEN
  97. ColorFXVivid ColorFX = C.V4L2_COLORFX_VIVID
  98. ColorFXAqua ColorFX = C.V4L2_COLORFX_AQUA
  99. ColorFXArtFreeze ColorFX = C.V4L2_COLORFX_ART_FREEZE
  100. ColorFXSilhouette ColorFX = C.V4L2_COLORFX_SILHOUETTE
  101. ColorFXSolarization ColorFX = C.V4L2_COLORFX_SOLARIZATION
  102. ColorFXAntique ColorFX = C.V4L2_COLORFX_ANTIQUE
  103. ColorFXSetCBCR ColorFX = C.V4L2_COLORFX_SET_CBCR
  104. ColorFXSetRGB ColorFX = C.V4L2_COLORFX_SET_RGB
  105. )
  106. // User Controls IDs (CIDs)
  107. // See https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/v4l2-controls.h#L74
  108. // See https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/control.html#control-id
  109. const (
  110. CtrlBrightness CtrlID = C.V4L2_CID_BRIGHTNESS
  111. CtrlContrast CtrlID = C.V4L2_CID_CONTRAST
  112. CtrlSaturation CtrlID = C.V4L2_CID_SATURATION
  113. CtrlHue CtrlID = C.V4L2_CID_HUE
  114. CtrlAutoWhiteBalance CtrlID = C.V4L2_CID_AUTO_WHITE_BALANCE
  115. CtrlDoWhiteBalance CtrlID = C.V4L2_CID_DO_WHITE_BALANCE
  116. CtrlRedBalance CtrlID = C.V4L2_CID_RED_BALANCE
  117. CtrlBlueBalance CtrlID = C.V4L2_CID_BLUE_BALANCE
  118. CtrlGamma CtrlID = C.V4L2_CID_GAMMA
  119. CtrlExposure CtrlID = C.V4L2_CID_EXPOSURE
  120. CtrlAutogain CtrlID = C.V4L2_CID_AUTOGAIN
  121. CtrlGain CtrlID = C.V4L2_CID_GAIN
  122. CtrlHFlip CtrlID = C.V4L2_CID_HFLIP
  123. CtrlVFlip CtrlID = C.V4L2_CID_VFLIP
  124. CtrlPowerlineFrequency CtrlID = C.V4L2_CID_POWER_LINE_FREQUENCY
  125. CtrlHueAuto CtrlID = C.V4L2_CID_HUE_AUTO
  126. CtrlWhiteBalanceTemperature CtrlID = C.V4L2_CID_WHITE_BALANCE_TEMPERATURE
  127. CtrlSharpness CtrlID = C.V4L2_CID_SHARPNESS
  128. CtrlBacklightCompensation CtrlID = C.V4L2_CID_BACKLIGHT_COMPENSATION
  129. CtrlChromaAutomaticGain CtrlID = C.V4L2_CID_CHROMA_AGC
  130. CtrlColorKiller CtrlID = C.V4L2_CID_COLOR_KILLER
  131. CtrlColorFX CtrlID = C.V4L2_CID_COLORFX
  132. CtrlColorFXCBCR CtrlID = C.V4L2_CID_COLORFX_CBCR
  133. CtrlColorFXRGB CtrlID = C.V4L2_CID_COLORFX_RGB
  134. CtrlAutoBrightness CtrlID = C.V4L2_CID_AUTOBRIGHTNESS
  135. CtrlRotate CtrlID = C.V4L2_CID_ROTATE
  136. CtrlBackgroundColor CtrlID = C.V4L2_CID_BG_COLOR
  137. CtrlMinimumCaptureBuffers CtrlID = C.V4L2_CID_MIN_BUFFERS_FOR_CAPTURE
  138. CtrlMinimumOutputBuffers CtrlID = C.V4L2_CID_MIN_BUFFERS_FOR_OUTPUT
  139. CtrlAlphaComponent CtrlID = C.V4L2_CID_ALPHA_COMPONENT
  140. )
  141. // Camera control values
  142. // https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/ext-ctrls-camera.html
  143. // See https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/v4l2-controls.h#L897
  144. const (
  145. CtrlCameraClass CtrlID = C.V4L2_CID_CAMERA_CLASS
  146. CtrlCameraExposureAuto CtrlID = C.V4L2_CID_EXPOSURE_AUTO
  147. // TODO add all camera control values
  148. )
  149. // Flash control values
  150. // https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/ext-ctrls-flash.html
  151. // See https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/v4l2-controls.h#L1060
  152. const (
  153. CtrlFlashClass CtrlID = C.V4L2_CID_FLASH_CLASS
  154. CtrlFlashLEDMode CtrlID = C.V4L2_CID_FLASH_LED_MODE
  155. // TODO add all flash control const values
  156. )
  157. // JPEG control values
  158. // See https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/ext-ctrls-jpeg.html
  159. // See https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/v4l2-controls.h#L1104
  160. const (
  161. CtrlJPEGClass CtrlID = C.V4L2_CID_JPEG_CLASS
  162. CtrlJPEGChromaSampling CtrlID = C.V4L2_CID_JPEG_CHROMA_SUBSAMPLING
  163. // TODO add all JPEG flash controls
  164. )
  165. // Image source controls
  166. // See https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/v4l2-controls.h#L1127
  167. // See https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/ext-ctrls-image-source.html
  168. const (
  169. CtrlImgSrcClass CtrlID = C.V4L2_CID_IMAGE_SOURCE_CLASS
  170. CtrlImgSrcVerticalBlank CtrlID = C.V4L2_CID_VBLANK
  171. )
  172. // Image process controls
  173. // See https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/ext-ctrls-image-process.html
  174. // See https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/v4l2-controls.h#L1144
  175. const (
  176. CtrlImgProcClass = C.V4L2_CID_IMAGE_PROC_CLASS
  177. // TODO implement all image process values
  178. )
  179. // TODO add code for the following controls
  180. // Stateless codec controls (h264, vp8, fwht, mpeg2, etc)