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