<?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>i.MX Processors中的主题 Re: g2d_blit() returns empty image, no errors, on iMX.6 yocto</title>
    <link>https://community.nxp.com/t5/i-MX-Processors/g2d-blit-returns-empty-image-no-errors-on-iMX-6-yocto/m-p/329457#M44365</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Resolved:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Using a Continuously allocated buffer was the correct way to do it, however I was passing to the function a virtual pointer created for the application, whereas it required a physical pointer.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I cannot post the full code here, however in order to allocate physical memory in the IPU, you need to:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Do this Twice to obtain a virtualAddr and physAddr for Source and Destination&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; int* virtualAddr;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; int bufferSize = width*height*bytesperpixel;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; int physAddr = bufferSize;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; int ipuHandle = open("/dev/mxc_ipu", O_RDWR, 0);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; ioctl(ipuHandle, IPU_ALLOC, physAddr); //the ioctl function for some reason requires the size of the buffer that it changes to the physical address in memory.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; virtualAddr = (int*)mmap(0, bufferSize, PROT_READ | PROT_WRITE,&amp;nbsp; MAP_SHARED, ipuHandle, physAddr);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Then&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; void* handle;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g2d_open(&amp;amp;handle);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; src.planes[0] = physAddrSource;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; src.left = 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; src.top = 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; src.right = width;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; src.bottom = height;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; src.stride = width*2;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; src.width = width;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; src.height = height;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; src.rot = G2D_ROTATION_0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; src.format = G2D_RGBA8888;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; dst.planes[0] = physAddrDest;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; dst.left = 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; dst.top = 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; dst.right = width;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; dst.bottom = height;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; dst.stride = width;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; dst.width = width;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; dst.height = height;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; dst.rot = G2D_ROTATION_0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; dst.format = G2D_RGBA8888;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; error =g2d_blit(handle, &amp;amp;src, &amp;amp;dst);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; error =g2d_finish(handle);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; error =g2d_close(handle);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ExportBmp(virtualAddrDest, width, height);&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 08 Jan 2015 20:12:47 GMT</pubDate>
    <dc:creator>dmitryponv</dc:creator>
    <dc:date>2015-01-08T20:12:47Z</dc:date>
    <item>
      <title>g2d_blit() returns empty image, no errors, on iMX.6 yocto</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/g2d-blit-returns-empty-image-no-errors-on-iMX-6-yocto/m-p/329456#M44364</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Good afternoon,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I'm following the examples in i.MX_6_G2D_API_User's Guide&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;My issue is that g2d_blit conversion works, but the returned image is all 0's&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;All error values for g2d functions are 0, indicating there was no errors&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;My code is shown below:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;If I replace&lt;/P&gt;&lt;P&gt;ExportBmp((uint8_t*)(dst.planes[0]), width, height);&lt;/P&gt;&lt;P&gt;with&lt;/P&gt;&lt;P&gt;ExportBmp((uint8_t*)(src.planes[0]), width, height);&lt;/P&gt;&lt;P&gt;I get the &lt;STRONG&gt;correct&lt;/STRONG&gt; image saved,&lt;/P&gt;&lt;P&gt;If I keep it the way it is, I get an image that is all&lt;STRONG&gt; black&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;My width = 240, height = 180&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;This API has very little documentation, and it does not mention whether it needs continuous physical memory address, or an array that may be fragmented in memory&lt;/P&gt;&lt;P&gt;I have tried both approaches, and both approaches returned a blank image.&lt;/P&gt;&lt;P&gt;The continuous memory addresses (for the source and destination images) I was able to allocate with ioctl in the IPU&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Is there something wrong with the G2D API?&lt;/P&gt;&lt;P&gt;What could be causing this?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; void* handle;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g2d_open(&amp;amp;handle);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; src.planes[0] = (int)source;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; src.left = 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; src.top = 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; src.right = width;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; src.bottom = height;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; src.stride = width*2;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; src.width = width;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; src.height = height;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; src.rot = G2D_ROTATION_0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; src.format = G2D_RGBA8888;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; dst.planes[0] = (int)dest;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; dst.left = 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; dst.top = 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; dst.right = width;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; dst.bottom = height;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; dst.stride = width;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; dst.width = width;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; dst.height = height;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; dst.rot = G2D_ROTATION_0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; dst.format = G2D_RGBA8888;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; error =g2d_blit(handle, &amp;amp;src, &amp;amp;dst);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; error =g2d_finish(handle);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; error =g2d_close(handle);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ExportBmp((uint8_t*)(dst.planes[0]), width, height);&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 08 Jan 2015 19:33:45 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/g2d-blit-returns-empty-image-no-errors-on-iMX-6-yocto/m-p/329456#M44364</guid>
      <dc:creator>dmitryponv</dc:creator>
      <dc:date>2015-01-08T19:33:45Z</dc:date>
    </item>
    <item>
      <title>Re: g2d_blit() returns empty image, no errors, on iMX.6 yocto</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/g2d-blit-returns-empty-image-no-errors-on-iMX-6-yocto/m-p/329457#M44365</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Resolved:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Using a Continuously allocated buffer was the correct way to do it, however I was passing to the function a virtual pointer created for the application, whereas it required a physical pointer.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I cannot post the full code here, however in order to allocate physical memory in the IPU, you need to:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Do this Twice to obtain a virtualAddr and physAddr for Source and Destination&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; int* virtualAddr;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; int bufferSize = width*height*bytesperpixel;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; int physAddr = bufferSize;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; int ipuHandle = open("/dev/mxc_ipu", O_RDWR, 0);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; ioctl(ipuHandle, IPU_ALLOC, physAddr); //the ioctl function for some reason requires the size of the buffer that it changes to the physical address in memory.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; virtualAddr = (int*)mmap(0, bufferSize, PROT_READ | PROT_WRITE,&amp;nbsp; MAP_SHARED, ipuHandle, physAddr);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Then&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; void* handle;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; g2d_open(&amp;amp;handle);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; src.planes[0] = physAddrSource;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; src.left = 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; src.top = 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; src.right = width;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; src.bottom = height;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; src.stride = width*2;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; src.width = width;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; src.height = height;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; src.rot = G2D_ROTATION_0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; src.format = G2D_RGBA8888;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; dst.planes[0] = physAddrDest;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; dst.left = 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; dst.top = 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; dst.right = width;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; dst.bottom = height;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; dst.stride = width;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; dst.width = width;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; dst.height = height;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; dst.rot = G2D_ROTATION_0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; dst.format = G2D_RGBA8888;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; error =g2d_blit(handle, &amp;amp;src, &amp;amp;dst);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; error =g2d_finish(handle);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; error =g2d_close(handle);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ExportBmp(virtualAddrDest, width, height);&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 08 Jan 2015 20:12:47 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/g2d-blit-returns-empty-image-no-errors-on-iMX-6-yocto/m-p/329457#M44365</guid>
      <dc:creator>dmitryponv</dc:creator>
      <dc:date>2015-01-08T20:12:47Z</dc:date>
    </item>
  </channel>
</rss>

