12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- package main
- import (
- "flag"
- "log"
- "strings"
- dev "github.com/vladimirvivien/go4vl/device"
- "github.com/vladimirvivien/go4vl/v4l2"
- )
- func main() {
- devName := "/dev/video0"
- width := 640
- height := 480
- format := "yuyv"
- flag.StringVar(&devName, "d", devName, "device name (path)")
- flag.IntVar(&width, "w", width, "capture width")
- flag.IntVar(&height, "h", height, "capture height")
- flag.StringVar(&format, "f", format, "pixel format")
- flag.Parse()
- fmtEnc := v4l2.PixelFmtYUYV
- switch strings.ToLower(format) {
- case "mjpeg":
- fmtEnc = v4l2.PixelFmtMJPEG
- case "h264", "h.264":
- fmtEnc = v4l2.PixelFmtH264
- case "yuyv":
- fmtEnc = v4l2.PixelFmtYUYV
- }
- device, err := dev.Open(
- devName,
- dev.WithPixFormat(v4l2.PixFormat{Width: uint32(width), Height: uint32(height), PixelFormat: fmtEnc, Field: v4l2.FieldNone}),
- dev.WithFPS(15),
- )
- if err != nil {
- log.Fatalf("failed to open device: %s", err)
- }
- defer device.Close()
- currFmt, err := device.GetPixFormat()
- if err != nil {
- log.Fatalf("unable to get format: %s", err)
- }
- log.Printf("Current format: %s", currFmt)
- // FPS
- fps, err := device.GetFrameRate()
- if err != nil {
- log.Fatalf("failed to get fps: %s", err)
- }
- log.Printf("current frame rate: %d fps", fps)
- // update fps
- if fps < 30 {
- if err := device.SetFrameRate(30); err != nil {
- log.Fatalf("failed to set frame rate: %s", err)
- }
- }
- fps, err = device.GetFrameRate()
- if err != nil {
- log.Fatalf("failed to get fps: %s", err)
- }
- log.Printf("updated frame rate: %d fps", fps)
- }
|