0:00:10say hi everybody thanks a lot for coming on to my talk about global
0:00:15so i'm robert right guy work for intel open source technology centre on the kind
0:00:21maintainer of the whole project
0:00:33so for those are not familiar with probably it's other consoles gpu graphics library originally
0:00:40created for the cluster projects they are these days as a standalone project
0:00:45it was created to deal with the possibility across different versions of opengl so course
0:00:52opengl yes opengl and even experimentally a bit these days with the web you know
0:00:59it's is so dealing with portability across operating systems
0:01:05one of the differences with some other graphics if you refuse are base is that
0:01:10initially when we created it we were interested in supporting more multiple sort of orthogonal
0:01:16components being of the contribute to the graphics rendering in a way that didn't trampling
0:01:22each other's us take tracking
0:01:30so in a still come hoping to go through first a run through of how
0:01:35we submit and process geometry with a gpu and when the something out
0:01:42and i want to then give
0:01:46an overview of the utilities in the couple library that try to make it really
0:01:50practical for writing graphics applications
0:01:55be on just access to the G P your hardware and then talk about some
0:02:00of the specific things we've been developing more recently just say that people get some
0:02:04insight to how the project is actually developing
0:02:11so first so wanna talk about
0:02:14basically the lowest level api even in cover which most closely matches have a gpu
0:02:19process is data
0:02:21i'm kind of personally interested in trying to expose more people to understand have a
0:02:28gpu itself works especially in the context of user interface development where i think we
0:02:34try to be on the utilise the flexibility of this hardware
0:02:39and the state-of-the-art for you are is today this is quite basic in comparison to
0:02:46you can see to sort of game developers and how successful they are using this
0:02:50hardware with many of this and that kind of constraints is us with
0:02:54interactivity and real time graphics
0:03:01anyway the first thing that any applications gonna have to do they're gonna use google
0:03:04to draw something are with the G here is great and of the cobble context
0:03:08this is gonna just you could cool context news is gonna create your sandbox for
0:03:13all the data the call was gonna need to track for your application
0:03:18so then we're gonna need to create a so it's a destination for what we
0:03:21draw remove are rendering this is called a frame buffer
0:03:24a frame buffer is a collection of to debug is
0:03:28the but we care the most about is the colour buffer and that's where we're
0:03:32gonna store the results visually of what we're drawing but a frame of mind also
0:03:36contain other ancillary about this so that are is
0:03:41for accumulating the depth of the geometry that is used during this that we have
0:03:47to see so you know these guys
0:03:52in probably create a frame buffer you can you can great and on screen frame
0:03:56buffer that would be visual to a visible to use of coding got one screen
0:04:00you with the size alternative you would create an offscreen frame buffer by creating a
0:04:04text you have with a given size and then you would rat that texture with
0:04:09as an offscreen frame buffer
0:04:13so if we have a destination that's where we're gonna store results then we need
0:04:17some data that we're gonna process with the G P A and how does a
0:04:21gpu except data
0:04:25and gpus
0:04:28also actually the is so the thirty forms of data so we i think
0:04:43the in cover we support lighting image data have for
0:05:00in the order
0:05:02and image it's a as a form of a so that we would expect we
0:05:06have person a gpu be on search german tree and it's a in probably support
0:05:12lighting textures on the from finals from afar name or from about four with a
0:05:20given size that and by sending data on that texture us one is being up
0:05:29to images into a larger at this of images a
0:05:38and it's often useful to be able to
0:05:42how can we just again as a high level protection the way you often it
0:05:45is a compact and to be have the packs more images into a larger images
0:05:49to avoid state changes and another form of textures the gpus process of pictures great
0:05:56from when your system resources such as X eleven expects or while and
0:06:06i'm sorry the older this
0:06:19it's just that
0:06:20the left and right click it doesn't very this is a real andreas breaks the
0:06:24slide down to the sections which of vertical sections like this pressing that right skip
0:06:31pretty big chunk that so which
0:06:33so about a so this'll spree this slightly better slide talk a week or two
0:06:39meeting date to the G P so depressing we need we have to do is
0:06:42the actual geometry into the G P A so first we need to actually understand
0:06:46what they to the G P processes and that is geometry which is test selected
0:06:51from triangles is the primary form in which we price estate on the G P
0:06:56A so you
0:06:58to understand
0:07:01you have the how we describe astrology the next thing to understand that's a this
0:07:06up about that is the stuff like just jump ahead at and sorry about that
0:07:10but we're gonna fast go through explaining how the geometries this but apologies and
0:07:17so the way we describe it geometries might tell is german treaters trying plated from
0:07:24attempt to assign different triangles and there's triangles themselves made of that but to cease
0:07:29and that is that sees are themselves components of what are called attributes
0:07:35so examples of attributes he would be so positions for each vertex in a triangle
0:07:40so you would have a position
0:07:43which could be a coordinate two D or three D coordinate reach but text in
0:07:48that geometry or it might be a colour for each vertex in the geometry or
0:07:55it might be i
0:07:57a texture coordinate that would could be at to detect record there
0:08:01it is the mapping a specific subregion of an image that is a don't you
0:08:05there's a lot of flexibility in the gpus to what data you can associate with
0:08:10about season your geometry and these are just very the examples but it's you can
0:08:16have all of the cost and data so i see the outcome actually
0:08:20but they don't you can also have many different apologies so tip about apologies would
0:08:24be that you have a triangle list which is where you would have
0:08:28so i sets of three but the sees which represent completely disjoint and disconnected triangles
0:08:36or you might have a strip of triangles and that would be you divide your
0:08:40first set of three but sees feel first triangle and then one additional verdict is
0:08:45gonna connect to the last two that sees of your script to make one more
0:08:48triangle and so one more vertex connects the last event these answers a more data
0:08:53efficient way of describing some geometry than with the less if that's applicable to your
0:08:58which on your trying to describe and last example would be a band where you
0:09:03just have a single but clicks in the centre and then the rest of the
0:09:06triangles gonna spend a lot of that
0:09:08and that's and one
0:09:15so how do we actually described estate using the called I P I
0:09:21so the first thing we're gonna do is describe
0:09:23decide what kind of data we want to associate with the each of those matrices
0:09:28there is some different strategies as to how you present estate to the G P
0:09:32so i'm just gonna give you one very typical like how we would do this
0:09:39we decide that we wanna have a position the colour and texture gordon associated with
0:09:43each vertex in our geometry we're gonna create a since even greater about six am
0:09:48i-vector extractor in this case and it has a position it has two components of
0:09:54the position X and Y coordinates into D and there of type fly we're gonna
0:10:00have full components of the colour but we implement out for a and each of
0:10:04those is a by a number gonna have two components protect recording it and those
0:10:08are touch like nist one
0:10:13this but what about an this is just that we've taken on my vertex struck
0:10:17which is a vertex i'm with declaring an array of these and we're gonna plot
0:10:21out we've got three about sees for one triangle and with plotting out the positions
0:10:26of the but sees giving each method the colour and where specifying the texture coordinates
0:10:35so we nine to up like that data to the gpus able to read and
0:10:39prices that and that's just a case of uploading into a cover that should be
0:10:42but we do that by coding a battery but when you repulsed in the size
0:10:47of the data that we want to apply time we pass in the actual point
0:10:50to the data
0:10:52and that's gonna give us a reference to about
0:10:56the next thing is that we're going to have to describe the G P or
0:11:01how is it that it can what we got data needs to know that i
0:11:04have to that data so it's right three the but sees to process it
0:11:09and so if we reach out to be we need to create a cover that
0:11:14should be and we go global attribute new and we're gonna pass in a reference
0:11:18to the buffer which is a date there are actually so we do we declared
0:11:22and we're gonna give each attribute and nine we're gonna specify what is this be
0:11:28and the number of bytes that we need to step to be have to move
0:11:31from the best the text of the second but sex and so on
0:11:35and then we're gonna need to specify what's the offset from the beginning of the
0:11:38buffer whether gpus gonna start reading for that should be here to
0:11:43process that data
0:11:45lastly we need to specify the number of compared to data have you have to
0:11:51like two components
0:11:55so assuming we do the same thing for the colour and texture coordinates we have
0:11:59for batch we recovered attributes now
0:12:03we can now define one or more primitives
0:12:06the referring to that should be right so
0:12:09so at this point this is where we specify the actual topology that we want
0:12:13to that we wanna gpu to use to interpret that data so lists triangle friends
0:12:18trips or whatever
0:12:20so with the funny primitive here way because it's just a single triangle that apologies
0:12:25pretty meaningless so we specify that there are three but sees the belong to this
0:12:30specific primitive
0:12:33and then we specifying the actual attributes the belong to this primitive and in this
0:12:37case we using this of our function takes a know to make the list of
0:12:42that should be says
0:12:49so the
0:12:52other thing that gpus comprises besides the john geometric data that i just described that
0:12:58is that they can also still image data as textures citizen where we were a
0:13:03bit outflow of their own and i started going through
0:13:08how in cover we can like text data so we have we can let them
0:13:12from files we can load a texture just as an empty but and fill out
0:13:18from the C P with the point to we can also create these textures which
0:13:22are cool data structures like an example of a high level texture the pose able
0:13:26there are numbered if i don't use
0:13:28but it's sometimes useful for this band of packing images one texture
0:13:34to avoid
0:13:36like a changes for
0:13:39you are use cases
0:13:42and might these pictures from when the system resources
0:13:47what is
0:13:52so we probably talk we put off right but what we're gonna store results with
0:13:56what our data which is these triangles and images as textures so now we need
0:14:01to figure out how to describe the pipeline by which this is all gonna be
0:14:10so i'm gonna give a really sky high level view of any it example of
0:14:16how you can configure gpu pipeline to process data of modern T is pretty don
0:14:21flexible and they're a number of stages a cut optional state is really but that
0:14:28i'm not representativeness example but it is still a very typical a common example is
0:14:34for is this technology
0:14:37they're gonna start with our geometry we coming in on the left
0:14:41and we're gonna bust going to this but expressing stage in this stage we're gonna
0:14:47transform a german three we're gonna scale it rotated translated we're gonna projected so that
0:14:53points at a button away from the origin are gonna attenuate towards vanishing point to
0:15:01and at the end of the stage all about german tree is gonna be transformed
0:15:04into the coordinate space about frame but
0:15:08and it's conceptually a range within a scene of other geometry
0:15:16the next stage after that is the frogman processing stage in the G P is
0:15:20gonna go through each of the triangles in our geometry and it's gonna i would
0:15:24like that with the pixel grid about frame buffer in it's gonna consider for each
0:15:28pixel where the centre of the
0:15:31what's called a fragment where that is within the bounds of that triangle then it's
0:15:35gonna run a program to basically calculate colour for that fragment at this point when
0:15:40you're calculating not colour
0:15:42you can but that's of those textures the we floated
0:15:47also the coolness of each triangle where we have those attribute values coming in there
0:15:52is can be interpolated say that for every intermediate fragment network processing we have interpolated
0:15:59attribute values to contradict
0:16:04so in the final step
0:16:06we take all of those fragments and we know need to humanise there is onto
0:16:10the existing contents of the frame buffer
0:16:13to build up a whole scene and it this point we might also be reading
0:16:18back insisting colours in a frame buffer to be able to say if the effect
0:16:21of transparency by combining in coming
0:16:24destination ones
0:16:27and so the buttons wasting the from present processing state is there is programmable stage
0:16:32is very flexible the planning stages tends to what is a much more limited functionality
0:16:39done and fix function of us still a can lay down do that stuff
0:16:45and the well in which the actually the hardware prices this is very paralysed there
0:16:53is if you have a primitive without one for triangles coming and there's not really
0:16:57any bordering guarantees as to have a gpus gonna price essays triangles
0:17:01and it's gonna be doing lots of geometry the same time and similar with a
0:17:06fragment processing the order exact order in which is gonna priceless fact is not something
0:17:11you get to guarantee and it's very paralysed that you will be doing
0:17:18so kind of have a gpu prices to state a high level and
0:17:24i don't have the time to explain lots of examples of using the cover if
0:17:29you have to describe a
0:17:31variations on configuring E D U but just to introduce you to the couple plot
0:17:36line object which represents that whole processing part by the G P A
0:17:42and we can create a peaceful pipeline by conical pipeline you
0:17:48and to just give one example thing of for figuring it where we are introducing
0:17:53a texture into that pricing but we're gonna associated texture with what's known as an
0:17:58idea and this idea of layers use during the fragment pricing stage where they can
0:18:03be combined and
0:18:04us associating attention with layers there of that
0:18:12so basically now we have all of the bits that it takes to actually draw
0:18:16something a process similar gpu i'll just mention frame buffer of data a primitive we
0:18:20got a processing pipeline we can call primitive draw busting the reference to that data
0:18:27that frame buffer and is that the choice of five line
0:18:31and so that's basically that's basically it but introducing datum pricing G P A and
0:18:38it is to distill as much as i got time to be able to
0:18:41i give you
0:18:43so the next thing i wanna talk about the utilities at all the whites that
0:18:47go beyond just that lower level access to the gpu hardware that trying to make
0:18:52it actually really practical to get stuff done is just basic things a little mice
0:18:57all graphical applications need and gonna start off by introducing the math utilities that come
0:19:05with bubble
0:19:07we have matrices api matrices of the way that we deal with describing transformations of
0:19:14geometry in combining those transformations
0:19:17just essential stuff really matrix not build on top of that capability and kate to
0:19:25the number of applications that want to organise that the geometry into seeing profs
0:19:30so it's very common that you want to basically start these transformations together is interested
0:19:37in seeing trough pushing them onto the stack "'em" popping them as you move around
0:19:40the scene rough and this can say you re accumulating lots of transformations about this
0:19:46is the on changing i frequency
0:19:49and that is it just
0:19:51you know use of all kinds of things the next can be to have a
0:19:54you know it's on and dealing with that is
0:19:56rotations there are several rotation types that we have been a couple user an example
0:20:02of a compact representation rotation comprised of three orthogonal rotations
0:20:08and quaternions or another format it's an encoding of an axis workstation and they have
0:20:14the nice property being able to interpolate really smoothly between the have the pros and
0:20:19cons and but especially with quaternions
0:20:24they're pretty some pretty fancy matt's behind the it's not
0:20:29every time you need
0:20:33and colour utilities so being able to convert from rgb take you saturation like two
0:20:44which i just snippets this is the way that we experienced the programmable parts of
0:20:49the program will parts of the gpu
0:20:56this design say that you can have multiple components contribute into the i roll processing
0:21:02of geometry and it so cooperating within one framework so
0:21:09the way this works is that we have this idea that points in apart line
0:21:13so examples would be vertex processing stage where you wanna be able to
0:21:19make some it's you want to build on the people processing of probable it but
0:21:23introduce some additional transformations for example you can provide a small snippet of code which
0:21:29is using the G L of cell shading language to insert into one of these
0:21:35have points in a can either replace that whole
0:21:38section replace any people processing
0:21:42or complete and or pen so that it can cooperate without science
0:21:47and similarly for fractal processing like and set to
0:21:52and that supplied to
0:21:56and looking up textures and there are
0:21:58places as well
0:22:03clipping lots of applications once we have to restrict
0:22:07the range where they want to restrict where the influence of drawing within the frame
0:22:15to a certain to D regions and
0:22:19so if in cover you can click to ask align rectangles transform rectangles this interactive
0:22:26a battery primitives to D pass describe with fancy is awesome lines
0:22:33and similar to the matrix that we consider the you have seen rockies cases where
0:22:37you want to be able to start these on top of each other is interesting
0:22:41trough and effectively region is the intersection of all of that is the company push
0:22:53rectangle patching especially when it comes to user interface is a currently very dependent on
0:23:01using tech should rectangles as the
0:23:06so building block of most interfaces and because gpus are not really very effective a
0:23:12practising very tiny primitives one of time just to send a couple of triangles for
0:23:17what within separate draw close is
0:23:20is not and make good utilisation of the of the G your hardware
0:23:26so it
0:23:27with this there is the if you well within certain limitations i for instance with
0:23:32if you little your textures into atlas textures
0:23:37so they can all be referenced as part of one two like one month one
0:23:44and if you limit yourself to certain types of clipping then in a lot of
0:23:48cases actually couple can batch almost like whole scenes of rectangles into a single goal
0:23:58it's quite useful
0:24:02so don't have a bunch of optional sup libraries that come with problem as well
0:24:06i mean for instance we have come up anger which enables us to rend text
0:24:12laid out with that anger make you know i
0:24:15we have hope a which provide a test like to have a teapot so describing
0:24:21shakes with bessie is lines and curves and being able to get a retains object
0:24:26representing that estimation of that and being able to redraw that without incurring repeated incurring
0:24:32the cost a test selecting that geometry
0:24:35how would you nist two thousand is to
0:24:38easily integrate a just
0:24:40regular gas to carried into the a couple application and managing the state
0:24:47between nice
0:24:48to it you know it's
0:24:50i would use T is a recent addition which i i'm speedier integration
0:24:56so couple based on the G stream a framework
0:25:02so now ago three some of the much more recent things that we've been developing
0:25:06just say you know idea of where the focus is a and where it's going
0:25:12so that's the yes i thanks to find a at the beginning of this year
0:25:18we introduced a couple frame info right you know i
0:25:21and it's this is about being up to get asynchronously extra information about frame is
0:25:28completed so for instance when we went to remove
0:25:32also possible frame of the impostor to be displayed
0:25:36and it takes some time before that can post a response and gets that frame
0:25:40actually displayed on to the monitor and we'd like to know too well what's the
0:25:45time stamp when that really hit the display and get that but we have location
0:25:49so that it can be a bit smarter about our rest is animations
0:25:53based on the prediction or when that frame is really gonna hit the physical display
0:25:59see you have these
0:26:03i think
0:26:05thanks to kind of stay in for contributing offence compensate pi two call this allows
0:26:13us to insert marcus into the come on stream that was sending to the G
0:26:18P A
0:26:19so that we can have a bunch of what that we're interested in knowing when
0:26:23the G is finish processing this way
0:26:26since when that work is finished then we can get a call back into the
0:26:30application to be able to
0:26:32i respond to that and the use case they had this was for video integration
0:26:36where they wanted to be have to make sure that
0:26:39but the gpu had finish any something the need to do a certain textures before
0:26:46was handed back to the video decoder library to avoid conflict
0:26:55thanks to i mean a man a lot of one of the interns so we've
0:27:00been working with recently and saxony a lot that's the supporting i'll at this work
0:27:07for G S T
0:27:10on speedier integration to couple and it's it works
0:27:14particular well with to pay particular attention to making sure that it works nicely with
0:27:20the state i the eyes and with multi texturing side it is a lot of
0:27:25freedom to
0:27:27i will all kinds of your own custom affects and things that will be involved
0:27:34in a rendering of a video frame so if you wanted to do from processing
0:27:39like be saturating contrast brightness that kind of thing and trade is you don't wanna
0:27:44have intimated rents we listing so you need a cooperative system to allow you to
0:27:49combine these effects
0:27:55and as you have the use cases this was for project called break sure
0:28:01mention that
0:28:05so what you have is
0:28:07another thing that were exploring at the moment there's a project that where this using
0:28:12couple that i'm working on who rate which is i you are rendering engine and
0:28:20provides interactive tooling for designers for improving the web design where were exploring more advanced
0:28:28uses of the G P are in the context if you i development and it's
0:28:32we're interested in supporting a number of homes and even we're interested in exploring supporting
0:28:41web applications
0:28:43it's an expiration price my remember where i will be possible and okay
0:28:49so what's next
0:28:52so something that i always stripe in the way that
0:28:58in terms of maintaining the project and driving a project for this is ensuring that
0:29:03the feature what we develop
0:29:07it's really driven by the projects work the requirements of projects are actually using so
0:29:12we don't wanna be planning architecture astronauts just coming up with fun stuff like that
0:29:17we wanna actually have a reason why we develop any particular feature so the ounce
0:29:22really this question is to consider the people using the cover like my
0:29:29the for new uses a couple will take it and you directions
0:29:34so some of the current users a couple that implements it
0:29:39we have a lot to obviously are the do the first user couple
0:29:45and it's even today the that's a influencing certain things for instance the high dpi
0:29:51stuff so i guess they will need to make some small changes to the called
0:29:55tango at are to consider a
0:29:59the size of clips that we tool
0:30:03but there is a special use case of a couple especially when we consider the
0:30:08recent web two wraps
0:30:10name show that way to support and i'm show
0:30:14and that the bonds a bunch of the feature well as well in kabul
0:30:19well who is not something i'm working on activity at the moment but it so
0:30:24i wanted to mention it just because i did put quite a bit of work
0:30:27into this a few years ago and it was an interesting project it really do
0:30:32that should drive quite a lot of
0:30:34thank you think over the time
0:30:36and this was adding a gpu acceleration back into card was taking a different approach
0:30:41to carry G L and are generally have said making some different tradeoffs
0:30:47but it did some interesting things to do if retaining the translations of parts and
0:30:52trying to be a little bit okay well about using the fix function possibly gpu
0:30:57for gradients and
0:30:58the be a bit more efficient
0:31:03i would say much about you best "'cause" i guess not many people here about
0:31:06that but you know robert's writer back and for E best the
0:31:14this is like a couple years ago we played around this is yet not really
0:31:18got serious use case but it was interesting the time because and there's actually some
0:31:23slightly nifty things that you best dates to do with matching actually which we were
0:31:34and so a much more recent projects that working on this week which i mentioned
0:31:40just briefly it's a okay and i don't hide for this project to be quite
0:31:44a big driver a couple going forward actually
0:31:49that mission here is to really explore in the context of user interface development how
0:31:55we can use more features of the G U and how we can also optimized
0:32:00the web fly between design is prototyping but at the moment without many constraints this
0:32:08to the technology used in the end and
0:32:13creating interactive tools
0:32:16the hell optimize are what are even connecting we to sort of devices i network
0:32:21and such
0:32:26right about that
0:32:28big driver
0:32:31so those of the project striving that's night it sort of update for the projects
0:32:37and so i'm entrance it's in it if anyone's interested in this kind of thing
0:32:43graphics processing and it's especially a
0:32:48why and this audience in the context of user interface development
0:32:54i'd love to invite people to learn more about the G P A
0:32:59and contribute to call i've either directly or through downstream projects
0:33:05and creating a more that downstream projects and we
0:33:10we called wants
0:33:12so join us about join the mailing list get involved in discussions during this and
0:33:17i have see we
0:33:19created a channel for call dedicate the corpus the other day about time really just
0:33:24the program
0:33:28trying to send a message on again off together and say for us on better
0:33:31if you just want to i project and there's a website now
0:33:36find what you what you will we we're gonna probably try and i mean it
0:33:40but the labour office i dare easy
0:33:44which will time
0:33:46nine what to make it as easy as possible
0:33:55that i'm sorry
0:33:56any questions
0:34:06gonna task
0:34:09the this building
0:34:19what this piece to me
0:34:22well are you use the
0:34:26even if you're using name show the patching that it provides a would make it
0:34:31more question
0:34:33it's gonna you to better
0:34:39any if they have
0:34:41that's really might want to use it i mean talk to provide the facts for
0:34:44example to be saturate colours and if any of those we use
0:34:52single that
0:34:54so those changes all search about we don't need to do anything on top of
0:34:59it to reduce power consumption for example
0:35:02well it
0:35:03it's is a magical you know
0:35:06well there's a
0:35:08there's a lot that went into
0:35:11the patching for instance which is the main thing i guess that
0:35:15think things like mention anything using that's are gonna take advantage of there's quite a
0:35:21few things that need to come together to make that works not just having support
0:35:24a that's textures that so
0:35:26whole bunch of hassle to support other stuff like being able to expand from i
0:35:31have a an embedded open G L E S device and it only supports non
0:35:35power to text is a and there's tons of gpus arnie support that kind of
0:35:40actually a pretty so we have a high level textures in couple where we can
0:35:46slide sections that when you have limited hardware so that you don't have to care
0:35:50about that because the you i just want to draw rectangles with images that have
0:35:55a battery sizes and not have to figure out how to slice that stuff up
0:36:01to be of the map to some
0:36:04limited hard website
0:36:06it's quite a few things that
0:36:08really make job
0:36:10something like show
0:36:15does also help a lot with the stuff like video
0:36:19i feel like that
0:36:21well the code you see stuff is actually gonna be used but not the G
0:36:25S T a line also data that so if you're using that then it would
0:36:32be involved in video right it's also gonna and a bunch of things now they're
0:36:36not the G S T could never do we always which it is
0:36:40no we didn't really think you very carefully what we originally right
0:36:45okay so especially that idea of being able to come should be have multiple components
0:36:50contributed effects videos that at the moment there is no cooperative system to allow so
0:36:58different G stream elements to contribute to that right
0:37:01for video tape or something like cheese that might want to start a bunch of
0:37:05affects together you at them i mean you'd be doing that by accumulating multiple ranges
0:37:13to trying to you
0:37:14those kinds affects a certain form of power efficiency point to be if you want
0:37:18to have multiple of facts about the video did not make a big difference and
0:37:21that's just the right way to do it it's just that without co operative system
0:37:25for prime contracts
0:37:26that's a difficult problem
0:37:30so it is a nice one it's a recent development the logistic stuff we needed
0:37:34to be have to support video effect
0:37:36and rate
0:37:40i think that'll be interesting to see if people to pick up