<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">

<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=us-ascii">
<meta name=Generator content="Microsoft Word 12 (filtered medium)">
<style>
<!--
 /* Font Definitions */
 @font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page Section1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.Section1
        {page:Section1;}
-->
</style>
<!--[if gte mso 9]><xml>
 <o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
 <o:shapelayout v:ext="edit">
  <o:idmap v:ext="edit" data="1" />
 </o:shapelayout></xml><![endif]-->
</head>

<body lang=EN-US link=blue vlink=purple>

<div class=Section1>

<p class=MsoNormal><span style='color:#00B0F0'>Hello All,<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#00B0F0'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Is it possible to
pass decoder output buffer directly to color conversion routine. The snap shot
of render function is as followed.<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='color:#948A54'>static GstFlowReturn<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#948A54'>render (GstBaseSink * bsink,
GstBuffer * buf)<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#948A54'>{<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#948A54'>&nbsp;&nbsp;&nbsp; int i, w, h;<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#948A54'>&nbsp;&nbsp;&nbsp; GstOmapFbSink *omapfbsink = GST_OMAPFB_SINK(bsink);<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#948A54'>&nbsp;&nbsp;&nbsp; __uint8_t *fb =
omapfbsink-&gt;framebuffer, *data = GST_BUFFER_DATA(buf);<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#948A54'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; long iTime=0;<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#948A54'>&nbsp;&nbsp; struct timeval tempo1,
tempo2;<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#948A54'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='color:#948A54'>&nbsp;&nbsp;&nbsp;
if(omapfbsink-&gt;plane_info.enabled == 2)<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#948A54'>&nbsp;&nbsp;&nbsp; {<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#948A54'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
omapfbsink-&gt;plane_info.enabled = 1;<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#948A54'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='color:#948A54'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g_mutex_lock
(omapfbsink-&gt;x_lock);<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#948A54'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
gst_omapfbsink_update_plane(omapfbsink);<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#948A54'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g_mutex_unlock
(omapfbsink-&gt;x_lock);<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#948A54'>&nbsp;&nbsp;&nbsp; }<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#948A54'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='color:#948A54'>&nbsp;&nbsp;&nbsp; g_print(&quot;\n Address in
render function = %x\n&quot;, (unsigned int)GST_BUFFER_DATA(buf));<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#948A54'>&nbsp;&nbsp;&nbsp; /* If a buffer which wasn't
supplied by us is given to us to render with,<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#948A54'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; we need to copy to our
buffer first so that memory alignment constraints<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#948A54'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; are met. */<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#948A54'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='color:#948A54'>&nbsp;&nbsp;&nbsp; if(data !=
omapfbsink-&gt;buffer &amp;&amp; GST_BUFFER_SIZE(buf) &lt;=
omapfbsink-&gt;buffer_size)<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#948A54'>&nbsp;&nbsp;&nbsp; {<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#948A54'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span
style='color:#002060'>memcpy(omapfbsink-&gt;buffer, data,
GST_BUFFER_SIZE(buf));<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#948A54'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; data =
omapfbsink-&gt;buffer;<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#948A54'>&nbsp;&nbsp;&nbsp; }<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#948A54'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='color:#948A54'>&nbsp;&nbsp;&nbsp; /* buffer_alloc gave a
direct buffer, so we have nothing to<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#948A54'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; do here... */<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#948A54'>&nbsp;&nbsp;&nbsp; if(omapfbsink-&gt;row_skip)<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#948A54'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return GST_FLOW_OK;<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#948A54'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='color:#948A54'>&nbsp;&nbsp;&nbsp;
switch(omapfbsink-&gt;image_format) {<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#948A54'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case
GST_MAKE_FOURCC('I', '4', '2', '0'):<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#948A54'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* Convert to YUV422
and send to FB */<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#948A54'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='color:#948A54'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;h =
GST_VIDEO_SINK_HEIGHT (omapfbsink);<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#948A54'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; w =
GST_VIDEO_SINK_WIDTH (omapfbsink);<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#948A54'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='color:#948A54'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; __uint8_t *y, *u,
*v;<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#948A54'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; y = data;<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#948A54'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; u = y + w * h;<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#948A54'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; v = u + w / 2 * h /
2;<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#948A54'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='color:#948A54'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; yuv420_to_yuv422(fb,
y, u, v, w &amp; ~15, h, w, w / 2, omapfbsink-&gt;fixinfo.line_length);<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#948A54'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#948A54'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='color:#948A54'>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;case
GST_MAKE_FOURCC('U', 'Y', 'V', 'Y'):<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#948A54'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* Send to FB,
taking into account line_length */<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#948A54'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='color:#948A54'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; w = 2 *
GST_VIDEO_SINK_WIDTH (omapfbsink);<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#948A54'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(i = 0; i &lt;
GST_VIDEO_SINK_HEIGHT (omapfbsink); i++)<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#948A54'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#948A54'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memcpy(fb, data,
w);<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#948A54'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='color:#948A54'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fb +=
omapfbsink-&gt;fixinfo.line_length;<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#948A54'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; data += w;<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#948A54'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#948A54'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='color:#948A54'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#948A54'>&nbsp;&nbsp;&nbsp; }<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#948A54'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='color:#948A54'>&nbsp;&nbsp;&nbsp; return GST_FLOW_OK;<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#948A54'>}<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#1F497D'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span
style='color:#00B0F0'>Here buf which is passed is my decoder output buffer having
size = (width * height *1.5). I would like to replace memcpy seprated by </span><span
style='color:#002060'>blue</span><span style='color:#00B0F0'> color in above
function. Is there any possibility to assign buf pointer directly to Y pointer
which later go to color conversion. <o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#00B0F0'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='color:#00B0F0'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; I am laking of
some understanding of buffer_alloc of base sink. If any where I am wrong please
correct me and try to guide me in right direction. In other way I was thinking
to use dma transfer, but I am completely new for dma and will take much time to
understand and write transfer function. If I can get some other solution, will
be helpful in my project.<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#00B0F0'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='color:#00B0F0'>-Tejas.<o:p></o:p></span></p>

<p class=MsoNormal><span style='color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<div>

<div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in'>

<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span
style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'> Tejas
[mailto:tejas@picus.in] <br>
<b>Sent:</b> Friday, March 26, 2010 3:33 PM<br>
<b>To:</b> 'gstreamer-embedded@lists.sourceforge.net'<br>
<b>Subject:</b> Need Help On gst-omapfb built from openembedded<o:p></o:p></span></p>

</div>

</div>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>Hello All,<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
I am using gst-omapfb plugin built from openembedded which contains X-overlay
patch on normal omapfb plugin as my video sink. My normal pipeline is as
followed.<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>$gst-launch-0.10 filesrc location=1.mp4 ! myparser ! mydecoder
! omapfbsink.<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>Src pad of my decoder is set as following caps .<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>(&quot;video/x-raw-yuv&quot;,<o:p></o:p></p>

<p class=MsoNormal>&nbsp;&quot;width&quot;, G_TYPE_INT,
mpeg4dec-&gt;info.width,<o:p></o:p></p>

<p class=MsoNormal>&quot;height&quot;, G_TYPE_INT, mpeg4dec-&gt;info.height,<o:p></o:p></p>

<p class=MsoNormal>&quot;framerate&quot;, GST_TYPE_FRACTION,
mpeg4dec-&gt;fps_nu, mpeg4dec-&gt;fps_de,<o:p></o:p></p>

<p class=MsoNormal>&quot;format&quot;, GST_TYPE_FOURCC, GST_MAKE_FOURCC ('I',
'4', '2', '0'),<o:p></o:p></p>

<p class=MsoNormal>&quot;pixel-aspect-ratio&quot;, GST_TYPE_FRACTION,1,1,i
NULL);<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Omapfbsink will accept I420 format and convert it to UYVY format&nbsp; and copy
it to frame buffer. In these all process it is using memcpy which copy data
from buffer pushed from my decoder to buffer allocated locally. Here in
omapfbsink memcpy is time consuming. Instead of using memcpy I would like to
use some other method. But I am getting how can I replace memcpy. <o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
If anyone can guide me to replace memcpy, I will be pleasure for me.<o:p></o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<p class=MsoNormal>-Tejas.<o:p></o:p></p>

</div>

</body>

</html>