v4l2

package
v0.0.0-...-3067458 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 8, 2024 License: MIT Imports: 12 Imported by: 0

Documentation

Index

Constants

View Source
const (
	CapVideoCapture       uint32 = C.V4L2_CAP_VIDEO_CAPTURE
	CapVideoOutput        uint32 = C.V4L2_CAP_VIDEO_OUTPUT
	CapVideoOverlay       uint32 = C.V4L2_CAP_VIDEO_OVERLAY
	CapVBICapture         uint32 = C.V4L2_CAP_VBI_CAPTURE
	CapVBIOutput          uint32 = C.V4L2_CAP_VBI_OUTPUT
	CapSlicedVBICapture   uint32 = C.V4L2_CAP_SLICED_VBI_CAPTURE
	CapSlicedVBIOutput    uint32 = C.V4L2_CAP_SLICED_VBI_OUTPUT
	CapRDSCapture         uint32 = C.V4L2_CAP_RDS_CAPTURE
	CapVideoOutputOverlay uint32 = C.V4L2_CAP_VIDEO_OUTPUT_OVERLAY
	CapHWFrequencySeek    uint32 = C.V4L2_CAP_HW_FREQ_SEEK
	CapRDSOutput          uint32 = C.V4L2_CAP_RDS_OUTPUT

	CapVideoCaptureMPlane uint32 = C.V4L2_CAP_VIDEO_CAPTURE_MPLANE
	CapVideoOutputMPlane  uint32 = C.V4L2_CAP_VIDEO_OUTPUT_MPLANE
	CapVideoMem2MemMPlane uint32 = C.V4L2_CAP_VIDEO_M2M_MPLANE
	CapVideoMem2Mem       uint32 = C.V4L2_CAP_VIDEO_M2M

	CapTuner     uint32 = C.V4L2_CAP_TUNER
	CapAudio     uint32 = C.V4L2_CAP_AUDIO
	CapRadio     uint32 = C.V4L2_CAP_RADIO
	CapModulator uint32 = C.V4L2_CAP_MODULATOR

	CapSDRCapture        uint32 = C.V4L2_CAP_SDR_CAPTURE
	CapExtendedPixFormat uint32 = C.V4L2_CAP_EXT_PIX_FORMAT
	CapSDROutput         uint32 = C.V4L2_CAP_SDR_OUTPUT
	CapMetadataCapture   uint32 = C.V4L2_CAP_META_CAPTURE

	CapReadWrite uint32 = C.V4L2_CAP_READWRITE
	CapAsyncIO   uint32 = C.V4L2_CAP_ASYNCIO
	CapStreaming uint32 = C.V4L2_CAP_STREAMING

	CapMetadataOutput     uint32 = C.V4L2_CAP_META_OUTPUT
	CapTouch              uint32 = C.V4L2_CAP_TOUCH
	CapIOMediaController  uint32 = C.V4L2_CAP_IO_MC
	CapDeviceCapabilities uint32 = C.V4L2_CAP_DEVICE_CAPS
)
View Source
const (
	MPEGVideoBitrateModeVBR = C.V4L2_MPEG_VIDEO_BITRATE_MODE_VBR
	MPEGVideoBitrateModeCBR = C.V4L2_MPEG_VIDEO_BITRATE_MODE_CBR
	MPEGVideoBitrateModeCQ  = C.V4L2_MPEG_VIDEO_BITRATE_MODE_CQ
)
View Source
const (
	CtrlCodecClass                         CtrlID               = C.V4L2_CID_CODEC_CLASS
	CtrlMPEGStreamType                     MPEGStreamType       = C.V4L2_CID_MPEG_STREAM_TYPE
	CtrlMPEGStreamPIDPMT                   CtrlID               = C.V4L2_CID_MPEG_STREAM_PID_PMT
	CtrlMPEGStreamPIDAudio                 CtrlID               = C.V4L2_CID_MPEG_STREAM_PID_AUDIO
	CtrlMPEGStreamPIDVideo                 CtrlID               = C.V4L2_CID_MPEG_STREAM_PID_VIDEO
	CtrlMPEGStreamPIDPCR                   CtrlID               = C.V4L2_CID_MPEG_STREAM_PID_PCR
	CtrlMPEGStreamPIDPESAudio              CtrlID               = C.V4L2_CID_MPEG_STREAM_PES_ID_AUDIO
	CtrlMPEGStreamPESVideo                 CtrlID               = C.V4L2_CID_MPEG_STREAM_PES_ID_VIDEO
	CtrlMEPGStreamVBIFormat                CtrlID               = C.V4L2_CID_MPEG_STREAM_VBI_FMT
	CtrlMPEGVideoEncoding                  MPEGVideoEncoding    = C.V4L2_CID_MPEG_VIDEO_ENCODING
	CtrlMPEGVideoAspect                    MPEGVideoAspect      = C.V4L2_CID_MPEG_VIDEO_ASPECT
	CtrlMPEGVideoBFrames                   CtrlID               = C.V4L2_CID_MPEG_VIDEO_B_FRAMES
	CtrlMPEGVideoGOPSize                   CtrlID               = C.V4L2_CID_MPEG_VIDEO_GOP_SIZE
	CtrlMPEGVideoGOPClosure                CtrlID               = C.V4L2_CID_MPEG_VIDEO_GOP_CLOSURE
	CtrlMPEGVideoPulldown                  CtrlID               = C.V4L2_CID_MPEG_VIDEO_PULLDOWN
	CtrlMPEGVideoBitrateMode               MPEGVideoBitrateMode = C.V4L2_CID_MPEG_VIDEO_BITRATE_MODE
	CtrlMPEGVideoBitrate                   CtrlID               = C.V4L2_CID_MPEG_VIDEO_BITRATE
	CtrlMPEGVideoBitratePeak               CtrlID               = C.V4L2_CID_MPEG_VIDEO_BITRATE_PEAK
	CtrlMPEGVideoTemporalDecimation        CtrlID               = C.V4L2_CID_MPEG_VIDEO_TEMPORAL_DECIMATION
	CtrlMPEGVideoMute                      CtrlID               = C.V4L2_CID_MPEG_VIDEO_MUTE
	CtrlMPEGVideoMutYUV                    CtrlID               = C.V4L2_CID_MPEG_VIDEO_MUTE_YUV
	CtrlMPEGVideoDecoderSliceInterface     CtrlID               = C.V4L2_CID_MPEG_VIDEO_DECODER_SLICE_INTERFACE
	CtrlMPEGVideoDecoderMPEG4DeblockFilter CtrlID               = C.V4L2_CID_MPEG_VIDEO_DECODER_MPEG4_DEBLOCK_FILTER
	CtrlMPEGVideoCyclicIntraRefreshMB      CtrlID               = C.V4L2_CID_MPEG_VIDEO_CYCLIC_INTRA_REFRESH_MB
	CtrlMPEGVideoFrameRCEnable             CtrlID               = C.V4L2_CID_MPEG_VIDEO_FRAME_RC_ENABLE
	CtrlMPEGVideoHeaderMode                CtrlID               = C.V4L2_CID_MPEG_VIDEO_HEADER_MODE
	CtrlMPEGVideoMaxRefPic                 CtrlID               = C.V4L2_CID_MPEG_VIDEO_MAX_REF_PIC
	CtrlMPEGVideoMBRCEnable                CtrlID               = C.V4L2_CID_MPEG_VIDEO_MB_RC_ENABLE
	CtrlMPEGVideoMultiSliceMaxBytes        CtrlID               = C.V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_BYTES
	CtrlMPEGVideoMultiSliceMaxMB           CtrlID               = C.V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_MB
	CtrlMPEGVideoMultiSliceMode            CtrlID               = C.V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE
)

Codec control values See https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/ext-ctrls-codec.html See https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/v4l2-controls.h#L228

View Source
const (
	H264NumDPBEntries uint32 = 16 // C.V4L2_H264_NUM_DPB_ENTRIES
	H264RefListLength uint32 = 32 // C.V4L2_H264_REF_LIST_LEN
)

TODO - Need to figure out how to import the proper header files for H264 support

View Source
const (
	VP8CoefficientProbabilityCount uint32 = 11 // C.V4L2_VP8_COEFF_PROB_CNT
	VP8MVProbabilityCount          uint32 = 19 // C.V4L2_VP8_MV_PROB_CNT
)
View Source
const (
	CtrlImgProcClass = C.V4L2_CID_IMAGE_PROC_CLASS
)

Image process controls See https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/ext-ctrls-image-process.html See https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/v4l2-controls.h#L1144

Variables

View Source
var (
	ErrorSystem             = errors.New("system error")
	ErrorBadArgument        = errors.New("bad argument error")
	ErrorTemporary          = errors.New("temporary error")
	ErrorTimeout            = errors.New("timeout error")
	ErrorUnsupported        = errors.New("unsupported error")
	ErrorUnsupportedFeature = errors.New("feature unsupported error")
	ErrorInterrupted        = errors.New("interrupted")
)
View Source
var (
	Capabilities = []CapabilityDesc{
		{Cap: CapVideoCapture, Desc: "video capture (single-planar)"},
		{Cap: CapVideoOutput, Desc: "video output (single-planar)"},
		{Cap: CapVideoOverlay, Desc: "video overlay"},
		{Cap: CapVBICapture, Desc: "raw VBI capture"},
		{Cap: CapVBIOutput, Desc: "raw VBI output"},
		{Cap: CapSlicedVBICapture, Desc: "sliced VBI capture"},
		{Cap: CapSlicedVBIOutput, Desc: "sliced VBI output"},
		{Cap: CapRDSCapture, Desc: "RDS capture"},
		{Cap: CapVideoOutputOverlay, Desc: "video output overlay"},
		{Cap: CapHWFrequencySeek, Desc: "hardware frequency seeking"},
		{Cap: CapRDSOutput, Desc: "RDS output"},

		{Cap: CapVideoCaptureMPlane, Desc: "video capture (multi-planar)"},
		{Cap: CapVideoOutputMPlane, Desc: "video output (multi-planar)"},
		{Cap: CapVideoMem2MemMPlane, Desc: "memory-to-memory video (multi-planar)"},
		{Cap: CapVideoMem2Mem, Desc: "memory-to-memory video (single-planar)"},

		{Cap: CapTuner, Desc: "video tuner"},
		{Cap: CapAudio, Desc: "audio inputs or outputs"},
		{Cap: CapRadio, Desc: "radio receiver"},
		{Cap: CapModulator, Desc: "radio frequency modulator"},

		{Cap: CapSDRCapture, Desc: "SDR capture"},
		{Cap: CapExtendedPixFormat, Desc: "extended pixel format"},
		{Cap: CapSDROutput, Desc: "SDR output"},
		{Cap: CapMetadataCapture, Desc: "metadata capture"},

		{Cap: CapReadWrite, Desc: "read/write IO"},
		{Cap: CapAsyncIO, Desc: "asynchronous IO"},
		{Cap: CapStreaming, Desc: "streaming IO"},
		{Cap: CapMetadataOutput, Desc: "metadata output"},

		{Cap: CapTouch, Desc: "touch capability"},
		{Cap: CapIOMediaController, Desc: "IO media controller"},

		{Cap: CapDeviceCapabilities, Desc: "device capabilities"},
	}
)
View Source
var Colorspaces = map[ColorspaceType]string{
	ColorspaceDefault:     "Default",
	ColorspaceREC709:      "Rec. 709",
	Colorspace470SystemBG: "470 System BG",
	ColorspaceJPEG:        "JPEG",
	ColorspaceSRGB:        "sRGB",
	ColorspaceOPRGB:       "opRGB",
	ColorspaceBT2020:      "BT.2020",
	ColorspaceRaw:         "Raw",
	ColorspaceDCIP3:       "DCI-P3",
}

Colorspaces is a map of colorspace to its respective description

View Source
var Fields = map[FieldType]string{
	FieldAny:                 "any",
	FieldNone:                "none",
	FieldTop:                 "top",
	FieldBottom:              "bottom",
	FieldInterlaced:          "interlaced",
	FieldSequentialTopBottom: "sequential top-bottom",
	FieldSequentialBottomTop: "Sequential botton-top",
	FieldAlternate:           "alternating",
	FieldInterlacedTopBottom: "interlaced top-bottom",
	FieldInterlacedBottomTop: "interlaced bottom-top",
}

Fields is a map of FieldType description

View Source
var FormatDescriptionFlags = map[FmtDescFlag]string{
	FmtDescFlagCompressed:                  "Compressed",
	FmtDescFlagEmulated:                    "Emulated",
	FmtDescFlagContinuousBytestream:        "Continuous bytestream",
	FmtDescFlagDynResolution:               "Dynamic resolution",
	FmtDescFlagEncodedCaptureFrameInterval: "Encoded capture frame interval",
	FmtDescFlagConfigColorspace:            "Colorspace update supported",
	FmtDescFlagConfigXferFunc:              "Transfer func update supported",
	FmtDescFlagConfigYcbcrEnc:              "YCbCr/HSV update supported",
	FmtDescFlagConfigQuantization:          "Quantization update supported",
}
View Source
var InputStatuses = map[InputStatus]string{
	0:                   "ok",
	InputStatusNoPower:  "no power",
	InputStatusNoSignal: "no signal",
	InputStatusNoColor:  "no color",
}
View Source
var PixelFormats = map[FourCCType]string{
	PixelFmtRGB24: "24-bit RGB 8-8-8",
	PixelFmtGrey:  "8-bit Greyscale",
	PixelFmtYUYV:  "YUYV 4:2:2",
	PixelFmtMJPEG: "Motion-JPEG",
	PixelFmtJPEG:  "JFIF JPEG",
	PixelFmtMPEG:  "MPEG-1/2/4",
	PixelFmtH264:  "H.264",
	PixelFmtMPEG4: "MPEG-4 Part 2 ES",
}

PixelFormats provides a map of FourCCType encoding description

View Source
var Quantizations = map[QuantizationType]string{
	QuantizationDefault:      "Default",
	QuantizationFullRange:    "Full range",
	QuantizationLimitedRange: "Limited range",
}
View Source
var XferFunctions = map[XferFunctionType]string{
	XferFuncDefault:   "Default",
	XferFunc709:       "Rec. 709",
	XferFuncSRGB:      "sRGB",
	XferFuncOpRGB:     "opRGB",
	XferFuncSMPTE240M: "SMPTE 240M",
	XferFuncNone:      "None",
	XferFuncDCIP3:     "DCI-P3",
	XferFuncSMPTE2084: "SMPTE 2084",
}
View Source
var YCbCrEncodings = map[YCbCrEncodingType]string{
	YCbCrEncodingDefault:        "Default",
	YCbCrEncoding601:            "ITU-R 601",
	YCbCrEncoding709:            "Rec. 709",
	YCbCrEncodingXV601:          "xvYCC 601",
	YCbCrEncodingXV709:          "xvYCC 709",
	YCbCrEncodingBT2020:         "BT.2020",
	YCbCrEncodingBT2020ConstLum: "BT.2020 constant luminance",
	HSVEncoding180:              "HSV 0-179",
	HSVEncoding256:              "HSV 0-255",
}

Functions

func CloseDevice

func CloseDevice(fd uintptr) error

CloseDevice closes the device.

func GetCurrentVideoInputIndex

func GetCurrentVideoInputIndex(fd uintptr) (int32, error)

GetCurrentVideoInputIndex returns the currently selected video input index See https://linuxtv.org/downloads/v4l-dvb-apis/userspace-api/v4l/vidioc-g-input.html

func IsPixYUVEncoded

func IsPixYUVEncoded(pixFmt FourCCType) bool

IsPixYUVEncoded returns true if the pixel format is a chrome+luminance YUV format

func MapMemoryBuffers

func MapMemoryBuffers(dev StreamingDevice) ([][]byte, error)

MapMemoryBuffers creates mapped memory buffers for specified buffer count of device.

func OpenDevice

func OpenDevice(path string, flags int, mode uint32) (uintptr, error)

OpenDevice offers a simpler file-open operation than the Go API's os.OpenFile (the Go API's operation causes some drivers to return busy). It also applies file validation prior to opening the device.

func SetControlValue

func SetControlValue(fd uintptr, id CtrlID, val CtrlValue) error

SetControlValue sets the value for a user control with the specified id. This function applies range check based on the values supported by the control. See https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/control.html See https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/videodev2.h#L1740

func SetCropRect

func SetCropRect(fd uintptr, r Rect) error

SetCropRect sets the cropping dimension for specified device See https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/vidioc-g-crop.html#ioctl-vidioc-g-crop-vidioc-s-crop

func SetExtControlValues

func SetExtControlValues(fd uintptr, whichCtrl CtrlClass, ctrls []Control) error

SetExtControlValues implements code to save one or more extended controls at once using the v4l2_ext_controls structure. https://linuxtv.org/downloads/v4l-dvb-apis-new/userspace-api/v4l/extended-controls.html See https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/videodev2.h#L1774

func SetPixFormat

func SetPixFormat(fd uintptr, pixFmt PixFormat) error

SetPixFormat sets the pixel format information for the specified driver See https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/vidioc-g-fmt.html#ioctl-vidioc-g-fmt-vidioc-s-fmt-vidioc-try-fmt

func SetStreamParam

func SetStreamParam(fd uintptr, bufType BufType, param StreamParam) error

func StreamOff

func StreamOff(dev StreamingDevice) error

StreamOff requests streaming to be turned off for capture (or output) that uses memory map, user ptr, or DMA buffers. https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/vidioc-streamon.html

func StreamOn

func StreamOn(dev StreamingDevice) error

StreamOn requests streaming to be turned on for capture (or output) that uses memory map, user ptr, or DMA buffers. https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/vidioc-streamon.html

func UnmapMemoryBuffers

func UnmapMemoryBuffers(dev StreamingDevice) error

UnmapMemoryBuffers unmaps all mapped memory buffer for device

func WaitForRead

func WaitForRead(dev Device) <-chan struct{}

WaitForRead returns a channel that can be used to be notified when a device's is ready to be read.

Types

type BufFlag

type BufFlag = uint32
const (
	BufFlagMapped              BufFlag = C.V4L2_BUF_FLAG_MAPPED
	BufFlagQueued              BufFlag = C.V4L2_BUF_FLAG_QUEUED
	BufFlagDone                BufFlag = C.V4L2_BUF_FLAG_DONE
	BufFlagKeyFrame            BufFlag = C.V4L2_BUF_FLAG_KEYFRAME
	BufFlagPFrame              BufFlag = C.V4L2_BUF_FLAG_PFRAME
	BufFlagBFrame              BufFlag = C.V4L2_BUF_FLAG_BFRAME
	BufFlagError               BufFlag = C.V4L2_BUF_FLAG_ERROR
	BufFlagInRequest           BufFlag = C.V4L2_BUF_FLAG_IN_REQUEST
	BufFlagTimeCode            BufFlag = C.V4L2_BUF_FLAG_TIMECODE
	BufFlagM2MHoldCaptureBuf   BufFlag = C.V4L2_BUF_FLAG_M2M_HOLD_CAPTURE_BUF
	BufFlagPrepared            BufFlag = C.V4L2_BUF_FLAG_PREPARED
	BufFlagNoCacheInvalidate   BufFlag = C.V4L2_BUF_FLAG_NO_CACHE_INVALIDATE
	BufFlagNoCacheClean        BufFlag = C.V4L2_BUF_FLAG_NO_CACHE_CLEAN
	BufFlagTimestampMask       BufFlag = C.V4L2_BUF_FLAG_TIMESTAMP_MASK
	BufFlagTimestampUnknown    BufFlag = C.V4L2_BUF_FLAG_TIMESTAMP_UNKNOWN
	BufFlagTimestampMonotonic  BufFlag = C.V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC
	BufFlagTimestampCopy       BufFlag = C.V4L2_BUF_FLAG_TIMESTAMP_COPY
	BufFlagTimestampSourceMask BufFlag = C.V4L2_BUF_FLAG_TSTAMP_SRC_MASK
	BufFlagTimestampSourceEOF  BufFlag = C.V4L2_BUF_FLAG_TSTAMP_SRC_EOF
	BufFlagTimestampSourceSOE  BufFlag = C.V4L2_BUF_FLAG_TSTAMP_SRC_SOE
	BufFlagLast                BufFlag = C.V4L2_BUF_FLAG_LAST
	BufFlagRequestFD           BufFlag = C.V4L2_BUF_FLAG_REQUEST_FD
)

type Buffer

type Buffer struct {
	Index     uint32
	Type      uint32
	BytesUsed uint32
	Flags     uint32
	Field     uint32
	Timestamp sys.Timeval
	Timecode  Timecode
	Sequence  uint32
	Memory    uint32
	Info      BufferInfo // union m
	Length    uint32
	Reserved2 uint32
	RequestFD int32
}

Buffer (v4l2_buffer) is used to send buffers info between application and driver after streaming IO has been initialized. https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/buffer.html#c.V4L.v4l2_buffer https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/videodev2.h#L1037

func DequeueBuffer

func DequeueBuffer(fd uintptr, ioType IOType, bufType BufType) (Buffer, error)

DequeueBuffer dequeues a buffer in the device driver, marking it as consumed by the application, when using either memory map, user pointer, or DMA buffers. Buffer is returned with additional information about the dequeued buffer. https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/vidioc-qbuf.html#vidioc-qbuf

func GetBuffer

func GetBuffer(dev StreamingDevice, index uint32) (Buffer, error)

GetBuffer retrieves buffer info for allocated buffers at provided index. This call should take place after buffers are allocated with RequestBuffers (for mmap for instance).

func QueueBuffer

func QueueBuffer(fd uintptr, ioType IOType, bufType BufType, index uint32) (Buffer, error)

QueueBuffer enqueues a buffer in the device driver (as empty for capturing, or filled for video output) when using either memory map, user pointer, or DMA buffers. Buffer is returned with additional information about the queued buffer. https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/vidioc-qbuf.html#vidioc-qbuf

type BufferInfo

type BufferInfo struct {
	Offset  uint32
	UserPtr uintptr
	Planes  *Plane
	FD      int32
}

BufferInfo represents Union of several values in type Buffer that are used to service the stream depending on the type of streaming selected (MMap, User pointer, planar, file descriptor for DMA)

type Capability

type Capability struct {
	// Driver name of the driver module
	Driver string

	// Card name of the device card
	Card string

	// BusInfo is the name of the device bus
	BusInfo string

	// Version is the kernel version
	Version uint32

	// Capabilities returns all exported capabilities for the physical device (opened or not)
	Capabilities uint32

	// DeviceCapabilities is the capability for this particular (opened) device or node
	DeviceCapabilities uint32
}

Capability represents capabilities retrieved for the device (see v4l2_capability). Use attached methods on this type to access capabilities. https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/videodev2.h#L440 https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/vidioc-querycap.html#c.V4L.v4l2_capability

func GetCapability

func GetCapability(fd uintptr) (Capability, error)

GetCapability retrieves capability info for device

func (Capability) GetCapabilities

func (c Capability) GetCapabilities() uint32

GetCapabilities returns device capabilities if supported

func (Capability) GetDeviceCapDescriptions

func (c Capability) GetDeviceCapDescriptions() []CapabilityDesc

GetDeviceCapDescriptions return textual descriptions of device capabilities

func (Capability) GetDriverCapDescriptions

func (c Capability) GetDriverCapDescriptions() []CapabilityDesc

GetDriverCapDescriptions return textual descriptions of driver capabilities

func (Capability) GetVersionInfo

func (c Capability) GetVersionInfo() VersionInfo

func (Capability) IsDeviceCapabilitiesProvided

func (c Capability) IsDeviceCapabilitiesProvided() bool

IsDeviceCapabilitiesProvided returns true if the device returns device-specific capabilities (via CapDeviceCapabilities) See notes on VL42_CAP_DEVICE_CAPS: https://linuxtv.org/downloads/v4l-dvb-apis/userspace-api/v4l/vidioc-querycap.html?highlight=v4l2_cap_device_caps

func (Capability) IsReadWriteSupported

func (c Capability) IsReadWriteSupported() bool

IsReadWriteSupported returns caps & CapReadWrite

func (Capability) IsStreamingSupported

func (c Capability) IsStreamingSupported() bool

IsStreamingSupported returns caps & CapStreaming

func (Capability) IsVideoCaptureMultiplanarSupported

func (c Capability) IsVideoCaptureMultiplanarSupported() bool

IsVideoCaptureMultiplanarSupported returns caps & CapVideoCaptureMPlane

func (Capability) IsVideoCaptureSupported

func (c Capability) IsVideoCaptureSupported() bool

IsVideoCaptureSupported returns caps & CapVideoCapture

func (Capability) IsVideoOutputMultiplanerSupported

func (c Capability) IsVideoOutputMultiplanerSupported() bool

IsVideoOutputMultiplanerSupported returns caps & CapVideoOutputMPlane

func (Capability) IsVideoOutputOverlaySupported

func (c Capability) IsVideoOutputOverlaySupported() bool

IsVideoOutputOverlaySupported returns caps & CapVideoOutputOverlay

func (Capability) IsVideoOutputSupported

func (c Capability) IsVideoOutputSupported() bool

IsVideoOutputSupported returns caps & CapVideoOutput

func (Capability) IsVideoOverlaySupported

func (c Capability) IsVideoOverlaySupported() bool

IsVideoOverlaySupported returns caps & CapVideoOverlay

func (Capability) String

func (c Capability) String() string

String returns a string value representing driver information

type CapabilityDesc

type CapabilityDesc struct {
	Cap  uint32
	Desc string
}

type CaptureParam

type CaptureParam struct {
	Capability   StreamParamFlag
	CaptureMode  StreamParamFlag
	TimePerFrame Fract
	ExtendedMode uint32
	ReadBuffers  uint32
	// contains filtered or unexported fields
}

CaptureParam (v4l2_captureparm) https://linuxtv.org/downloads/v4l-dvb-apis/userspace-api/v4l/vidioc-g-parm.html#c.V4L.v4l2_captureparm See https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/videodev2.h#L1205

type ColorFX

type ColorFX = uint32

ColorFX control enums See https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/v4l2-controls.h#L114

const (
	ColorFXNone         ColorFX = C.V4L2_COLORFX_NONE
	ColorFXBlackWhite   ColorFX = C.V4L2_COLORFX_BW
	ColorFXSepia        ColorFX = C.V4L2_COLORFX_SEPIA
	ColorFXNegative     ColorFX = C.V4L2_COLORFX_NEGATIVE
	ColorFXEmboss       ColorFX = C.V4L2_COLORFX_EMBOSS
	ColorFXSketch       ColorFX = C.V4L2_COLORFX_SKETCH
	ColorFXSkyBlue      ColorFX = C.V4L2_COLORFX_SKY_BLUE
	ColorFXGrassGreen   ColorFX = C.V4L2_COLORFX_GRASS_GREEN
	ColorFXSkinWhiten   ColorFX = C.V4L2_COLORFX_SKIN_WHITEN
	ColorFXVivid        ColorFX = C.V4L2_COLORFX_VIVID
	ColorFXAqua         ColorFX = C.V4L2_COLORFX_AQUA
	ColorFXArtFreeze    ColorFX = C.V4L2_COLORFX_ART_FREEZE
	ColorFXSilhouette   ColorFX = C.V4L2_COLORFX_SILHOUETTE
	ColorFXSolarization ColorFX = C.V4L2_COLORFX_SOLARIZATION
	ColorFXAntique      ColorFX = C.V4L2_COLORFX_ANTIQUE
	ColorFXSetCBCR      ColorFX = C.V4L2_COLORFX_SET_CBCR
	ColorFXSetRGB       ColorFX = C.V4L2_COLORFX_SET_RGB
)

type Control

type Control struct {
	Type    CtrlType
	ID      CtrlID
	Value   CtrlValue
	Name    string
	Minimum int32
	Maximum int32
	Step    int32
	Default int32
	// contains filtered or unexported fields
}

Control (v4l2_control)

This type is used to query/set/get user-specific controls. For more information about user controls, see https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/control.html.

Also, see the followings:

func GetControl

func GetControl(fd uintptr, id CtrlID) (Control, error)

GetControl retrieves the value and information for the user control with the specified id. See https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/control.html

func GetExtControl

func GetExtControl(fd uintptr, id CtrlID) (Control, error)

GetExtControl retrieves information (query) and current value for the specified control. See https://linuxtv.org/downloads/v4l-dvb-apis-new/userspace-api/v4l/extended-controls.html

func QueryAllControls

func QueryAllControls(fd uintptr) (result []Control, err error)

QueryAllControls loop through all available user controls and returns information for all controls without their current values (use GetControlValue to get current values). See https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/control.html

func QueryAllExtControls

func QueryAllExtControls(fd uintptr) (result []Control, err error)

QueryAllExtControls loop through all available ext controls and query the information for all controls without their current values (use GetExtControlValue to get current values).

func QueryControlInfo

func QueryControlInfo(fd uintptr, id CtrlID) (Control, error)

QueryControlInfo queries information about the specified control without the current value.

func QueryExtControlInfo

func QueryExtControlInfo(fd uintptr, id CtrlID) (Control, error)

QueryExtControlInfo queries information about the specified ext control without its current value.

func (Control) GetMenuItems

func (c Control) GetMenuItems() (result []ControlMenuItem, err error)

GetMenuItems returns control menu items if the associated control is a menu.

func (Control) IsMenu

func (c Control) IsMenu() bool

IsMenu tests whether control Type == CtrlTypeMenu || Type == CtrlIntegerMenu

type ControlFWHTParams

type ControlFWHTParams struct {
	BackwardRefTimestamp uint64
	Version              uint32
	Width                uint32
	Height               uint32
	Flags                uint32
}

ControlFWHTParams (v4l2_ctrl_fwht_params) See https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/v4l2-controls.h#L1659

type ControlH264DecodeParams

type ControlH264DecodeParams struct {
	DPB                     [H264NumDPBEntries]H264DPBEntry
	NalRefIDC               uint16
	FrameNum                uint16
	TopFieldOrderCnt        int32
	BottomFieldOrderCnt     int32
	IDRPicID                uint16
	PicOrderCntLSB          uint16
	DeltaPicOrderCntBottom  int32
	DeltaPicOrderCnt0       int32
	DeltaPicOrderCnt1       int32
	DecRefPicMarkingBitSize uint32
	PicOrderCntBitSize      uint32
	SliceGroupChangeCycle   uint32

	Flags uint32
	// contains filtered or unexported fields
}

ControlH264DecodeParams (v4l2_ctrl_h264_decode_params) See https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/v4l2-controls.h#L1581

type ControlH264PPS

type ControlH264PPS struct {
	PicParameterSetID                uint8
	SeqParameterSetID                uint8
	NumSliceGroupsMinus1             uint8
	NumRefIndexL0DefaultActiveMinus1 uint8
	NumRefIndexL1DefaultActiveMinus1 uint8
	WeightedBipredIDC                uint8
	PicInitQPMinus26                 int8
	PicInitQSMinus26                 int8
	ChromaQPIndexOffset              int8
	SecondChromaQPIndexOffset        int8
	Flags                            uint16
}

ControlH264PPS (v4l2_ctrl_h264_pps) See https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/v4l2-controls.h#L1364

type ControlH264PredictionWeights

type ControlH264PredictionWeights struct {
	LumaLog2WeightDenom   uint16
	ChromaLog2WeightDenom uint16
	WeightFactors         [2]H264WeightFators
}

ControlH264PredictionWeights (4l2_ctrl_h264_pred_weights) See https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/v4l2-controls.h#L1426

type ControlH264SPS

type ControlH264SPS struct {
	ProfileIDC                     uint8
	ConstraintSetFlags             uint8
	LevelIDC                       uint8
	SequenceParameterSetID         uint8
	ChromaFormatIDC                uint8
	BitDepthLumaMinus8             uint8
	BitDepthChromaMinus8           uint8
	Log2MaxFrameNumMinus4          uint8
	PicOrderCntType                uint8
	Log2MaxPicOrderCntLsbMinus4    uint8
	MaxNumRefFrames                uint8
	NumRefFramesInPicOrderCntCycle uint8
	OffsetForRefFrame              [255]int32
	OffsetForNonRefPic             int32
	OffsetForTopToBottomField      int32
	PicWidthInMbsMinus1            uint16
	PicHeightInMapUnitsMinus1      uint16
	Falgs                          uint32
}

ControlH264SPS (v4l2_ctrl_h264_sps) See https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/v4l2-controls.h#L1308

type ControlH264ScalingMatrix

type ControlH264ScalingMatrix struct {
	ScalingList4x4 [6][16]uint8
	ScalingList8x8 [6][64]uint8
}

ControlH264ScalingMatrix (v4l2_ctrl_h264_scaling_matrix) See https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/v4l2-controls.h#L1396

type ControlH264SliceParams

type ControlH264SliceParams struct {
	HeaderBitSize              uint32
	FirstMBInSlice             uint32
	SliceType                  uint8
	ColorPlaneID               uint8
	RedundantPicCnt            uint8
	CabacInitIDC               uint8
	SliceQPDelta               int8
	SliceQSDelta               int8
	DisableDeblockingFilterIDC uint8
	SliceAlphaC0OffsetDiv2     int8
	SliceBetaOffsetDiv2        int8
	NumRefIdxL0ActiveMinus1    uint8
	NumRefIdxL1ActiveMinus1    uint8

	RefPicList0 [H264RefListLength]H264Reference
	RefPicList1 [H264RefListLength]H264Reference

	Flags uint32
	// contains filtered or unexported fields
}

ControlH264SliceParams (v4l2_ctrl_h264_slice_params) See https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/v4l2-controls.h#L1499

type ControlMPEG2Picture

type ControlMPEG2Picture struct {
	BackwardRefTimestamp uint64
	ForwardRefTimestamp  uint64
	Flags                uint32
	FCode                [2][2]uint8
	PictureCodingType    uint8
	PictureStructure     uint8
	IntraDCPrecision     uint8
	// contains filtered or unexported fields
}

ControlMPEG2Picture (v4l2_ctrl_mpeg2_picture) See https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/v4l2-controls.h#L1939

type ControlMPEG2Quantization

type ControlMPEG2Quantization struct {
	IntraQuantizerMatrix          [64]uint8
	NonIntraQuantizerMatrix       [64]uint8
	ChromaIntraQuantizerMatrix    [64]uint8
	ChromaNonIntraQuantizerMatrix [64]uint8
}

ControlMPEG2Quantization (v4l2_ctrl_mpeg2_quantisation) See https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/v4l2-controls.h#L1972

type ControlMPEG2Sequence

type ControlMPEG2Sequence struct {
	HorizontalSize            uint16
	VerticalSize              uint16
	VBVBufferSize             uint32
	ProfileAndLevelIndication uint16
	ChromaFormat              uint8
	Flags                     uint8
}

ControlMPEG2Sequence (v4l2_ctrl_mpeg2_sequence) See https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/v4l2-controls.h#L1892

type ControlMenuItem

type ControlMenuItem struct {
	ID    uint32
	Index uint32
	Value uint32
	Name  string
}

type ControlVP8Frame

type ControlVP8Frame struct {
	Segment           VP8Segment
	LoopFilter        VP8LoopFilter
	Quantization      VP8Quantization
	Entropy           VP8Entropy
	EntropyCoderState VP8EntropyCoderState

	Width  uint16
	Height uint16

	HorizontalScale uint8
	VerticalScale   uint8

	Version       uint8
	ProbSkipFalse uint8
	PropIntra     uint8
	PropLast      uint8
	ProbGF        uint8
	NumDCTParts   uint8

	FirstPartSize   uint32
	FirstPartHeader uint32
	DCTPartSize     uint32

	LastFrameTimestamp   uint64
	GoldenFrameTimestamp uint64
	AltFrameTimestamp    uint64

	Flags uint64
}

ControlVP8Frame (v4l2_ctrl_vp8_frame) See https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/v4l2-controls.h#L1836

type CropCapability

type CropCapability struct {
	StreamType  uint32
	Bounds      Rect
	DefaultRect Rect
	PixelAspect Fract
	// contains filtered or unexported fields
}

CropCapability (v4l2_cropcap) https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/vidioc-cropcap.html#c.v4l2_cropcap https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/videodev2.h#L1221

func GetCropCapability

func GetCropCapability(fd uintptr, bufType BufType) (CropCapability, error)

GetCropCapability retrieves cropping info for specified device See https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/vidioc-cropcap.html#ioctl-vidioc-cropcap

func (CropCapability) String

func (c CropCapability) String() string

type CtrlClass

type CtrlClass = uint32

CtrlClass See https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/v4l2-controls.h#L56

const (
	CtrlClassUser            CtrlClass = C.V4L2_CTRL_CLASS_USER
	CtrlClassCodec           CtrlClass = C.V4L2_CTRL_CLASS_CODEC
	CtrlClassCamera          CtrlClass = C.V4L2_CTRL_CLASS_CAMERA
	CtrlClassFlash           CtrlClass = C.V4L2_CTRL_CLASS_FLASH
	CtrlClassJPEG            CtrlClass = C.V4L2_CTRL_CLASS_JPEG
	CtrlClassImageSource     CtrlClass = C.V4L2_CTRL_CLASS_IMAGE_SOURCE
	CtrlClassImageProcessing CtrlClass = C.V4L2_CTRL_CLASS_IMAGE_PROC
	CtrlClassDigitalVideo    CtrlClass = C.V4L2_CTRL_CLASS_DV
	CtrlClassDetection       CtrlClass = C.V4L2_CTRL_CLASS_DETECT
	CtrlClassCodecStateless  CtrlClass = C.V4L2_CTRL_CLASS_CODEC_STATELESS
	CtrlClassColorimitry     CtrlClass = C.V4L2_CTRL_CLASS_COLORIMETRY
)

type CtrlID

type CtrlID = uint32

CtrlID type for control values

const (
	CtrlBrightness              CtrlID = C.V4L2_CID_BRIGHTNESS
	CtrlContrast                CtrlID = C.V4L2_CID_CONTRAST
	CtrlSaturation              CtrlID = C.V4L2_CID_SATURATION
	CtrlHue                     CtrlID = C.V4L2_CID_HUE
	CtrlAutoWhiteBalance        CtrlID = C.V4L2_CID_AUTO_WHITE_BALANCE
	CtrlDoWhiteBalance          CtrlID = C.V4L2_CID_DO_WHITE_BALANCE
	CtrlRedBalance              CtrlID = C.V4L2_CID_RED_BALANCE
	CtrlBlueBalance             CtrlID = C.V4L2_CID_BLUE_BALANCE
	CtrlGamma                   CtrlID = C.V4L2_CID_GAMMA
	CtrlExposure                CtrlID = C.V4L2_CID_EXPOSURE
	CtrlAutogain                CtrlID = C.V4L2_CID_AUTOGAIN
	CtrlGain                    CtrlID = C.V4L2_CID_GAIN
	CtrlHFlip                   CtrlID = C.V4L2_CID_HFLIP
	CtrlVFlip                   CtrlID = C.V4L2_CID_VFLIP
	CtrlPowerlineFrequency      CtrlID = C.V4L2_CID_POWER_LINE_FREQUENCY
	CtrlHueAuto                 CtrlID = C.V4L2_CID_HUE_AUTO
	CtrlWhiteBalanceTemperature CtrlID = C.V4L2_CID_WHITE_BALANCE_TEMPERATURE
	CtrlSharpness               CtrlID = C.V4L2_CID_SHARPNESS
	CtrlBacklightCompensation   CtrlID = C.V4L2_CID_BACKLIGHT_COMPENSATION
	CtrlChromaAutomaticGain     CtrlID = C.V4L2_CID_CHROMA_AGC
	CtrlColorKiller             CtrlID = C.V4L2_CID_COLOR_KILLER
	CtrlColorFX                 CtrlID = C.V4L2_CID_COLORFX
	CtrlColorFXCBCR             CtrlID = C.V4L2_CID_COLORFX_CBCR
	CtrlColorFXRGB              CtrlID = C.V4L2_CID_COLORFX_RGB
	CtrlAutoBrightness          CtrlID = C.V4L2_CID_AUTOBRIGHTNESS
	CtrlRotate                  CtrlID = C.V4L2_CID_ROTATE
	CtrlBackgroundColor         CtrlID = C.V4L2_CID_BG_COLOR
	CtrlMinimumCaptureBuffers   CtrlID = C.V4L2_CID_MIN_BUFFERS_FOR_CAPTURE
	CtrlMinimumOutputBuffers    CtrlID = C.V4L2_CID_MIN_BUFFERS_FOR_OUTPUT
	CtrlAlphaComponent          CtrlID = C.V4L2_CID_ALPHA_COMPONENT
)

User Controls IDs (CIDs) See https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/v4l2-controls.h#L74 See https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/control.html#control-id

const (
	CtrlCameraClass                   CtrlID = C.V4L2_CID_CAMERA_CLASS
	CtrlCameraExposureAuto            CtrlID = C.V4L2_CID_EXPOSURE_AUTO
	CtrlCameraExposureAbsolute        CtrlID = C.V4L2_CID_EXPOSURE_ABSOLUTE
	CtrlCameraExposureAutoPriority    CtrlID = C.V4L2_CID_EXPOSURE_AUTO_PRIORITY
	CtrlCameraPanRelative             CtrlID = C.V4L2_CID_PAN_RELATIVE
	CtrlCameraTiltRelative            CtrlID = C.V4L2_CID_TILT_RELATIVE
	CtrlCameraPanReset                CtrlID = C.V4L2_CID_PAN_RESET
	CtrlCameraTiltReset               CtrlID = C.V4L2_CID_TILT_RESET
	CtrlCameraPanAbsolute             CtrlID = C.V4L2_CID_PAN_ABSOLUTE
	CtrlCameraTiltAbsolute            CtrlID = C.V4L2_CID_TILT_ABSOLUTE
	CtrlCameraFocusAbsolute           CtrlID = C.V4L2_CID_FOCUS_ABSOLUTE
	CtrlCameraFocusRelative           CtrlID = C.V4L2_CID_FOCUS_RELATIVE
	CtrlCameraFocusAuto               CtrlID = C.V4L2_CID_FOCUS_AUTO
	CtrlCameraZoomAbsolute            CtrlID = C.V4L2_CID_ZOOM_ABSOLUTE
	CtrlCameraZoomRelative            CtrlID = C.V4L2_CID_ZOOM_RELATIVE
	CtrlCameraZoomContinuous          CtrlID = C.V4L2_CID_ZOOM_CONTINUOUS
	CtrlCameraPrivacy                 CtrlID = C.V4L2_CID_PRIVACY
	CtrlCameraIrisAbsolute            CtrlID = C.V4L2_CID_IRIS_ABSOLUTE
	CtrlCameraIrisRelative            CtrlID = C.V4L2_CID_IRIS_RELATIVE
	CtrlCameraAutoExposureBias        CtrlID = C.V4L2_CID_AUTO_EXPOSURE_BIAS
	CtrlCameraAutoNPresetWhiteBalance CtrlID = C.V4L2_CID_AUTO_N_PRESET_WHITE_BALANCE
	CtrlCameraWideDynamicRange        CtrlID = C.V4L2_CID_WIDE_DYNAMIC_RANGE
	CtrlCameraImageStabilization      CtrlID = C.V4L2_CID_IMAGE_STABILIZATION
	CtrlCameraIsoSensitivity          CtrlID = C.V4L2_CID_ISO_SENSITIVITY
	CtrlCameraIsoSensitivityAuto      CtrlID = C.V4L2_CID_ISO_SENSITIVITY_AUTO
	CtrlCameraExposureMetering        CtrlID = C.V4L2_CID_EXPOSURE_METERING
	CtrlCameraSceneMode               CtrlID = C.V4L2_CID_SCENE_MODE
	CtrlCamera3ALock                  CtrlID = C.V4L2_CID_3A_LOCK
	CtrlCameraAutoFocusStart          CtrlID = C.V4L2_CID_AUTO_FOCUS_START
	CtrlCameraAutoFocusStop           CtrlID = C.V4L2_CID_AUTO_FOCUS_STOP
	CtrlCameraAutoFocusStatus         CtrlID = C.V4L2_CID_AUTO_FOCUS_STATUS
	CtrlCameraAutoFocusRange          CtrlID = C.V4L2_CID_AUTO_FOCUS_RANGE
	CtrlCameraPanSpeed                CtrlID = C.V4L2_CID_PAN_SPEED
	CtrlCameraTiltSpeed               CtrlID = C.V4L2_CID_TILT_SPEED
	CtrlCameraCameraOrientation       CtrlID = C.V4L2_CID_CAMERA_ORIENTATION
	CtrlCameraCameraSensorRotation    CtrlID = C.V4L2_CID_CAMERA_SENSOR_ROTATION
)

Camera control values https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/ext-ctrls-camera.html See https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/v4l2-controls.h#L897

type CtrlType

type CtrlType uint32

CtrlType constants See https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/videodev2.h#L1799 See https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/vidioc-queryctrl.html?highlight=v4l2_ctrl_type#c.V4L.v4l2_ctrl_type

const (
	CtrlTypeInt                 CtrlType = C.V4L2_CTRL_TYPE_INTEGER
	CtrlTypeBool                CtrlType = C.V4L2_CTRL_TYPE_BOOLEAN
	CtrlTypeMenu                CtrlType = C.V4L2_CTRL_TYPE_MENU
	CtrlTypeButton              CtrlType = C.V4L2_CTRL_TYPE_BUTTON
	CtrlTypeInt64               CtrlType = C.V4L2_CTRL_TYPE_INTEGER64
	CtrlTypeClass               CtrlType = C.V4L2_CTRL_TYPE_CTRL_CLASS
	CtrlTypeString              CtrlType = C.V4L2_CTRL_TYPE_STRING
	CtrlTypeBitMask             CtrlType = C.V4L2_CTRL_TYPE_BITMASK
	CtrlTypeIntegerMenu         CtrlType = C.V4L2_CTRL_TYPE_INTEGER_MENU
	CtrlTypeCompoundTypes       CtrlType = C.V4L2_CTRL_COMPOUND_TYPES
	CtrlTypeU8                  CtrlType = C.V4L2_CTRL_TYPE_U8
	CtrlTypeU16                 CtrlType = C.V4L2_CTRL_TYPE_U16
	CtrlTypeU32                 CtrlType = C.V4L2_CTRL_TYPE_U32
	CtrlTypeArear               CtrlType = C.V4L2_CTRL_TYPE_AREA
	CtrlTypeHDR10CLLInfo        CtrlType = C.V4L2_CTRL_TYPE_HDR10_CLL_INFO
	CtrlTypeHDRMasteringDisplay CtrlType = C.V4L2_CTRL_TYPE_HDR10_MASTERING_DISPLAY
	CtrlTypeH264SPS             CtrlType = C.V4L2_CTRL_TYPE_H264_SPS
	CtrlTypeH264PPS             CtrlType = C.V4L2_CTRL_TYPE_H264_PPS
	CtrlTypeH264ScalingMatrix   CtrlType = C.V4L2_CTRL_TYPE_H264_SCALING_MATRIX
	CtrlTypeH264SliceParams     CtrlType = C.V4L2_CTRL_TYPE_H264_SLICE_PARAMS
	CtrlTypeH264DecodeParams    CtrlType = C.V4L2_CTRL_TYPE_H264_DECODE_PARAMS
	CtrlTypeFWHTParams          CtrlType = C.V4L2_CTRL_TYPE_FWHT_PARAMS
	CtrlTypeVP8Frame            CtrlType = C.V4L2_CTRL_TYPE_VP8_FRAME
	CtrlTypeMPEG2Quantization   CtrlType = C.V4L2_CTRL_TYPE_MPEG2_QUANTISATION
	CtrlTypeMPEG2Sequence       CtrlType = C.V4L2_CTRL_TYPE_MPEG2_SEQUENCE
	CtrlTypeMPEG2Picture        CtrlType = C.V4L2_CTRL_TYPE_MPEG2_PICTURE
	CtrlTypeVP9CompressedHDR    CtrlType = C.V4L2_CTRL_TYPE_VP9_COMPRESSED_HDR
	CtrlTypeVP9Frame            CtrlType = C.V4L2_CTRL_TYPE_VP9_FRAME
)

type Device

type Device interface {
	Name() string
	Fd() uintptr
	Capability() Capability
	MemIOType() IOType
	GetOutput() <-chan []byte
	SetInput(<-chan []byte)
	Close() error
}

Device is the base interface for a v4l2 device

type FmtDescFlag

type FmtDescFlag = uint32

FmtDescFlag image format description flags https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/videodev2.h#L794 https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/vidioc-enum-fmt.html#fmtdesc-flags

const (
	FmtDescFlagCompressed                  FmtDescFlag = C.V4L2_FMT_FLAG_COMPRESSED
	FmtDescFlagEmulated                    FmtDescFlag = C.V4L2_FMT_FLAG_EMULATED
	FmtDescFlagContinuousBytestream        FmtDescFlag = C.V4L2_FMT_FLAG_CONTINUOUS_BYTESTREAM
	FmtDescFlagDynResolution               FmtDescFlag = C.V4L2_FMT_FLAG_DYN_RESOLUTION
	FmtDescFlagEncodedCaptureFrameInterval FmtDescFlag = C.V4L2_FMT_FLAG_ENC_CAP_FRAME_INTERVAL
	FmtDescFlagConfigColorspace            FmtDescFlag = C.V4L2_FMT_FLAG_CSC_COLORSPACE
	FmtDescFlagConfigXferFunc              FmtDescFlag = C.V4L2_FMT_FLAG_CSC_XFER_FUNC
	FmtDescFlagConfigYcbcrEnc              FmtDescFlag = C.V4L2_FMT_FLAG_CSC_YCBCR_ENC
	FmtDescFlagConfigHsvEnc                FmtDescFlag = C.V4L2_FMT_FLAG_CSC_HSV_ENC
	FmtDescFlagConfigQuantization          FmtDescFlag = C.V4L2_FMT_FLAG_CSC_QUANTIZATION
)

type FormatDescription

type FormatDescription struct {
	// Index returns the format number
	Index uint32
	// StreamType type for the buffer (see v4l2_buf_type)
	StreamType BufType
	// Flags is the image description flags (see FmtDescFlag)
	Flags FmtDescFlag
	// Description is a string value for the format description
	Description string
	// PixelFormat stores the four character encoding for the format
	PixelFormat FourCCType
	// MBusCode is the media bus code for drivers that advertise v4l2_cap_io_mc
	MBusCode uint32
}

FormatDescription (v4l2_fmtdesc) provides access to the device format description https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/videodev2.h#L784 https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/vidioc-enum-fmt.html

func GetAllFormatDescriptions

func GetAllFormatDescriptions(fd uintptr) (result []FormatDescription, err error)

GetAllFormatDescriptions attempts to retrieve all device format descriptions by iterating from 0 up to an index that returns an error. At that point, the function will return the collected descriptions and the error. So if len(result) > 0, then error could be ignored.

func GetFormatDescription

func GetFormatDescription(fd uintptr, index uint32) (FormatDescription, error)

GetFormatDescription returns a device format description at index

func GetFormatDescriptionByEncoding

func GetFormatDescriptionByEncoding(fd uintptr, enc FourCCType) (FormatDescription, error)

GetFormatDescriptionByEncoding returns a FormatDescription that matches the specified encoded pixel format

func (FormatDescription) String

func (d FormatDescription) String() string

type FourCCType

type FourCCType = uint32

FourCCType represents the four character encoding value

type FrameInterval

type FrameInterval struct {
	Min  Fract
	Max  Fract
	Step Fract
}

FrameInterval stores all frame interval values regardless of its type. This type maps to v4l2_frmival_stepwise. See https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/videodev2.h#L851 See https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/vidioc-enum-frameintervals.html

type FrameIntervalEnum

type FrameIntervalEnum struct {
	Index       uint32
	PixelFormat FourCCType
	Width       uint32
	Height      uint32
	Type        FrameIntervalType
	Interval    FrameInterval
}

FrameIntervalEnum is used to store v4l2_frmivalenum values. See https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/videodev2.h#L857 See https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/vidioc-enum-frameintervals.html

func GetFormatFrameInterval

func GetFormatFrameInterval(fd uintptr, index uint32, encoding FourCCType, width, height uint32) (FrameIntervalEnum, error)

GetFormatFrameInterval returns a supported device frame interval for a specified encoding at index and format

type FrameIntervalType

type FrameIntervalType = uint32

FrameIntervalType (v4l2_frmivaltypes) See https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/videodev2.h#L845

const (
	FrameIntervalTypeDiscrete   FrameIntervalType = C.V4L2_FRMIVAL_TYPE_DISCRETE
	FrameIntervalTypeContinuous FrameIntervalType = C.V4L2_FRMIVAL_TYPE_CONTINUOUS
	FrameIntervalTypeStepwise   FrameIntervalType = C.V4L2_FRMIVAL_TYPE_STEPWISE
)

type FrameSize

type FrameSize struct {
	MinWidth   uint32 // Minimum frame width [pixel]
	MaxWidth   uint32 // Maximum frame width [pixel]
	StepWidth  uint32 // Frame width step size [pixel]
	MinHeight  uint32 // Minimum frame height [pixel]
	MaxHeight  uint32 // Maximum frame height [pixel]
	StepHeight uint32 // Frame height step size [pixel]
}

FrameSize stores all possible frame size information regardless of its type. It is mapped to v4l2_frmsize_stepwise. See https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/videodev2.h#L820 See https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/vidioc-enum-framesizes.html

type FrameSizeDiscrete

type FrameSizeDiscrete struct {
	Width  uint32 // width [pixel]
	Height uint32 // height [pixel]
}

FrameSizeDiscrete (v4l2_frmsize_discrete) https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/videodev2.h#L815

type FrameSizeEnum

type FrameSizeEnum struct {
	Index       uint32
	Type        FrameSizeType
	PixelFormat FourCCType
	Size        FrameSize
}

FrameSizeEnum uses v4l2_frmsizeenum to get supported frame size for the driver based for the pixel format. Use FrameSizeType to determine which sizes the driver support. https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/videodev2.h#L829 https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/vidioc-enum-framesizes.html

func GetAllFormatFrameSizes

func GetAllFormatFrameSizes(fd uintptr) (result []FrameSizeEnum, err error)

GetAllFormatFrameSizes returns all supported frame sizes for all supported formats. It iterates from format at index 0 until it encounters and error and then stops. For each supported format, it retrieves all supported frame sizes.

func GetFormatFrameSize

func GetFormatFrameSize(fd uintptr, index uint32, encoding FourCCType) (FrameSizeEnum, error)

GetFormatFrameSize returns a supported device frame size for a specified encoding at index

func GetFormatFrameSizes

func GetFormatFrameSizes(fd uintptr, encoding FourCCType) (result []FrameSizeEnum, err error)

GetFormatFrameSizes returns all supported device frame sizes for a specified encoding

type FrameSizeType

type FrameSizeType = uint32
const (
	FrameSizeTypeDiscrete   FrameSizeType = C.V4L2_FRMSIZE_TYPE_DISCRETE
	FrameSizeTypeContinuous FrameSizeType = C.V4L2_FRMSIZE_TYPE_CONTINUOUS
	FrameSizeTypeStepwise   FrameSizeType = C.V4L2_FRMSIZE_TYPE_STEPWISE
)

type H264DPBEntry

type H264DPBEntry struct {
	ReferenceTS uint64
	PicNum      uint32
	FrameNum    uint16
	Fields      uint8

	TopFieldOrder       int32
	BottomFieldOrderCnt int32
	Flags               uint32
	// contains filtered or unexported fields
}

H264DPBEntry (v4l2_h264_dpb_entry) See https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/v4l2-controls.h#L1544

type H264Reference

type H264Reference struct {
	Fields uint8
	Index  uint8
}

H264Reference (v4l2_h264_reference) See https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/v4l2-controls.h#L1452

type H264WeightFators

type H264WeightFators struct {
	LumaWeight   [32]int16
	LumaOffset   [32]int16
	ChromaWeight [32][2]int16
	ChromaOffset [32][2]int16
}

type HSVEncodingType

type HSVEncodingType = YCbCrEncodingType

HSVEncodingType (v4l2_hsv_encoding) See https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/videodev2.h#L352

const (
	HSVEncoding180 HSVEncodingType = C.V4L2_HSV_ENC_180
	HSVEncoding256 HSVEncodingType = C.V4L2_HSV_ENC_256
)

type InputInfo

type InputInfo struct {
	// contains filtered or unexported fields
}

InputInfo (v4l2_input) https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/videodev2.h#L1649 https://linuxtv.org/downloads/v4l-dvb-apis/userspace-api/v4l/vidioc-enuminput.html

func GetAllVideoInputInfo

func GetAllVideoInputInfo(fd uintptr) (result []InputInfo, err error)

GetAllVideoInputInfo returns all input information for device by iterating from input index = 0 until an error (EINVL) is returned.

func GetVideoInputInfo

func GetVideoInputInfo(fd uintptr, index uint32) (InputInfo, error)

GetVideoInputInfo returns specified input information for video device See https://linuxtv.org/downloads/v4l-dvb-apis/userspace-api/v4l/vidioc-enuminput.html

func (InputInfo) GetAudioset

func (i InputInfo) GetAudioset() uint32

func (InputInfo) GetCapabilities

func (i InputInfo) GetCapabilities() uint32

func (InputInfo) GetIndex

func (i InputInfo) GetIndex() uint32

func (InputInfo) GetInputType

func (i InputInfo) GetInputType() InputType

func (InputInfo) GetName

func (i InputInfo) GetName() string

func (InputInfo) GetStandardId

func (i InputInfo) GetStandardId() StandardId

func (InputInfo) GetStatus

func (i InputInfo) GetStatus() uint32

func (InputInfo) GetTuner

func (i InputInfo) GetTuner() uint32

type InputType

type InputType = uint32
const (
	InputTypeTuner InputType = iota + 1
	InputTypeCamera
	InputTypeTouch
)

type MPEGStreamType

type MPEGStreamType = uint32

MPEGStreamType represents v4l2_mpeg_stream_type See https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/v4l2-controls.h#L237

const (
	MPEGStreamTypeMPEG2ProgramStream   MPEGStreamType = C.V4L2_MPEG_STREAM_TYPE_MPEG2_PS
	MPEGStreamTypeMPEG2TransportStream MPEGStreamType = C.V4L2_MPEG_STREAM_TYPE_MPEG2_TS
	MPEGStreamTypeMPEG1SystemStream    MPEGStreamType = C.V4L2_MPEG_STREAM_TYPE_MPEG1_SS
	MPEGStreamTypeMPEG2DVD             MPEGStreamType = C.V4L2_MPEG_STREAM_TYPE_MPEG2_DVD
	MPEGStreamTypeMPEG1VCD             MPEGStreamType = C.V4L2_MPEG_STREAM_TYPE_MPEG1_VCD
	MPEGStreamTypeMPEG2SVCD            MPEGStreamType = C.V4L2_MPEG_STREAM_TYPE_MPEG2_SVCD
)

type MPEGVideoAspect

type MPEGVideoAspect = uint32

type MPEGVideoBitrateMode

type MPEGVideoBitrateMode = uint32

type MPEGVideoEncoding

type MPEGVideoEncoding = uint32

type MediaDeviceInfo

type MediaDeviceInfo struct {
	Driver           string
	Model            string
	Serial           string
	BusInfo          string
	MediaVersion     VersionInfo
	HardwareRevision uint32
	DriverVersion    VersionInfo
}

MediaDeviceInfo (media_device_info) See https://www.kernel.org/doc/html/latest/userspace-api/media/mediactl/media-ioc-device-info.html See https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/media.h#L29

func GetMediaDeviceInfo

func GetMediaDeviceInfo(fd uintptr) (MediaDeviceInfo, error)

GetMediaDeviceInfo retrieves media information for specified device, if supported.

type OutputParam

type OutputParam struct {
	Capability   StreamParamFlag
	CaptureMode  StreamParamFlag
	TimePerFrame Fract
	ExtendedMode uint32
	WriteBuffers uint32
	// contains filtered or unexported fields
}

OutputParam (v4l2_outputparm) https://linuxtv.org/downloads/v4l-dvb-apis/userspace-api/v4l/vidioc-g-parm.html#c.V4L.v4l2_outputparm See https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/videodev2.h#L1228

type PixFormat

type PixFormat struct {
	Width        uint32
	Height       uint32
	PixelFormat  FourCCType
	Field        FieldType
	BytesPerLine uint32
	SizeImage    uint32
	Colorspace   ColorspaceType
	Priv         uint32
	Flags        uint32
	YcbcrEnc     YCbCrEncodingType
	HSVEnc       HSVEncodingType
	Quantization QuantizationType
	XferFunc     XferFunctionType
}

PixFormat contains video image format from v4l2_pix_format. https://www.kernel.org/doc/html/v4.9/media/uapi/v4l/pixfmt-002.html?highlight=v4l2_pix_format https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/videodev2.h#L496

func (PixFormat) String

func (f PixFormat) String() string

type Plane

type Plane struct {
	BytesUsed  uint32
	Length     uint32
	Info       PlaneInfo // union m
	DataOffset uint32
}

Plane (see struct v4l2_plane) represents a plane in a multi-planar buffers https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/buffer.html#c.V4L.v4l2_plane https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/videodev2.h#L990

type PlaneInfo

type PlaneInfo struct {
	MemOffset uint32
	UserPtr   uintptr
	FD        int32
}

PlaneInfo represents the combination of type of memory stream that can be serviced for the associated plane.

type RequestBuffers

type RequestBuffers struct {
	Count        uint32
	StreamType   uint32
	Memory       uint32
	Capabilities uint32
	// contains filtered or unexported fields
}

RequestBuffers (v4l2_requestbuffers) is used to request buffer allocation initializing streaming for memory mapped, user pointer, or DMA buffer access. https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/videodev2.h#L949 https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/vidioc-reqbufs.html?highlight=v4l2_requestbuffers#c.V4L.v4l2_requestbuffers

func InitBuffers

func InitBuffers(dev StreamingDevice) (RequestBuffers, error)

InitBuffers sends buffer allocation request (VIDIOC_REQBUFS) to initialize buffer IO for video capture or video output when using either mem map, user pointer, or DMA buffers. See https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/vidioc-reqbufs.html#vidioc-reqbufs

func ResetBuffers

func ResetBuffers(dev StreamingDevice) (RequestBuffers, error)

ResetBuffers allocates a buffer of size 0 VIDIOC_REQBUFS(0) to free (or orphan) all buffers. Useful when shuttingdown the stream. See https://linuxtv.org/downloads/v4l-dvb-apis-new/userspace-api/v4l/vidioc-reqbufs.html

type StandardId

type StandardId = uint64

type StreamingDevice

type StreamingDevice interface {
	Device
	Buffers() [][]byte
	BufferType() BufType
	BufferCount() uint32
	Start(context.Context) error
	Stop() error
}

StreamingDevice represents device that supports streaming IO via mapped buffer sharing.

type VP8Entropy

type VP8Entropy struct {
	CoefficientProbabilities [4][8][3][VP8CoefficientProbabilityCount]uint8
	YModeProbabilities       uint8
	UVModeProbabilities      uint8
	MVProbabilities          [2][VP8MVProbabilityCount]uint8
	// contains filtered or unexported fields
}

VP8Entropy (v4l2_vp8_entropy) See https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/v4l2-controls.h#L1771

type VP8EntropyCoderState

type VP8EntropyCoderState struct {
	Range    uint8
	Value    uint8
	BitCount uint8
	// contains filtered or unexported fields
}

VP8EntropyCoderState (v4l2_vp8_entropy_coder_state) See https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/v4l2-controls.h#L1790

type VP8LoopFilter

type VP8LoopFilter struct {
	ReferenceFrameDelta int8
	MBModeDelta         int8
	SharpnessLevel      uint8
	Level               uint8

	Flags uint32
	// contains filtered or unexported fields
}

VP8LoopFilter (v4l2_vp8_loop_filter) See https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/v4l2-controls.h#L1719

type VP8Quantization

type VP8Quantization struct {
	YACQIndex uint8
	YDCDelta  int8
	Y2DCDelta int8
	Y2ACDelta int8
	UVDCDelta int8
	UVACDelta int8
	// contains filtered or unexported fields
}

VP8Quantization (v4l2_vp8_quantization) See https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/v4l2-controls.h#L1744

type VP8Segment

type VP8Segment struct {
	QuantUpdate          [4]int8
	LoopFilterUpdate     [4]int8
	SegmentProbabilities [3]uint8

	Flags uint32
	// contains filtered or unexported fields
}

VP8Segment (v4l2_vp8_segment) See https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/v4l2-controls.h#L1692

type VersionInfo

type VersionInfo struct {
	// contains filtered or unexported fields
}

func (VersionInfo) Major

func (v VersionInfo) Major() uint32

func (VersionInfo) Minor

func (v VersionInfo) Minor() uint32

func (VersionInfo) Patch

func (v VersionInfo) Patch() uint32

func (VersionInfo) String

func (v VersionInfo) String() string

func (VersionInfo) Value

func (v VersionInfo) Value() uint32

Value returns the raw numeric version value

type YCbCrEncodingType

type YCbCrEncodingType = uint32

YCbCrEncodingType (v4l2_ycbcr_encoding) https://www.kernel.org/doc/html/latest/userspace-api/media/v4l/colorspaces-defs.html?highlight=v4l2_ycbcr_encoding https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/videodev2.h#L300

const (
	YCbCrEncodingDefault YCbCrEncodingType = C.V4L2_YCBCR_ENC_DEFAULT
	YCbCrEncoding601     YCbCrEncodingType = C.V4L2_YCBCR_ENC_601
	YCbCrEncoding709     YCbCrEncodingType = C.V4L2_YCBCR_ENC_709
	YCbCrEncodingXV601   YCbCrEncodingType = C.V4L2_YCBCR_ENC_XV601
	YCbCrEncodingXV709   YCbCrEncodingType = C.V4L2_YCBCR_ENC_XV709

	YCbCrEncodingBT2020         YCbCrEncodingType = C.V4L2_YCBCR_ENC_BT2020
	YCbCrEncodingBT2020ConstLum YCbCrEncodingType = C.V4L2_YCBCR_ENC_BT2020_CONST_LUM
)

func ColorspaceToYCbCrEnc

func ColorspaceToYCbCrEnc(cs ColorspaceType) YCbCrEncodingType

ColorspaceToYCbCrEnc is used to get the YCbCrEncoding when only a default YCbCr and the colorspace is known

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL