<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic IPU: set input/output buffer in i.MX Processors</title>
    <link>https://community.nxp.com/t5/i-MX-Processors/IPU-set-input-output-buffer/m-p/264413#M27226</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello!&lt;/P&gt;&lt;P&gt;I try use imx-lib, not GStreamer, for capture and encode video. Because my matrix have output data in YUV422 format I have to use IPU for prepare data for codec, convert YUV422 to YUV420.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Capture code:&lt;/P&gt;&lt;P&gt;typedef struct {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; __u32 offset;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; __u32 length;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; void *data;&lt;/P&gt;&lt;P&gt;} cap_buffer;&lt;/P&gt;&lt;P&gt;cap_buffer video_buffer[BUFFER_NUM];&lt;/P&gt;&lt;P&gt;for (i = 0; i &amp;lt; BUFFER_NUM; i++) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; memset(&amp;amp;buf, 0, sizeof(buf));&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; buf.index = i;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (ioctl(fd, VIDIOC_QUERYBUF, &amp;amp;buf)) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; daemon_error("Failed VIDIOC_QUERYBUF, errno %d (%s)",&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; errno, strerror(errno));&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return -1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; video_buffer[i].length = buf.length;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; video_buffer[i].offset = buf.m.offset;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; video_buffer[i].data = mmap(NULL, buf.length,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PROT_READ | PROT_WRITE, MAP_PRIVATE, fd,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (off_t)buf.m.offset);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (NULL == video_buffer[i].data) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; daemon_error("Mmap failed, errno %d (%s)", errno, strerror(errno));&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return -1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;for (i = 0; i &amp;lt; BUFFER_NUM; i++) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; memset(&amp;amp;buf, 0, sizeof(buf));&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; buf.memory = V4L2_MEMORY_MMAP;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; buf.index = i;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; buf.m.offset = video_buffer[i].offset;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (ioctl(fd, VIDIOC_QBUF, &amp;amp;buf)) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; daemon_error("Failed VIDIOC_QBUF, errno %d (%s)",&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; errno, strerror(errno));&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return -1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;IPU configuration:&lt;/P&gt;&lt;P&gt;ipu_lib_input_param_t input;&lt;/P&gt;&lt;P&gt;ipu_lib_output_param_t output;&lt;/P&gt;&lt;P&gt;input.width = width;&lt;/P&gt;&lt;P&gt;input.height = height;&lt;/P&gt;&lt;P&gt;input.fmt = IPU_PIX_FMT_YUYV;&lt;/P&gt;&lt;P&gt;output.width = width;&lt;/P&gt;&lt;P&gt;output.height = height;&lt;/P&gt;&lt;P&gt;output.fmt = IPU_PIX_FMT_YVU420P;&lt;/P&gt;&lt;P&gt;mxc_ipu_lib_task_init(&amp;amp;input, NULL, &amp;amp;output, OP_NORMAL_MODE, ipu_handle);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;And use it:&lt;/P&gt;&lt;P&gt;unsigned char out_ipu[1280 * 720 * 3 / 2] = {0};&lt;/P&gt;&lt;P&gt;while (1) {&lt;/P&gt;&lt;P&gt;struct v4l2_buffer v4l2_buf;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;v4l2_get(&amp;amp;v4l2_buf);&lt;/P&gt;&lt;P&gt;cap_buffer *data = v4l2_data(v4l2_buf.index); //get pointer on v4l2 data&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ipu_handle.inbuf_start[0] = data-&amp;gt;data;&lt;/P&gt;&lt;P&gt;ipu_handle.outbuf_start[0] = out_ipu;&lt;/P&gt;&lt;P&gt;mxc_ipu_lib_task_buf_update(&amp;amp;ipu_handle, 0, 0, 0, NULL, NULL);&lt;/P&gt;&lt;P&gt;............&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;All work without error, but unfortunally output buffer unchanged, I write it to file.&lt;/P&gt;&lt;P&gt;I try use memcpy for fill ipu_handle.inbuf_start[0] and ipu_handle.outbuf_start[0], but this not solve problem.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;How should I configure inbuf_start and outbuf_start?&lt;/P&gt;&lt;P&gt;Thank you and excuse my bad english.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Update:&lt;/P&gt;&lt;P&gt;Problem solved, I set V4L2 buffer offset as input buffer user_def_paddr[0]&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 07 Nov 2013 13:42:34 GMT</pubDate>
    <dc:creator>BrilliantovKiri</dc:creator>
    <dc:date>2013-11-07T13:42:34Z</dc:date>
    <item>
      <title>IPU: set input/output buffer</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/IPU-set-input-output-buffer/m-p/264413#M27226</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello!&lt;/P&gt;&lt;P&gt;I try use imx-lib, not GStreamer, for capture and encode video. Because my matrix have output data in YUV422 format I have to use IPU for prepare data for codec, convert YUV422 to YUV420.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Capture code:&lt;/P&gt;&lt;P&gt;typedef struct {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; __u32 offset;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; __u32 length;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; void *data;&lt;/P&gt;&lt;P&gt;} cap_buffer;&lt;/P&gt;&lt;P&gt;cap_buffer video_buffer[BUFFER_NUM];&lt;/P&gt;&lt;P&gt;for (i = 0; i &amp;lt; BUFFER_NUM; i++) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; memset(&amp;amp;buf, 0, sizeof(buf));&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; buf.index = i;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (ioctl(fd, VIDIOC_QUERYBUF, &amp;amp;buf)) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; daemon_error("Failed VIDIOC_QUERYBUF, errno %d (%s)",&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; errno, strerror(errno));&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return -1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; video_buffer[i].length = buf.length;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; video_buffer[i].offset = buf.m.offset;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; video_buffer[i].data = mmap(NULL, buf.length,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PROT_READ | PROT_WRITE, MAP_PRIVATE, fd,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (off_t)buf.m.offset);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (NULL == video_buffer[i].data) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; daemon_error("Mmap failed, errno %d (%s)", errno, strerror(errno));&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return -1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;for (i = 0; i &amp;lt; BUFFER_NUM; i++) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; memset(&amp;amp;buf, 0, sizeof(buf));&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; buf.memory = V4L2_MEMORY_MMAP;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; buf.index = i;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; buf.m.offset = video_buffer[i].offset;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (ioctl(fd, VIDIOC_QBUF, &amp;amp;buf)) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; daemon_error("Failed VIDIOC_QBUF, errno %d (%s)",&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; errno, strerror(errno));&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return -1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;IPU configuration:&lt;/P&gt;&lt;P&gt;ipu_lib_input_param_t input;&lt;/P&gt;&lt;P&gt;ipu_lib_output_param_t output;&lt;/P&gt;&lt;P&gt;input.width = width;&lt;/P&gt;&lt;P&gt;input.height = height;&lt;/P&gt;&lt;P&gt;input.fmt = IPU_PIX_FMT_YUYV;&lt;/P&gt;&lt;P&gt;output.width = width;&lt;/P&gt;&lt;P&gt;output.height = height;&lt;/P&gt;&lt;P&gt;output.fmt = IPU_PIX_FMT_YVU420P;&lt;/P&gt;&lt;P&gt;mxc_ipu_lib_task_init(&amp;amp;input, NULL, &amp;amp;output, OP_NORMAL_MODE, ipu_handle);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;And use it:&lt;/P&gt;&lt;P&gt;unsigned char out_ipu[1280 * 720 * 3 / 2] = {0};&lt;/P&gt;&lt;P&gt;while (1) {&lt;/P&gt;&lt;P&gt;struct v4l2_buffer v4l2_buf;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;v4l2_get(&amp;amp;v4l2_buf);&lt;/P&gt;&lt;P&gt;cap_buffer *data = v4l2_data(v4l2_buf.index); //get pointer on v4l2 data&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ipu_handle.inbuf_start[0] = data-&amp;gt;data;&lt;/P&gt;&lt;P&gt;ipu_handle.outbuf_start[0] = out_ipu;&lt;/P&gt;&lt;P&gt;mxc_ipu_lib_task_buf_update(&amp;amp;ipu_handle, 0, 0, 0, NULL, NULL);&lt;/P&gt;&lt;P&gt;............&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;All work without error, but unfortunally output buffer unchanged, I write it to file.&lt;/P&gt;&lt;P&gt;I try use memcpy for fill ipu_handle.inbuf_start[0] and ipu_handle.outbuf_start[0], but this not solve problem.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;How should I configure inbuf_start and outbuf_start?&lt;/P&gt;&lt;P&gt;Thank you and excuse my bad english.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Update:&lt;/P&gt;&lt;P&gt;Problem solved, I set V4L2 buffer offset as input buffer user_def_paddr[0]&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 07 Nov 2013 13:42:34 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/IPU-set-input-output-buffer/m-p/264413#M27226</guid>
      <dc:creator>BrilliantovKiri</dc:creator>
      <dc:date>2013-11-07T13:42:34Z</dc:date>
    </item>
  </channel>
</rss>

