WWDC2003 Session 204
Transcript
Kind: captions Language: en good morning everyone I'm going to Oakland and I'm one of the image capture engineers and today we will talk about an image capture update so i will give you a prevent reduction to image capture short overview then i will talk about how you can use image capture from within your application very easy we will see and then we talk about the scanner support its kind of support that as Travis mentioned was added with Jaguar and then we have a short look at plane and then finally they look at the new features new exciting features in Panthers and to do some cool demos on that so just looking at the image capture framework it's a framework that was introduced with megawatts 10 and it's dealing with still image devices so any camera or the Jaguar we started supporting scanners are really covered by this so the nice thing really is it's an architecture that takes the device specifics from the application so you write an application to work with an image capture device then you and your application does not need to know about that device there's no need to know to know a low level protocol to talk to a device you just use a couple of the actually very few image capture API if you look at the framework then let's look at the components that we install at the framework first the I'm not really going into too much detail because we have so many plugins and helper applications let's just focus under the main things and one of the main thing of course is the component that talks to a device we call device module it's actually a background application UI list and it runs in your user space this device module talks to a specific device or class of devices and on the camera side we were actually very lucky because we can just have a handful of device modules to cover almost one hundred percent of of the existing cameras now that is possible because a lot of cameras are adopting two really favored protocols one is the PDP picture transfer protocol and the other one is mass mass storage for your grab a camera and you will see it as a domestic volume if you look at all the devices that we support you see that we have about 10 different camera drivers where PDP and massage are the most important ones all the others are a really vendor specific and the nice thing about these is really again they cover the whole family of devices so there's really no need that more than than these ten and we really cover like unfortunate on the scanner side it's not that easy you see we have two modules listed that's the twin fridge and the type one scanner that's for the epson class scanners but we really want to add more and hopefully we have a couple of the developers here that can help us do that so if you look at the device module again what sits on top of it is a background application the image capture extension that deals with multiple modules even at the same time so you can have an application using a scanner and the camera more than at the same time or multiple cameras on top of that we have the client application one client application you all know that is shipped with my best tennis I photo the other one that we also ship is the image capture application and your application could be one of those using the image capture framework now these are just the main three for the entire image capture architecture now let's look at how do we handle this internally so internally we have the notion of ica object icy objects are these things that are specified by type and subtype so they describe the type of the object by OS types and subtypes they may contain reference to other objects that allows you to build an hierarchy the tree they may contain properties and dictionaries properties that's where we have the real data real data was reduced with the Panther introduction to actually adjust the thumbnails and the image or audio data that could be on a camera device with Jaguar if we were introducing dictionaries that's actually very convenient way so we are assigning one dictionary to one object and that dictionary contains all the metadata for that objects so the nice thing with that is we can very easily give you a chance to get access to all excess data you may get from a camera image by just looking at that dictionary because we stuff all that excess data into that dictionary now with these three building clocks we actually can create something like that so we have an object sitting at the top and then going down we have we have two objects that are referred by the root object they all have dictionaries and they all may have proper properties so in the real world we always start when we for example look at it at the camera with the device list the root object the and new for Panther for that route object we are going to add also a device dictionary so on Jaguar system if you try to get the dictionary for the device list you wouldn't get anything for Panther we give you back a dictionary and that dictionary contains actually information about all the connected devices and we are extending even the regular information but it's not just the device objects as you get you get information about the devices at I opiate level so for example you get a location ID or why I good or Nile registry pass in that dictionary that gives you a very easy access to a certain device for example if your application is only working with a certain type of camera or with your own scanner then you could really look at that dictionary up front and see if your device is connected in the real world we could connect the camera that camera will have the dictionary that dictionary actually contains information about the device but also about the objects the images on that device and we have two properties the thumbnail and the name although you could actually get the name from the dictionary as well and on that camera we can have an image while the image again would have a dictionary but for that image the dictionary would contain the excellent information the image would have the property the property one would be the thumbnail information so you can get very easily good access or just reading that property get a family or that can display in your UI or even the actual image data and of course you can have multiple images on that so let's switch to demo form and i will show you just in a small helper application that said that we are using to just indicate what kind of applications are running so you see we have the image capture extension that i mentioned before and then i have listed all the different camera modules and at the bottom i have the image capture application so let's see what happens when i connect the camera i cannot connect the camera and you will see immediately as this is a PDP camera and it shows up PDP camera module gets launched and the image capture extension gets launched now of course I could launch image capture and browse through camera content i could say i want to download this and this but i will actually launch another utility the image capture problem image capture process a small utility that comes with the image capture sdk that's what the name says it browses all the image capture devices that you have connected in this case we have the camera connected i can check the camera and then in bold i get the actual properties for that camera what you see down here it also stretches the dictionary for that camera so i see an io registry pad I see capabilities I see a data structure data array a tree array and I have like his final name it's a canon powershot is 50 I have a new speedo creation ID and so on up here I can actually browse go to the first directory that's two directories on that device I see that direct we had the property that's the file name and I can go through that SEO there's another and so on so when I think if I can actually go to to this data dictionary it shows you what I was showing before dynamically what you have connected to your system the data dictionary actually is a flattened out structure so it shows you at one level deep the deposit the actual data that's on this device so the canon powershot at 50 in this case as to these images and these are actually the icao iata object now this is flattened out so we did pass the entire tree that's on this device and flatten it out into a single array for you to really give you a really quick access to all the data on that if we look at the tree structure then actually you see well it's not that easy it's really if you would walk the tree all by yourself go to the root object get the end child and in and so on and walk the tree do that for all the dictionaries and you could get to the same 8 images that we have in the data dictionary much easier to access the advantage of the three dictionary is it would also give you non-image related files so for example if a camera would contain the firmware update or whatever on that the device on that CF card then you would see here so this is image capture Prowse aristeo tivity that comes with the image captures the fsck and whenever you walk work with the image capture devices might be very useful to just use that ok let's switch back to the presentation now the next section we'll talk about what it takes for you your application to get access and use image capture and framework and image capture devices there are a couple of levels a couple of steps that you can do or not do to work with with the image capture devices well the first one is a very simple one with the image capture application but give you a way to set your application as an automatic task it's very nice because it's very easy all you have to do is the user has to select your application and then from within the image capture application you do download and what happens is you get an open event for all the downloaded images couldn't be easier on disadvantages it works only with the image capture application so if like you prefer another application sss startup that gets launched when the camera is connected then this approach wouldn't work the next one to make it very simple actually it is added with panther and that's the service you probably know that all Coco applications get that for free so under the application menu there's a menu item called services and this allows you your application to use image capture devices directly for carving applications you have to do a little bit you have to implement certain eppley events and you find here a URL where you get more information you have to implement certain events so that your application will actually take use of the service menu Samsung is very simple because its service can on the paste pot basically say I deliver the text or image data if your application would allow this is a pasting in of images then it automatically supports this service the next level with panther we are introducing a new way to a simple way to use a common UI common UI is something like that so it's very similar to the image capture application itself in fact it is the same thing it's just a plug-in that gets loaded and we display that we strip it down a little bit for example in this common UI you currently cannot do any delete or take picture you cannot change the automatic task or download folder because there's no download for it grunting and come you is used and we will talk that it about that in little bit come you is used with a single if new API you just call this and you I comes up user may choose the picture and hit import and you have it in your app and of course the old way to work with image capture is really you create your own UI a couple of examples for that of course I photo did that and crackers importer the credit converter that's that and to file make I guess we are using that advantage of your own custom UI is of course you have full control disadvantage you have to implement more as everything they're just free really very useful api's for your common UI and you should take use really make use of those if you aren't doing already yes instead of we'd probably just show you that before when you look at the object tree for a camera instead of walking the tree directly you could and you should make use of the dictionary that we provide for you with all the already pre-done jested information but the actual images so let's have a quick look at these three API well the first one get I see a device list this really isn't the fastest and actually the only way to get the device list object and that it's really at the root of everything and from there on you can go to your different images or the president of course with the devices and copy object property dictionary that's this API that returns the dictionary for a given object so just get the device list get the device the property dictionary for the device list and then you know what device is connected you know the ica object for the connected devices and from that you get the dictionary and you have access to all the images here again that's how the dictionary looks like for for the camera or in the skater card reader you see we for example hyper capabilities this card reader allows you to delete images and it allows you to support the eject so the image capture you I'm a prenup in it eject to buy them saying well eject this volume of mass storage and below you see the data dictionary that is really in the array of dictionary one item one dictionary for each image so it gets a little bit more complicated if you just add more object then again it's very simple and easy and straightforward to just use the data dictionary with all the images you know exactly that these are our only images on the download file well it's very simple API because all it takes is the icy object and it takes the dictionary rest where to store these but to download the image and it actually does a little bit post-processing for you for example it's automatically embed for color same profile or a convenience you don't have to do anything does that however if the profile of Ashley is the image already has a collecting profile embedded some of the newer cameras do then of course we will not reinvent that profit will not overwrite that it allows you to adjust the creation date so when you download the image then we set the creation date if you set that flag on we set the creation date through the access information that we can extract out of the image it's great the custom icon if you want it can rotate the images okay let me just do a short demo on the different steps of an equation so if you switch to number four yeah so I have the PDP camera still running and what i can do is i launched the image capture application and you see i could either download all or just download one and as a post prosper that's an automatic task i selected preview so i can show you how this room look like this morning with nobody was in here I just do download and the image gets downloaded and preview should launch and that's it so very easy for your application to get involved with image capture devices because just gets launched and get an open event so let me show you the second level of an equation I have the version of text edit here and then the services you see image capture and I can select import image it brings up you are a custom UI looks very similar to whatever we just saw before in the application and I can select an image and import that and should take a while if it's given too big to display in there in Texas but here is the energy another way to use the common UI that you just saw as a service is really we could modify text edit now that's what's easy to do because text editors really one of the sample apps that you get me install Panther sample app for the app get so i can very easily add an input image and as you see well input image doesn't do any thing else but using the common UI brings up to calm you I I can select an image and I can import that and so it should be able to display that I'm not sure okay so okay so that's one way of other way of using the image capture framework one other thing i can do is i can show you a custom implementation and we just created a very quick and dirty photoshop plugin that uses a custom UI custom UI based on the three API that I i was showing to you and image capture Creston you i plug in or very simple it just gets the camera icon thumbnail it gets the number of of cameras so if we would have multiple devices connected just prints that and then it looks at the data dictionary to get all the images so i can select one and import that and these images are such so it takes a while but here's the image in Syria 23% and yeah so we get the image very quickly into any application okay so let's go back to the presentation and let's look at this kind of support and image capture well one of the main goals was really to have a very simple UI make it easy take it easy for the standard user to use the scanner image capture support actually two types of device modules one image capture native and the other one is really the training data source you may ask why are you doing that well very simple 20 resources they are available for quite some time and it probably gives you a very good way to work with a certain device however it's not that easy to create a real solid plane data so it takes on time because not only you have to talk if I actually implement everything to talk to the device but you also have to implement your own UI now as an image capture natives kind of module you're not really worried about the UI because you I is part of the image capture application all you have to do is implement because we have a framework to really create your own scanner module implement very few calls and that actually gives you access to all image capture client applications so we have a set of just specifically talking to the scanner we have a set of AP is that were introduced with Jaguar and we are not going to add any API for Panther however we change the meaning of of to a PR it used to be that ICS cannot get and set parameters where the api's to pass in a CF data dictionary CF dictionary ref or in an estate dictionary pass all the parameters while we still maintain that but we are switching the case we are switching the keys to model that closer to twain so basically all the Twain caps and I cash we have those as a key and the values for those are dictionary with all the the right content for that capital or I have structure now this actually allows us to be more flexible first of all it's probably easier for you with the Twain background the to really implement a native Canada for example for us it gives us a very easy way to enhance the scanner capabilities because in Jaguar we could do only flatbed scans you could not switch to a transparency unit with panther is easy to do with more or less mirror with what we have under under the twin side talking about plane well plane is really an industry-wide it's very stablished with more than 10 years old standard to access imaging devices train or itself supports cameras and scanners however within the image capture environment we are using only scanners because with the very few camera modules that we have we cover roughly under to send us a photo cameras make millions on us but very close to Twain if you look at the set up as three key components first line is the client application second displaying data source miniature the DSM and the actual plane data source well that that looks very similar to to the image capture setup Twain TSM is installed with megawatts 10 so bite on Mac OS 9 days a lot of vendors when they were selling their device they were shipping the CD that actually did install between data source manager which was really confusing because first of all applications could not assume that the data source manager was installed or worse since order to correct version the correct location and all that since it was not supported by apple and Jaguar or Panther you will find the train framework as a Marco framework in system lovely frameworks and for those non Marco applications those of you were still using CFM based applications we have a shared library that we also install so really we ask you please do not install any PSM it will really destroy the current setup and we had a couple of cases where that was happening so where a client application your driver may be worth installing your own version of the shared library which is a really bad idea please will rely on that we ship the latest but it is that if you look at the set up again this looks very familiar it's the same or very close set up as we had for image capture well there's a big difference big difference is actually that all these three components are running in the same process with image capture with each block was a different process actually that has the advantage that we as a central piece image capture background education is always in charge all the devices so we can have multiple clients and multiple devices well the Train world it's not that easy to hell that because you have multiple instances of the DSM actually run perhaps between integrates Twain with image capture while we did that and we mention I'm remember i mentioned that early on we are using the train bridge image capture basically implements the module that talks to a trained yes so from the Twain world it looks like a plane clients from the image capture world it looks like an image capture device module which also means that this thing get whenever you connect the device this thing gets launched train bridge gets launched and it will be running as long as the device is connected we implemented a way very easy way for you to hook up button support a lot of wendar they ship now these scanners with a scan email fax copy whatever button in front and what they really want is that user presses the copy button and then a certain application on the next should be launched and should do a copy well you can do that you can implement your own button listening plug-in put that into your DF and then this code gets executed when no one else is using the device so there's no need for you to write up a special colonel extension in order to do that so let's other setup looks like so image capture the Twain footage is if the client it talks to the dsm and through the dsm to the different yes again the nice thing any image capture aware application can just use plain data sources actually we have a mode where we present our UI or where you can choose to use the Twain original DSU I everyone so the train implementation is really currently 1.9 and they have came up with a speck in two thousand they describe how to write a train client application how to write its wayne data source and they have it's really well well organized so they have a window section and they have a magnetic attraction unfortunately that section for the macintosh is really made for mac OS 9 so the current spec is really not the way you should follow in order to implement ideas or even a foreign client application you made some changes so for the d/s for example it used to be that those were just shared libraries now we really require now in a bundle the bundle has a couple of advantages it for example we can store additional information in the info or device info to pee list that we require the infrared plist example contains information about the device the scanner that you are going to hook up it contains for example for USB scanner a vendor and product ID now why is that important well train itself has no way to match whenever you connect the device to match that device to a certain des directly so what you end up with you can have like 15 different DSS installed on one machine and there's no way to get the just access device limits capture is easy because we just have this kind of device what you're running and and you can ask image capture what is what is the device well the plane you can iterate over all devices but there's no way to find some active device therefore unfortunately I get Photoshop cannot handle it differently if you open Photoshop and look at the Twain ds's that that it is they list all of them even the ones that are not connected so that really when the user picks one well it could be connected or not so you may wait 20 seconds or so before you get a timeout and then it says oh I couldn't find the device not that great of a user experience so again for the image capture part we really have the information based on your info to penis inside the d/s that allows us to map the device that is connected there's black canopy detect on the bus with a given D s that's installed we switched off of the event model it used to be that in began the old Mac OS 9 days there was this wait next event loop there was this constant calling for life so whenever there was an event the client application would pass that event to the BS and the BS could dislike yes I want to use it or no no I I just pass it back to the application and the application handles the event so if anyone not changed and the last thing would be really ask you if you are going to write an ods is support to the you island operation it's an optional feature but we would really ask you to do it in order to work with image capture because otherwise you could just print up the descent at the sui and in a bit you will see why that's not that great of an idea always so for the twin clients is also this new event model where instead of crawling wait next event you could register the callback proc for the case that the d/s wants to send your message for example can the data is available however for the twin clients we made it a little bit easier to transition because we also allow you to use the old event also current photoshop for example for shop did not rest for the usage of the new twain d s and in dsm model and they are still using wait next event and that still works but trying a new application we would ask you switch over to the new event model use carbon event or in cocoa register you your callback proc and you will get called when the device wants to send some information to you so let's now talk about the things that are new in Panther we have made some image capture enhancements we are going to talk about image capture networking web sharing and a couple of new API if you start with the image capture enhancement one thing I mentioned before was really we added the property dictionary for the device list now this makes a lot of you it may seem like a little thing that you could live without well it's a very convenient way to get to all the devices at once also to get to give information about the devices for example is it a USB device is it this specific model of the scanner that is the only one that I'm going to support or or ignore we did some changes in the UI so for example we have faster launching for for image capture and that's probably those those of you who have like the new one gigabyte CF cards or so with thousands of images on it they notice that it takes a while before image capture worse coming up bring up the UI and with showing the family as well we produced that time dramatically and it's much faster launching and at the initial point when we do not have all the information about the device we just bring up a progress bar while we're talking to device we are collecting information and just be patient it will be there in a couple of times then we have a better session handling it used to be that when two instances of image capture application for example we're running and first one has the the scanner session open remember going to use it as recession basis you have to open the session you have to then do your screening commands and close the session before someone else can access the device and open session so what was happening in the password first one is active session effective you launch the second one and segments were saying well no device connected all that's not that great so we really have a better way to inform you that there's a session on going and also keep that dialogue open and procession closes and whoops the second one gets active we added a couple of scanner image enhancement and progressive scanning that's on you ipod and for those of you who work with the Train fridge and PSS and in the past we were using the native transfer which is unfortunately dated back to like 10 years ago when on megas 9 the pic format was a such a great thing and we were using that in the first implementation of the train bridge now we switch to memory based transfer so that should give us a way to raise cannon bands do larger scale and use less memory so let me show that on number three if a and this machine I do have this kind of connected type one scanner and I'm using Photoshop again but this time I'm used in Photoshop from the plug-in where I do the standard UI and scanner wasn't in use so it takes some time to warm up and then that time I can show you we have ADD an image correction section to the UI the goal again was keep it simple so we just have three radio buttons where we allow you to do nothing Atlas current setup where we allow you to do an automatic correction and here is the actually the progressive scan so instead of waiting for the entire image to be scanned in we do it in smaller pieces and of course we can scan in you let me go to this area here you can see that yeah so when let me do an automatic image enhancement and you see well compared to this looks much better and then I thing of course you can switch to manual and you get the slider settings based on the automatic which you can still enhancers so you can brighten it up or to some weird things change the cutter take out car let's make like a wide and all that so that's all real time and actually if you move that a little bit around and the current setting I can even design you our next session other than that you may notice that we on the options we give you a way to choose the resolution for an overview scan so if you whenever you work with the overview if you really want to zoom in quite a bit then you should make sure that you're not scanning at 25 CPI because that's really interested feel pics that you have to correct then the results may not be like that let's do it so what we do is really on this image correction we we are using kind of thing and actually produce a color strength abstract profile and on the real scan when we import that we apply that profile and yeah if you pre correct this scan I don't do this can now click sometimes oh ok back to the demo please so another thing that we are going to add in Panther is image capture networking a very easy way to share your camera or scanner on a network and unfortunately there are a lot of things you have to implement well not quite because it works with all existing camera and scanner modules it works with all existing client applications so I photo out of the box will just work with network scanning and network cameras so there's really no need a p.i so how do we do that well if we look at the standard setup where we have the different components like device modules image capture back on that and your client application just imagine that you have that on two machines now how can we make it work so that without changing the lower layer so device module and the other layer of the applications it still works well of course there's only one thing we have to do is we have to get the middle layers the image capture the background applications talk to each other and we do that on your local subnet using wonderful but really there's no need to configure anything whenever you have sharing turned on on one machine you can select yes I want this one this one shared but I don't have to type in IP addresses or or whatever so that's a great way to share scanners and cameras what we did for actually the image capture web server allows you to share cameras on the Internet now that's a really great way and nice thing again is it works with existing device modules and works with all internet browsers that's really quickly because then you hook up the camera here and you can access it on all platforms all over the world want to get through to that device and then I thing really this is done without without is downloading the images first so you take the pictures hook it up to your to your ibook over wireless you can share it and to people around the world can access the content of your camera and that's actually how does implement it the image capture web sharing is just another client client that we install and you will launch automatically when you select to do it and the nice thing is really it works with all different clients so let me show you that so if you go to number four yeah and liquid premium alright again I have my PDP camera here and what I want to do is launch the image capture application image capture application allows me again browse look at all the images and we added the sharing panel now sharing first part is I can specify look for other device look for other devices that are on this circuit then I have an option to share my devices can even turn on the web sharing so let me turn on the web sharing and a shared name I are used one of the vices and and I'm not using any password you can say share my devices and then this table view gets enabled and I can survive i can decide whether i want to share with or not so let me share the canon powershot by the way down at the bottom you notice that since we enabled the web sharing you notice the image capture web server gets automatically launched now on this machine well I don't see anything of course because I have to go to machine number three and let me start from from fresh so I launch image capture see there's no image capture device connected all of course not does this machine does not have any device connected now I want to access this camera on the other machine how do I do that while I go to my sharing and here I do select look for devices I go to my prowess and then in the crowd panel I do see the canon powershot s50 which i can choose to use and hear it so now on this machine I'm using the camera that's connected maybe to another machine in the backseat and it can access it as if it was connected directly and notice that we also do still do support all our API so for example download file just works although the directory ref that you specify is really on your local machine so you specified to download to your local machine and we internally remap that get the data from here and save it on your local machine what we do is happy with you you want another tool to just it's one of the debugging tools that they end up in the SDK allows you to actually look at the different devices and you see I see the same object structure on this machine I can actually select the suit camera object ID and I can get for the camera I can get the property dictionary and it looks like like the local local divine so see all the data structure and all that and three structure everything is here and let me just show you the device list object so the only thing that that indicates that this isn't a non-local thing it's really an entry in here that indicates yes it is a remote device and again the nice thing is down here you see we just run the image capture so there's really no device module involved on invoke them on this machine okay but it actually did more so I did not only activate this this one to do the local sharing I also enable the bed sharing now when I open this how do i get to this machine I actually can use round able to detect it so select that one and you see oops same content but just imagine this could be or the other side of the world now that's a very easy way to access the camera if you don't want it or have a process that does not support rendezvous how do you actually know that the URL or you call you of your friend on the other side of the world well go to this URL well what is the URL well actually if we just quickly switch back to number four in the sharing in the shearing panel down here you see you l just use that send that in the email and and they can access it so if you switch back to number three and then let's see if I can actually access since i was using VPN to connect to the apple campus so I and my office I did set up memory stick reader so I should be able to just access that so this one here is really a mistake sony memory stick reader in cupertino in the office we have actually has more so we have one camera set up and that camera allows you to take pictures now I can switch to remote monitor and I can actually look at what the campus looks like right now and it refreshes and you see here when the next image will be taken for ticks every minute or so you can configure it it takes a picture and updates the screen well that's one thing you can do with it with a webcam that's doable but just imagine the high-resolution this is just a scaled-down image so really you get a lot of details very very easily you don't have to again type in any IP address no nothing all you do and here it's just refreshing all you do is hook it up turn on the web sharing send URL to someone and if they have access to that machine they can get so going back to the to the browsing path you can if the camera support it you can take picture directly so you don't have to go to this monitor mode whenever you want you can trigger it you can download and you even look at the list view so you can actually see when was this picture taken you see we had even had a night shot from last night and we can just download that to disc end screen is not that well that will click on go ahead and see you so much okay get dragging out for you right away yeah ok so again if you look at that in actual size you see this is not a not a cheap webcam resolution is much higher quality ok so that's image capture web sharing let's go back to the slides and let's talk about the new API that we have in Panther well first of all and you saw that used by services and over by the modified version of text edit we have this common UI the ICA import image it really gives you an easy way to access the kind of nice UI easy to use you don't have to worry about thumbnails it will be speed optimized and present everything that's how the API looks like so all you do is in standard image capture where you specify parameters lock and the crawl back truck and the parameter clock has the object the device object for that you want to print up view I but actually made easier for you you can just specify 0 and that means if you have a single device connected well use that one if you have multiple devices connected we bring up a small selection box then you can let the user choose which one there's some flags you can specify do you want to have single or multiple selection you can specify file types that your application is going to support for example on the memory stick i also have an mp3 files and wouldn't do any good to allow pacing an mp3 file to graphic application there's also filter proc that you can specify and that through the pockets calls for each image before displaying it in the UI actually you can and look at that image and reject it if you don't want to display that and then you get back is in CF array ref with the data for all the user selected images so if you look at the text that is application what did I have to do in order to implement that well it was very simple because i just created a new message that gets called when the menu item was selected and I'm basically ziering out the ica input image parameter flock however I do specify the filter proc and supported file types so I specify just the callback Prok & as five Tiber just specifies tiff and jpg so I am willing to to import chief and JPG files and micro back pockets called the set before displaying or adding each image to the UI meaning i have the freedom to reject it if for example i'm working only with very small images i can reject all the ones that are more than a certain size and here i have to call back Froch which just calls into a method of the document and that's the i say import crawl back and all i'm doing in here is checking the return code i look at the error error code in the header file and also look back do i get back an array of NS data if so i get the first element of that array put it into an NS data and they actually the easiest way to get that into text that it was just make use of the facebook so basically act as pasting it in and that's what i'm doing yet another new API that we're going to add is I see a copy object thumbnail I say it capture object thumbnail is just retrieving the thumbnail why would we do that because we did it in the past by just using ica get property data while the reason to do it it's really we support multiple formats in the back we had our own I see a thumbnail format which was just raw data row RGB data now we also support jpeg and chips the advantage of this is they could be actually small atrophy might be compressed very well somehow and the other advantage is really we are now able to embed the color profile directly so if you ask for a jpeg or tiff we will embed a custom profile and when you display it it will be correct so for this API again parameter flock and call back block and two of you specify is just the object you specify the sample format and you get back some Hill data the last thing it's not actually a new API but it's new message type that we introduced the center and we're allowing now third-party applications there were certain vendors that want to use their application by passing image capture verification to talk to a camera device now this is a bit of a problem because whenever you connect the device an image capture camera module gets launched and it keeps the device and the only way in the past two to really get to that device was you did reset the bus we just ask you please do not reset the bus fruit force and and killing all existing image capture client SSO so we implemented this I see a device yields message so you just send to a device object and then image capture will release the device meaning you and your application can bypass image capture and use the device directly here's how you use it it's very straightforward it's just an icy object zend message parameter block that clear you specify the object and then the message type 2 k.i.t a message device heels and send that then image capture will release the device and you can contact so that's through the ends of the image capture overview and here are the contact persians Travis and John simera if you have any questions comments suggestions box that you want to report these are the right person [Applause] you