<?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 camera v or h flip with gpu(g2d) in i.MX Processors</title>
    <link>https://community.nxp.com/t5/i-MX-Processors/camera-v-or-h-flip-with-gpu-g2d/m-p/604881#M91143</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Dear all,&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; I want to flip camera stream with g2d api when preview,but it does not work. where is wrong with my test code?&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; I add g2d_blit test code in function processFrame in preivewStream.cpp, blow is my test code:&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;int PreviewStream::processFrame(CameraFrame *frame)&lt;BR /&gt;{&lt;BR /&gt; status_t ret = NO_ERROR;&lt;BR /&gt;&lt;STRONG&gt;#if 1&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; struct g2d_buf s_buf, d_buf;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; struct g2d_surface src,dst;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; int width,height;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; int size;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; int g2d_ret = 0;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;#endif&lt;/STRONG&gt;&lt;BR /&gt; if (mShowFps) {&lt;BR /&gt; showFps();&lt;BR /&gt; }&lt;BR /&gt; ret = renderBuffer(frame);&lt;BR /&gt; if (ret != NO_ERROR) {&lt;BR /&gt; FLOGE("%s renderBuffer failed", __FUNCTION__);&lt;BR /&gt; goto err_exit;&lt;BR /&gt; }&lt;BR /&gt; //the frame held in service.&lt;BR /&gt; frame-&amp;gt;addReference();&lt;/P&gt;&lt;P&gt;StreamBuffer buffer;&lt;BR /&gt; ret = requestBuffer(&amp;amp;buffer);&lt;/P&gt;&lt;P&gt;if (ret != NO_ERROR) {&lt;BR /&gt; FLOGE("%s requestBuffer failed", __FUNCTION__);&lt;BR /&gt; goto err_exit;&lt;BR /&gt; }&lt;BR /&gt;&lt;STRONG&gt;#if 1&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; FLOG_TRACE("%s nwidth=%d, nheight:%d format:%d", __FUNCTION__, buffer.mWidth, buffer.mHeight,buffer.mFormat);&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; width = 720;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; height = 576;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; size = (frame-&amp;gt;mSize &amp;gt; buffer.mSize) ? buffer.mSize : frame-&amp;gt;mSize;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; FLOG_TRACE("mSize=%d, size=%d", buffer.mSize,size);&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; FLOG_TRACE("f mPhyAddr=0x%08x, b mPhyAddr=0x%08x", frame-&amp;gt;mPhyAddr, buffer.mPhyAddr);&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; FLOG_TRACE("f mPhyAddr=0x%08x, b mVirtAddr=0x%08x", frame-&amp;gt;mVirtAddr, buffer.mVirtAddr);&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; s_buf.buf_paddr = frame-&amp;gt;mPhyAddr;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; s_buf.buf_vaddr = frame-&amp;gt;mVirtAddr;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; d_buf.buf_paddr = buffer.mPhyAddr;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; d_buf.buf_vaddr = buffer.mVirtAddr;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; g2d_ret = g2d_copy(g2dHandle, &amp;amp;d_buf, &amp;amp;s_buf, size);&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; if(g2d_ret){&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; FLOG_TRACE("g2d_copy fail!");&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; }&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; src.planes[0] = s_buf.buf_paddr;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; //src.planes[1] = s_buf.buf_paddr+width+height;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; //src.planes[2] = s_buf.buf_paddr+width+height*2;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; src.left = 0;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; src.top = 0;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; src.right = width;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; src.bottom = height;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; src.stride = width;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; src.width = width;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; src.height = height;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; src.format = G2D_RGBA8888;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; src.rot = G2D_ROTATION_0;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;dst.planes[0] = d_buf.buf_paddr;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; dst.left = 0;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; dst.top = 0;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; dst.right = width;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; dst.bottom = height;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; dst.stride = width;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; dst.width = width;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; dst.height = height;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; dst.format = G2D_RGBA8888;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; dst.rot = G2D_FLIP_H;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; g2d_ret = g2d_blit(g2dHandle, &amp;amp;src, &amp;amp;dst);&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; if(g2d_ret){&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; FLOG_TRACE("g2d_blit fail!");&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; }&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; g2d_finish(g2dHandle);&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;#endif&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;for (int i = 0; i &amp;lt; mTotalBuffers; i++) {&lt;BR /&gt; if (mCameraBuffer[i].mBufHandle == buffer.mBufHandle) {&lt;BR /&gt; //release frame from service.&lt;BR /&gt; mCameraBuffer[i].release();&lt;BR /&gt; break;&lt;BR /&gt; }&lt;BR /&gt; }&lt;/P&gt;&lt;P&gt;err_exit:&lt;BR /&gt; sem_post(&amp;amp;mRespondSem);&lt;/P&gt;&lt;P&gt;return ret;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;Thanks!&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Mon, 06 Feb 2017 09:52:04 GMT</pubDate>
    <dc:creator>echozeng</dc:creator>
    <dc:date>2017-02-06T09:52:04Z</dc:date>
    <item>
      <title>camera v or h flip with gpu(g2d)</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/camera-v-or-h-flip-with-gpu-g2d/m-p/604881#M91143</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Dear all,&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; I want to flip camera stream with g2d api when preview,but it does not work. where is wrong with my test code?&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; I add g2d_blit test code in function processFrame in preivewStream.cpp, blow is my test code:&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;int PreviewStream::processFrame(CameraFrame *frame)&lt;BR /&gt;{&lt;BR /&gt; status_t ret = NO_ERROR;&lt;BR /&gt;&lt;STRONG&gt;#if 1&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; struct g2d_buf s_buf, d_buf;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; struct g2d_surface src,dst;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; int width,height;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; int size;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; int g2d_ret = 0;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;#endif&lt;/STRONG&gt;&lt;BR /&gt; if (mShowFps) {&lt;BR /&gt; showFps();&lt;BR /&gt; }&lt;BR /&gt; ret = renderBuffer(frame);&lt;BR /&gt; if (ret != NO_ERROR) {&lt;BR /&gt; FLOGE("%s renderBuffer failed", __FUNCTION__);&lt;BR /&gt; goto err_exit;&lt;BR /&gt; }&lt;BR /&gt; //the frame held in service.&lt;BR /&gt; frame-&amp;gt;addReference();&lt;/P&gt;&lt;P&gt;StreamBuffer buffer;&lt;BR /&gt; ret = requestBuffer(&amp;amp;buffer);&lt;/P&gt;&lt;P&gt;if (ret != NO_ERROR) {&lt;BR /&gt; FLOGE("%s requestBuffer failed", __FUNCTION__);&lt;BR /&gt; goto err_exit;&lt;BR /&gt; }&lt;BR /&gt;&lt;STRONG&gt;#if 1&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; FLOG_TRACE("%s nwidth=%d, nheight:%d format:%d", __FUNCTION__, buffer.mWidth, buffer.mHeight,buffer.mFormat);&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; width = 720;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; height = 576;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; size = (frame-&amp;gt;mSize &amp;gt; buffer.mSize) ? buffer.mSize : frame-&amp;gt;mSize;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; FLOG_TRACE("mSize=%d, size=%d", buffer.mSize,size);&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; FLOG_TRACE("f mPhyAddr=0x%08x, b mPhyAddr=0x%08x", frame-&amp;gt;mPhyAddr, buffer.mPhyAddr);&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; FLOG_TRACE("f mPhyAddr=0x%08x, b mVirtAddr=0x%08x", frame-&amp;gt;mVirtAddr, buffer.mVirtAddr);&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; s_buf.buf_paddr = frame-&amp;gt;mPhyAddr;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; s_buf.buf_vaddr = frame-&amp;gt;mVirtAddr;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; d_buf.buf_paddr = buffer.mPhyAddr;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; d_buf.buf_vaddr = buffer.mVirtAddr;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; g2d_ret = g2d_copy(g2dHandle, &amp;amp;d_buf, &amp;amp;s_buf, size);&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; if(g2d_ret){&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; FLOG_TRACE("g2d_copy fail!");&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; }&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; src.planes[0] = s_buf.buf_paddr;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; //src.planes[1] = s_buf.buf_paddr+width+height;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; //src.planes[2] = s_buf.buf_paddr+width+height*2;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; src.left = 0;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; src.top = 0;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; src.right = width;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; src.bottom = height;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; src.stride = width;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; src.width = width;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; src.height = height;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; src.format = G2D_RGBA8888;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; src.rot = G2D_ROTATION_0;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;dst.planes[0] = d_buf.buf_paddr;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; dst.left = 0;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; dst.top = 0;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; dst.right = width;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; dst.bottom = height;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; dst.stride = width;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; dst.width = width;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; dst.height = height;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; dst.format = G2D_RGBA8888;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; dst.rot = G2D_FLIP_H;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; g2d_ret = g2d_blit(g2dHandle, &amp;amp;src, &amp;amp;dst);&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; if(g2d_ret){&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; FLOG_TRACE("g2d_blit fail!");&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; }&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; g2d_finish(g2dHandle);&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;#endif&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;for (int i = 0; i &amp;lt; mTotalBuffers; i++) {&lt;BR /&gt; if (mCameraBuffer[i].mBufHandle == buffer.mBufHandle) {&lt;BR /&gt; //release frame from service.&lt;BR /&gt; mCameraBuffer[i].release();&lt;BR /&gt; break;&lt;BR /&gt; }&lt;BR /&gt; }&lt;/P&gt;&lt;P&gt;err_exit:&lt;BR /&gt; sem_post(&amp;amp;mRespondSem);&lt;/P&gt;&lt;P&gt;return ret;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;Thanks!&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 06 Feb 2017 09:52:04 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/camera-v-or-h-flip-with-gpu-g2d/m-p/604881#M91143</guid>
      <dc:creator>echozeng</dc:creator>
      <dc:date>2017-02-06T09:52:04Z</dc:date>
    </item>
    <item>
      <title>Re: camera v or h flip with gpu(g2d)</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/camera-v-or-h-flip-with-gpu-g2d/m-p/604882#M91144</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello zeng,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; It is not better way to realize camera v flip h by using GPU! Camera module has the function, you can configure&amp;nbsp; corresponding register in camera driver or load API function provided by camera driver on application level to realize your solution.&lt;/P&gt;&lt;P&gt;Best Regards,&lt;/P&gt;&lt;P&gt;Weidong&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 07 Feb 2017 09:15:14 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/camera-v-or-h-flip-with-gpu-g2d/m-p/604882#M91144</guid>
      <dc:creator>weidong_sun</dc:creator>
      <dc:date>2017-02-07T09:15:14Z</dc:date>
    </item>
    <item>
      <title>Re: camera v or h flip with gpu(g2d)</title>
      <link>https://community.nxp.com/t5/i-MX-Processors/camera-v-or-h-flip-with-gpu-g2d/m-p/604883#M91145</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;My camera sensor does not support flip feature according to &amp;nbsp;sensor provider reply.&lt;/P&gt;&lt;P&gt;Now the h flip test code work ,but does not work well.&amp;nbsp;&lt;/P&gt;&lt;P&gt;The camera frame format is yuv422(259=0x103), How to select dst and src&amp;nbsp;format&amp;nbsp;from blow list?&amp;nbsp;&lt;/P&gt;&lt;P&gt;enum g2d_format&lt;BR /&gt;{&lt;BR /&gt;//rgb formats&lt;BR /&gt; G2D_RGB565 = 0,&lt;BR /&gt; G2D_RGBA8888 = 1,&lt;BR /&gt; G2D_RGBX8888 = 2,&lt;BR /&gt; G2D_BGRA8888 = 3,&lt;BR /&gt; G2D_BGRX8888 = 4,&lt;/P&gt;&lt;P&gt;//yuv formats&lt;BR /&gt; G2D_NV12 = 20,&lt;BR /&gt; G2D_I420 = 21,&lt;BR /&gt; G2D_YV12 = 22,&lt;BR /&gt; G2D_NV21 = 23,&lt;BR /&gt; G2D_YUYV = 24,&lt;BR /&gt; G2D_YVYU = 25,&lt;BR /&gt; G2D_UYVY = 26,&lt;BR /&gt; G2D_VYUY = 27,&lt;BR /&gt; G2D_NV16 = 28,&lt;BR /&gt; G2D_NV61 = 29,&lt;BR /&gt;};&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;blow is &amp;nbsp;my test code:&lt;/P&gt;&lt;P&gt;int PreviewStream::processFrame(CameraFrame *frame)&lt;BR /&gt;{&lt;BR /&gt; status_t ret = NO_ERROR;&lt;BR /&gt;&lt;STRONG&gt;#if 1&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; struct g2d_buf s_buf, *d_buf;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; struct g2d_surface src,dst;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; int width,height;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; int size;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; int g2d_ret = 0;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; static int count = 0;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; enum g2d_format g2d_format = G2D_NV12;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;#endif&lt;/STRONG&gt;&lt;BR /&gt; if (mShowFps) {&lt;BR /&gt; showFps();&lt;BR /&gt; }&lt;BR /&gt;&lt;STRONG&gt;#if 1&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; //FLOG_TRACE("%s nwidth=%d, nheight:%d format:%d", __FUNCTION__, frame-&amp;gt;mWidth, frame-&amp;gt;mHeight,frame-&amp;gt;mFormat);&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; width = 720;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; height = 576;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; size = frame-&amp;gt;mSize;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; //FLOG_TRACE("mSize=%d, size=%d", frame-&amp;gt;mSize,size);&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; //FLOG_TRACE("mPhyAddr=0x%08x, mVirtAddr=0x%08x", frame-&amp;gt;mPhyAddr, frame-&amp;gt;mVirtAddr);&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; s_buf.buf_paddr = frame-&amp;gt;mPhyAddr;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; s_buf.buf_vaddr = frame-&amp;gt;mVirtAddr;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; d_buf = g2d_alloc(size, 0);&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; g2d_ret = g2d_copy(g2dHandle, d_buf, &amp;amp;s_buf, size);&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; if(g2d_ret){&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; FLOG_TRACE("g2d_copy fail!");&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; }&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; src.planes[0] = d_buf-&amp;gt;buf_paddr;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; src.left = 0;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; src.top = 0;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; src.right = width;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; src.bottom = height;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; src.stride = width;//+30;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; src.width = width;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; src.height = height;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; //src.format = G2D_RGBA8888;&amp;nbsp;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; //src.format = G2D_YUYV;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; src.format = g2d_format;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; src.rot = G2D_ROTATION_0;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;dst.planes[0] = s_buf.buf_paddr;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; dst.left = 0;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; dst.top = 0;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; dst.right = width;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; dst.bottom = height;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; dst.stride = width;//+30;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; dst.width = width;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; dst.height = height;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; //dst.format = G2D_RGBA8888;//ok&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; //dst.format = G2D_RGBA8888;//ok&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; //dst.format = G2D_YUYV;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; dst.format = g2d_format;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; dst.rot = G2D_FLIP_H;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; g2d_ret = g2d_blit(g2dHandle, &amp;amp;src, &amp;amp;dst);&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; if(g2d_ret){&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; FLOG_TRACE("zengzh g2d_blit fail!");&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; }&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; g2d_finish(g2dHandle);&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; if(d_buf)&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; g2d_free(d_buf);&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt; count++;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;#endif&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;ret = renderBuffer(frame);&lt;BR /&gt; if (ret != NO_ERROR) {&lt;BR /&gt; FLOGE("%s renderBuffer failed", __FUNCTION__);&lt;BR /&gt; goto err_exit;&lt;BR /&gt; }&lt;BR /&gt; //the frame held in service.&lt;BR /&gt; frame-&amp;gt;addReference();&lt;/P&gt;&lt;P&gt;StreamBuffer buffer;&lt;BR /&gt; ret = requestBuffer(&amp;amp;buffer);&lt;/P&gt;&lt;P&gt;if (ret != NO_ERROR) {&lt;BR /&gt; FLOGE("%s requestBuffer failed", __FUNCTION__);&lt;BR /&gt; goto err_exit;&lt;BR /&gt; }&lt;BR /&gt; for (int i = 0; i &amp;lt; mTotalBuffers; i++) {&lt;BR /&gt; if (mCameraBuffer[i].mBufHandle == buffer.mBufHandle) {&lt;BR /&gt; //release frame from service.&lt;BR /&gt; mCameraBuffer[i].release();&lt;BR /&gt; break;&lt;BR /&gt; }&lt;BR /&gt; }&lt;/P&gt;&lt;P&gt;err_exit:&lt;BR /&gt; sem_post(&amp;amp;mRespondSem);&lt;/P&gt;&lt;P&gt;return ret;&lt;BR /&gt;}&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 07 Feb 2017 10:39:30 GMT</pubDate>
      <guid>https://community.nxp.com/t5/i-MX-Processors/camera-v-or-h-flip-with-gpu-g2d/m-p/604883#M91145</guid>
      <dc:creator>echozeng</dc:creator>
      <dc:date>2017-02-07T10:39:30Z</dc:date>
    </item>
  </channel>
</rss>

