Hi,
We are using SONY sensor which gives data in RAW12 format and each frame starts with 512 bytes of embedded data. This mipi data obtained from sensor is converted to parallel data using mipi to parallel converter bridge, which is again converted to mipi data by another bridge. We have given the data type ID for the output mipi data coming from parallel to mipi bridge as RAW12 (0x2C - as in MIPI CSI2 spec. document). So, the packet header of all the data including embedded data comes with ID of 0x2C (RAW12 ID) instead of 0x12 (Embedded metadata ID). We don’t have complete control over the parallel to mipi toshiba bridge to differentaite between the embedded metadata and image data. So, we were unable to give embedded metadata its datatype ID.
When using TX1 L4T-28.2, we were able to grab the frame using v4l2-ctl even if the kernel throws MW_ACK_DONE exception. The grabbed frame has 512 bytes of embedded data in the first line and the remaining length is appended with zeros. From the next line,we could get normal image data and were also able to stream using libargus application.
This is the exception thrown when trying to capture using v4l2-ctl in tx1.
[ 387.970236] video4linux video0: MW_ACK_DONE syncpoint time out!0
[ 388.102199] video4linux video0: MW_ACK_DONE syncpoint time out!0
[ 388.238037] video4linux video0: MW_ACK_DONE syncpoint time out!0
[ 388.238038] video4linux video0: frame start syncpt timeout!0
[ 388.370188] video4linux video0: MW_ACK_DONE syncpoint time out!0
[ 388.506017] video4linux video0: MW_ACK_DONE syncpoint time out!0
[ 388.638075] video4linux video0: frame start syncpt timeout!0
[ 388.638087] video4linux video0: MW_ACK_DONE syncpoint time out!0
[ 388.738069] video4linux video0: MW_ACK_DONE syncpoint time out!0
[ 388.869940] video4linux video0: MW_ACK_DONE syncpoint time out!0
[ 389.002049] video4linux video0: MW_ACK_DONE syncpoint time out!0
[ 389.138109] video4linux video0: MW_ACK_DONE syncpoint time out!0
[ 389.144260] video4linux video0: frame start syncpt timeout!0
[ 389.237881] video4linux video0: MW_ACK_DONE syncpoint time out!0
[ 389.371302] video4linux video0: MW_ACK_DONE syncpoint time out!0
[ 389.502009] video4linux video0: MW_ACK_DONE syncpoint time out!0
[ 389.638202] video4linux video0: MW_ACK_DONE syncpoint time out!0
[ 389.770054] video4linux video0: MW_ACK_DONE syncpoint time out!0
[ 389.902046] video4linux video0: MW_ACK_DONE syncpoint time out!0
[ 390.042460] video4linux video0: MW_ACK_DONE syncpoint time out!0
[ 390.170044] video4linux video0: MW_ACK_DONE syncpoint time out!0
[ 390.302440] video4linux video0: MW_ACK_DONE syncpoint time out!0
[ 390.438224] video4linux video0: MW_ACK_DONE syncpoint time out!0
[ 390.570048] video4linux video0: MW_ACK_DONE syncpoint time out!0
[ 390.702128] video4linux video0: MW_ACK_DONE syncpoint time out!0
[ 390.838028] video4linux video0: MW_ACK_DONE syncpoint time out!0
[ 390.970013] video4linux video0: frame start syncpt timeout!0
But, when doing the same in TX2 L4T-28.2.1, we were unable to grab the frame and the kernel throws PXL_SOF syncpt error and occasionally ATOM_FE syncpt error.
[ 128.194394] tegra-vi4 15700000.vi: PXL_SOF syncpt timeout! err = -11
[ 128.200801] tegra-vi4 15700000.vi: tegra_channel_error_recovery: attempting to reset the capture channel
[ 129.326403] tegra-vi4 15700000.vi: PXL_SOF syncpt timeout! err = -11
[ 129.332761] tegra-vi4 15700000.vi: tegra_channel_error_recovery: attempting to reset the capture channel
[ 129.398453] nvcsi 150c0000.nvcsi: csi4_stream_check_status (0) INTR_STATUS 0x00000008
[ 129.406788] nvcsi 150c0000.nvcsi: csi4_stream_check_status (0) ERR_INTR_STATUS 0x00000008
[ 129.414976] nvcsi 150c0000.nvcsi: csi4_cil_check_status (0) CIL_INTR_STATUS 0x00000044
[ 129.423317] nvcsi 150c0000.nvcsi: csi4_cil_check_status (0) CIL_ERR_INTR_STATUS 0x00000044
[ 130.494409] tegra-vi4 15700000.vi: PXL_SOF syncpt timeout! err = -11
[ 130.500776] tegra-vi4 15700000.vi: tegra_channel_error_recovery: attempting to reset the capture channel
[ 130.566461] nvcsi 150c0000.nvcsi: csi4_stream_check_status (0) INTR_STATUS 0x00000004
[ 130.574450] nvcsi 150c0000.nvcsi: csi4_stream_check_status (0) ERR_INTR_STATUS 0x00000004
[ 130.582645] nvcsi 150c0000.nvcsi: csi4_cil_check_status (0) CIL_INTR_STATUS 0x00000044
[ 130.590622] nvcsi 150c0000.nvcsi: csi4_cil_check_status (0) CIL_ERR_INTR_STATUS 0x00000044
[ 131.658412] tegra-vi4 15700000.vi: PXL_SOF syncpt timeout! err = -11
[ 131.664781] tegra-vi4 15700000.vi: tegra_channel_error_recovery: attempting to reset the capture channel
[ 131.730476] nvcsi 150c0000.nvcsi: csi4_stream_check_status (0) INTR_STATUS 0x00000004
[ 131.738334] nvcsi 150c0000.nvcsi: csi4_stream_check_status (0) ERR_INTR_STATUS 0x00000004
[ 131.747136] nvcsi 150c0000.nvcsi: csi4_cil_check_status (0) CIL_INTR_STATUS 0x00000044
[ 131.755402] nvcsi 150c0000.nvcsi: csi4_cil_check_status (0) CIL_ERR_INTR_STATUS 0x00000044
[ 132.826416] tegra-vi4 15700000.vi: PXL_SOF syncpt timeout! err = -11
[ 132.832858] tegra-vi4 15700000.vi: tegra_channel_error_recovery: attempting to reset the capture channel
[ 132.898439] nvcsi 150c0000.nvcsi: csi4_stream_check_status (0) INTR_STATUS 0x00000004
[ 132.906312] nvcsi 150c0000.nvcsi: csi4_stream_check_status (0) ERR_INTR_STATUS 0x00000004
[ 132.915066] nvcsi 150c0000.nvcsi: csi4_cil_check_status (0) CIL_INTR_STATUS 0x00000044
[ 132.923536] nvcsi 150c0000.nvcsi: csi4_cil_check_status (0) CIL_ERR_INTR_STATUS 0x00000044
[ 133.986416] tegra-vi4 15700000.vi: ATOMP_FE syncpt timeout!
As far as our understanding goes, when the line length received in the frame data is less than the specified one
- TX1 throws a warning message and appends zeros to the remaining length of the line and gives the data to the upper layer.
- TX2 throws exception and discards the frame data in the vi layer itself.
Is there any way to append zeroes to the first line as in TX1 or to discard only the first line of the frame which has line length less than the prescribed one?
NOTE: Embedded data coming from the sensor cannot be disabled.