devfmt.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. package main
  2. import (
  3. "flag"
  4. "log"
  5. "strings"
  6. dev "github.com/vladimirvivien/go4vl/device"
  7. "github.com/vladimirvivien/go4vl/v4l2"
  8. )
  9. func main() {
  10. devName := "/dev/video0"
  11. width := 640
  12. height := 480
  13. format := "yuyv"
  14. flag.StringVar(&devName, "d", devName, "device name (path)")
  15. flag.IntVar(&width, "w", width, "capture width")
  16. flag.IntVar(&height, "h", height, "capture height")
  17. flag.StringVar(&format, "f", format, "pixel format")
  18. flag.Parse()
  19. fmtEnc := v4l2.PixelFmtYUYV
  20. switch strings.ToLower(format) {
  21. case "mjpeg":
  22. fmtEnc = v4l2.PixelFmtMJPEG
  23. case "h264", "h.264":
  24. fmtEnc = v4l2.PixelFmtH264
  25. case "yuyv":
  26. fmtEnc = v4l2.PixelFmtYUYV
  27. }
  28. device, err := dev.Open(
  29. devName,
  30. dev.WithPixFormat(v4l2.PixFormat{Width: uint32(width), Height: uint32(height), PixelFormat: fmtEnc, Field: v4l2.FieldNone}),
  31. dev.WithFPS(15),
  32. )
  33. if err != nil {
  34. log.Fatalf("failed to open device: %s", err)
  35. }
  36. defer device.Close()
  37. currFmt, err := device.GetPixFormat()
  38. if err != nil {
  39. log.Fatalf("unable to get format: %s", err)
  40. }
  41. log.Printf("Current format: %s", currFmt)
  42. // FPS
  43. fps, err := device.GetFrameRate()
  44. if err != nil {
  45. log.Fatalf("failed to get fps: %s", err)
  46. }
  47. log.Printf("current frame rate: %d fps", fps)
  48. // update fps
  49. if fps < 30 {
  50. if err := device.SetFrameRate(30); err != nil {
  51. log.Fatalf("failed to set frame rate: %s", err)
  52. }
  53. }
  54. fps, err = device.GetFrameRate()
  55. if err != nil {
  56. log.Fatalf("failed to get fps: %s", err)
  57. }
  58. log.Printf("updated frame rate: %d fps", fps)
  59. }