<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=windows-1252">
</head>
<body>
Correct, doing so would require custom GStreamer modifications and
this should all really be your own specific element.<br>
<br>
Cheers<br>
-Matt<br>
<br>
<div class="moz-cite-prefix">On 18/8/21 7:37 pm, Gaurav Vohra wrote:<br>
</div>
<blockquote type="cite"
cite="mid:CO6PR04MB754097EFF8605087C48688A1E5FF9@CO6PR04MB7540.namprd04.prod.outlook.com">
<meta http-equiv="Content-Type" content="text/html;
charset=windows-1252">
<meta name="Generator" content="Microsoft Word 15 (filtered
medium)">
<style>@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;}p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0in;
font-size:11.0pt;
font-family:"Calibri",sans-serif;}a:link, span.MsoHyperlink
{mso-style-priority:99;
color:#0563C1;
text-decoration:underline;}p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
{mso-style-priority:34;
margin-top:0in;
margin-right:0in;
margin-bottom:0in;
margin-left:.5in;
font-size:11.0pt;
font-family:"Calibri",sans-serif;}span.EmailStyle20
{mso-style-type:personal-reply;
font-family:"Calibri",sans-serif;
color:windowtext;}.MsoChpDefault
{mso-style-type:export-only;
font-size:10.0pt;}div.WordSection1
{page:WordSection1;}ol
{margin-bottom:0in;}ul
{margin-bottom:0in;}</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]-->
<div class="WordSection1">
<p class="MsoNormal">Thanks for reply.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Is it not possible to do custom memory
allocation in videoconvert as it can take care of pt.1 for my
requirement.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<ol style="margin-top:0in" type="1" start="1">
<li class="MsoListParagraph"
style="margin-left:0in;mso-list:l2 level1 lfo3">format
conversion from YUY2 to NV12<o:p></o:p></li>
<li class="MsoListParagraph"
style="margin-left:0in;mso-list:l2 level1 lfo3">frame
buffers from video/x-raw(system memory) to
video/x-raw(memory:GBM)(gpu backed memory)<o:p></o:p></li>
</ol>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">And for pt2 after conversion modify
out_frame to use gpu allocated memory ?<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">static GstFlowReturn<o:p></o:p></p>
<p class="MsoNormal">gst_video_convert_transform_frame
(GstVideoFilter * filter,<o:p></o:p></p>
<p class="MsoNormal"> GstVideoFrame * in_frame, GstVideoFrame
* out_frame)<o:p></o:p></p>
<p class="MsoNormal">{<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">The current issue is basically related to
caps negotiation failing, as soon as I am modifying
src_template to use memory:GBM instead of ANY negotiation is
failing.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">+#define CSP_VIDEO_CAPS_SRC
GST_VIDEO_CAPS_MAKE (GST_VIDEO_FORMATS_ALL) ";" \<o:p></o:p></p>
<p class="MsoNormal">+ GST_VIDEO_CAPS_MAKE_WITH_FEATURES
("memory:GBM", GST_VIDEO_FORMATS_ALL)<o:p></o:p></p>
<p class="MsoNormal">+<o:p></o:p></p>
<p class="MsoNormal">+//#define CSP_VIDEO_CAPS_SRC
GST_VIDEO_CAPS_MAKE_WITH_FEATURES ("memory:GBM",
GST_VIDEO_FORMATS_ALL)<o:p></o:p></p>
<p class="MsoNormal">static GstStaticPadTemplate
gst_video_convert_src_template =<o:p></o:p></p>
<p class="MsoNormal">GST_STATIC_PAD_TEMPLATE ("src",<o:p></o:p></p>
<p class="MsoNormal"> GST_PAD_SRC,<o:p></o:p></p>
<p class="MsoNormal"> GST_PAD_ALWAYS,<o:p></o:p></p>
<p class="MsoNormal">- GST_STATIC_CAPS (CSP_VIDEO_CAPS)<o:p></o:p></p>
<p class="MsoNormal">+ GST_STATIC_CAPS (CSP_VIDEO_CAPS_SRC)<o:p></o:p></p>
<p class="MsoNormal"> );<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal" style="vertical-align:baseline">ERROR: from
element /GstPipeline:pipeline0/GstV4l2Src:v4l2src0: Internal
data stream error.<o:p></o:p></p>
<p class="MsoNormal" style="vertical-align:baseline">Additional
debug info:<o:p></o:p></p>
<p class="MsoNormal" style="vertical-align:baseline">../../../../gstreamer-1.14.4/libs/gst/base/gstbasesrc.c(3055):
gst_base_src_loop ():
/GstPipeline:pipeline0/GstV4l2Src:v4l2src0:<o:p></o:p></p>
<p class="MsoNormal" style="vertical-align:baseline">streaming
stopped, reason not-negotiated (-4)<o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal">Further debugging from logs suggest
intersect of capsfilter input and the caps filter is coming as
EMPTY
<o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal">0:00:06.974521920 4320 0x10cde60
DEBUG capsfilter
gstcapsfilter.c:296:gst_capsfilter_transform_caps:<capsfilter0>
input: video/x-raw(memory:GBM), format=(string)NV12,
width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ],
framerate=(fraction)[ 0/1, 2147483647/1 ];
video/x-raw(memory:GBM), width=(int)[ 1, 32767 ],
height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1,
2147483647/1 ], format=(string){ I420, YV12, YUY2, UYVY, AYUV,
RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB, BGR,
Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21, GRAY8,
GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15, BGR15, UYVP,
A420, RGB8P, YUV9, YVU9, IYU1, ARGB64, AYUV64, r210,
I420_10BE, I420_10LE, I422_10BE, I422_10LE, Y444_10BE,
Y444_10LE, GBR, GBR_10BE, GBR_10LE, NV16, NV24, NV12_64Z32,
A420_10BE, A420_10LE, A422_10BE, A422_10LE, A444_10BE,
A444_10LE, NV61, P010_10BE, P010_10LE, IYU2, VYUY, GBRA,
GBRA_10BE, GBRA_10LE, GBR_12BE, GBR_12LE, GBRA_12BE,
GBRA_12LE, I420_12BE, I420_12LE, I422_12BE, I422_12LE,
Y444_12BE, Y444_12LE, GRAY10_LE32, NV12_10LE32, NV16_10LE32 }<o:p></o:p></p>
<p class="MsoNormal">0:00:06.974569108 4320 0x10cde60
DEBUG capsfilter
gstcapsfilter.c:297:gst_capsfilter_transform_caps:<capsfilter0>
filter: (NULL)<o:p></o:p></p>
<p class="MsoNormal">0:00:06.974616661 4320 0x10cde60
DEBUG capsfilter
gstcapsfilter.c:299:gst_capsfilter_transform_caps:<capsfilter0>
caps filter: video/x-raw, width=(int)1280, height=(int)720,
framerate=(fraction)15/2, format=(string)YUY2<o:p></o:p></p>
<p class="MsoNormal">0:00:06.974651037 4320 0x10cde60
DEBUG capsfilter
gstcapsfilter.c:300:gst_capsfilter_transform_caps:<capsfilter0>
intersect: EMPTY<o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal">Regards<o:p></o:p></p>
<p class="MsoNormal">Gaurav<o:p></o:p></p>
<div>
<div style="border:none;border-top:solid #E1E1E1
1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b>From:</b> Matthew Waters
<a class="moz-txt-link-rfc2396E" href="mailto:ystreet00@gmail.com"><ystreet00@gmail.com></a> <br>
<b>Sent:</b> Wednesday, August 18, 2021 2:04 PM<br>
<b>To:</b> Discussion of the development of and with
GStreamer <a class="moz-txt-link-rfc2396E" href="mailto:gstreamer-devel@lists.freedesktop.org"><gstreamer-devel@lists.freedesktop.org></a><br>
<b>Cc:</b> Gaurav Vohra
<a class="moz-txt-link-rfc2396E" href="mailto:Gaurav.Vohra@einfochips.com"><Gaurav.Vohra@einfochips.com></a>; Thornton, Keith
<a class="moz-txt-link-rfc2396E" href="mailto:keith.thornton@zeiss.com"><keith.thornton@zeiss.com></a><br>
<b>Subject:</b> Re: [External] AW: gstreamer videoconvert
support gpu memory buffer<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal" style="margin-bottom:12.0pt">You should
create your own element if you have custom memory
requirements.<br>
<br>
Cheers<br>
-Matt<o:p></o:p></p>
<div>
<p class="MsoNormal">On 18/8/21 6:17 pm, Gaurav Vohra via
gstreamer-devel wrote:<o:p></o:p></p>
</div>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<p class="MsoNormal">Hi,<o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal">As I can see glcolorconvert expect sink
and src as video/x-raw(memory:GLMemory), which is not same
in my case as input for me is x-raw and o/p is
x-raw(memory:GBM)<o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal">In my case I am trying to access usb
camera using /dev/video3 so input to videoconvert/or any
other plugin would be
<o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal">video/x-raw, width=(int)1280,
height=(int)720, framerate=(fraction)15/2,
format=(string)YUY2<o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal">and the aim is to convert using
customized videoconvert/other element.
<o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal">video/x-raw(memory:GBM), width=(int)1280,
height=(int)720, framerate=(fraction)15/2,
format=(string)NV12<o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal">the videoconvert customized is aimed to
perform<o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<ol style="margin-top:0in" type="1" start="1">
<li class="MsoListParagraph"
style="margin-left:0in;mso-list:l0 level1 lfo4">format
conversion from YUY2 to NV12<o:p></o:p></li>
<li class="MsoListParagraph"
style="margin-left:0in;mso-list:l0 level1 lfo4">frame
buffers from video/x-raw(system memory) to
video/x-raw(memory:GBM)(gpu backed memory)<o:p></o:p></li>
</ol>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal">Here GBM buffers are gpu backed memory
which I am setting up in transform_frame of videoconvert.<o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal">Above necessity is as qtimletflite
requires sink input as NV12 format and
video/x-raw(memory:GBM)<o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal">Playback Pipeline is as follows. Below
videoconvert is customized version<o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal">gst-launch-1.0 -v v4l2src
device=/dev/video3 num-buffers=1 !
video/x-raw,width=1280,height=720,framerate=15/2,format=YUY2
! videoconvert ! qtimletflite
config=/data/misc/camera/mle_tflite.config
model=/data/misc/camera/detect.tflite
labels=/data/misc/camera/labelmap.txt
postprocessing=detection ! waylandsink<o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal">Regards<o:p></o:p></p>
<p class="MsoNormal">Gaurav<o:p></o:p></p>
<div>
<div style="border:none;border-top:solid #E1E1E1
1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b>From:</b> gstreamer-devel <a
href="mailto:gstreamer-devel-bounces@lists.freedesktop.org"
moz-do-not-send="true">
<gstreamer-devel-bounces@lists.freedesktop.org></a>
<b>On Behalf Of </b>Thornton, Keith via gstreamer-devel<br>
<b>Sent:</b> Wednesday, August 18, 2021 1:14 PM<br>
<b>To:</b> Discussion of the development of and with
GStreamer <a
href="mailto:gstreamer-devel@lists.freedesktop.org"
moz-do-not-send="true">
<gstreamer-devel@lists.freedesktop.org></a><br>
<b>Cc:</b> Thornton, Keith <a
href="mailto:keith.thornton@zeiss.com"
moz-do-not-send="true"><keith.thornton@zeiss.com></a><br>
<b>Subject:</b> [External] AW: gstreamer videoconvert
support gpu memory buffer<o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal"><span lang="DE"> </span><o:p></o:p></p>
<div style="border:solid #9C6500 1.0pt;padding:2.0pt 2.0pt
2.0pt 2.0pt">
<p class="MsoNormal"
style="line-height:12.0pt;background:#FFEB9C"><b><span
style="font-size:10.0pt;color:#9C6500" lang="DE">CAUTION:</span></b><span
style="font-size:10.0pt;color:black" lang="DE"> This
email originated from outside of the organization. This
message might not be safe, use caution in opening it. If
in doubt, do not open the attachment nor links in the
message.</span><o:p></o:p></p>
</div>
<p class="MsoNormal"><span lang="DE"> </span><o:p></o:p></p>
<div>
<p class="MsoNormal"><span
style="font-size:10.0pt;font-family:"Arial",sans-serif"
lang="DE">Hi,</span><o:p></o:p></p>
<p class="MsoNormal"><span
style="font-size:10.0pt;font-family:"Arial",sans-serif">does
glcolorconvert not do what you need?</span><o:p></o:p></p>
<p class="MsoNormal"><span
style="font-size:10.0pt;font-family:"Arial",sans-serif">Gruesse</span><o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<div>
<div style="border:none;border-top:solid #E1E1E1
1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span lang="DE">Von:</span></b><span
lang="DE"> gstreamer-devel <<a
href="mailto:gstreamer-devel-bounces@lists.freedesktop.org"
moz-do-not-send="true">gstreamer-devel-bounces@lists.freedesktop.org</a>>
<b>Im Auftrag von </b>Gaurav Vohra via
gstreamer-devel<br>
<b>Gesendet:</b> Mittwoch, 18. August 2021 08:18<br>
<b>An:</b> <a
href="mailto:gstreamer-devel@lists.freedesktop.org"
moz-do-not-send="true">gstreamer-devel@lists.freedesktop.org</a><br>
<b>Cc:</b> Gaurav Vohra <<a
href="mailto:Gaurav.Vohra@einfochips.com"
moz-do-not-send="true">Gaurav.Vohra@einfochips.com</a>><br>
<b>Betreff:</b> gstreamer videoconvert support gpu
memory buffer</span><o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"><span lang="DE"> </span><o:p></o:p></p>
<p class="MsoNormal">Hello,<o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal">I am working to customize gstreamer
plugin to support <o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-bottom-alt:auto;background:white;vertical-align:baseline"><span
style="color:black">working to modify gstreamer plugin -
videoconvert get obtain output data allocated as gpu
memory allocated buffers.</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-bottom-alt:auto;background:white;vertical-align:baseline"><span
style="color:black">As part of first step have modified
the plugin to update the src template to include the gpu
memory caps.</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-bottom-alt:auto;background:white;vertical-align:baseline"><span
style="color:black">Allocation for gpu memory is done is
transform_frame, but before that being called stream
error and negotition is failing</span><o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-bottom-alt:auto;background:white;vertical-align:baseline"><span
style="color:black">Commented part</span><o:p></o:p></p>
<p class="MsoNormal" style="vertical-align:baseline">//
#define CSP_VIDEO_CAPS GST_VIDEO_CAPS_MAKE
(GST_VIDEO_FORMATS_ALL) ";" \<o:p></o:p></p>
<p class="MsoNormal" style="vertical-align:baseline">GST_VIDEO_CAPS_MAKE_WITH_FEATURES
("ANY", GST_VIDEO_FORMATS_ALL)<o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-bottom-alt:auto;background:white;vertical-align:baseline"><span
style="color:black">Modified part</span><o:p></o:p></p>
<p class="MsoNormal" style="vertical-align:baseline">#define
CSP_VIDEO_CAPS_SRC GST_VIDEO_CAPS_MAKE
(GST_VIDEO_FORMATS_ALL) ";" \<o:p></o:p></p>
<p class="MsoNormal" style="vertical-align:baseline">GST_VIDEO_CAPS_MAKE_WITH_FEATURES
("memory:GBM", GST_VIDEO_FORMATS_ALL)<o:p></o:p></p>
<p class="MsoNormal" style="vertical-align:baseline"> <o:p></o:p></p>
<p class="MsoNormal" style="vertical-align:baseline">//#define
CSP_VIDEO_CAPS_SRC GST_VIDEO_CAPS_MAKE_WITH_FEATURES
("memory:GBM", GST_VIDEO_FORMATS_ALL)<o:p></o:p></p>
<p class="MsoNormal" style="vertical-align:baseline">static
GstStaticPadTemplate gst_video_convert_src_template =<o:p></o:p></p>
<p class="MsoNormal" style="vertical-align:baseline">GST_STATIC_PAD_TEMPLATE
("src",<o:p></o:p></p>
<p class="MsoNormal" style="vertical-align:baseline">
GST_PAD_SRC,<o:p></o:p></p>
<p class="MsoNormal" style="vertical-align:baseline">
GST_PAD_ALWAYS,<o:p></o:p></p>
<p class="MsoNormal" style="vertical-align:baseline">
GST_STATIC_CAPS (CSP_VIDEO_CAPS_SRC)<o:p></o:p></p>
<p class="MsoNormal" style="vertical-align:baseline"> );<o:p></o:p></p>
<p class="MsoNormal"
style="mso-margin-bottom-alt:auto;background:white;vertical-align:baseline"><span
style="color:black">While trying to run the playback
pipeline getting errors related to negotitation and
stream error like below</span><o:p></o:p></p>
<p class="MsoNormal" style="vertical-align:baseline">ERROR:
from element /GstPipeline:pipeline0/GstV4l2Src:v4l2src0:
Internal data stream error.<o:p></o:p></p>
<p class="MsoNormal" style="vertical-align:baseline">Additional
debug info:<o:p></o:p></p>
<p class="MsoNormal" style="vertical-align:baseline">../../../../gstreamer-1.14.4/libs/gst/base/gstbasesrc.c(3055):
gst_base_src_loop ():
/GstPipeline:pipeline0/GstV4l2Src:v4l2src0:<o:p></o:p></p>
<p class="MsoNormal" style="vertical-align:baseline">streaming
stopped, reason not-negotiated (-4)<o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal">Further debugging from logs suggest
intersect of capsfilter input and the caps filter is
coming as EMPTY
<o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal">0:00:06.974521920 4320 0x10cde60
DEBUG capsfilter
gstcapsfilter.c:296:gst_capsfilter_transform_caps:<capsfilter0>
input: video/x-raw(memory:GBM), format=(string)NV12,
width=(int)[ 1, 32767 ], height=(int)[ 1, 32767 ],
framerate=(fraction)[ 0/1, 2147483647/1 ];
video/x-raw(memory:GBM), width=(int)[ 1, 32767 ],
height=(int)[ 1, 32767 ], framerate=(fraction)[ 0/1,
2147483647/1 ], format=(string){ I420, YV12, YUY2, UYVY,
AYUV, RGBx, BGRx, xRGB, xBGR, RGBA, BGRA, ARGB, ABGR, RGB,
BGR, Y41B, Y42B, YVYU, Y444, v210, v216, NV12, NV21,
GRAY8, GRAY16_BE, GRAY16_LE, v308, RGB16, BGR16, RGB15,
BGR15, UYVP, A420, RGB8P, YUV9, YVU9, IYU1, ARGB64,
AYUV64, r210, I420_10BE, I420_10LE, I422_10BE, I422_10LE,
Y444_10BE, Y444_10LE, GBR, GBR_10BE, GBR_10LE, NV16, NV24,
NV12_64Z32, A420_10BE, A420_10LE, A422_10BE, A422_10LE,
A444_10BE, A444_10LE, NV61, P010_10BE, P010_10LE, IYU2,
VYUY, GBRA, GBRA_10BE, GBRA_10LE, GBR_12BE, GBR_12LE,
GBRA_12BE, GBRA_12LE, I420_12BE, I420_12LE, I422_12BE,
I422_12LE, Y444_12BE, Y444_12LE, GRAY10_LE32, NV12_10LE32,
NV16_10LE32 }<o:p></o:p></p>
<p class="MsoNormal">0:00:06.974569108 4320 0x10cde60
DEBUG capsfilter
gstcapsfilter.c:297:gst_capsfilter_transform_caps:<capsfilter0>
filter: (NULL)<o:p></o:p></p>
<p class="MsoNormal">0:00:06.974616661 4320 0x10cde60
DEBUG capsfilter
gstcapsfilter.c:299:gst_capsfilter_transform_caps:<capsfilter0>
caps filter: video/x-raw, width=(int)1280,
height=(int)720, framerate=(fraction)15/2,
format=(string)YUY2<o:p></o:p></p>
<p class="MsoNormal">0:00:06.974651037 4320 0x10cde60
DEBUG capsfilter
gstcapsfilter.c:300:gst_capsfilter_transform_caps:<capsfilter0>
intersect: EMPTY<o:p></o:p></p>
<p class="MsoNormal"> <o:p></o:p></p>
<p class="MsoNormal">Regards<o:p></o:p></p>
<p class="MsoNormal">Gaurav<o:p></o:p></p>
</div>
</blockquote>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</blockquote>
<br>
</body>
</html>