kitakar5525 / surface-ipu3-cameras

19 stars 8 forks source link

libcamera: recent version reports "unsupported resolutions" for ov7251 #4

Open kitakar5525 opened 4 years ago

kitakar5525 commented 4 years ago

After commit 4ecbd0e ("libcamera: ipu3: Validate the pipe configuration"), validation was introduced and ov7251 isn't compatible with libcamera anymore:

$ cam -c1 -C
[0:04:42.306293902] [3990]  INFO Camera camera_manager.cpp:287 libcamera v0.0.0+1758-1e8c91b6
[0:04:42.316834037] [3991]  INFO IPU3 ipu3.cpp:813 Registered Camera[0] "\_SB_.PCI0.I2C3.CAM3" connected to CSI-2 receiver 2
Using camera \_SB_.PCI0.I2C3.CAM3
[0:04:42.317613678] [3990] ERROR IPU3 imgu.cpp:408 Failed to calculate pipe configuration
[0:04:42.317631455] [3990] ERROR IPU3 ipu3.cpp:299 Failed to calculate pipe configuration: unsupported resolutions.
Failed to get default stream configuration
$ LIBCAMERA_LOG_LEVELS="*:DEBUG" cam -c1 -C

``` [0:04:50.676016987] [4011] DEBUG Pipeline pipeline_handler.cpp:693 Registered pipeline handler "PipelineHandlerIPU3" [0:04:50.676350985] [4011] DEBUG Pipeline pipeline_handler.cpp:693 Registered pipeline handler "PipelineHandlerRPi" [0:04:50.676379112] [4011] DEBUG Pipeline pipeline_handler.cpp:693 Registered pipeline handler "PipelineHandlerRkISP1" [0:04:50.676400759] [4011] DEBUG Pipeline pipeline_handler.cpp:693 Registered pipeline handler "SimplePipelineHandler" [0:04:50.676422003] [4011] DEBUG Pipeline pipeline_handler.cpp:693 Registered pipeline handler "PipelineHandlerUVC" [0:04:50.676481545] [4011] DEBUG Pipeline pipeline_handler.cpp:693 Registered pipeline handler "PipelineHandlerVimc" [0:04:50.676534581] [4011] DEBUG IPAProxy ipa_proxy.cpp:290 Registered proxy "IPAProxyLinux" [0:04:50.676549780] [4011] DEBUG IPAProxy ipa_proxy.cpp:290 Registered proxy "IPAProxyThread" [0:04:50.677033309] [4011] DEBUG IPAModule ipa_module.cpp:330 ipa_rkisp1.so: IPA module /usr/lib/libcamera/ipa_rkisp1.so is signed [0:04:50.677109386] [4011] DEBUG IPAManager ipa_manager.cpp:238 Loaded IPA module '/usr/lib/libcamera/ipa_rkisp1.so' [0:04:50.677752295] [4011] DEBUG IPAModule ipa_module.cpp:330 ipa_rpi.so: IPA module /usr/lib/libcamera/ipa_rpi.so is signed [0:04:50.677813698] [4011] DEBUG IPAManager ipa_manager.cpp:238 Loaded IPA module '/usr/lib/libcamera/ipa_rpi.so' [0:04:50.677928825] [4011] DEBUG IPAModule ipa_module.cpp:330 ipa_vimc.so: IPA module /usr/lib/libcamera/ipa_vimc.so is signed [0:04:50.677958656] [4011] DEBUG IPAManager ipa_manager.cpp:238 Loaded IPA module '/usr/lib/libcamera/ipa_vimc.so' [0:04:50.678023549] [4011] INFO Camera camera_manager.cpp:287 libcamera v0.0.0+1758-1e8c91b6 [0:04:50.678172427] [4012] DEBUG Camera camera_manager.cpp:102 Starting camera manager [0:04:50.681155137] [4012] DEBUG DeviceEnumerator device_enumerator.cpp:223 New media device "ipu3-imgu" created from /dev/media1 [0:04:50.681330971] [4012] DEBUG DeviceEnumerator device_enumerator_udev.cpp:95 Defer media device /dev/media1 due to 12 missing dependencies [0:04:50.682822193] [4012] DEBUG DeviceEnumerator device_enumerator_udev.cpp:320 All dependencies for media device /dev/media1 found [0:04:50.682838313] [4012] DEBUG DeviceEnumerator device_enumerator.cpp:251 Added device /dev/media1: ipu3-imgu [0:04:50.683067255] [4012] DEBUG DeviceEnumerator device_enumerator.cpp:223 New media device "ipu3-cio2" created from /dev/media0 [0:04:50.683094022] [4012] DEBUG DeviceEnumerator device_enumerator_udev.cpp:95 Defer media device /dev/media0 due to 9 missing dependencies [0:04:50.684185591] [4012] DEBUG DeviceEnumerator device_enumerator_udev.cpp:320 All dependencies for media device /dev/media0 found [0:04:50.684200441] [4012] DEBUG DeviceEnumerator device_enumerator.cpp:251 Added device /dev/media0: ipu3-cio2 [0:04:50.684564199] [4012] DEBUG DeviceEnumerator device_enumerator.cpp:311 Successful match for media device "ipu3-cio2" [0:04:50.684595562] [4012] DEBUG DeviceEnumerator device_enumerator.cpp:311 Successful match for media device "ipu3-imgu" [0:04:50.684651083] [4012] DEBUG MediaDevice media_device.cpp:808 /dev/media0[ipu3-cio2]: ov7251 8-0060[0] -> ipu3-csi2 2[0]: 0 [0:04:50.684663563] [4012] DEBUG MediaDevice media_device.cpp:808 /dev/media1[ipu3-imgu]: ipu3-imgu 0[3] -> ipu3-imgu 0 viewfinder[0]: 0 [0:04:50.684671203] [4012] DEBUG MediaDevice media_device.cpp:808 /dev/media1[ipu3-imgu]: ipu3-imgu 0[4] -> ipu3-imgu 0 3a stat[0]: 0 [0:04:50.684678209] [4012] DEBUG MediaDevice media_device.cpp:808 /dev/media1[ipu3-imgu]: ipu3-imgu 0 input[0] -> ipu3-imgu 0[0]: 0 [0:04:50.684685471] [4012] DEBUG MediaDevice media_device.cpp:808 /dev/media1[ipu3-imgu]: ipu3-imgu 0 parameters[0] -> ipu3-imgu 0[1]: 0 [0:04:50.684693785] [4012] DEBUG MediaDevice media_device.cpp:808 /dev/media1[ipu3-imgu]: ipu3-imgu 1[3] -> ipu3-imgu 1 viewfinder[0]: 0 [0:04:50.684700705] [4012] DEBUG MediaDevice media_device.cpp:808 /dev/media1[ipu3-imgu]: ipu3-imgu 1[4] -> ipu3-imgu 1 3a stat[0]: 0 [0:04:50.684707744] [4012] DEBUG MediaDevice media_device.cpp:808 /dev/media1[ipu3-imgu]: ipu3-imgu 1 input[0] -> ipu3-imgu 1[0]: 0 [0:04:50.684714751] [4012] DEBUG MediaDevice media_device.cpp:808 /dev/media1[ipu3-imgu]: ipu3-imgu 1 parameters[0] -> ipu3-imgu 1[1]: 0 [0:04:50.684966657] [4012] DEBUG V4L2 v4l2_videodevice.cpp:572 /dev/video4[out]: Opened device PCI:input: ipu3-imgu: ipu3-imgu [0:04:50.684999206] [4012] DEBUG V4L2 v4l2_videodevice.cpp:572 /dev/video6[cap]: Opened device PCI:output: ipu3-imgu: ipu3-imgu [0:04:50.685030839] [4012] DEBUG V4L2 v4l2_videodevice.cpp:572 /dev/video7[cap]: Opened device PCI:viewfinder: ipu3-imgu: ipu3-imgu [0:04:50.685060396] [4012] DEBUG V4L2 v4l2_videodevice.cpp:572 /dev/video8[cap]: Opened device PCI:3a stat: ipu3-imgu: ipu3-imgu [0:04:50.685115796] [4012] DEBUG V4L2 v4l2_videodevice.cpp:572 /dev/video9[out]: Opened device PCI:input: ipu3-imgu: ipu3-imgu [0:04:50.685144245] [4012] DEBUG V4L2 v4l2_videodevice.cpp:572 /dev/video11[cap]: Opened device PCI:output: ipu3-imgu: ipu3-imgu [0:04:50.685170711] [4012] DEBUG V4L2 v4l2_videodevice.cpp:572 /dev/video12[cap]: Opened device PCI:viewfinder: ipu3-imgu: ipu3-imgu [0:04:50.685202073] [4012] DEBUG V4L2 v4l2_videodevice.cpp:572 /dev/video13[cap]: Opened device PCI:3a stat: ipu3-imgu: ipu3-imgu [0:04:50.686928821] [4012] DEBUG MediaDevice media_device.cpp:808 /dev/media0[ipu3-cio2]: ov7251 8-0060[0] -> ipu3-csi2 2[0]: 1 [0:04:50.687001991] [4012] DEBUG V4L2 v4l2_videodevice.cpp:572 /dev/video2[cap]: Opened device PCI:0000:00:14.3: ipu3-cio2: Intel IPU3 CIO2 [0:04:50.687269265] [4012] INFO IPU3 ipu3.cpp:813 Registered Camera[0] "\_SB_.PCI0.I2C3.CAM3" connected to CSI-2 receiver 2 [0:04:50.687307108] [4012] DEBUG Camera camera_manager.cpp:152 Pipeline handler "PipelineHandlerIPU3" matched Using camera \_SB_.PCI0.I2C3.CAM3 [0:04:50.687753864] [4011] DEBUG IPU3 ipu3.cpp:192 CIO2 configuration: 640x480-SGRBG10_IPU3 [0:04:50.687779517] [4011] DEBUG IPU3 ipu3.cpp:207 Validating stream: 640x480-NV12 [0:04:50.687796040] [4011] DEBUG IPU3 ipu3.cpp:275 Assigned 576x448-NV12 to the main output [0:04:50.687806886] [4011] DEBUG IPU3 ipu3.cpp:288 Stream 0 configuration adjusted to 576x448-NV12 [0:04:50.687819072] [4011] DEBUG IPU3 imgu.cpp:386 Calculating pipe configuration for: [0:04:50.687825829] [4011] DEBUG IPU3 imgu.cpp:387 input: 640x480 [0:04:50.687833230] [4011] DEBUG IPU3 imgu.cpp:388 main: 576x448 [0:04:50.687840259] [4011] DEBUG IPU3 imgu.cpp:389 vf: 576x448 [0:04:50.687944429] [4011] ERROR IPU3 imgu.cpp:408 Failed to calculate pipe configuration [0:04:50.687952709] [4011] ERROR IPU3 ipu3.cpp:299 Failed to calculate pipe configuration: unsupported resolutions. [0:04:50.687960168] [4011] DEBUG Camera camera.cpp:723 Pipeline handler failed to generate configuration Failed to get default stream configuration [0:04:50.688112535] [4012] DEBUG V4L2 v4l2_videodevice.cpp:1363 /dev/video13[cap]: Releasing buffers [0:04:50.688132502] [4012] DEBUG V4L2 v4l2_videodevice.cpp:1135 /dev/video13[cap]: 0 buffers requested. [0:04:50.688194344] [4012] DEBUG V4L2 v4l2_videodevice.cpp:1363 /dev/video12[cap]: Releasing buffers [0:04:50.688204004] [4012] DEBUG V4L2 v4l2_videodevice.cpp:1135 /dev/video12[cap]: 0 buffers requested. [0:04:50.688217432] [4012] DEBUG V4L2 v4l2_videodevice.cpp:1363 /dev/video11[cap]: Releasing buffers [0:04:50.688225622] [4012] DEBUG V4L2 v4l2_videodevice.cpp:1135 /dev/video11[cap]: 0 buffers requested. [0:04:50.688237160] [4012] DEBUG V4L2 v4l2_videodevice.cpp:1363 /dev/video9[out]: Releasing buffers [0:04:50.688245078] [4012] DEBUG V4L2 v4l2_videodevice.cpp:1135 /dev/video9[out]: 0 buffers requested. [0:04:50.688289573] [4012] DEBUG V4L2 v4l2_videodevice.cpp:1363 /dev/video8[cap]: Releasing buffers [0:04:50.688298993] [4012] DEBUG V4L2 v4l2_videodevice.cpp:1135 /dev/video8[cap]: 0 buffers requested. [0:04:50.688311298] [4012] DEBUG V4L2 v4l2_videodevice.cpp:1363 /dev/video7[cap]: Releasing buffers [0:04:50.688319081] [4012] DEBUG V4L2 v4l2_videodevice.cpp:1135 /dev/video7[cap]: 0 buffers requested. [0:04:50.688338014] [4012] DEBUG V4L2 v4l2_videodevice.cpp:1363 /dev/video6[cap]: Releasing buffers [0:04:50.688348260] [4012] DEBUG V4L2 v4l2_videodevice.cpp:1135 /dev/video6[cap]: 0 buffers requested. [0:04:50.688360384] [4012] DEBUG V4L2 v4l2_videodevice.cpp:1363 /dev/video4[out]: Releasing buffers [0:04:50.688368261] [4012] DEBUG V4L2 v4l2_videodevice.cpp:1135 /dev/video4[out]: 0 buffers requested. [0:04:50.688400425] [4012] DEBUG V4L2 v4l2_videodevice.cpp:1363 /dev/video2[cap]: Releasing buffers [0:04:50.688410000] [4012] DEBUG V4L2 v4l2_videodevice.cpp:1135 /dev/video2[cap]: 0 buffers requested. ```

What change is required for the sensor driver?

djrscally commented 4 years ago

I had this for the ov5648 driver; by default the sensor was initing with the lowest resolution mode in the datasheet. libcamera doesn't have any controls to change that at the moment, so it was stuck there. It looks like the same thing is happening for you:

[0:04:50.687753864] [4011] DEBUG IPU3 ipu3.cpp:192 CIO2 configuration: 640x480-SGRBG10_IPU3
[0:04:50.687779517] [4011] DEBUG IPU3 ipu3.cpp:207 Validating stream: 640x480-NV12
[0:04:50.687796040] [4011] DEBUG IPU3 ipu3.cpp:275 Assigned 576x448-NV12 to the main output
[0:04:50.687806886] [4011] DEBUG IPU3 ipu3.cpp:288 Stream 0 configuration adjusted to 576x448-NV12
[0:04:50.687819072] [4011] DEBUG IPU3 imgu.cpp:386 Calculating pipe configuration for: 
[0:04:50.687825829] [4011] DEBUG IPU3 imgu.cpp:387 input: 640x480
[0:04:50.687833230] [4011] DEBUG IPU3 imgu.cpp:388 main: 576x448
[0:04:50.687840259] [4011] DEBUG IPU3 imgu.cpp:389 vf: 576x448
[0:04:50.687944429] [4011] ERROR IPU3 imgu.cpp:408 Failed to calculate pipe configuration
[0:04:50.687952709] [4011] ERROR IPU3 ipu3.cpp:299 Failed to calculate pipe configuration: unsupported resolutions.

Your ov7251 driver only has modes for about that resolution at the moment. Try adding a mode for the highest resolution supported by the sensor; doing that got past that error for me.

kitakar5525 commented 4 years ago

Ooooh, thanks! I'll try!

kitakar5525 commented 4 years ago

Posting a short note: The highest resolution for ov7251 (IR cam) is 640x480. So, adding higher resolution doesn't work here.

kbingham commented 3 years ago

Oh dear! I know for the IPU3 we have to do some extra calculations to be able to sort the stream sizes because originally there were only a few fixed sizes sorted. We managed to get a script from Intel to show what was needed to make it more generic, I wonder if this is due to that (either the change itself or a bug within) Following back from the "Failed to calculate pipe configuration" should be easy enough,

Best course of action is to report on the mailing list indeed.