ustreamer icon indicating copy to clipboard operation
ustreamer copied to clipboard

CAP: Can't release HW buffer=1 (skipped frame): Cannot allocate memory

Open breakingflower opened this issue 11 months ago • 4 comments

I'm getting the following on an RPI zero 2w and camera v3 noir: Device:

  • RPI Zero 2W
  • Camera: v3 module NoIR
  • os: raspbian (debian) 12

Steps to reproduce:

  • fresh install latest raspbian image Do upgrades and install modules
sudo apt update && sudo apt -y upgrade
sudo apt install build-essential libevent-dev libjpeg-dev libbsd-dev git
git clone --depth=1 https://github.com/pikvm/ustreamer
cd ustreamer
make
sudo apt -y install libcamera-tools libcamera-v4l2
sudo modprobe bcm2835-v4l2
libcamerify ./ustreamer --host :: --encoder=m2m-image

Output:

pi@webcampi:~/ustreamer $ libcamerify ./ustreamer --host :: --encoder=m2m-image --debug
-- INFO  [220.678          ] -- Starting PiKVM uStreamer 6.7 ...
-- DEBUG [220.679          ] -- Installing SIGINT handler ...
-- DEBUG [220.679          ] -- Installing SIGTERM handler ...
-- DEBUG [220.679          ] -- Ignoring SIGPIPE ...
-- DEBUG [220.679          ] -- HTTP: Binding HTTP to [::]:8080 ...
-- INFO  [220.679          ] -- HTTP: Listening HTTP on [::]:8080
-- INFO  [220.680          ] -- Using V4L2 device: /dev/video0
-- INFO  [220.680          ] -- Using desired FPS: 0
-- INFO  [220.680          ] -- HTTP: Starting eventloop ...
-- DEBUG [220.680          ] -- CAP: Opening capture device ...
[0:03:40.681904693] [1439] ERROR IPAModule ipa_module.cpp:172 Symbol ipaModuleInfo not found
[0:03:40.682034484] [1439] ERROR IPAModule ipa_module.cpp:292 v4l2-compat.so: IPA module has no valid info
[0:03:40.682168024] [1439]  INFO Camera camera_manager.cpp:284 libcamera v0.2.0+46-075b54d5
-- DEBUG [220.696          ] -- HTTP: Repeating exposed ...
[0:03:40.837625987] [1441]  WARN RPiSdn sdn.cpp:39 Using legacy SDN tuning - please consider moving SDN inside rpi.denoise
[0:03:40.843194123] [1441]  INFO RPI vc4.cpp:447 Registered camera /base/soc/i2c0mux/i2c@1/imx708@1a to Unicam device /dev/media3 and ISP device /dev/media0
-- DEBUG [220.844          ] -- CAP: Capture device fd=8 opened
-- DEBUG [220.844          ] -- CAP: Querying device capabilities ...
-- INFO  [220.844          ] -- CAP: Using capture type: single-planar
-- INFO  [220.844          ] -- CAP: Using input channel: 0
-- DEBUG [220.845          ] -- CAP: Using TV standard: DEFAULT
-- DEBUG [220.845          ] -- CAP: Probing device format=YUYV, stride=1280, resolution=640x480 ...
[0:03:40.845366450] [1439]  INFO Camera camera.cpp:1183 configuring streams: (0) 640x480-YUYV
[0:03:40.846031133] [1441]  INFO RPI vc4.cpp:611 Sensor: /base/soc/i2c0mux/i2c@1/imx708@1a - Selected sensor format: 1536x864-SBGGR10_1X10 - Selected unicam format: 1536x864-pBAA
-- INFO  [220.848          ] -- CAP: Using resolution: 640x480
-- INFO  [220.849          ] -- CAP: Using format: YUYV
-- DEBUG [220.849          ] -- CAP: Querying HW FPS ...
-- INFO  [220.849          ] -- CAP: Querying HW FPS changing is not supported
-- INFO  [220.849          ] -- CAP: Using IO method: MMAP
-- DEBUG [220.849          ] -- CAP: Requesting 5 device buffers for MMAP ...
[0:03:40.849082829] [1439]  INFO Camera camera.cpp:1183 configuring streams: (0) 640x480-YUYV
[0:03:40.849748866] [1441]  INFO RPI vc4.cpp:611 Sensor: /base/soc/i2c0mux/i2c@1/imx708@1a - Selected sensor format: 1536x864-SBGGR10_1X10 - Selected unicam format: 1536x864-pBAA
-- INFO  [220.855          ] -- CAP: Requested 5 device buffers, got 5
-- DEBUG [220.856          ] -- CAP: Allocating device buffers ...
-- DEBUG [220.856          ] -- CAP: Calling us_xioctl(VIDIOC_QUERYBUF) for device buffer=0 ...
-- DEBUG [220.856          ] -- CAP: Mapping device buffer=0 ...
-- DEBUG [220.856          ] -- CAP: Calling us_xioctl(VIDIOC_QUERYBUF) for device buffer=1 ...
-- DEBUG [220.856          ] -- CAP: Mapping device buffer=1 ...
-- DEBUG [220.856          ] -- CAP: Calling us_xioctl(VIDIOC_QUERYBUF) for device buffer=2 ...
-- DEBUG [220.856          ] -- CAP: Mapping device buffer=2 ...
-- DEBUG [220.856          ] -- CAP: Calling us_xioctl(VIDIOC_QUERYBUF) for device buffer=3 ...
-- DEBUG [220.856          ] -- CAP: Mapping device buffer=3 ...
-- DEBUG [220.856          ] -- CAP: Calling us_xioctl(VIDIOC_QUERYBUF) for device buffer=4 ...
-- DEBUG [220.856          ] -- CAP: Mapping device buffer=4 ...
-- DEBUG [220.856          ] -- CAP: Calling us_xioctl(VIDIOC_QBUF) for buffer=0 ...
-- DEBUG [220.856          ] -- CAP: Calling us_xioctl(VIDIOC_QBUF) for buffer=1 ...
-- DEBUG [220.857          ] -- CAP: Calling us_xioctl(VIDIOC_QBUF) for buffer=2 ...
-- DEBUG [220.857          ] -- CAP: Calling us_xioctl(VIDIOC_QBUF) for buffer=3 ...
-- DEBUG [220.857          ] -- CAP: Calling us_xioctl(VIDIOC_QBUF) for buffer=4 ...
-- DEBUG [220.857          ] -- CAP: Exporting device buffer=0 to DMA ...
-- DEBUG [220.857          ] -- CAP: Exporting device buffer=1 to DMA ...
-- DEBUG [220.857          ] -- CAP: Exporting device buffer=2 to DMA ...
-- DEBUG [220.857          ] -- CAP: Exporting device buffer=3 to DMA ...
-- DEBUG [220.857          ] -- CAP: Exporting device buffer=4 to DMA ...
-- INFO  [221.002          ] -- CAP: Capturing started
-- DEBUG [221.002          ] -- Preparing M2M-IMAGE encoder ...
-- INFO  [221.002          ] -- JPEG-0: Initializing encoder ...
-- INFO  [221.002          ] -- JPEG-1: Initializing encoder ...
-- INFO  [221.002          ] -- JPEG-2: Initializing encoder ...
-- INFO  [221.002          ] -- JPEG-3: Initializing encoder ...
-- INFO  [221.003          ] -- Using JPEG quality: 80%
-- INFO  [221.003          ] -- Creating pool JPEG with 4 workers ...
-- DEBUG [221.003          ] -- Hello! I am a worker jw-0 ^_^
-- DEBUG [221.003          ] -- Worker jw-0 waiting for a new job ...
-- DEBUG [221.003          ] -- Hello! I am a worker jw-1 ^_^
-- DEBUG [221.003          ] -- Worker jw-1 waiting for a new job ...
-- DEBUG [221.003          ] -- Hello! I am a worker jw-2 ^_^
-- DEBUG [221.003          ] -- Worker jw-2 waiting for a new job ...
-- DEBUG [221.003          ] -- Hello! I am a worker jw-3 ^_^
-- DEBUG [221.003          ] -- Worker jw-3 waiting for a new job ...
-- INFO  [221.004          ] -- Capturing ...
-- DEBUG [221.004          ] -- CAP: Calling select() on video device ...
-- DEBUG [221.250          ] -- CAP: Device select() --> 1; has_read=1, has_error=0
-- DEBUG [221.251          ] -- CAP: Grabbing hw buffer ...
-- DEBUG [221.251          ] -- CAP: Grabbed HW buffer=0: bytesused=614400, grab_ts=221.229, latency=0.022, skipped=0
-- PERF  [221.251          ] -- A new second has come; captured_fps=0
-- DEBUG [221.251          ] -- CAP: Calling select() on video device ...
......
-- VERB  [227.263          ] -- Compressed new JPEG: size=12129, time=0.012, worker=jw-0, buffer=0
-- DEBUG [227.263          ] -- Worker jw-0 waiting for a new job ...
-- DEBUG [227.283          ] -- CAP: Device select() --> 1; has_read=1, has_error=0
-- DEBUG [227.283          ] -- CAP: Grabbing hw buffer ...
-- DEBUG [227.284          ] -- CAP: Grabbed HW buffer=1: bytesused=614400, grab_ts=227.259, latency=0.025, skipped=0
-- DEBUG [227.284          ] -- CAP: Calling select() on video device ...
-- VERB  [227.284          ] -- Correcting pool's JPEG approx_job_time: 0.012 -> 0.012 (last_job_time=0.012)
-- VERB  [227.284          ] -- JPEG: Fluency: delay=0.003, grab_after=227.287
-- DEBUG [227.284          ] -- JPEG: Assigned new frame in buffer=1 to worker=jw-1
-- VERB  [227.284          ] -- Compressing JPEG using M2M-IMAGE: worker=jw-1, buffer=1
-- DEBUG [227.284          ] -- JPEG-1: Compressing new frame; force_key=0 ...
-- DEBUG [227.284          ] -- JPEG-1: Grabbing INPUT buffer ...
-- DEBUG [227.285          ] -- JPEG-1: Grabbed INPUT buffer=0
-- PERF  [227.285          ] -- JPEG: ##### Encoded JPEG exposed; worker=jw-0, latency=0.059
-- DEBUG [227.286          ] -- CAP: Releasing HW buffer=0 ...
-- DEBUG [227.287          ] -- CAP: HW buffer=0 released
-- DEBUG [227.289          ] -- HTTP: Updating exposed frame (online=1) ...
-- VERB  [227.289          ] -- HTTP: Exposed frame: online=1, exp_time=0.000000
-- DEBUG [227.291          ] -- JPEG-1: Sending (releasing) INPUT buffer ...
-- DEBUG [227.291          ] -- JPEG-1: Polling encoder ...
-- DEBUG [227.295          ] -- JPEG-1: Fetching OUTPUT buffer ...
-- DEBUG [227.295          ] -- JPEG-1: Releasing OUTPUT buffer=0 ...
-- VERB  [227.295          ] -- JPEG-1: Compressed new frame: size=12143, time=0.011, force_key=0
-- VERB  [227.295          ] -- Compressed new JPEG: size=12143, time=0.011, worker=jw-1, buffer=1
-- DEBUG [227.295          ] -- Worker jw-1 waiting for a new job ...
-- DEBUG [227.316          ] -- CAP: Device select() --> 1; has_read=1, has_error=0
-- DEBUG [227.317          ] -- CAP: Grabbing hw buffer ...
-- DEBUG [227.317          ] -- CAP: Grabbed HW buffer=2: bytesused=614400, grab_ts=227.293, latency=0.024, skipped=0
-- DEBUG [227.317          ] -- CAP: Calling select() on video device ...
-- VERB  [227.317          ] -- Correcting pool's JPEG approx_job_time: 0.012 -> 0.012 (last_job_time=0.012)
-- VERB  [227.318          ] -- JPEG: Fluency: delay=0.003, grab_after=227.320
-- DEBUG [227.318          ] -- JPEG: Assigned new frame in buffer=2 to worker=jw-0
-- VERB  [227.318          ] -- Compressing JPEG using M2M-IMAGE: worker=jw-0, buffer=2
-- DEBUG [227.318          ] -- JPEG-0: Compressing new frame; force_key=0 ...
-- DEBUG [227.318          ] -- JPEG-0: Grabbing INPUT buffer ...
-- PERF  [227.319          ] -- JPEG: ##### Encoded JPEG exposed; worker=jw-1, latency=0.060
-- DEBUG [227.319          ] -- JPEG-0: Grabbed INPUT buffer=0
-- DEBUG [227.320          ] -- CAP: Releasing HW buffer=1 ...
-- DEBUG [227.320          ] -- CAP: HW buffer=1 released
-- DEBUG [227.321          ] -- HTTP: Updating exposed frame (online=1) ...
-- VERB  [227.321          ] -- HTTP: Exposed frame: online=1, exp_time=0.000000
-- DEBUG [227.325          ] -- JPEG-0: Sending (releasing) INPUT buffer ...
-- DEBUG [227.325          ] -- JPEG-0: Polling encoder ...
-- DEBUG [227.329          ] -- JPEG-0: Fetching OUTPUT buffer ...
-- DEBUG [227.329          ] -- JPEG-0: Releasing OUTPUT buffer=0 ...
-- VERB  [227.329          ] -- JPEG-0: Compressed new frame: size=12163, time=0.011, force_key=0
-- VERB  [227.329          ] -- Compressed new JPEG: size=12163, time=0.011, worker=jw-0, buffer=2
-- DEBUG [227.330          ] -- Worker jw-0 waiting for a new job ...
-- DEBUG [227.350          ] -- CAP: Device select() --> 1; has_read=1, has_error=0
-- DEBUG [227.350          ] -- CAP: Grabbing hw buffer ...
-- ERROR [227.350          ] -- CAP: Can't grab HW buffer: Resource temporarily unavailable
-- INFO  [227.422          ] -- Destroying workers pool JPEG ...
-- DEBUG [227.422          ] -- Bye-bye (worker jw-0)
-- DEBUG [227.422          ] -- Bye-bye (worker jw-1)
-- DEBUG [227.423          ] -- Bye-bye (worker jw-2)
-- DEBUG [227.423          ] -- Bye-bye (worker jw-3)
-- DEBUG [227.423          ] -- CAP: Calling VIDIOC_STREAMOFF ...
-- DEBUG [227.437          ] -- CAP: Releasing HW buffers ...
-- INFO  [227.440          ] -- CAP: Capturing stopped
================================================================================
-- DEBUG [227.440          ] -- CAP: Opening capture device ...
-- DEBUG [227.441          ] -- CAP: Capture device fd=8 opened
-- DEBUG [227.441          ] -- CAP: Querying device capabilities ...
-- INFO  [227.441          ] -- CAP: Using capture type: single-planar
-- INFO  [227.441          ] -- CAP: Using input channel: 0
-- DEBUG [227.441          ] -- CAP: Using TV standard: DEFAULT
-- DEBUG [227.442          ] -- CAP: Probing device format=YUYV, stride=1280, resolution=640x480 ...
[0:03:47.442769705] [1439]  INFO Camera camera.cpp:1183 configuring streams: (0) 640x480-YUYV
[0:03:47.445020992] [1441]  INFO RPI vc4.cpp:611 Sensor: /base/soc/i2c0mux/i2c@1/imx708@1a - Selected sensor format: 1536x864-SBGGR10_1X10 - Selected unicam format: 1536x864-pBAA
-- INFO  [227.447          ] -- CAP: Using resolution: 640x480
-- INFO  [227.448          ] -- CAP: Using format: YUYV
-- DEBUG [227.448          ] -- CAP: Querying HW FPS ...
-- INFO  [227.448          ] -- CAP: Querying HW FPS changing is not supported
-- INFO  [227.448          ] -- CAP: Using IO method: MMAP
-- DEBUG [227.448          ] -- CAP: Requesting 5 device buffers for MMAP ...
[0:03:47.448470916] [1439]  INFO Camera camera.cpp:1183 configuring streams: (0) 640x480-YUYV
[0:03:47.449442680] [1441]  INFO RPI vc4.cpp:611 Sensor: /base/soc/i2c0mux/i2c@1/imx708@1a - Selected sensor format: 1536x864-SBGGR10_1X10 - Selected unicam format: 1536x864-pBAA
-- INFO  [227.458          ] -- CAP: Requested 5 device buffers, got 5
-- DEBUG [227.458          ] -- CAP: Allocating device buffers ...
-- DEBUG [227.458          ] -- CAP: Calling us_xioctl(VIDIOC_QUERYBUF) for device buffer=0 ...
-- DEBUG [227.458          ] -- CAP: Mapping device buffer=0 ...
-- DEBUG [227.458          ] -- CAP: Calling us_xioctl(VIDIOC_QUERYBUF) for device buffer=1 ...
-- DEBUG [227.458          ] -- CAP: Mapping device buffer=1 ...
-- DEBUG [227.458          ] -- CAP: Calling us_xioctl(VIDIOC_QUERYBUF) for device buffer=2 ...
-- DEBUG [227.458          ] -- CAP: Mapping device buffer=2 ...
-- DEBUG [227.458          ] -- CAP: Calling us_xioctl(VIDIOC_QUERYBUF) for device buffer=3 ...
-- DEBUG [227.459          ] -- CAP: Mapping device buffer=3 ...
-- DEBUG [227.459          ] -- CAP: Calling us_xioctl(VIDIOC_QUERYBUF) for device buffer=4 ...
-- DEBUG [227.459          ] -- CAP: Mapping device buffer=4 ...
-- DEBUG [227.459          ] -- CAP: Calling us_xioctl(VIDIOC_QBUF) for buffer=0 ...
-- DEBUG [227.459          ] -- CAP: Calling us_xioctl(VIDIOC_QBUF) for buffer=1 ...
-- DEBUG [227.459          ] -- CAP: Calling us_xioctl(VIDIOC_QBUF) for buffer=2 ...
-- DEBUG [227.459          ] -- CAP: Calling us_xioctl(VIDIOC_QBUF) for buffer=3 ...
-- DEBUG [227.459          ] -- CAP: Calling us_xioctl(VIDIOC_QBUF) for buffer=4 ...
-- DEBUG [227.459          ] -- CAP: Exporting device buffer=0 to DMA ...
-- DEBUG [227.459          ] -- CAP: Exporting device buffer=1 to DMA ...
-- DEBUG [227.459          ] -- CAP: Exporting device buffer=2 to DMA ...
-- DEBUG [227.459          ] -- CAP: Exporting device buffer=3 to DMA ...
-- DEBUG [227.459          ] -- CAP: Exporting device buffer=4 to DMA ...
-- INFO  [227.583          ] -- CAP: Capturing started
-- DEBUG [227.583          ] -- Preparing M2M-IMAGE encoder ...
-- INFO  [227.583          ] -- Using JPEG quality: 80%
-- INFO  [227.583          ] -- Creating pool JPEG with 4 workers ...
-- DEBUG [227.584          ] -- Hello! I am a worker jw-0 ^_^
-- DEBUG [227.584          ] -- Worker jw-0 waiting for a new job ...
-- DEBUG [227.584          ] -- Hello! I am a worker jw-1 ^_^
-- DEBUG [227.584          ] -- Worker jw-1 waiting for a new job ...
-- DEBUG [227.585          ] -- Hello! I am a worker jw-3 ^_^
-- DEBUG [227.585          ] -- Worker jw-3 waiting for a new job ...
-- DEBUG [227.585          ] -- Hello! I am a worker jw-2 ^_^
-- DEBUG [227.586          ] -- Worker jw-2 waiting for a new job ...
-- INFO  [227.586          ] -- Capturing ...
-- DEBUG [227.586          ] -- CAP: Calling select() on video device ...
-- DEBUG [227.613          ] -- CAP: Device select() --> 1; has_read=1, has_error=0
-- DEBUG [227.613          ] -- CAP: Grabbing hw buffer ...
[0:03:47.613340982] [1439] ERROR V4L2Compat v4l2_camera_proxy.cpp:680 Failed to clear eventfd POLLIN
-- DEBUG [227.613          ] -- CAP: Dropped too small frame, assuming it was broken: buffer=1, bytesused=0
-- DEBUG [227.614          ] -- CAP: Releasing HW buffer=1 (broken frame) ...
[0:03:47.613772229] [1439] ERROR Request request.cpp:472 FrameBuffer already set for stream
[0:03:47.613892801] [1439] ERROR V4L2Compat v4l2_camera.cpp:259 Can't set buffer for request
-- ERROR [227.614          ] -- CAP: Can't release HW buffer=1 (broken frame): Cannot allocate memory
-- INFO  [227.686          ] -- Destroying workers pool JPEG ...
-- DEBUG [227.686          ] -- Bye-bye (worker jw-0)
-- DEBUG [227.686          ] -- Bye-bye (worker jw-1)
-- DEBUG [227.687          ] -- Bye-bye (worker jw-2)
-- DEBUG [227.687          ] -- Bye-bye (worker jw-3)
-- DEBUG [227.687          ] -- CAP: Calling VIDIOC_STREAMOFF ...
-- DEBUG [227.701          ] -- CAP: Releasing HW buffers ...
-- INFO  [227.704          ] -- CAP: Capturing stopped
================================================================================
-- DEBUG [227.706          ] -- CAP: Opening capture device ...
-- DEBUG [227.707          ] -- CAP: Capture device fd=8 opened
-- DEBUG [227.707          ] -- CAP: Querying device capabilities ...
-- INFO  [227.707          ] -- CAP: Using capture type: single-planar
-- INFO  [227.707          ] -- CAP: Using input channel: 0
-- DEBUG [227.707          ] -- CAP: Using TV standard: DEFAULT
-- DEBUG [227.707          ] -- CAP: Probing device format=YUYV, stride=1280, resolution=640x480 ...
[0:03:47.708395174] [1439]  INFO Camera camera.cpp:1183 configuring streams: (0) 640x480-YUYV
[0:03:47.709811206] [1441]  INFO RPI vc4.cpp:611 Sensor: /base/soc/i2c0mux/i2c@1/imx708@1a - Selected sensor format: 1536x864-SBGGR10_1X10 - Selected unicam format: 1536x864-pBAA
-- INFO  [227.712          ] -- CAP: Using resolution: 640x480
-- INFO  [227.712          ] -- CAP: Using format: YUYV
-- DEBUG [227.712          ] -- CAP: Querying HW FPS ...
-- INFO  [227.712          ] -- CAP: Querying HW FPS changing is not supported
-- INFO  [227.712          ] -- CAP: Using IO method: MMAP
-- DEBUG [227.712          ] -- CAP: Requesting 5 device buffers for MMAP ...
[0:03:47.712990975] [1439]  INFO Camera camera.cpp:1183 configuring streams: (0) 640x480-YUYV
[0:03:47.713875084] [1441]  INFO RPI vc4.cpp:611 Sensor: /base/soc/i2c0mux/i2c@1/imx708@1a - Selected sensor format: 1536x864-SBGGR10_1X10 - Selected unicam format: 1536x864-pBAA
-- INFO  [227.722          ] -- CAP: Requested 5 device buffers, got 5
-- DEBUG [227.723          ] -- CAP: Allocating device buffers ...
-- DEBUG [227.723          ] -- CAP: Calling us_xioctl(VIDIOC_QUERYBUF) for device buffer=0 ...
-- DEBUG [227.723          ] -- CAP: Mapping device buffer=0 ...
-- DEBUG [227.723          ] -- CAP: Calling us_xioctl(VIDIOC_QUERYBUF) for device buffer=1 ...
-- DEBUG [227.723          ] -- CAP: Mapping device buffer=1 ...
-- DEBUG [227.723          ] -- CAP: Calling us_xioctl(VIDIOC_QUERYBUF) for device buffer=2 ...
-- DEBUG [227.723          ] -- CAP: Mapping device buffer=2 ...
-- DEBUG [227.723          ] -- CAP: Calling us_xioctl(VIDIOC_QUERYBUF) for device buffer=3 ...
-- DEBUG [227.723          ] -- CAP: Mapping device buffer=3 ...
-- DEBUG [227.723          ] -- CAP: Calling us_xioctl(VIDIOC_QUERYBUF) for device buffer=4 ...
-- DEBUG [227.723          ] -- CAP: Mapping device buffer=4 ...
-- DEBUG [227.723          ] -- CAP: Calling us_xioctl(VIDIOC_QBUF) for buffer=0 ...
-- DEBUG [227.724          ] -- CAP: Calling us_xioctl(VIDIOC_QBUF) for buffer=1 ...
-- DEBUG [227.724          ] -- CAP: Calling us_xioctl(VIDIOC_QBUF) for buffer=2 ...
-- DEBUG [227.724          ] -- CAP: Calling us_xioctl(VIDIOC_QBUF) for buffer=3 ...
-- DEBUG [227.724          ] -- CAP: Calling us_xioctl(VIDIOC_QBUF) for buffer=4 ...
-- DEBUG [227.724          ] -- CAP: Exporting device buffer=0 to DMA ...
-- DEBUG [227.724          ] -- CAP: Exporting device buffer=1 to DMA ...
-- DEBUG [227.724          ] -- CAP: Exporting device buffer=2 to DMA ...
-- DEBUG [227.724          ] -- CAP: Exporting device buffer=3 to DMA ...
-- DEBUG [227.724          ] -- CAP: Exporting device buffer=4 to DMA ...
-- INFO  [227.857          ] -- CAP: Capturing started
-- DEBUG [227.857          ] -- Preparing M2M-IMAGE encoder ...
-- INFO  [227.857          ] -- Using JPEG quality: 80%
-- INFO  [227.858          ] -- Creating pool JPEG with 4 workers ...
-- DEBUG [227.858          ] -- Hello! I am a worker jw-0 ^_^
-- DEBUG [227.858          ] -- Worker jw-0 waiting for a new job ...
-- DEBUG [227.858          ] -- Hello! I am a worker jw-2 ^_^
-- DEBUG [227.859          ] -- Worker jw-2 waiting for a new job ...
-- DEBUG [227.859          ] -- Hello! I am a worker jw-1 ^_^
-- DEBUG [227.860          ] -- Hello! I am a worker jw-3 ^_^
-- DEBUG [227.860          ] -- Worker jw-3 waiting for a new job ...
-- DEBUG [227.860          ] -- Worker jw-1 waiting for a new job ...
-- INFO  [227.860          ] -- Capturing ...
-- DEBUG [227.860          ] -- CAP: Calling select() on video device ...
-- DEBUG [227.888          ] -- CAP: Device select() --> 1; has_read=1, has_error=0
-- DEBUG [227.888          ] -- CAP: Grabbing hw buffer ...
[0:03:47.888327480] [1439] ERROR V4L2Compat v4l2_camera_proxy.cpp:680 Failed to clear eventfd POLLIN
[0:03:47.888508729] [1439] ERROR V4L2Compat v4l2_camera_proxy.cpp:680 Failed to clear eventfd POLLIN
[0:03:47.888609562] [1439] ERROR Request request.cpp:472 FrameBuffer already set for stream
[0:03:47.888666228] [1439] ERROR V4L2Compat v4l2_camera.cpp:259 Can't set buffer for request
-- ERROR [227.889          ] -- CAP: Can't release HW buffer=1 (skipped frame): Cannot allocate memory
-- INFO  [227.960          ] -- Destroying workers pool JPEG ...
-- DEBUG [227.961          ] -- Bye-bye (worker jw-0)
-- DEBUG [227.961          ] -- Bye-bye (worker jw-1)
-- DEBUG [227.961          ] -- Bye-bye (worker jw-2)
-- DEBUG [227.961          ] -- Bye-bye (worker jw-3)
-- DEBUG [227.962          ] -- CAP: Calling VIDIOC_STREAMOFF ...
-- DEBUG [227.975          ] -- CAP: Releasing HW buffers ...
-- INFO  [227.978          ] -- CAP: Capturing stopped
================================================================================
-- DEBUG [227.979          ] -- CAP: Opening capture device ...
-- DEBUG [227.980          ] -- CAP: Capture device fd=8 opened
-- DEBUG [227.980          ] -- CAP: Querying device capabilities ...
-- INFO  [227.981          ] -- CAP: Using capture type: single-planar
-- INFO  [227.981          ] -- CAP: Using input channel: 0
-- DEBUG [227.981          ] -- CAP: Using TV standard: DEFAULT
-- DEBUG [227.981          ] -- CAP: Probing device format=YUYV, stride=1280, resolution=640x480 ...

It seems there is something happening with releasing memory. When I open the stream page I notice the first seconds images are changing, then the module breaks & starts errorring and can't restore itself.

breakingflower avatar Mar 26 '24 14:03 breakingflower

Specifically this is repeating:

================================================================================
-- DEBUG [526.135          ] -- CAP: Opening capture device ...
-- DEBUG [526.136          ] -- CAP: Capture device fd=8 opened
-- DEBUG [526.136          ] -- CAP: Querying device capabilities ...
-- INFO  [526.136          ] -- CAP: Using capture type: single-planar
-- INFO  [526.136          ] -- CAP: Using input channel: 0
-- DEBUG [526.136          ] -- CAP: Using TV standard: DEFAULT
-- DEBUG [526.136          ] -- CAP: Probing device format=YUYV, stride=1280, resolution=640x480 ...
[0:08:46.137992840] [2993]  INFO Camera camera.cpp:1183 configuring streams: (0) 640x480-YUYV
[0:08:46.139052634] [2984]  INFO RPI vc4.cpp:611 Sensor: /base/soc/i2c0mux/i2c@1/imx708@1a - Selected sensor format: 1536x864-SBGGR10_1X10 - Selected unicam format: 1536x864-pBAA
-- INFO  [526.141          ] -- CAP: Using resolution: 640x480
-- INFO  [526.141          ] -- CAP: Using format: YUYV
-- DEBUG [526.141          ] -- CAP: Querying HW FPS ...
-- INFO  [526.142          ] -- CAP: Querying HW FPS changing is not supported
-- INFO  [526.142          ] -- CAP: Using IO method: MMAP
-- DEBUG [526.142          ] -- CAP: Requesting 5 device buffers for MMAP ...
[0:08:46.142377586] [2993]  INFO Camera camera.cpp:1183 configuring streams: (0) 640x480-YUYV
[0:08:46.143375035] [2984]  INFO RPI vc4.cpp:611 Sensor: /base/soc/i2c0mux/i2c@1/imx708@1a - Selected sensor format: 1536x864-SBGGR10_1X10 - Selected unicam format: 1536x864-pBAA
-- INFO  [526.154          ] -- CAP: Requested 5 device buffers, got 5
-- DEBUG [526.154          ] -- CAP: Allocating device buffers ...
-- DEBUG [526.154          ] -- CAP: Calling us_xioctl(VIDIOC_QUERYBUF) for device buffer=0 ...
-- DEBUG [526.154          ] -- CAP: Mapping device buffer=0 ...
-- DEBUG [526.154          ] -- CAP: Calling us_xioctl(VIDIOC_QUERYBUF) for device buffer=1 ...
-- DEBUG [526.154          ] -- CAP: Mapping device buffer=1 ...
-- DEBUG [526.154          ] -- CAP: Calling us_xioctl(VIDIOC_QUERYBUF) for device buffer=2 ...
-- DEBUG [526.154          ] -- CAP: Mapping device buffer=2 ...
-- DEBUG [526.154          ] -- CAP: Calling us_xioctl(VIDIOC_QUERYBUF) for device buffer=3 ...
-- DEBUG [526.154          ] -- CAP: Mapping device buffer=3 ...
-- DEBUG [526.154          ] -- CAP: Calling us_xioctl(VIDIOC_QUERYBUF) for device buffer=4 ...
-- DEBUG [526.154          ] -- CAP: Mapping device buffer=4 ...
-- DEBUG [526.155          ] -- CAP: Calling us_xioctl(VIDIOC_QBUF) for buffer=0 ...
-- DEBUG [526.155          ] -- CAP: Calling us_xioctl(VIDIOC_QBUF) for buffer=1 ...
-- DEBUG [526.155          ] -- CAP: Calling us_xioctl(VIDIOC_QBUF) for buffer=2 ...
-- DEBUG [526.155          ] -- CAP: Calling us_xioctl(VIDIOC_QBUF) for buffer=3 ...
-- DEBUG [526.155          ] -- CAP: Calling us_xioctl(VIDIOC_QBUF) for buffer=4 ...
-- DEBUG [526.155          ] -- CAP: Exporting device buffer=0 to DMA ...
-- DEBUG [526.155          ] -- CAP: Exporting device buffer=1 to DMA ...
-- DEBUG [526.155          ] -- CAP: Exporting device buffer=2 to DMA ...
-- DEBUG [526.155          ] -- CAP: Exporting device buffer=3 to DMA ...
-- DEBUG [526.155          ] -- CAP: Exporting device buffer=4 to DMA ...
-- INFO  [526.288          ] -- CAP: Capturing started
-- DEBUG [526.289          ] -- Preparing M2M-IMAGE encoder ...
-- INFO  [526.289          ] -- Using JPEG quality: 80%
-- INFO  [526.289          ] -- Creating pool JPEG with 4 workers ...
-- DEBUG [526.289          ] -- Hello! I am a worker jw-0 ^_^
-- DEBUG [526.289          ] -- Worker jw-0 waiting for a new job ...
-- DEBUG [526.289          ] -- Hello! I am a worker jw-1 ^_^
-- DEBUG [526.290          ] -- Worker jw-1 waiting for a new job ...
-- DEBUG [526.290          ] -- Hello! I am a worker jw-2 ^_^
-- DEBUG [526.290          ] -- Worker jw-2 waiting for a new job ...
-- DEBUG [526.290          ] -- Hello! I am a worker jw-3 ^_^
-- DEBUG [526.290          ] -- Worker jw-3 waiting for a new job ...
-- INFO  [526.291          ] -- Capturing ...
-- DEBUG [526.291          ] -- CAP: Calling select() on video device ...
-- DEBUG [526.312          ] -- CAP: Device select() --> 1; has_read=1, has_error=0
-- DEBUG [526.312          ] -- CAP: Grabbing hw buffer ...
[0:08:46.312238065] [2993] ERROR V4L2Compat v4l2_camera_proxy.cpp:680 Failed to clear eventfd POLLIN
[0:08:46.312384419] [2993] ERROR V4L2Compat v4l2_camera_proxy.cpp:680 Failed to clear eventfd POLLIN
[0:08:46.312469628] [2993] ERROR Request request.cpp:472 FrameBuffer already set for stream
[0:08:46.312518118] [2993] ERROR V4L2Compat v4l2_camera.cpp:259 Can't set buffer for request
-- ERROR [526.313          ] -- CAP: Can't release HW buffer=1 (skipped frame): Cannot allocate memory
-- INFO  [526.391          ] -- Destroying workers pool JPEG ...
-- DEBUG [526.392          ] -- Bye-bye (worker jw-0)
-- DEBUG [526.392          ] -- Bye-bye (worker jw-1)
-- DEBUG [526.393          ] -- Bye-bye (worker jw-2)
-- DEBUG [526.393          ] -- Bye-bye (worker jw-3)
-- DEBUG [526.393          ] -- CAP: Calling VIDIOC_STREAMOFF ...
-- DEBUG [526.407          ] -- CAP: Releasing HW buffers ...
-- INFO  [526.410          ] -- CAP: Capturing stopped
================================================================================

breakingflower avatar Mar 26 '24 14:03 breakingflower

It seems this is a problem inside libcamerify. I recommend to address it to its developers.

mdevaev avatar Mar 26 '24 14:03 mdevaev

I am have the same hardware and having the same issue. Have you found any solution yet?

davhenriques avatar Jun 02 '24 14:06 davhenriques

Try sudo modprobe bcm2835-v4l2 and then start ustreamer via libcamerify.

mdevaev avatar Jul 25 '24 13:07 mdevaev