ext_ctrls_h264.go 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. package v4l2
  2. import "C"
  3. // TODO - Need to figure out how to import the proper header files for H264 support
  4. const (
  5. H264NumDPBEntries uint32 = 16 // C.V4L2_H264_NUM_DPB_ENTRIES
  6. H264RefListLength uint32 = 32 // C.V4L2_H264_REF_LIST_LEN
  7. )
  8. // ControlH264SPS (v4l2_ctrl_h264_sps)
  9. // See https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/v4l2-controls.h#L1308
  10. type ControlH264SPS struct {
  11. ProfileIDC uint8
  12. ConstraintSetFlags uint8
  13. LevelIDC uint8
  14. SequenceParameterSetID uint8
  15. ChromaFormatIDC uint8
  16. BitDepthLumaMinus8 uint8
  17. BitDepthChromaMinus8 uint8
  18. Log2MaxFrameNumMinus4 uint8
  19. PicOrderCntType uint8
  20. Log2MaxPicOrderCntLsbMinus4 uint8
  21. MaxNumRefFrames uint8
  22. NumRefFramesInPicOrderCntCycle uint8
  23. OffsetForRefFrame [255]int32
  24. OffsetForNonRefPic int32
  25. OffsetForTopToBottomField int32
  26. PicWidthInMbsMinus1 uint16
  27. PicHeightInMapUnitsMinus1 uint16
  28. Falgs uint32
  29. }
  30. // ControlH264PPS (v4l2_ctrl_h264_pps)
  31. // See https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/v4l2-controls.h#L1364
  32. type ControlH264PPS struct {
  33. PicParameterSetID uint8
  34. SeqParameterSetID uint8
  35. NumSliceGroupsMinus1 uint8
  36. NumRefIndexL0DefaultActiveMinus1 uint8
  37. NumRefIndexL1DefaultActiveMinus1 uint8
  38. WeightedBipredIDC uint8
  39. PicInitQPMinus26 int8
  40. PicInitQSMinus26 int8
  41. ChromaQPIndexOffset int8
  42. SecondChromaQPIndexOffset int8
  43. Flags uint16
  44. }
  45. // ControlH264ScalingMatrix (v4l2_ctrl_h264_scaling_matrix)
  46. // See https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/v4l2-controls.h#L1396
  47. type ControlH264ScalingMatrix struct {
  48. ScalingList4x4 [6][16]uint8
  49. ScalingList8x8 [6][64]uint8
  50. }
  51. type H264WeightFators struct {
  52. LumaWeight [32]int16
  53. LumaOffset [32]int16
  54. ChromaWeight [32][2]int16
  55. ChromaOffset [32][2]int16
  56. }
  57. // ControlH264PredictionWeights (4l2_ctrl_h264_pred_weights)
  58. // See https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/v4l2-controls.h#L1426
  59. type ControlH264PredictionWeights struct {
  60. LumaLog2WeightDenom uint16
  61. ChromaLog2WeightDenom uint16
  62. WeightFactors [2]H264WeightFators
  63. }
  64. // H264Reference (v4l2_h264_reference)
  65. // See https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/v4l2-controls.h#L1452
  66. type H264Reference struct {
  67. Fields uint8
  68. Index uint8
  69. }
  70. // ControlH264SliceParams (v4l2_ctrl_h264_slice_params)
  71. // See https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/v4l2-controls.h#L1499
  72. type ControlH264SliceParams struct {
  73. HeaderBitSize uint32
  74. FirstMBInSlice uint32
  75. SliceType uint8
  76. ColorPlaneID uint8
  77. RedundantPicCnt uint8
  78. CabacInitIDC uint8
  79. SliceQPDelta int8
  80. SliceQSDelta int8
  81. DisableDeblockingFilterIDC uint8
  82. SliceAlphaC0OffsetDiv2 int8
  83. SliceBetaOffsetDiv2 int8
  84. NumRefIdxL0ActiveMinus1 uint8
  85. NumRefIdxL1ActiveMinus1 uint8
  86. _ uint8 // reserved for padding
  87. RefPicList0 [H264RefListLength]H264Reference
  88. RefPicList1 [H264RefListLength]H264Reference
  89. Flags uint32
  90. }
  91. // H264DPBEntry (v4l2_h264_dpb_entry)
  92. // See https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/v4l2-controls.h#L1544
  93. type H264DPBEntry struct {
  94. ReferenceTS uint64
  95. PicNum uint32
  96. FrameNum uint16
  97. Fields uint8
  98. _ [8]uint8 // reserved (padding field)
  99. TopFieldOrder int32
  100. BottomFieldOrderCnt int32
  101. Flags uint32
  102. }
  103. // ControlH264DecodeParams (v4l2_ctrl_h264_decode_params)
  104. // See https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/v4l2-controls.h#L1581
  105. type ControlH264DecodeParams struct {
  106. DPB [H264NumDPBEntries]H264DPBEntry
  107. NalRefIDC uint16
  108. FrameNum uint16
  109. TopFieldOrderCnt int32
  110. BottomFieldOrderCnt int32
  111. IDRPicID uint16
  112. PicOrderCntLSB uint16
  113. DeltaPicOrderCntBottom int32
  114. DeltaPicOrderCnt0 int32
  115. DeltaPicOrderCnt1 int32
  116. DecRefPicMarkingBitSize uint32
  117. PicOrderCntBitSize uint32
  118. SliceGroupChangeCycle uint32
  119. _ uint32 // reserved (padding)
  120. Flags uint32
  121. }