<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 14 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:Cambria;
        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;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";
        mso-fareast-language:EN-US;}
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-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri","sans-serif";
        mso-fareast-language:EN-US;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
--></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-GB" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">Hi All.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">I’m new to this list and GStreamer and would like some advice please.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">I’ve been reading the GStreamer guide from http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/index.html and have written a couple of basic applications
 which have worked OK.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">What I’d like to do is update my application, which currently reads a file and plays it, to give me access to a UYVY frame for each frame of the video.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">See below for code snippets I’m using, which is mostly based on the playsink example given in chapter 20 of the guide, http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/section-components-playsink.html.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">I’ve come across the video converter element which is able to output UYVY formatted video however I’m unsure how to link this in to my pipeline as it’s using a dynamic
 sink. The documentation for the videoconverter is here: http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-plugins/html/gst-plugins-base-plugins-videoconvert.html<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">I’ve read this a number of times but am unsure how to link the extra element in and how to set the sink pad to be a UYVY format.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">Once I’ve converted the video how do I get access to the frames? Is there a sink I can use to send the frames in to the application space or do I need to get access
 to the buffer? If so how?<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">Not that it should matter but I’m developing in c++ on windows.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">Code:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">… snip …<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">// Globals<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">GstElement *pipeline, *sink;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">static void cb_pad_added (GstElement *dec,      GstPad *pad,     gpointer data)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">{
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  GstCaps *caps;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  GstStructure *str;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  const gchar *name;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  GstPadTemplate *templ;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  GstElementClass *klass;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  // check media type
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  caps = gst_pad_query_caps (pad, NULL);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  str = gst_caps_get_structure (caps, 0);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  name = gst_structure_get_name (str);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  klass = GST_ELEMENT_GET_CLASS (sink);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  if (g_str_has_prefix (name, "audio"))
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">    templ = gst_element_class_get_pad_template (klass, "audio_sink");<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  }<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  else if (g_str_has_prefix (name, "video"))<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">    templ = gst_element_class_get_pad_template (klass, "video_sink");<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  }
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  else if (g_str_has_prefix (name, "text"))<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">    templ = gst_element_class_get_pad_template (klass, "text_sink");<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  }<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  else
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  {
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">    templ = NULL;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  }<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  if (templ)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">    GstPad *sinkpad;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">    sinkpad = gst_element_request_pad (sink, templ, NULL, NULL);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">    if (!gst_pad_is_linked (sinkpad))<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">    {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">      gst_pad_link (pad, sinkpad);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">    }<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">    gst_object_unref (sinkpad);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  }<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">}<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">int main(int argc, char** argv)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">{<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">.... snipped ....<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  // initialise gstreamer and get version information.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  const gchar *nano_str;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  guint major, minor, micro, nano;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  gst_init(&argc, &argv);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  // get the version of gstreamer.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  gst_version(&major, &minor, &micro, &nano);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  if (nano == 1)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">    nano_str = "(CVS)";<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  }<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  else if (nano == 2)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  {<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">    nano_str = "(Prerelease)";<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  }<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  else<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  { nano_str = "";<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  }<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  char cVersion[256];<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  sprintf(cVersion, "This program is linked against GStreamer %d.%d.%d %s",<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">    major, minor, micro, nano_str);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  print( cVersion );<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  GMainLoop *loop;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  GstElement *dec;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  GstBus *bus;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  loop = g_main_loop_new (NULL, FALSE);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  // setup
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  pipeline = gst_pipeline_new ("pipeline");<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  gst_bus_add_watch (bus, bus_call, loop);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  gst_object_unref (bus);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  dec = gst_element_factory_make ("uridecodebin", "source");<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  g_object_set (G_OBJECT (dec), "uri", argv[1],<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">    NULL);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  g_signal_connect (dec, "pad-added", G_CALLBACK (cb_pad_added), NULL);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  // create audio output
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  sink = gst_element_factory_make ("playsink", "sink");<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  gst_util_set_object_arg (G_OBJECT (sink), "flags",
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">    "soft-colorbalance+soft-volume+vis+text+audio+video");<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  gst_bin_add_many (GST_BIN (pipeline), dec, sink, NULL);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  // run
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  gst_element_set_state (pipeline, GST_STATE_PLAYING);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  g_main_loop_run (loop);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  // cleanup
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  gst_element_set_state (pipeline, GST_STATE_NULL);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  gst_object_unref (GST_OBJECT (pipeline));<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  print("all done.");<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  fclose( gLogFile );<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  gLogFile = NULL;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">  return 0;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">}<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">… end of code. …<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">Thanks for any ideas and sorry for all the noddy questions.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">Nick.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">Nick Adamson<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Cambria","serif";mso-fareast-language:EN-GB">Software Engineer<o:p></o:p></span></p>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div class="MsoNormal" style="text-align:center" align="center">

<hr size="2" width="100%" align="center">

</div>

<p>
This email and any files attached are intended for the addressee and may contain information of a confidential nature. If you are not the intended recipient, be aware that this email was sent to you in error and you should not disclose, distribute, print, copy or make other use of this email or its attachments. Such actions, in fact, may be unlawful. In compliance with the various Regulations and Acts, General Dynamics United Kingdom Limited reserves the right to monitor (and examine for viruses) all emails and email attachments, both inbound and outbound. Email communications and their attachments may not be secure or error- or virus-free and the company does not accept liability or responsibility for such matters or the consequences thereof. General Dynamics United Kingdom Limited, Registered Office: 21 Holborn Viaduct, London EC1A 2DY. Registered in England and Wales No: 1911653. </p></body>
</html>