Project Home
Project Home
Documents
Documents
Wiki
Wiki
Discussion Forums
Discussions
Project Information
Project Info
Forum Topic - Using libcapture on an i.MX6 Sabrelite: (2 Items)
   
Using libcapture on an i.MX6 Sabrelite  
Hello
I am trying to use libcapture-board-imx6x-no-decoder.so on a custom i.MX6 board in QNX 6.6 to capture MIPI video input. 
The custom board has a MIPI encoder which is being setup to emit a test signal into the i.MX6 capture port. 
Unfortunately the library is reporting some DMA timeouts. 

As a starting point, I have tried to do use libcapture on a Sabrelite board, using the sample code from the QNX 6.6 "
Video Capture Developer's Guide and API Reference".

The call to:

capture_create_buffers( context, CAPTURE_PROPERTY_FRAME_BUFFERS );

crashes with a segmentation fault within the library. I am therefore attempting to use "Application allocated" buffers, 
as the developers guide puts it, using the following calls:


void *frame_buffers[1];

Set CAPTURE_PROPERTY_DST_NBYTES, CAPTURE_PROPERTY_DST_WIDTH, CAPTURE_PROPERTY_DST_HEIGHT, CAPTURE_PROPERTY_DST_STRIDE 
properties....

capture_set_property_i( context, CAPTURE_PROPERTY_FRAME_NBUFFERS, NUMBER_OF_BUFFERS );

frame_buffers[0] = malloc(525 * 480 * 3);
capture_set_property_p( context, CAPTURE_PROPERTY_FRAME_BUFFERS, (void*)frame_buffers );

Is that right?

When I run this altered sample code, to capture a single frame, I get the following output from the i.mx6 implementation
 of the capture library:

capture:ctx->dead=0, ctx->enable=1, ctx->dma_rst_count=0, errno: Connection timed out
capture:ctx->dead=0, ctx->enable=1, ctx->dma_rst_count=0, errno: Connection timed out
capture:imx6x_capture_wait_for_dma_complete timed out, count=0, capture_buf=80500a0, dei_buffer_cnt=0
capture:hw_stop_transfer
capture:ctx->dead=0, ctx->enable=1, ctx->dma_rst_count=1, errno: Connection timed out
capture:imx6x_capture_wait_for_dma_complete timed out, count=1, capture_buf=80500a0, dei_buffer_cnt=0
capture:hw_stop_transfer
capture:ctx->dead=0, ctx->enable=1, ctx->dma_rst_count=2, errno: Connection timed out
capture:imx6x_capture_wait_for_dma_complete timed out, count=2, capture_buf=80500a0, dei_buffer_cnt=0
capture:hw_stop_transfer
capture:ctx->dead=0, ctx->enable=1, ctx->dma_rst_count=3, errno: Connection timed out
capture:imx6x_capture_wait_for_dma_complete timed out, count=3, capture_buf=80500a0, dei_buffer_cnt=0
capture:hw_stop_transfer
capture:ctx->dead=0, ctx->enable=1, ctx->dma_rst_count=4, errno: Connection timed out
capture:imx6x_capture_wait_for_dma_complete timed out, count=4, capture_buf=80500a0, dei_buffer_cnt=0
capture:hw_stop_transfer
capture:IPU/CCM dump, reason='timeout':
capture:CCM base:                    0x 20c4000
capture:IOMUX base:                  0x 20e0000
capture:IPU base:                    0x 2a00000
capture:CPMEM_WRITE_1(chan 1) base: 0x  100040
capture:CPMEM_WRITE_2(chan 1) base: 0x  100060
capture:
dumping IPU registers....
capture:IPU_CONF(0):             0x00000660
capture:IPU_GPR(0xe4):              0x00000000
capture:IPU_CH_DB_MODE_SEL_0(0x150): 0x00000000
capture:IPU_CH_TRB_MODE_SEL_0(0x178):0x00000000
capture:IPU_CH_BUF0_RDY0(0x268):     0x00000000
capture:IPU_INT_CTRL_1(0x3c):       0x08800002
capture:IPU_INT_CTRL_3(0x44):       0x00000002
capture:IPU_INT_CTRL_5(0x4c):       0x00000002
capture:IPU_INT_CTRL_7(0x54):       0x00000000
capture:IPU_INT_CTRL_9(0x5c):       0x80000000
capture:IPU_INT_CTRL_10(0x60):      0x00080002
capture:IPU_INT_CTRL_11(0x64):      0x00000000
capture:IPU_INT_CTRL_13(0x6c):      0x00000000
capture:IPU_INT_CTRL_15(0x74):      0x00000000
capture:IPU_INT_STAT_1(0x200):       0x00000000
capture:IPU_INT_STAT_3(0x208):       0x00800000
capture:IPU_INT_STAT_5(0x210):       0x00000000
capture:IPU_INT_STAT_7(0x218):       0x00800000
capture:IPU_INT_STAT_9(0x220):       0x00000000
capture:IPU_INT_STAT_10(0x224):      0x00000000
capture:IPU_INT_STAT_11(0x228):      0x00000000
capture:IPU_INT_STAT_13(0x230):      0x00800000
capture:IPU_INT_STAT_15(0x238):      0x00ff400c
capture:IPU_SRM_STAT(0x24c):        ...
View Full Message
Re: Using libcapture on an i.MX6 Sabrelite  
Hi,

You can't use malloc(). You can use screen_create_window_buffers().
I guess one can also use screen_create_buffer() but I didn't try.

Nicolas