Configure player

Close

WWDC Index does not host video files

If you have access to video files, you can configure a URL pattern to be used in a video player.

URL pattern

preview

Use any of these variables in your URL pattern, the pattern is stored in your browsers' local storage.

$id
ID of session: wwdc2006-200
$eventId
ID of event: wwdc2006
$eventContentId
ID of session without event part: 200
$eventShortId
Shortened ID of event: wwdc06
$year
Year of session: 2006
$extension
Extension of original filename: mov
$filenameAlmostEvery
Filename from "(Almost) Every..." gist: ...

WWDC06 • Session 200

Graphics and Media State of the Union

Graphics and Media • 56:27

Mac OS X contains an incredible array of 2D, 3D, and multimedia technologies that provide a powerful springboard for innovation. Come learn how the powerful graphics and media frameworks in Mac OS X will enhance your application in this session filled with important details on Quartz, Core Image, OpenGL, QuickTime, and Core Audio. It is the perfect kickoff for developers attending the Graphics and Media track.

Speakers: Peter Graffagnino, Geoff Stahl

Unlisted on Apple Developer site

Transcript

This transcript was generated using Whisper, it has known transcription errors. We are working on an improved version.

Hello. Hi, everybody. Thanks for hanging out to the end of the day. We got some good stuff to show you. I don't think the session is going to go the entire length, but we got some great demos, so it'll be worth your time. So we're here talking about Leopard at the conference, which is the latest in our series of OS X releases. If you've been with us through the whole journey, it's been quite an amazing one.

And I'm going to talk a little bit about some of the things we've done through the journey of Mac OS X since 10.0. And I'm going to talk about it from a standpoint of an innovation cycle, where we build technologies into the OS, and the applications take advantage of those technologies and build products. And then we see how the products worked out, we get some feedback, we think of new ideas how to make that easier, and build more technology back in the OS.

And we've been doing that for the five years that OS X has been around. And I think it's done really well. So let's do a little bit of a history review right now. So on the technology front, when OS X 1.0 came out, or 10.0 came out, there was a bunch of things we knew we had to do in the operating system, obviously, to modernize ourselves from the old classic Mac OS code base. So first was 2D graphics. The 2D graphics, the engine of the user interface, we upgraded with PDF and PostScript compatible imaging model.

We used a windowing system that had a compositing engine built into it for nice alpha anti-aliased windows with drop shadows. We used QuickTime, obviously, for our media strategy. QuickTime, very popular and been around for a long time, tried and true, and we put that right into Mac OS X as well. For 3D graphics, the choice was pretty obvious, OpenGL.

We built that in. For audio, we knew we had to do some work. Sound Manager was... Not really going to cut it in our modern operating system. So we moved to Core Audio, really low latency audio solution for a full preemptive operating system. Really a great innovation there. And at the time, digital photography was starting to come out.

So we built in support in OS X.0, just plug and play with a lot of the USB cameras that were coming online at the time. Then let's look at what we did. Then let's look at what we did. We added in Jaguar. Jaguar, we added Quartz Extreme, which was taking that 2D windowing system with all the alpha channel and compositing and moving all of that up to the GPU to accelerate it to get a really fluid windowing system.

We also upgraded QuickTime at that point to track the standards that were going on in the media industry. That was MPEG-4, a critical standard there, especially for audio, the AAC standard, which was a really great investment for us with QuickTime 6. Then in Panther OS 10.3, a couple of more things we added.

We added WebKit, working with the open source community to build a really great browsing engine right into Mac OS X. GPUs were coming on the scene with programmability at this point, and so we built in all the programmable APIs into OpenGL so you could access GPU programmability. This was a pretty significant thing in the evolution of GPUs.

And as you know, last release in Tiger, we released a bunch of new stuff as well. On the QuickTime front, we upgraded the codecs once again following our standard strategy to go with H.264. This has been a great codec for us, a real important foundation technology. We added camera RAW support into the OS for all the digital still cameras out there. Very complicated to decode the sensor data, and we built all that into the OS. You can just open RAW images and preview. That's great.

And then Core Image, an image processing framework built to survive the test of time in terms of revolutionary GPU and CPU parallel architectures, where you can express algorithms that you don't have to recode them every time a processor changes. And of course, Quartz Composer, really a fun tool that we added to build procedural animations and data-driven animations without having to write a line of code.

And so that's what kind of we've been up to at the technology front. And let's kind of rewind the clock and go back through some of the products that came out of that. First off, the Aqua user interface. Aqua user interface, incredible in the day to look at those edges of those anti-aliased windows, the dock, how it's smoothly animated, you know, with no aliasing when it's scaled.

I mean, really upgraded the user experience and just the fit and finish of a desktop operating system. A huge amount. Of course, we weren't accelerating anything at that point, but we took the hit because we know we wanted a compositing windowing system, and that was a great investment.

The other thing that came along about that time, 2002, was iPhoto. Again, taking advantage of the digital camera support in the OS, obviously taking advantage of QuickTime and all of our 2D graphics APIs. In 2003, the Music Store came online, and here's where the investment in AAC and some modern audio coding technology really helped out. Of course, Core Audio playing a role as well as QuickTime.

And then Keynote. Keynote was a real significant application for me. I think we talked about it at one of the WWDCs a few years ago, because it really, of the day, took advantage of a lot of the technology we built in. Gorgeous 2D graphics and typography, video on a texture complete with transparency, OpenGL, when you go full screen and do a presentation, it's taking advantage of the graphics card. All of the technology is built together to make a really compelling presentation application.

That I still think has yet to be beaten. I think Keynote's a really great application. Safari. Again, reinvigorating the web browser market a little bit. After a hiatus, Safari and the other open source browsing engines really came online and really kind of drove browsing experiences to the next level.

And I always remember as a graphics guy when I first saw Safari rendering with nice anti-aliased fonts and everything looking really cool. It's like, yeah, you never know. I never knew the web could look so good. And really, I think Safari is a great application that shows off a lot of the graphics technology in the OS as well. Then Expose.

Expose was interesting because it was an interplay between the technology and the user experience guys. Once they realized with Quartz Extreme that we could move around all the windows in real time and everything was getting accelerated, they said, well, hey, we can apply that to the problem of window management and make it a lot easier for users to manage. Windows on their screen.

And so we get Expose, which was a really great innovation. Again, leveraging OpenGL and the power of the GPU. Apple came out with Motion, an application that kind of redefined how motion graphics applications are done. Very visual, lots of feedback, real-time feedback. Really great application and leveraging a lot of the technology built into the OS. Then, of course, I think the most important thing is that we have a lot of the technology that we use.

iChat U plus 3 has that great user interface done with OpenGL with the reflections, uses the greatest codec technology, H.264, core audio, all of those things put together to make a compelling user experience. Dashboard, again, once you realize you can put an information overlay over an entire display, and you can use WebKit to do that, you have a great way to manage data as an overlay on your display.

Next up was Aperture, again, taking advantage of the digital photography. The Quartz Extreme compositing windowing system for some of their heads-up user interfaces and their animated full-screen displays. Taking advantage of Bra built into the platform, taking advantage of Core Image for the processing pipeline. Kind of pushing the limits in how to deal with digital photography and really some breakthrough things there. Then again, back to iTunes for the Video Store. The Video Store was launched in 2005, takes advantage of H.264 and QuickTime to be able to sell videos on the web that are reasonable size to download and pretty good quality.

Photo Booth. Photo Booth was a great application to kind of, I think it happened in the span of about three weeks. You know, we were going to ship these iMacs with the cameras in them, and someone said, well, unless you've got a buddy to conference with, there's really nothing when a consumer opens it that they would have. And so there was this bomb run effort to see, well, what can we do that's sort of fun? And Photo Booth came out of that.

And the reason we could do that so quickly, obviously, was technology like Quartz Composer that we built into the OS to be able to just put that application together relatively quickly. And it's been phenomenally popular. I mean, even I myself find myself sitting in front of Photo Booth just playing with the distortions.

Yeah, you can waste a lot of time. And finally, Front Row. Front Row, you see us getting into more of the 10-foot user interfaces, using the same plumbing that's in the OS in terms of Quartz Extreme, OpenGL, Quartz Composer, to build a very engaging user interface. But it hasn't only been us taking advantage of all of these technologies. You guys, as well, have been doing some amazing applications on top of all this stuff.

And I'd just like to acknowledge a few of them. OmniGraffle in 2001. I think this is a great application for boxes and lines editing. You're always making diagrams, and this is always the easiest way to do it, I find. Great tool. Scott mentioned ToySight, which is another really interesting game that takes advantage of the camera, and you can interact with the camera, which is really fun. Big Bang Chess.

I think this app takes advantage of practically everything in the platform, including chat and all the graphics stuff. Kind of a really interesting... Never knew chess could be so cool. Comic Life. A great application for creating little comic book setups with your personal photos, adding effects to them.

Takes advantage of a lot of the technology, even core image, to do some image processing. That's a pretty interesting app. And of course, Delicious Library. Gorgeous user interface. All your stuff kind of rendered on your virtual bookshelf. A very cool app. So that's kind of the innovation cycle where... We see kind of all of us and all of you evolving together as the technology landscape changes, and our users give us feedback, and we come up with new ideas.

We're all able to kind of feed on each other and create a great ecosystem, and that's one of the great things about the Mac. And so my analogy for this is it's kind of like a jazz combo, you know, in the Smokey Nightclub, and everyone's riffing off each other, and we get GPU programmability here. Oh, let's go do motion, or let's go do core image, or something like that.

So it's a really pretty exciting, innovative way to go. Now, if you compare that with what might be going on up north... . This year we can, because this is not out yet. I played trumpet in high school and college, and C# was a bear. You could not improvise in C# to save anything.

But seriously... I think there is a point here. It's in fun, of course, but I think being a little more fluid and a little more interactive and a little more able to incorporate feedback. If you want to pick up an instrument and play it, if you want to write something in Ruby or Perl, if it's not managed code, oh no. It's a lot more fluid technology landscape out there than some of these grand architectures acknowledge. I think that that's kind of an interesting point to think about. I hope you found that amusing.

Okay, on to the serious stuff. We're going to talk about all the media technologies we have in Leopard for you, our audio, 2D, 3D imaging, and video technologies. Let's start with audio, what's new in audio in Leopard. We've got the audio QAPIs, which is a new API for feeding compressed data into the system. We've got a panner audio unit, which is kind of the guts of our OpenAL implementation. It's 3D positional audio, available as an audio unit.

We have some great interaction between QuickTime and Core Audio now, where you can insert an audio unit into the QuickTime audio playback pathway. This is really interesting. You can imagine combining that with the panner audio unit, and if you're playing video on a texture and flying it around, you could have it actually position its sound source where you want it to be. There's a new API, a new framework called Hardware Media Control, which is about controlling devices like big instruments or mixing boards, and you can actually control surfaces in a really straightforward, easy way.

And of course, there's OpenAL, keeping up with the standard there, OpenAL 1.1, and some extensions as well that we're adding onto that to leverage some of the audio units. One thing I thought I'd point out on Core Audio is this application called Rax. It was one of the Design Award entries this year. Really interesting application.

It's basically built for performance. And so this is your setup mode. Where you'd kind of set up all your instruments, some of which you're probably going to play with a MIDI keyboard, some of which might be played by the computer. You can set up your playlists and all of that. They've even skinned our audio units with some really nice UI. This is all very interactive and animated. This is the Matrix Reverb UI that they've put together, which is just our standard audio unit.

And then when you go live, you press the big go on stage button up there. And it flips over and you get a performance-oriented user interfaces where if you're playing and standing back a little bit from the computer, you get exactly what you need. You get your output levels, any notes, the audio load on the system, your set list. And in the middle, they have a Quartz Composer visualizer that you can plug in to play on a second monitor. And they have a nice way to package up Quartz compositions and feed them MIDI data or sound data in order to get a visualization of React.

But anyway, kind of a vertical app, but I thought real interesting in terms of how it's leveraged all of the technology and done some interesting things with user interface as well. A bunch of audio sessions. Find your favorite one quick before I click the slide and check them out. OK, that's audio. Let's talk about 2D graphics.

Quartz 2D and PDF, what's new there? The Quartz GL acceleration layer, we've been working on this for a few years, and it is in Leopard, and it is opt-in, so you turn it on if it helps your performance. We found that the performance profile of 2D graphics, it depends heavily on the application workload. In some cases, accelerate it with the GPU is not. In some cases, it is. So you can opt into that. We have a 16-bit per component rendering pipeline, which is plumbed all the way through ColorSync for image processing as well.

We had a floating point rendering pipeline that we had in Tiger, and this adds an intermediate one in case floating point is too much data for your application, so that's great. We've enhanced the print dialogs and upgraded our printer engine to CUPS 1.2. That brings along IPv6 and some other enhancements there. And previews getting an overhaul with an updated user interface, some better searching, and improved image editing. And I will show you some of that. In a minute.

But I have to give the obligatory plug for the Quartz book. How many of you guys have this book? Yes, great book. Written by people at Apple, and incredibly well written and very comprehensive. It kind of reminds me of the red book in the PostScript days. If you're programming Quartz, you need this book.

[Transcript missing]

So I'm going to launch the new interface builder, create a Cocoa windowed application. Make my menu-- make my window big. I'm going to drag out the PDF document view here.

becomes pre-populated with a copy of the PDF kit programming guide, conveniently enough. So while you're coding, you can-- I'm going to bring out-- this is the thumbnail view that I said was the new view. And I'm just trying to position him here. Let me select the document view again and bring up the inspector.

And the inspector has a bunch of features for PDF that are PDF specific. You can have it auto scale. You can have it go two up. These are available as methods as well, if you want to call them. But we have them in the configuration UI here as well. So let's leave it single page continuous with auto scaling on.

And then I'm going to go to the start This is the thumbnail view which I need to make stretch like that. And now I have to connect the two up. So I'm going to hold down Control and do the new connection inspector to make the PDF view be that outlet of the thumbnail view. Now I'm going to select both and layout and embed them in a split view.

I'm going to adjust my split view springs. And if you cross your fingers, Let's simulate the interface here. So again, it loads up by default with the PDF view, with the PDF document. And hey, I got the springs right. So it's all sizing correctly. And this can be multi-column. So that's a new feature we're adding. So that's pretty cool.

And this is all, you know, live. Obviously, it's taking events and, you know, you can select and do all that sort of stuff built into the document view itself. The other thing you can do with the thumbnail view is we allow you to reorder pages. So you can pick up a page, move it to the beginning. Pick up a page, move it to the end.

I should be able to delete a blank page, but I didn't put an edit menu in there. But that would be pretty easy as well. You can also drag in images from the desktop, and it'll just make a page and insert it right in there for you. So that's pretty straightforward to do. Obviously, some of these features you may see in preview. But it's all available to you in PDF kit. So that's the PDF kit demo. I'll just quit Interface Builder and go back to the slides. Thanks.

So the other thing I wanted to talk to you in the 2D graphics realm is Core Animation. A lot of the demos you saw of Core Animation were kind of 3D, but it's really a 2D technology. It has enough 3D to do 3D, convincing 3D scenes with depth queuing and Z opacity sorting, but it's really a layering engine at its heart. It allows us to create high production value, user experiences, smooth transitions between state. I talked about the implicit animations earlier. Layers are really the building block. So it's a fast animating layering engine.

[Transcript missing]

You can have a sublayers entry, again, very NSView-like. Sublayers are the children of the layer. You can have border, which can be rounded, of course. Then you can apply a filter to the contents of the layer. You can apply a shadow to a layer. In this case, it's red for illustration purposes.

You can then fade the layers. Every layer has an opacity. You can composite the layer into a background through any Core Image filter that takes two in and one out. Then you can apply a mask to that. Actually what LayerKit does, every frame of every animation, is transfer everything into the rendering engine.

The rendering engine builds a Core Image graph for it, every frame, and compiles it to the GPU and draws it. It's all built on top of Core Image, and that's why you see Core Image effects available as properties along the way. There's the 2D graphics sessions. Take note or look at your schedule guide. Let's talk about 3D.

So 3D graphics, OpenGL, obviously, you know, our foundation for 3D graphics. We talked about the multi-threaded engine before. We're upgrading to OpenGL 2.1, which was just announced to Graph last week. We pick up things from 2.0 as well, like non-power of two textures. There's some shading language extensions.

We're also including support for OpenGL ES, which is an embedded version of OpenGL, which has some simplifications, actually, over the OpenGL API. There's a lot of debate in the OpenGL community as to whether a more simplified API like OpenGL ES, which is actually more in line with what the hardware does, is kind of the way to go moving forward. So we thought it was interesting to start looking at ES. And ES and GL are coming together anyway in a new standards group called Kronos.

So I don't know if you follow OpenGL. But all of this sort of makes sense and where OpenGL is going. And 64-bit is kind of implicit in a lot of the frameworks we're talking about. But I thought I would mention it here in OpenGL in particular because I think a lot of scientific visualization applications really want to move to 64-bit. And so we're there with full OpenGL. We have some improved software fallbacks and some improvements to our tools, including live shader editing in the OpenGL profiler.

Now, OpenGL has been around for a while. And it started out in the days of CAD. Maybe not quite the IBM PC, but I thought it was a funny image anyway. And, you know, it's really gone from, you know, CAD, wireframe, simple grow shading, pretty sophisticated shading in recent years, shading in materials.

And now it's starting to move beyond that into physics, particle systems, people doing particle systems on GPUs, people simulating natural phenomenon GPU for smoke and fire and rain. And so, you know, with these new graphics processors, really, you know, you think of the power that's inside of that GPU, able to do amazing things.

And so what we wanted to do here was show you a technology demo. I'm going to invite Geoff Stahl up to the stage. The guys at ATI have put together. An amazing demo. They've showed it a few times. We're going to show it here running on a Mac called Toy Shop. And Geoff's going to talk to you about that. Geoff Stahl Thanks, Peter.

What I want to show you today is a technology demo that ATI has put together that really shows the power of the GPU and what you can do to make a truly cinematic experience. In this case, it's a toy shop on a rainy night. Can we go to the demo, please? So the demo starts off on the rooftop of the toy shop and what one can immediately notice is the rain effects.

Integrated into the scene, reacting with the objects in the scene. We see the puddle on the rooftop and we can see that there are ripples created by the rain particles falling. As we pan across we see the top of the edge of the roof here and we see puddles created with animated textures, or splashes created with animated textures.

We come down the edge of the simulation and we can see the falling particles. Again, a physics simulation being run on the GPU here. What I'm going to do is I'm going to go interactive for a moment and I'll hop down to one of the main areas of the simulation, which is the toy shop window.

What we see here is a water effect, the water meandering down the toy shop window. And one might think this was done offline and passed to the GPU. In fact, this entire physics simulation using velocity, surface tension, and mass of the droplets was all run on the GPU as a fragment shader and affects all the geometry behind it. It's very convincing effects. Really brilliant. It brings the user into the scene.

Let's move on and look at another very interesting section of the demo. In this case, it's this sidewalk. The sidewalk is made of cobblestones and the cobblestones, as you know, self-occlude each other and react dynamically to the light in the scene. One might think, wow, there's a lot of geometry there. That's really hard to do. In this case, there's very little geometry. In reality, it's just a few polygons.

A parallax occlusion mapping technique was used here to create the dynamic lighting, the self-occlusion, the soft shadows, and really lends itself to the scene. It's a very convincing simulation of cobblestones with very little geometry running almost everything through GLSL as a fragment shader on the GPU. Very convincing.

Let's look at what really the scene is composed of. Over 500,000 polygons per frame, 400 shaders, 20,000 particle effects, all run on the GPU. We bring up the wireframe. We can see, as we pull back, the scope of both what is run in geometry and what is on the fragment shaders. The road areas, for example, you can see are on fragment shaders. Very convincing demo put together by ATI, which shows the power of OpenGL on the GPU.

What is interesting about this is you don't need to use OpenGL in all cases to get the power of the GPU. We provide you with Core Animation. We provide you with Core Image. We provide you with Core Video, all to get the power of the GPU. Thanks very much, and I'll hand it back to Peter.

Thanks a lot, Geoff. We got a bunch of sessions on 3D graphics. In fact, we have some of the engineers from ATI here. We're going to talk about some of the techniques in that demo. It's actually pretty interesting stuff, if you can make that one. That's going to be in the shading language talk.

So next up in the 3D area is Quartz Composer. Quartz Composer, as you probably know, has been used in a bunch of recent products that we've done. There's the RSS screensaver back in Tiger, which was very cool. There's Photo Booth. You saw it this morning in iChat. The iMovie team actually uses Quartz Composer for some of their effects and themes. And you guys have been busy with Quartz Composer as well.

We looked at the graphics entries in the design awards, and about a third of them used Quartz Composer. So that's great to see you guys having fun with that. Quartz Composer in Leopard is going to have a bunch of new features. The number one requested feature is custom patches. There's a custom patches API in Leopard. Yeah, for all you custom patch guys here, you don't have to download the skanky SDK off the web anymore.

There's a repository of compositions, so if you want to do something like Photo Booth and allow the user to select from a bunch of compositions, you can do that with appropriate filtering in terms of what kind of composition is right for your application. There's a WebKit plugin that runs inside of Dashboard and Safari in order to create Dashboard widgets that might want to use Quartz Composer. There's animated desktops features, so you can set your desktop to a Quartz composition if you want. There's a bunch of new examples, new developer examples on the developer tools. I'm going to give you a demo of the number one requested feature, which is custom patches.

So we wrote a couple of custom patches to show you in the mad dash of the last two weeks before the conference. The first one is we found an interesting open source project out there called Ogre 3D. It's a basic 3D engine kind of built as what you might use as a rendering component of a game. It's pretty interesting technology and pretty portable. What we thought we'd do is wrap it in Quartz Composer plugin. So I'm going to bring in a couple of components here to my composition.

Let me resize my window a little bit. Then I'm going to bring in this composition, which is a ninja. The ninja character is like the Hello World you get when you compile Ogre. It's like one of their standard little guys you get. Not incredibly detailed model, but there he is.

And I'm going to bring in an animator. The interesting thing about the way Ogre works is-- and the way we chose to kind of expose it in this custom patch-- is it actually carries all the animation information from it. So you could create the model in an animation tool, and then have a bunch of animation channels you can pipe data into. And you can blend the animations in a pretty natural way. So I can make the Ogre do stuff. So let's do that.

I think I go to first animation position here. And so there's my animation timer running. I don't have him doing anything yet, but I'm going to have him-- he's got like a basic walk. He's got a stealthy walk. Stealth. He's got a spin. And I could blend these together, but we didn't really have time to put together a super complicated demo of this.

But the one thing we did do is we said, well, if he's going to jump, we can make him jump, and we can bring in the QC text logo and set up the rotation of that. So hopefully, if the timing's right, we'll have him jump over the Quartz Composer logo. So brilliant.

I won't tell you what happened in some debug versions of this. It wasn't pretty. Okay, next demo. So we wrote another patch. We said, "Well, that's pretty good to be able to do 3D."

[Transcript missing]

Which we actually have hooked up to an OpenAL custom patch to pan left, right as I go, so.

So that's pretty fun. The guys at Omni hopefully will forgive me, but it's almost as useless as OmniDazzle. There you go. No, I love those guys, so hopefully that won't be good. So the Quartz Composer sessions, there's a bunch that will be given, so check those out. You'll want to see that. So the 3D sessions, 3D graphics section I've covered. Now we're going to do the imaging section of the talk and talk about all the technology we have for imaging in the operating system. So Core Image. We talked about Core Image a little bit earlier.

New in Leopard is the raw processing capability that we're exposing through Core Image filters. We also have automatic user interface generation for filters, so you don't have to paw around in the P lists and create them from scratch. We have CI filter generator, which is sort of a macro facility where you can take a tree of filters and make them look like one macro filter. We have improved scalability, able to go up to thousands of filters in a filter chain.

There is a debugging performance tool, which is really helpful for figuring out Core Image performance bottlenecks. And on the image units front, we've allowed you to have custom user interface in your image units. And there's a validator tool and some more documentation for creating image units on Core Image. The next thing to do with imaging is a new technology this year called ImageKit. ImageKit, you can think of what we did with PDFKit and Preview.

ImageKit's doing the same thing to kind of the imaging side of Preview. So some basic classes, high-level user interface classes for dealing with images. Basic viewing, basic editing, basic browsing. And it's all powered by Core Image under the hood and Core Animation. So let me give you a quick demo of ImageKit. ImageKit.

So we wrote a sample application to try to show off as many classes in one application as possible. So when I launch the app, I get what we call the image browser view. This is an object you can use to have users select from a bunch of images. We've got about 5,000 images in this folder. You can see I can scroll through.

It's lazy in terms of how it brings the images in. It's got a scaling control as well. But kind of a nice object. You just point it at a folder, and it does the rest. Let me pick a picture here and bring up another class. This is called the image view class.

So this is your basic image viewer editor. It has zoom controls with animation, fit to size, actual size, those sorts of things. It has a crop tool with kind of a heads up display. You can actually crop. You'll see it kind of smoothly animates to the new state. Again, that's core animation behind the-- under the covers. That's the analogy I'm looking for. OK, it's got a rotation tool, again, with a heads-up user interface.

That works for rotation. And we have Image Edit. This is a little bit of a upgrade in the user interface from what was in preview in Tiger, kind of taking some of the transparent user interface

[Transcript missing]

I can, as Scott mentioned earlier, the image, the picture taker panel, which we also integrated into here.

There we are. There I am, and I'm black and white because I put that filter on. And to show one more class, if I go Save As, there's an accessory view that's built in that you can just throw into the Save panel if you want to support all the image types, so you don't have to do that anymore. Thank you.

And to show one more class, if I go Save As, there's an accessory view that's built in that you can just throw into the Save panel if you want to support all the image types, so you don't have to do that anymore. Thank you. I see it doing its thing there. Anyway, so that's -- ImageKit.

So here is a bunch of sessions to go check out imaging, image kit, Core Image. And that's it for imaging. Let's move on and talk about QuickTime. QuickTime is our foundation video technology in the operating system. It's been around for a while, and there's been over 1 billion downloads of QuickTime in its history. And it's shipped every year on 4,000 titles, including educational titles like the first grade app here, or the Italian language thing, or even the Sims.

And what's new for QuickTime in Leopard? Well, if you ask people what is QuickTime, you get a lot of different answers. And so I'm kind of divide this into the APIs, the implementation, looking at the file format, and last, looking at the web plugin. From the QuickTime API standpoint, you heard this morning that QtKit is really the path to the future.

It's the only way to access QuickTime from a 64-bit application. And it's where we're investing the energy to do these new capture APIs we call the Qt Capture APIs. And also, if you're in 64-bit and you need to do graphic importer-like things, you can do those using ImageIO. ImageIO is full 64-bit, so I wanted to point that out.

The QtKit Capture API, Scott talked about these a little bit, support for captures from devices, both USB and FireWire. And it supports simultaneous capture from multiple devices and record output to multiple devices as well. So that's pretty cool. And it also has a bridge to the sequence grabber components as well. If you need to access one of those, you can still use the QtKit Capture APIs and get it at those devices.

The QtKit Capture APIs are not supported in 64-bit. There's a lot of quick draw dependency in there, as you might imagine. It'll be continued to be supported in 32-bit. Obviously, we're not going to break anyone, but we do encourage you to upgrade to the new ones. So visual context instead of G worlds, using the sound media audio context, using compression sessions. So adopt the modern CAPIs wherever you see them.

And the QuickTime implementation, under the hood, we're doing a lot of work to revamp the low-level engine. Obviously, there's a lot of quick draw in there. We need to remove that. We're building some 64-bit clean, parallelizable substructure underneath QuickTime. And to really clean up the model view controller separation in QuickTime, a lot of times Codex would try to put up user interface, and we're trying to make that a lot cleaner.

The old engine we're going to keep around, obviously, because we're not going to break content or applications, but we're going to surface more and more new functionality based on this new plumbing. In fact, the Capture API we're talking about in QtKit is built on some new low-level plumbing. So I just wanted to let you guys know we are investing a lot in the low-level infrastructure of QuickTime and moving it forward pretty aggressively because it's critical to Apple.

On the format battle, there's been some interesting things going on with 264. It's really exploded even since last year in terms of industry momentum. Obviously, we've got the Blu-ray disc and HD DVD at the high-end, high-bitrate professional HD. We've got things like iChat U Plus 3 that we use very effectively to do low-latency, low-bandwidth conferencing, all the way down to the video iPod, which we introduced last fall with 264 as the codec that we use it. And the great thing about standards is, you know, you can find people who will sell you chips that do 264. And so it's really a great thing. And there's a whole ecosystem of 264 out there now, and it's a really great codec.

What are we doing new with 264? We're continue to improve our encoder performance, and we're going to make that even better in Leopard. So keep your eyes peeled on that. We're also going to introduce 264 with Alpha as a possibility. It is an optional part of the spec, but we think it's important, and we're going to implement that into the QuickTime infrastructure.

Why do you care about alpha video? Well, alpha, I mean, just like with images, not all video is rectangular. If it's meant to be a sprite or a matted piece of content, you want to get the video out of the box sometimes. I mean, what would, you know, Keynote or any application like that be without alpha images? Well, it's the same thing in broadcast production and things like that. You're constantly dealing with layers of things that have alpha.

Now, QuickTime, it's no secret to the broadcast production folks that QuickTime's had the plumbing for this for a while. In fact, you know, you can buy CDs full of PNGs or animation codec, little After Effects rendered out things that you can bring into a design and kind of use as a layer. The problem with these are the files are huge because these are lossless codecs.

And so it's hard to, you know, hard to actually deliver in that format. So with 264 with alpha, there's a way to deliver alpha. And so we're going to be doing some alpha video where you can make the appropriate tradeoff depending upon your delivery vehicle between quality and size. And so we think that's going to be really interesting. So let me show you some alpha video.

I'm going to launch a copy of Keynote. And as I said, QuickTime has had the infrastructure, as has Keynote, to support alpha video for a while. So here is a animated lower third, something you might use in broadcast design. The PNG movie is 133 megabytes, and the alpha 264 movie is 2 megabytes. And just to see, you can put it over whatever background you want.

And then, of course, you can buy CDs full of obligatory dancing baloney and do whatever you want. This one weighs in at 250 megabytes, and the Alpha 264 is about a tenth the size, less than a tenth at 20. And, you know, these are ready to be composited over, you know, probably rendered in a 3D program as a little motion clip.

Or you can buy pre-matted footage. I know the actor's a little creepy in this one, but... So, you know, pre-matted footage. The PNG for this is about 140 megabytes. 264 with alpha, take that down to two and a half, and let's put them in Tahoe. There we go. Okay, so if you weren't convinced before, you're convinced now. Alpha Video.

So let's talk about QuickTime on the web. QuickTime has been adopted by a bunch of websites out there, some of the biggest names on the web. In fact, we see about 25,000 referring requests to our servers every day on QuickTime. And the most important thing for us with the web and QuickTime is the plugin.

It's the most critical playback experience. The majority of QuickTime is experienced in the browser through the plugin. Now, the QuickTime plugins actually had a very robust JavaScript interface for a while, for a few releases now. And so it's already sort of Ajax and Web 2.0 ready, even though we didn't know it at the time that's what we were doing.

But you can actually do a lot with the QuickTime plugin. And there's a few sites that take advantage of it, but I think it is a little bit underused. And we want to continue to invest in that and really take it to the next level and make QuickTime the plugin of choice for adding video to Ajax-type applications. So let me give you a demo of some of our work in that area.

To demo any web content, you must launch the web author's tool of choice, BBEdit. I'm sorry I didn't get a chance to make the fonts bigger for you, but you've all seen HTML before. So this is a typical web page you might see out there on the web with some QuickTime content in there. The standard controller, you can scrub, play. Pretty basic. I mean, the HTML, you can see it doesn't even go half a page there.

So that's kind of cool. But what about this JavaScript interface you're talking about? So if you want to skin a QuickTime movie in HTML and JavaScript, you can actually do that because you can have full control over play, pause, stop in there. So we have this little animated controller that I can actually just use with the mouse here. And this is just a CSS div with some JavaScript and associated thing. I think it actually uses the Yahoo UI framework. So that's pretty cool.

The one issue, though, is that-- suppose I wanted to drag, oh, the controller over the video. Well, that doesn't work too good. So what am I going to do about that? So we looked into that, and it turns out that Safari is going to quit. OK. It's OK. It'll come back.

We looked into that, and it turns out that at the cost of a little bit of performance, we can actually render synchronously with the browser and provide a more seamless experience. So here I am with the same controller, except now compositing over the video. If I get to a place where the video is actually playing, it might be more impressive. There we go.

And this machine is able to keep up just fine, even though it's kind of rendering in the damage repair loop of the browser instead of rendering asynchronously like a lot of video plugins do. And the way you enable this in a web page is you just add one line of code to the rendering mode. I think we call it transparent, which just allows it to be a first-class citizen in a CSS Z order layering system. So that's pretty cool. But once you can do that, if you actually let some real web designers look at it, you might get something like this.

So this is a site using the technology and the transparent QuickTime plugin. The QuickTime is being framed by some PNG images. We have our transparent controller here, which I can move around over the video. I've got a few JavaScript rollovers that are working just as you would expect, as if it was just an image background. Over here on the Superman logo, you can see I'm using some of that alpha 264 to have just a nice little highlighting effect.

So that's just another embed tag with a transparent movie there. And then if I bring up a little infographic, you can see I've got kind of a star field effect going underneath there, another alpha layer, alpha 264 layer on there. And since it's just web content, I can change the font size. It's all just CSS and getting styled. So that's pretty good that it's all integrated like that. So yes, feel free to applaud anytime.

And again, since it's just web content, it can just be restyled with a print style sheet to bring up if you wanted to show something fancier like that. That's all pretty cool. So that's what I wanted to show you as far as the web plugin goes. So pretty cool stuff.

So what are we doing in Leopard? We're adding transparent mode rendering, and it's not just going to work in Safari. It's going to work cross-browser and cross-platform. So that's great. In transparent mode, we render synchronously with the browser, so we're in its main paint loop. Take a little bit of a performance hit, as I said, but I think it enables enough features that a web designer will use it appropriately.

It allows video to be a first-class citizen in a CSS design, respecting Z order and opacity, as you would expect. And we're going to add some enhancements to the JavaScript API. We've got a number of requests for things like better event triggers out of movies and things like that, so we're going to add that.

But I do have one more demo for you before I wrap up, which...

[Transcript missing]

Let me break apart those layers for you and show you what's going on. There's the topmost layer, PNG image with JavaScript. Second layer, our alpha 264 video. Third layer, transparent controller. It actually can still drag it, too.

Fourth layer is the little menu bar that's just a bunch of CSS. The next layer is the Superman call out with more info on the movie, an image, and a div. We have our Starfield. And we have the two pings, or it might be one ping that kind of frames the movie while it's playing.

We've got our poster frame, which is the layer that's there when you first show it, and then it gets its opacity set to zero in order to show the movie. So he's there, and then finally the movie in the background. And so let's just-- so that's-- yeah, go ahead. Clap.

I'll just put them all away for you like that. How's that? There we go. So there's a bunch of sessions on QuickTime. They'll be going on throughout the week, so check those out as well. So that's what's new in QuickTime. So I've talked to you about all of the graphics and media technologies in the OS and what's new in Leopard.

But of course, that's not all. There's tons of sessions on tons of stuff. So go learn about all of it and build it into your app. So with Mac OS 10.5, we really want you guys to start to take advantage of some of our new technologies like Core Animation, ImageKit.

[Transcript missing]

and we're really looking forward to see what kind of apps you guys create at next year's WWDC. So check out to see us in the feedback forum, visit us in the lab, enjoy the leopard seed we gave you, and we'll see you later. Have a great show. Thank you.