kitakar5525 / surface-ipu3-cameras

19 stars 8 forks source link

Can't capture images using libcamera yet #2

Closed kitakar5525 closed 4 years ago

kitakar5525 commented 4 years ago

Current status is, ov5693 isn't working yet. libcamera can't get images outputting that Failed to setup link: Invalid argument.

$ sudo cam -c1 -C
[0:12:50.520820037] [6251]  INFO Camera camera_manager.cpp:287 libcamera v0.0.0+1738-33fe2774
[0:12:50.530573151] [6252]  INFO IPU3 ipu3.cpp:813 Registered Camera[0] "\_SB_.PCI0.I2C2.CAMF" connected to CSI-2 receiver 1
[0:12:50.532683680] [6252]  INFO IPU3 ipu3.cpp:813 Registered Camera[1] "\_SB_.PCI0.I2C3.CAM3" connected to CSI-2 receiver 2
Using camera \_SB_.PCI0.I2C2.CAMF
[0:12:50.538996151] [6251]  INFO Camera camera.cpp:793 configuring streams: (0) 1280x704-NV12
[0:12:50.539656082] [6252] ERROR MediaDevice media_device.cpp:802 /dev/media1[ipu3-imgu]: Failed to setup link: Invalid argument
Failed to configure camera
0001-media_device-add-debug-print-in-setupLink.patch

```diff From a96cb7ece0050727e04bec30844d73156e0864c8 Mon Sep 17 00:00:00 2001 From: Tsuchiya Yuto Date: Sat, 22 Aug 2020 23:42:53 +0900 Subject: [PATCH] media_device: add debug print in setupLink() Signed-off-by: Tsuchiya Yuto --- src/libcamera/media_device.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/libcamera/media_device.cpp b/src/libcamera/media_device.cpp index de18d57..e12db5e 100644 --- a/src/libcamera/media_device.cpp +++ b/src/libcamera/media_device.cpp @@ -802,9 +802,26 @@ int MediaDevice::setupLink(const MediaLink *link, unsigned int flags) LOG(MediaDevice, Error) << "Failed to setup link: " << strerror(-ret); + LOG(MediaDevice, Error) + << "DEBUG: linkDesc.source.entity: " << linkDesc.source.entity; + LOG(MediaDevice, Error) + << "DEBUG: linkDesc.source.index: " << linkDesc.source.index; + LOG(MediaDevice, Error) + << "DEBUG: linkDesc.sink.entity: " << linkDesc.sink.entity; + LOG(MediaDevice, Error) + << "DEBUG: linkDesc.sink.index: " << linkDesc.sink.index; return ret; } + LOG(MediaDevice, Debug) + << "DEBUG: linkDesc.source.entity: " << linkDesc.source.entity; + LOG(MediaDevice, Debug) + << "DEBUG: linkDesc.source.index: " << linkDesc.source.index; + LOG(MediaDevice, Debug) + << "DEBUG: linkDesc.sink.entity: " << linkDesc.sink.entity; + LOG(MediaDevice, Debug) + << "DEBUG: linkDesc.sink.index: " << linkDesc.sink.index; + LOG(MediaDevice, Debug) << source->entity()->name() << "[" << source->index() << "] -> " -- 2.28.0 ```

Lines with DEBUG: are added by the above patch.

$ sudo build/src/cam/cam -c1 -C
[0:07:45.056588463] [6042]  INFO IPAManager ipa_manager.cpp:136 libcamera is not installed. Adding '/home/kitakar5525/WorkingDirectory/libcamera/build/src/ipa' to the IPA search path
[0:07:45.057847963] [6042]  INFO Camera camera_manager.cpp:287 libcamera v0.0.0+1738-33fe2774-dirty (2020-08-21T04:23:08+09:00)
[0:07:45.070800507] [6043]  INFO IPU3 ipu3.cpp:813 Registered Camera[0] "\_SB_.PCI0.I2C2.CAMF" connected to CSI-2 receiver 1
[0:07:45.072123414] [6043]  INFO IPU3 ipu3.cpp:813 Registered Camera[1] "\_SB_.PCI0.I2C3.CAM3" connected to CSI-2 receiver 2
Using camera \_SB_.PCI0.I2C2.CAMF
[0:07:45.077451335] [6042]  INFO Camera camera.cpp:793 configuring streams: (0) 1280x704-NV12
[0:07:45.077885748] [6043] ERROR MediaDevice media_device.cpp:802 /dev/media1[ipu3-imgu]: Failed to setup link: Invalid argument
[0:07:45.077908991] [6043] ERROR MediaDevice media_device.cpp:805 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.source.entity: 1
[0:07:45.077932114] [6043] ERROR MediaDevice media_device.cpp:807 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.source.index: 2
[0:07:45.077940844] [6043] ERROR MediaDevice media_device.cpp:809 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.sink.entity: 19
[0:07:45.077949036] [6043] ERROR MediaDevice media_device.cpp:811 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.sink.index: 0
Failed to configure camera

Below is the full debug output with LIBCAMERA_LOG_LEVELS="*:DEBUG":

$ sudo LIBCAMERA_LOG_LEVELS="*:DEBUG" build/src/cam/cam -c1 -C
[0:04:36.517028184] [5449] DEBUG Pipeline pipeline_handler.cpp:693 Registered pipeline handler "PipelineHandlerIPU3"
[0:04:36.517569747] [5449] DEBUG Pipeline pipeline_handler.cpp:693 Registered pipeline handler "PipelineHandlerRPi"
[0:04:36.517784220] [5449] DEBUG Pipeline pipeline_handler.cpp:693 Registered pipeline handler "PipelineHandlerRkISP1"
[0:04:36.517977640] [5449] DEBUG Pipeline pipeline_handler.cpp:693 Registered pipeline handler "SimplePipelineHandler"
[0:04:36.517998503] [5449] DEBUG Pipeline pipeline_handler.cpp:693 Registered pipeline handler "PipelineHandlerUVC"
[0:04:36.518063644] [5449] DEBUG Pipeline pipeline_handler.cpp:693 Registered pipeline handler "PipelineHandlerVimc"
[0:04:36.518118929] [5449] DEBUG IPAProxy ipa_proxy.cpp:290 Registered proxy "IPAProxyLinux"
[0:04:36.518130944] [5449] DEBUG IPAProxy ipa_proxy.cpp:290 Registered proxy "IPAProxyThread"
[0:04:36.518643970] [5449]  INFO IPAManager ipa_manager.cpp:136 libcamera is not installed. Adding '/home/kitakar5525/WorkingDirectory/libcamera/build/src/ipa' to the IPA search path
[0:04:36.522527367] [5449] DEBUG IPAModule ipa_module.cpp:330 ipa_rpi.so: IPA module /home/kitakar5525/WorkingDirectory/libcamera/build/src/ipa/raspberrypi/ipa_rpi.so is signed
[0:04:36.522611596] [5449] DEBUG IPAManager ipa_manager.cpp:238 Loaded IPA module '/home/kitakar5525/WorkingDirectory/libcamera/build/src/ipa/raspberrypi/ipa_rpi.so'
[0:04:36.524146561] [5449] DEBUG IPAModule ipa_module.cpp:330 ipa_rkisp1.so: IPA module /home/kitakar5525/WorkingDirectory/libcamera/build/src/ipa/rkisp1/ipa_rkisp1.so is signed
[0:04:36.524185361] [5449] DEBUG IPAManager ipa_manager.cpp:238 Loaded IPA module '/home/kitakar5525/WorkingDirectory/libcamera/build/src/ipa/rkisp1/ipa_rkisp1.so'
[0:04:36.525347078] [5449] DEBUG IPAModule ipa_module.cpp:330 ipa_vimc.so: IPA module /home/kitakar5525/WorkingDirectory/libcamera/build/src/ipa/vimc/ipa_vimc.so is signed
[0:04:36.525385494] [5449] DEBUG IPAManager ipa_manager.cpp:238 Loaded IPA module '/home/kitakar5525/WorkingDirectory/libcamera/build/src/ipa/vimc/ipa_vimc.so'
[0:04:36.525438678] [5449]  INFO Camera camera_manager.cpp:287 libcamera v0.0.0+1738-33fe2774-dirty (2020-08-21T04:23:08+09:00)
[0:04:36.525600305] [5450] DEBUG Camera camera_manager.cpp:102 Starting camera manager
[0:04:36.528353484] [5450] DEBUG DeviceEnumerator device_enumerator.cpp:223 New media device "ipu3-imgu" created from /dev/media1
[0:04:36.528500088] [5450] DEBUG DeviceEnumerator device_enumerator_udev.cpp:95 Defer media device /dev/media1 due to 12 missing dependencies
[0:04:36.529961532] [5450] DEBUG DeviceEnumerator device_enumerator_udev.cpp:320 All dependencies for media device /dev/media1 found
[0:04:36.529977437] [5450] DEBUG DeviceEnumerator device_enumerator.cpp:251 Added device /dev/media1: ipu3-imgu
[0:04:36.530191190] [5450] DEBUG DeviceEnumerator device_enumerator.cpp:223 New media device "ipu3-cio2" created from /dev/media0
[0:04:36.530227079] [5450] DEBUG DeviceEnumerator device_enumerator_udev.cpp:95 Defer media device /dev/media0 due to 10 missing dependencies
[0:04:36.531421314] [5450] DEBUG DeviceEnumerator device_enumerator_udev.cpp:320 All dependencies for media device /dev/media0 found
[0:04:36.531435973] [5450] DEBUG DeviceEnumerator device_enumerator.cpp:251 Added device /dev/media0: ipu3-cio2
[0:04:36.531932044] [5450] DEBUG DeviceEnumerator device_enumerator.cpp:311 Successful match for media device "ipu3-cio2"
[0:04:36.531963131] [5450] DEBUG DeviceEnumerator device_enumerator.cpp:311 Successful match for media device "ipu3-imgu"
[0:04:36.532006838] [5450] DEBUG MediaDevice media_device.cpp:816 /dev/media0[ipu3-cio2]: DEBUG: linkDesc.source.entity: 37
[0:04:36.532019685] [5450] DEBUG MediaDevice media_device.cpp:818 /dev/media0[ipu3-cio2]: DEBUG: linkDesc.source.index: 0
[0:04:36.532025841] [5450] DEBUG MediaDevice media_device.cpp:820 /dev/media0[ipu3-cio2]: DEBUG: linkDesc.sink.entity: 10
[0:04:36.532030466] [5450] DEBUG MediaDevice media_device.cpp:822 /dev/media0[ipu3-cio2]: DEBUG: linkDesc.sink.index: 0
[0:04:36.532034984] [5450] DEBUG MediaDevice media_device.cpp:825 /dev/media0[ipu3-cio2]: ov5693 7-0036[0] -> ipu3-csi2 1[0]: 0
[0:04:36.532043803] [5450] DEBUG MediaDevice media_device.cpp:816 /dev/media0[ipu3-cio2]: DEBUG: linkDesc.source.entity: 39
[0:04:36.532052391] [5450] DEBUG MediaDevice media_device.cpp:818 /dev/media0[ipu3-cio2]: DEBUG: linkDesc.source.index: 0
[0:04:36.532061598] [5450] DEBUG MediaDevice media_device.cpp:820 /dev/media0[ipu3-cio2]: DEBUG: linkDesc.sink.entity: 19
[0:04:36.532071953] [5450] DEBUG MediaDevice media_device.cpp:822 /dev/media0[ipu3-cio2]: DEBUG: linkDesc.sink.index: 0
[0:04:36.532080443] [5450] DEBUG MediaDevice media_device.cpp:825 /dev/media0[ipu3-cio2]: ov7251 8-0060[0] -> ipu3-csi2 2[0]: 0
[0:04:36.532089142] [5450] DEBUG MediaDevice media_device.cpp:816 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.source.entity: 1
[0:04:36.532093918] [5450] DEBUG MediaDevice media_device.cpp:818 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.source.index: 3
[0:04:36.532098349] [5450] DEBUG MediaDevice media_device.cpp:820 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.sink.entity: 25
[0:04:36.532102937] [5450] DEBUG MediaDevice media_device.cpp:822 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.sink.index: 0
[0:04:36.532107472] [5450] DEBUG MediaDevice media_device.cpp:825 /dev/media1[ipu3-imgu]: ipu3-imgu 0[3] -> ipu3-imgu 0 viewfinder[0]: 0
[0:04:36.532116201] [5450] DEBUG MediaDevice media_device.cpp:816 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.source.entity: 1
[0:04:36.532125280] [5450] DEBUG MediaDevice media_device.cpp:818 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.source.index: 4
[0:04:36.532135945] [5450] DEBUG MediaDevice media_device.cpp:820 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.sink.entity: 31
[0:04:36.532147236] [5450] DEBUG MediaDevice media_device.cpp:822 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.sink.index: 0
[0:04:36.532158039] [5450] DEBUG MediaDevice media_device.cpp:825 /dev/media1[ipu3-imgu]: ipu3-imgu 0[4] -> ipu3-imgu 0 3a stat[0]: 0
[0:04:36.532172705] [5450] DEBUG MediaDevice media_device.cpp:816 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.source.entity: 7
[0:04:36.532184484] [5450] DEBUG MediaDevice media_device.cpp:818 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.source.index: 0
[0:04:36.532195405] [5450] DEBUG MediaDevice media_device.cpp:820 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.sink.entity: 1
[0:04:36.532206221] [5450] DEBUG MediaDevice media_device.cpp:822 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.sink.index: 0
[0:04:36.532216597] [5450] DEBUG MediaDevice media_device.cpp:825 /dev/media1[ipu3-imgu]: ipu3-imgu 0 input[0] -> ipu3-imgu 0[0]: 0
[0:04:36.532229654] [5450] DEBUG MediaDevice media_device.cpp:816 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.source.entity: 13
[0:04:36.532237900] [5450] DEBUG MediaDevice media_device.cpp:818 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.source.index: 0
[0:04:36.532243506] [5450] DEBUG MediaDevice media_device.cpp:820 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.sink.entity: 1
[0:04:36.532248957] [5450] DEBUG MediaDevice media_device.cpp:822 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.sink.index: 1
[0:04:36.532254528] [5450] DEBUG MediaDevice media_device.cpp:825 /dev/media1[ipu3-imgu]: ipu3-imgu 0 parameters[0] -> ipu3-imgu 0[1]: 0
[0:04:36.532263087] [5450] DEBUG MediaDevice media_device.cpp:816 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.source.entity: 37
[0:04:36.532268851] [5450] DEBUG MediaDevice media_device.cpp:818 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.source.index: 3
[0:04:36.532274258] [5450] DEBUG MediaDevice media_device.cpp:820 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.sink.entity: 61
[0:04:36.532279741] [5450] DEBUG MediaDevice media_device.cpp:822 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.sink.index: 0
[0:04:36.532285164] [5450] DEBUG MediaDevice media_device.cpp:825 /dev/media1[ipu3-imgu]: ipu3-imgu 1[3] -> ipu3-imgu 1 viewfinder[0]: 0
[0:04:36.532292255] [5450] DEBUG MediaDevice media_device.cpp:816 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.source.entity: 37
[0:04:36.532297815] [5450] DEBUG MediaDevice media_device.cpp:818 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.source.index: 4
[0:04:36.532303320] [5450] DEBUG MediaDevice media_device.cpp:820 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.sink.entity: 67
[0:04:36.532308635] [5450] DEBUG MediaDevice media_device.cpp:822 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.sink.index: 0
[0:04:36.532313985] [5450] DEBUG MediaDevice media_device.cpp:825 /dev/media1[ipu3-imgu]: ipu3-imgu 1[4] -> ipu3-imgu 1 3a stat[0]: 0
[0:04:36.532321157] [5450] DEBUG MediaDevice media_device.cpp:816 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.source.entity: 43
[0:04:36.532326895] [5450] DEBUG MediaDevice media_device.cpp:818 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.source.index: 0
[0:04:36.532332377] [5450] DEBUG MediaDevice media_device.cpp:820 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.sink.entity: 37
[0:04:36.532337714] [5450] DEBUG MediaDevice media_device.cpp:822 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.sink.index: 0
[0:04:36.532343127] [5450] DEBUG MediaDevice media_device.cpp:825 /dev/media1[ipu3-imgu]: ipu3-imgu 1 input[0] -> ipu3-imgu 1[0]: 0
[0:04:36.532350213] [5450] DEBUG MediaDevice media_device.cpp:816 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.source.entity: 49
[0:04:36.532355893] [5450] DEBUG MediaDevice media_device.cpp:818 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.source.index: 0
[0:04:36.532361397] [5450] DEBUG MediaDevice media_device.cpp:820 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.sink.entity: 37
[0:04:36.532366789] [5450] DEBUG MediaDevice media_device.cpp:822 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.sink.index: 1
[0:04:36.532372325] [5450] DEBUG MediaDevice media_device.cpp:825 /dev/media1[ipu3-imgu]: ipu3-imgu 1 parameters[0] -> ipu3-imgu 1[1]: 0
[0:04:36.532622336] [5450] DEBUG V4L2 v4l2_videodevice.cpp:572 /dev/video4[out]: Opened device PCI:input: ipu3-imgu: ipu3-imgu
[0:04:36.532654501] [5450] DEBUG V4L2 v4l2_videodevice.cpp:572 /dev/video6[cap]: Opened device PCI:output: ipu3-imgu: ipu3-imgu
[0:04:36.532678979] [5450] DEBUG V4L2 v4l2_videodevice.cpp:572 /dev/video7[cap]: Opened device PCI:viewfinder: ipu3-imgu: ipu3-imgu
[0:04:36.532703113] [5450] DEBUG V4L2 v4l2_videodevice.cpp:572 /dev/video8[cap]: Opened device PCI:3a stat: ipu3-imgu: ipu3-imgu
[0:04:36.532754123] [5450] DEBUG V4L2 v4l2_videodevice.cpp:572 /dev/video9[out]: Opened device PCI:input: ipu3-imgu: ipu3-imgu
[0:04:36.532779961] [5450] DEBUG V4L2 v4l2_videodevice.cpp:572 /dev/video11[cap]: Opened device PCI:output: ipu3-imgu: ipu3-imgu
[0:04:36.532802374] [5450] DEBUG V4L2 v4l2_videodevice.cpp:572 /dev/video12[cap]: Opened device PCI:viewfinder: ipu3-imgu: ipu3-imgu
[0:04:36.532824378] [5450] DEBUG V4L2 v4l2_videodevice.cpp:572 /dev/video13[cap]: Opened device PCI:3a stat: ipu3-imgu: ipu3-imgu
[0:04:36.534464966] [5450] DEBUG MediaDevice media_device.cpp:816 /dev/media0[ipu3-cio2]: DEBUG: linkDesc.source.entity: 37
[0:04:36.534481304] [5450] DEBUG MediaDevice media_device.cpp:818 /dev/media0[ipu3-cio2]: DEBUG: linkDesc.source.index: 0
[0:04:36.534487831] [5450] DEBUG MediaDevice media_device.cpp:820 /dev/media0[ipu3-cio2]: DEBUG: linkDesc.sink.entity: 10
[0:04:36.534493452] [5450] DEBUG MediaDevice media_device.cpp:822 /dev/media0[ipu3-cio2]: DEBUG: linkDesc.sink.index: 0
[0:04:36.534499220] [5450] DEBUG MediaDevice media_device.cpp:825 /dev/media0[ipu3-cio2]: ov5693 7-0036[0] -> ipu3-csi2 1[0]: 1
[0:04:36.534550536] [5450] DEBUG V4L2 v4l2_videodevice.cpp:572 /dev/video1[cap]: Opened device PCI:0000:00:14.3: ipu3-cio2: Intel IPU3 CIO2
[0:04:36.534789397] [5450]  INFO IPU3 ipu3.cpp:813 Registered Camera[0] "\_SB_.PCI0.I2C2.CAMF" connected to CSI-2 receiver 1
[0:04:36.535477501] [5450] DEBUG MediaDevice media_device.cpp:816 /dev/media0[ipu3-cio2]: DEBUG: linkDesc.source.entity: 39
[0:04:36.535498042] [5450] DEBUG MediaDevice media_device.cpp:818 /dev/media0[ipu3-cio2]: DEBUG: linkDesc.source.index: 0
[0:04:36.535508168] [5450] DEBUG MediaDevice media_device.cpp:820 /dev/media0[ipu3-cio2]: DEBUG: linkDesc.sink.entity: 19
[0:04:36.535517394] [5450] DEBUG MediaDevice media_device.cpp:822 /dev/media0[ipu3-cio2]: DEBUG: linkDesc.sink.index: 0
[0:04:36.535526770] [5450] DEBUG MediaDevice media_device.cpp:825 /dev/media0[ipu3-cio2]: ov7251 8-0060[0] -> ipu3-csi2 2[0]: 1
[0:04:36.535580310] [5450] DEBUG V4L2 v4l2_videodevice.cpp:572 /dev/video2[cap]: Opened device PCI:0000:00:14.3: ipu3-cio2: Intel IPU3 CIO2
[0:04:36.535666815] [5450]  INFO IPU3 ipu3.cpp:813 Registered Camera[1] "\_SB_.PCI0.I2C3.CAM3" connected to CSI-2 receiver 2
[0:04:36.535687007] [5450] DEBUG Camera camera_manager.cpp:152 Pipeline handler "PipelineHandlerIPU3" matched
Using camera \_SB_.PCI0.I2C2.CAMF
[0:04:36.536126630] [5449] DEBUG IPU3 ipu3.cpp:192 CIO2 configuration: 1296x736-SBGGR10_IPU3
[0:04:36.536153346] [5449] DEBUG IPU3 ipu3.cpp:207 Validating stream: 1280x720-NV12
[0:04:36.536170523] [5449] DEBUG IPU3 ipu3.cpp:275 Assigned 1280x704-NV12 to the main output
[0:04:36.536180995] [5449] DEBUG IPU3 ipu3.cpp:288 Stream 0 configuration adjusted to 1280x704-NV12
[0:04:36.536193228] [5449] DEBUG IPU3 imgu.cpp:385 Calculating pipe configuration for: 
[0:04:36.536200705] [5449] DEBUG IPU3 imgu.cpp:386 input: 1296x736
[0:04:36.536209198] [5449] DEBUG IPU3 imgu.cpp:387 main: 1280x704
[0:04:36.536217130] [5449] DEBUG IPU3 imgu.cpp:388 vf: 1280x704
[0:04:36.536374531] [5449] DEBUG IPU3 imgu.cpp:424 Computed pipe configuration: 
[0:04:36.536384436] [5449] DEBUG IPU3 imgu.cpp:425 IF: 1296x736
[0:04:36.536392502] [5449] DEBUG IPU3 imgu.cpp:426 BDS: 1296x736
[0:04:36.536399945] [5449] DEBUG IPU3 imgu.cpp:427 GDC: 1280x704
[0:04:36.536413711] [5449] DEBUG Camera camera.cpp:736 streams configuration: (0) 1280x704-NV12
[0:04:36.536437805] [5449] DEBUG IPU3 ipu3.cpp:192 CIO2 configuration: 2592x1456-SBGGR10_IPU3
[0:04:36.536451906] [5449] DEBUG IPU3 ipu3.cpp:207 Validating stream: 1280x704-NV12
[0:04:36.536461065] [5449] DEBUG IPU3 ipu3.cpp:275 Assigned 1280x704-NV12 to the main output
[0:04:36.536473450] [5449] DEBUG IPU3 imgu.cpp:385 Calculating pipe configuration for: 
[0:04:36.536479930] [5449] DEBUG IPU3 imgu.cpp:386 input: 2592x1456
[0:04:36.536487387] [5449] DEBUG IPU3 imgu.cpp:387 main: 1280x704
[0:04:36.536494592] [5449] DEBUG IPU3 imgu.cpp:388 vf: 1280x704
[0:04:36.537674160] [5449] DEBUG IPU3 imgu.cpp:424 Computed pipe configuration: 
[0:04:36.537686378] [5449] DEBUG IPU3 imgu.cpp:425 IF: 2592x1456
[0:04:36.537695310] [5449] DEBUG IPU3 imgu.cpp:426 BDS: 1296x728
[0:04:36.537702786] [5449] DEBUG IPU3 imgu.cpp:427 GDC: 1280x704
[0:04:36.537776736] [5449] DEBUG IPU3 ipu3.cpp:192 CIO2 configuration: 2592x1456-SBGGR10_IPU3
[0:04:36.537797827] [5449] DEBUG IPU3 ipu3.cpp:207 Validating stream: 1280x704-NV12
[0:04:36.537811685] [5449] DEBUG IPU3 ipu3.cpp:275 Assigned 1280x704-NV12 to the main output
[0:04:36.537825771] [5449] DEBUG IPU3 imgu.cpp:385 Calculating pipe configuration for: 
[0:04:36.537835671] [5449] DEBUG IPU3 imgu.cpp:386 input: 2592x1456
[0:04:36.537845078] [5449] DEBUG IPU3 imgu.cpp:387 main: 1280x704
[0:04:36.537854527] [5449] DEBUG IPU3 imgu.cpp:388 vf: 1280x704
[0:04:36.539103663] [5449] DEBUG IPU3 imgu.cpp:424 Computed pipe configuration: 
[0:04:36.539133266] [5449] DEBUG IPU3 imgu.cpp:425 IF: 2592x1456
[0:04:36.539144818] [5449] DEBUG IPU3 imgu.cpp:426 BDS: 1296x728
[0:04:36.539152191] [5449] DEBUG IPU3 imgu.cpp:427 GDC: 1280x704
[0:04:36.539171741] [5449]  INFO Camera camera.cpp:793 configuring streams: (0) 1280x704-NV12
[0:04:36.539598224] [5450] DEBUG MediaDevice media_device.cpp:816 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.source.entity: 1
[0:04:36.539637373] [5450] DEBUG MediaDevice media_device.cpp:818 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.source.index: 3
[0:04:36.539652622] [5450] DEBUG MediaDevice media_device.cpp:820 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.sink.entity: 25
[0:04:36.539665902] [5450] DEBUG MediaDevice media_device.cpp:822 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.sink.index: 0
[0:04:36.539679415] [5450] DEBUG MediaDevice media_device.cpp:825 /dev/media1[ipu3-imgu]: ipu3-imgu 0[3] -> ipu3-imgu 0 viewfinder[0]: 0
[0:04:36.539698202] [5450] DEBUG MediaDevice media_device.cpp:816 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.source.entity: 1
[0:04:36.539710530] [5450] DEBUG MediaDevice media_device.cpp:818 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.source.index: 4
[0:04:36.539721195] [5450] DEBUG MediaDevice media_device.cpp:820 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.sink.entity: 31
[0:04:36.539731599] [5450] DEBUG MediaDevice media_device.cpp:822 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.sink.index: 0
[0:04:36.539743440] [5450] DEBUG MediaDevice media_device.cpp:825 /dev/media1[ipu3-imgu]: ipu3-imgu 0[4] -> ipu3-imgu 0 3a stat[0]: 0
[0:04:36.539760333] [5450] DEBUG MediaDevice media_device.cpp:816 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.source.entity: 7
[0:04:36.539772203] [5450] DEBUG MediaDevice media_device.cpp:818 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.source.index: 0
[0:04:36.539789165] [5450] DEBUG MediaDevice media_device.cpp:820 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.sink.entity: 1
[0:04:36.539807671] [5450] DEBUG MediaDevice media_device.cpp:822 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.sink.index: 0
[0:04:36.539819201] [5450] DEBUG MediaDevice media_device.cpp:825 /dev/media1[ipu3-imgu]: ipu3-imgu 0 input[0] -> ipu3-imgu 0[0]: 0
[0:04:36.539834423] [5450] DEBUG MediaDevice media_device.cpp:816 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.source.entity: 13
[0:04:36.539846612] [5450] DEBUG MediaDevice media_device.cpp:818 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.source.index: 0
[0:04:36.539858872] [5450] DEBUG MediaDevice media_device.cpp:820 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.sink.entity: 1
[0:04:36.539872301] [5450] DEBUG MediaDevice media_device.cpp:822 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.sink.index: 1
[0:04:36.539902996] [5450] DEBUG MediaDevice media_device.cpp:825 /dev/media1[ipu3-imgu]: ipu3-imgu 0 parameters[0] -> ipu3-imgu 0[1]: 0
[0:04:36.539924551] [5450] DEBUG MediaDevice media_device.cpp:816 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.source.entity: 37
[0:04:36.539939135] [5450] DEBUG MediaDevice media_device.cpp:818 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.source.index: 3
[0:04:36.539952803] [5450] DEBUG MediaDevice media_device.cpp:820 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.sink.entity: 61
[0:04:36.539966229] [5450] DEBUG MediaDevice media_device.cpp:822 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.sink.index: 0
[0:04:36.539985160] [5450] DEBUG MediaDevice media_device.cpp:825 /dev/media1[ipu3-imgu]: ipu3-imgu 1[3] -> ipu3-imgu 1 viewfinder[0]: 0
[0:04:36.540012660] [5450] DEBUG MediaDevice media_device.cpp:816 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.source.entity: 37
[0:04:36.540030060] [5450] DEBUG MediaDevice media_device.cpp:818 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.source.index: 4
[0:04:36.540041388] [5450] DEBUG MediaDevice media_device.cpp:820 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.sink.entity: 67
[0:04:36.540052726] [5450] DEBUG MediaDevice media_device.cpp:822 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.sink.index: 0
[0:04:36.540064160] [5450] DEBUG MediaDevice media_device.cpp:825 /dev/media1[ipu3-imgu]: ipu3-imgu 1[4] -> ipu3-imgu 1 3a stat[0]: 0
[0:04:36.540097650] [5450] DEBUG MediaDevice media_device.cpp:816 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.source.entity: 43
[0:04:36.540110250] [5450] DEBUG MediaDevice media_device.cpp:818 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.source.index: 0
[0:04:36.540121733] [5450] DEBUG MediaDevice media_device.cpp:820 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.sink.entity: 37
[0:04:36.540133486] [5450] DEBUG MediaDevice media_device.cpp:822 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.sink.index: 0
[0:04:36.540146299] [5450] DEBUG MediaDevice media_device.cpp:825 /dev/media1[ipu3-imgu]: ipu3-imgu 1 input[0] -> ipu3-imgu 1[0]: 0
[0:04:36.540164161] [5450] DEBUG MediaDevice media_device.cpp:816 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.source.entity: 49
[0:04:36.540175783] [5450] DEBUG MediaDevice media_device.cpp:818 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.source.index: 0
[0:04:36.540187371] [5450] DEBUG MediaDevice media_device.cpp:820 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.sink.entity: 37
[0:04:36.540200255] [5450] DEBUG MediaDevice media_device.cpp:822 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.sink.index: 1
[0:04:36.540212726] [5450] DEBUG MediaDevice media_device.cpp:825 /dev/media1[ipu3-imgu]: ipu3-imgu 1 parameters[0] -> ipu3-imgu 1[1]: 0
[0:04:36.540247429] [5450] DEBUG MediaDevice media_device.cpp:816 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.source.entity: 7
[0:04:36.540257188] [5450] DEBUG MediaDevice media_device.cpp:818 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.source.index: 0
[0:04:36.540265829] [5450] DEBUG MediaDevice media_device.cpp:820 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.sink.entity: 1
[0:04:36.540273908] [5450] DEBUG MediaDevice media_device.cpp:822 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.sink.index: 0
[0:04:36.540281412] [5450] DEBUG MediaDevice media_device.cpp:825 /dev/media1[ipu3-imgu]: ipu3-imgu 0 input[0] -> ipu3-imgu 0[0]: 1
[0:04:36.540293547] [5450] ERROR MediaDevice media_device.cpp:802 /dev/media1[ipu3-imgu]: Failed to setup link: Invalid argument
[0:04:36.540311333] [5450] ERROR MediaDevice media_device.cpp:805 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.source.entity: 1
[0:04:36.540324102] [5450] ERROR MediaDevice media_device.cpp:807 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.source.index: 2
[0:04:36.540337782] [5450] ERROR MediaDevice media_device.cpp:809 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.sink.entity: 19
[0:04:36.540351104] [5450] ERROR MediaDevice media_device.cpp:811 /dev/media1[ipu3-imgu]: DEBUG: linkDesc.sink.index: 0
Failed to configure camera
[0:04:36.541169386] [5450] DEBUG V4L2 v4l2_videodevice.cpp:1363 /dev/video13[cap]: Releasing buffers
[0:04:36.541208081] [5450] DEBUG V4L2 v4l2_videodevice.cpp:1135 /dev/video13[cap]: 0 buffers requested.
[0:04:36.541365627] [5450] DEBUG V4L2 v4l2_videodevice.cpp:1363 /dev/video12[cap]: Releasing buffers
[0:04:36.541384960] [5450] DEBUG V4L2 v4l2_videodevice.cpp:1135 /dev/video12[cap]: 0 buffers requested.
[0:04:36.541431840] [5450] DEBUG V4L2 v4l2_videodevice.cpp:1363 /dev/video11[cap]: Releasing buffers
[0:04:36.541451556] [5450] DEBUG V4L2 v4l2_videodevice.cpp:1135 /dev/video11[cap]: 0 buffers requested.
[0:04:36.541478969] [5450] DEBUG V4L2 v4l2_videodevice.cpp:1363 /dev/video9[out]: Releasing buffers
[0:04:36.541495562] [5450] DEBUG V4L2 v4l2_videodevice.cpp:1135 /dev/video9[out]: 0 buffers requested.
[0:04:36.541620018] [5450] DEBUG V4L2 v4l2_videodevice.cpp:1363 /dev/video8[cap]: Releasing buffers
[0:04:36.541637482] [5450] DEBUG V4L2 v4l2_videodevice.cpp:1135 /dev/video8[cap]: 0 buffers requested.
[0:04:36.541664369] [5450] DEBUG V4L2 v4l2_videodevice.cpp:1363 /dev/video7[cap]: Releasing buffers
[0:04:36.541681215] [5450] DEBUG V4L2 v4l2_videodevice.cpp:1135 /dev/video7[cap]: 0 buffers requested.
[0:04:36.541707067] [5450] DEBUG V4L2 v4l2_videodevice.cpp:1363 /dev/video6[cap]: Releasing buffers
[0:04:36.541723168] [5450] DEBUG V4L2 v4l2_videodevice.cpp:1135 /dev/video6[cap]: 0 buffers requested.
[0:04:36.541747933] [5450] DEBUG V4L2 v4l2_videodevice.cpp:1363 /dev/video4[out]: Releasing buffers
[0:04:36.541765108] [5450] DEBUG V4L2 v4l2_videodevice.cpp:1135 /dev/video4[out]: 0 buffers requested.
[0:04:36.541850811] [5450] DEBUG V4L2 v4l2_videodevice.cpp:1363 /dev/video1[cap]: Releasing buffers
[0:04:36.541871403] [5450] DEBUG V4L2 v4l2_videodevice.cpp:1135 /dev/video1[cap]: 0 buffers requested.
[0:04:36.541989610] [5450] DEBUG V4L2 v4l2_videodevice.cpp:1363 /dev/video2[cap]: Releasing buffers
[0:04:36.542008969] [5450] DEBUG V4L2 v4l2_videodevice.cpp:1135 /dev/video2[cap]: 0 buffers requested.
djrscally commented 4 years ago

Yeah we're doing similar work. Here's my debugging prints (only the last call to setupLink():

[1:44:31.702099031] [12553]  INFO MediaDevice media_device.cpp:806 /dev/media1[ipu3-imgu]: Source: ipu3-imgu 0[devnode: /dev/v4l-subdev4], Sink: ipu3-imgu 0 output[devnode: /dev/video6]
[1:44:31.702139553] [12553]  INFO MediaDevice media_device.cpp:810 /dev/media1[ipu3-imgu]:     Existing link flags: 3
[1:44:31.702177422] [12553]  INFO MediaDevice media_device.cpp:813 /dev/media1[ipu3-imgu]:     Requested link flags: 1
[1:44:31.702212204] [12553]  INFO MediaDevice media_device.cpp:816 /dev/media1[ipu3-imgu]:     File descriptor: 6
[1:44:31.702276285] [12553]  INFO MediaDevice media_device.cpp:838 /dev/media1[ipu3-imgu]:         points to: /dev/media12212204] [12553]  INFO MediaDevice 
[1:44:31.702308314] [12553] ERROR MediaDevice media_device.cpp:846 /dev/media1[ipu3-imgu]: Failed to setup link: Invalid argument

It's failing at the call to ioctl:

    int ret = ioctl(fd_, MEDIA_IOC_SETUP_LINK, &linkDesc);
    if (ret) {
        ret = -errno;
        LOG(MediaDevice, Error)
            << "Failed to setup link: "
            << strerror(-ret);
        return ret;

The link is flagged as Immutable already, but the flag it's setting is just an enable flag so that should be ok. So we need to figure out why it fails. I tried fetching the link to get the existing flags like this:

    MediaLink *existinglink = link(nlink->source(), nlink->sink());

        /* print existing links */
    LOG(MediaDevice, Info)
        << "    Existing link flags: " << existinglink->flags();

As you can see in my debug prints above, that reports a value of 3, I.E. 00000011. Flags are here in media.h:

#define MEDIA_LNK_FL_ENABLED        (1 << 0)
#define MEDIA_LNK_FL_IMMUTABLE      (1 << 1)
#define MEDIA_LNK_FL_DYNAMIC        (1 << 2)

So, I think it's trying to enable an already enabled link. Not sure if that should matter. Alternatively, the call I make to the link function doesn't look like it performs an ioctl to get that link, so possibly it's mistaken in thinking that that exists. Might try using MEDIA_IOC_ENUM_LINKS to check for sure.

djrscally commented 4 years ago

I wrote a reply but I'd made a mistake so I deleted it; sorry if you get a confusing email :P

I wrote some code to check the link exists via ioctl() calls:

debug code ```c #include #include #include #include #include #include #include #include int open_device(char *devname) { int ret, fd; fd = open(devname, O_RDONLY); if (fd < 0) { fprintf(stderr, "Failed to open the device: %s\n", strerror(errno)); return 1; } return fd; } int read_device_info(int fd) { int ret; struct media_device_info mdi = {}; ret = ioctl(fd, MEDIA_IOC_DEVICE_INFO, &mdi); if (ret < 0) { fprintf(stderr, "Failed to read device info: %s\n", strerror(errno)); return -1; } fprintf(stdout, "Media device info\ndriver: %s, model: %s, serial: %s, bus_info: %s\n", mdi.driver, mdi.model, mdi.serial, mdi.bus_info); return 0; } int enumerate_topology(int fd) { int ret; struct media_v2_topology top = {}; ret = ioctl(fd, MEDIA_IOC_G_TOPOLOGY, &top); if (ret < 0) { fprintf(stderr, "Failed to read device topology info: %s\n", strerror(errno)); return -1; } fprintf(stdout, "\nListing entities\nnum entities: %d, num interfaces: %d, num pads: %d, num links: %d\n", top.num_entities, top.num_interfaces, top.num_pads, top.num_links); struct media_v2_entity entities[top.num_entities]; top.ptr_entities = (unsigned long)&entities; ret = ioctl(fd, MEDIA_IOC_G_TOPOLOGY, &top); if (ret < 0) { fprintf(stderr, "Failed to read device topology info: %s\n", strerror(errno)); return -1; } for (int i = 0; i < top.num_entities; i++) { fprintf(stdout, "Entity found: %s (%d)\n", entities[i].name, entities[i].id); } return 0; } int main(int argc, char *argv[]) { int ret, fd; /* open media device */ fd = open_device(argv[1]); /* read and print the dev info */ ret = read_device_info(fd); if (ret < 0) { close(fd); return -1; } ret = enumerate_topology(fd); if (ret < 0) { close(fd); return -1; } /* need to get num pads for entity 1 */ struct media_entity_desc entity = { .id=atoi(argv[2]) }; ret = ioctl(fd, MEDIA_IOC_ENUM_ENTITIES, &entity); if (ret < 0) { fprintf(stderr, "Failed to get Entity info: %d\n", ret); } fprintf(stdout, "\nChecking entity %s: num_pads: %d, num outbound links: %d\n", entity.name, entity.pads, entity.links); struct media_pad_desc pads[entity.pads]; struct media_link_desc links[entity.links]; struct media_links_enum lenum = { .entity=atoi(argv[2]), .pads=pads, .links=links, }; ioctl(fd, MEDIA_IOC_ENUM_LINKS, &lenum); if (ret < 0) { fprintf(stderr, "Failed to get links info: %d\n", ret); } for (int i = 0; i < entity.links; i++) { fprintf(stdout, " source id %d[%d] -> sink id %d[%d]\n", lenum.links[i].source.entity, lenum.links[i].source.index, lenum.links[i].sink.entity, lenum.links[i].sink.index ); } return 0; } ```

The debug output from cam tells me that the link it's trying is between entity 1 and entity 19 of /dev/media1, so checking entity 1 with my code shows:

djrscally@djrscally-MIIX-510-12ISK:~/Coding/miix-510-cameras/utils$ ./debug /dev/media1 1
Media device info
driver: ipu3-imgu, model: ipu3-imgu, serial: , bus_info: PCI:0000:00:05.0

Listing entities
num entities: 12, num interfaces: 12, num pads: 20, num links: 22
Entity found: ipu3-imgu 0 (1)
Entity found: ipu3-imgu 0 input (7)
Entity found: ipu3-imgu 0 parameters (13)
Entity found: ipu3-imgu 0 output (19)
Entity found: ipu3-imgu 0 viewfinder (25)
Entity found: ipu3-imgu 0 3a stat (31)
Entity found: ipu3-imgu 1 (37)
Entity found: ipu3-imgu 1 input (43)
Entity found: ipu3-imgu 1 parameters (49)
Entity found: ipu3-imgu 1 output (55)
Entity found: ipu3-imgu 1 viewfinder (61)
Entity found: ipu3-imgu 1 3a stat (67)

Checking entity ipu3-imgu 0: num_pads: 5, num outbound links: 3
    source id 1[2] -> sink id 19[0]
    source id 1[3] -> sink id 25[0]
    source id 1[4] -> sink id 31[0]

so there is a link ipu3-imgu 0:2 -> ipu3-imgu 0 output:0. I tried setting that link with media-ctl -d /dev/media1 -l "'ipu3-imgu 0':2 -> 'ipu3-imgu 0 output':0[1]" - that command completes silently, but also doesn't fix the problem. That's quite annoying though, because theoretically that's identical to the code the cam program is running. Given it exists, I guess the cam program must be failing because it's trying to set the configuration when it's flagged as immutable. The documentation does specify that:

Links marked with the IMMUTABLE link flag can not be enabled or disabled.

Need to do a bit of reading to see how to de-set that flag, or maybe just modify libcamera to do nothing when the link is IMMUTABLE.

EDIT:

I tried checking the value of IMMUTABLE in the existing link before allowing the call to ioctl, and that does indeed move past this problem:

    if ((existinglink->flags() & 0x02) == 0) { /* only proceed if the IMMUTABLE bit is 0 */

        int ret = ioctl(fd_, MEDIA_IOC_SETUP_LINK, &linkDesc);
        if (ret) {
            ret = -errno;
            LOG(MediaDevice, Error)
                << "Failed to setup link: "
                << strerror(-ret)
                << " " << ret << " " << -errno;
            return ret;
        }
        }

and running cam -c1 -C now gives me:

[3:30:08.361731863] [15695]  INFO MediaDevice media_device.cpp:806 /dev/media1[ipu3-imgu]: Source: ipu3-imgu 0 (1)devnode: /dev/v4l-subdev4
[3:30:08.361769021] [15695]  INFO MediaDevice media_device.cpp:809 /dev/media1[ipu3-imgu]: Sink: ipu3-imgu 0 output (19)devnode: /dev/video6
[3:30:08.361817554] [15695]  INFO MediaDevice media_device.cpp:812 /dev/media1[ipu3-imgu]:     Existing link flags: 3
[3:30:08.361855222] [15695]  INFO MediaDevice media_device.cpp:815 /dev/media1[ipu3-imgu]:     Requested link flags: 1
[3:30:08.361896008] [15695]  INFO MediaDevice media_device.cpp:818 /dev/media1[ipu3-imgu]:     File descriptor: 6
[3:30:08.361980637] [15695]  INFO MediaDevice media_device.cpp:840 /dev/media1[ipu3-imgu]:         points to: /dev/media11896008] [15695]  INFO MediaDevice 
[3:30:08.362042073] [15695]  INFO MediaDevice media_device.cpp:806 /dev/media1[ipu3-imgu]: Source: ipu3-imgu 0 (1)devnode: /dev/v4l-subdev4
[3:30:08.362146878] [15695]  INFO MediaDevice media_device.cpp:809 /dev/media1[ipu3-imgu]: Sink: ipu3-imgu 0 viewfinder (25)devnode: /dev/video7
[3:30:08.362177526] [15695]  INFO MediaDevice media_device.cpp:812 /dev/media1[ipu3-imgu]:     Existing link flags: 0
[3:30:08.362227043] [15695]  INFO MediaDevice media_device.cpp:815 /dev/media1[ipu3-imgu]:     Requested link flags: 1
[3:30:08.362264799] [15695]  INFO MediaDevice media_device.cpp:818 /dev/media1[ipu3-imgu]:     File descriptor: 6
[3:30:08.362353125] [15695]  INFO MediaDevice media_device.cpp:840 /dev/media1[ipu3-imgu]:         points to: /dev/media12264799] [15695]  INFO MediaDevice 
[3:30:08.362400190] [15695] ERROR MediaDevice media_device.cpp:857 /dev/media1[ipu3-imgu]:     Link established.
[3:30:08.362464674] [15695]  INFO MediaDevice media_device.cpp:806 /dev/media1[ipu3-imgu]: Source: ipu3-imgu 0 (1)devnode: /dev/v4l-subdev4
[3:30:08.362515959] [15695]  INFO MediaDevice media_device.cpp:809 /dev/media1[ipu3-imgu]: Sink: ipu3-imgu 0 3a stat (31)devnode: /dev/video8
[3:30:08.362554941] [15695]  INFO MediaDevice media_device.cpp:812 /dev/media1[ipu3-imgu]:     Existing link flags: 0
[3:30:08.362596076] [15695]  INFO MediaDevice media_device.cpp:815 /dev/media1[ipu3-imgu]:     Requested link flags: 1
[3:30:08.362635785] [15695]  INFO MediaDevice media_device.cpp:818 /dev/media1[ipu3-imgu]:     File descriptor: 6
[3:30:08.362716704] [15695]  INFO MediaDevice media_device.cpp:840 /dev/media1[ipu3-imgu]:         points to: /dev/media12635785] [15695]  INFO MediaDevice 
[3:30:08.362762532] [15695] ERROR MediaDevice media_device.cpp:857 /dev/media1[ipu3-imgu]:     Link established.
Capture until user interrupts by SIGINT
[3:30:08.472019356] [15695] ERROR V4L2 v4l2_videodevice.cpp:1441 /dev/video1[cap]: Failed to queue buffer 0: Broken pipe
[3:30:08.516397665] [15695] ERROR V4L2 v4l2_videodevice.cpp:1441 /dev/video1[cap]: Failed to queue buffer 1: Broken pipe
[3:30:08.557717224] [15695] ERROR V4L2 v4l2_videodevice.cpp:1441 /dev/video1[cap]: Failed to queue buffer 2: Broken pipe
[3:30:08.562433084] [15695] ERROR V4L2 v4l2_videodevice.cpp:1441 /dev/video1[cap]: Failed to queue buffer 3: Broken pipe
kitakar5525 commented 4 years ago

Now this issue is resolved by your patch https://github.com/linux-surface/linux-surface/issues/91#issuecomment-679124112. Thanks! Closing this issue.

djrscally commented 4 years ago

My pleasure! But note that after review by the libcamera guys, the patch did actually get changed to this:

The setupLink function fails (ioctl returns EINVAL) when it passes the
MEDIA_LNK_FL_ENABLE flag to a link that is already flagged with
MEDIA_LNK_FL_ENABLE and MEDIA_LNK_FL_IMMUTABLE. Contrast to media-ctl's
equivalent media_setup_link() which ORs the new flags with the existing
values. This patch modifies the behaviour of setupLink() to behave the
same as media_setup_link() in media-ctl.

Signed-off-by: Dan Scally <djrscally@gmail.com>
---

Changelog:

        v3 - Moved the change to MediaLink::setEnabled()

        v2 - Simplified by removing the call to link() to fetch a link that's
                already passed as a parameter to the function.

 src/libcamera/media_object.cpp | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/libcamera/media_object.cpp b/src/libcamera/media_object.cpp
index ce77a72..a2e6a0d 100644
--- a/src/libcamera/media_object.cpp
+++ b/src/libcamera/media_object.cpp
@@ -115,7 +115,8 @@ LOG_DECLARE_CATEGORY(MediaDevice)
  */
 int MediaLink::setEnabled(bool enable)
 {
-       unsigned int flags = enable ? MEDIA_LNK_FL_ENABLED : 0;
+       unsigned int flags = (flags_ & ~MEDIA_LNK_FL_ENABLED)
+                                    | (enable ? MEDIA_LNK_FL_ENABLED : 0);

        int ret = dev_->setupLink(this, flags);
        if (ret)
-- 
2.25.1

It's just moving the flags setting to the function that calls the setupLink() that we originally changed, because without that there's a chance it gets undone later.

kitakar5525 commented 4 years ago

Thanks!