TweetFollow Us on Twitter

September 94 - SOMEWHERE IN QUICKTIME

SOMEWHERE IN QUICKTIME

Media Capture Using the Sequence Grabber

JOHN WANG AND FERNANDO URBINA

[IMAGE 085-088_QuickTime_col._h1.GIF]


A very important and often overlooked feature of QuickTime is the standardization of media capture. Since its initial release, QuickTime has defined an API for capturing different types of media, including video and sound. This API, known as the sequence grabber, makes it possible to easily add media capture to any application.

Not only are applications that use the sequence grabber able to automatically support any QuickTime-compatible media capture hardware, but they also perform flawlessly and efficiently regardless of system configuration. This is not an easy task considering all the variations in hardware features and system configurations. In fact, we're even hesitant to say that the sequence grabber "supports video and sound capture" because the sequence grabber API also insulates the programmer from the actual media type being captured. The sequence grabber supports any media type, and, with the release of QuickTime 2.0, users can automatically capture the new music media type in addition to sound and video.

To demonstrate the proper use of the sequence grabber, we've included on this issue's CD a simple, but complete, sequence grabber application -- all in about 10K of compiled C code! If you're looking for a general all-purpose capture application that's efficient, reliable, and best of all, customizable, look no further. After a brief introduction to the sequence grabber, we'll discuss the sample code, and then end with some special considerations for media capture on Macintosh AV models.

WHAT IS THE SEQUENCE GRABBER?
The sequence grabber is actually a component of type 'barg' (read it backwards). Although the specification for the component is completely defined in Chapter 5 ofInside Macintosh: QuickTime Components , it's very unlikely that you'll ever want to implement your own 'barg' component. Instead, you'll be using this component specification as the API definition for the standard sequence grabber.

The sequence grabber component implements the basic functionality of media capture. For handling specific media-related functions, the sequence grabber calls on various sequence grabber channel components (as defined in Chapter 6 ofInside Macintosh: QuickTime Components ); there's one such component for each media type. Before QuickTime 2.0, the two standard channel components available were the video and sound sequence grabber channels, enabling the sequence grabber to capture video and sound media. QuickTime 2.0 includes the new music sequence grabber channel, allowing real-time capture of music from MIDI instruments.

Sequence grabber panel components (described in Chapter 7 ofInside Macintosh: QuickTime Components ) manage items in a settings dialog box that allows the sequence grabber to obtain configuration information from a user. Applications typically don't use sequence grabber panel components directly; instead, the sequence grabber automatically uses them for relevant sequence grabber component calls.

USING THE SEQUENCE GRABBER
Using the sequence grabber is as simple as opening the sequence grabber component and calling SGInitialize (complete error checking can be found in the sample code on the CD):

theSG = OpenDefaultComponent(SeqGrabComponentType, 0);
SGInitialize(theSG);

It's also important to call SGSetGWorld to set the window used for displaying any visual data.

SGSetGWorld((**myWindowInfo).theSG, (CGrafPtr) myWindow, nil);

Opening the channel components. Now it's a matter of calling SGNewChannel to open a sequence grabber channel component to access a particular channel media type. However, rather than hard- coding the media types into the sample application, as in the call

SGNewChannel(theSG, VideoMediaType, &videoChannel);

it's better to use the Component Manager to search for all the different sequence grabber channel components and open a connection to each one. This guarantees that the capture application can automatically support new media types such as the music media type in QuickTime 2.0.

For example, the following code compiles a list of sequence grabber channel components:

cd.componentType = SeqGrabChannelType;
cd.componentSubType = 0;
cd.componentManufacturer = 0;
cd.componentFlags = 0;
cd.componentFlagsMask = 0;
aComponent = 0;

for (i=0, done=false; i<kMAXCHANNELS && !done; i++) {
    aComp = FindNextComponent(aComp, &cd);
    if (aComp != 0) {
        // Get the channel name and type.
        gSGInfo.channelName[i] = NewHandle(4);
        GetComponentInfo(aComp, &theCD, 
            gSGInfo.channelName[i], nil, nil);
        gSGInfo.channelType[i] = theCD.componentSubType;
    } else
        done = true;
}

This list of component types can then be used to open a connection to each of the media types with SGNewChannel, or SGNewChannelFromComponent if the channel component is already open.

Saving and restoring settings. We want the sample application to start up each time with the same channel settings and video compression settings as when the application was last used. To implement this, we use a preferences file to store these settings. The compression settings are restored with two sequence grabber calls:

SGSetVideoCompressorType(
    (**myWindowInfo).channel[videoChannel],
    gSGInfo.cInfo.compressorType);
SGSetVideoCompressor(
    (**myWindowInfo).channel[videoChannel],
    gSGInfo.cInfo.depth, nil,
    gSGInfo.cInfo.spatialQuality,
    gSGInfo.cInfo.temporalQuality,
    gSGInfo.cInfo.keyFrameRate);

The channel settings are restored by a simple call to SGSetChannelSettings with the settings retrieved from the preferences file:

SGSetChannelSettings(theSG, channel[i],
    channelSettings[i], 0);

Previewing. We're almost ready to begin previewing. But note that some sequence grabber channel components require additional calls before they can be used. For instance, spatial channels such as video require a call to SGSetChannelBounds to set the channel's display boundary rectangle. So, once the channels are created and the previous settings are restored as discussed above, we make a call to SGSetChannelBounds for the video media to set the video capture to encompass the entire window. We also call SGSetChannelUsage for all sequence grabber channels, which tells the sequence grabber that we want to preview and record every channel.

To start previewing, we simply call SGStartPreview. However, while we're previewing, any changes to the system must be handled with care. First, we'll pause the preview whenever an event that requires updating of the channel information occurs. For example, if the capture window is dragged, we'll pause the video, move the window, and then unpause the video. Likewise, if we resize the window, we'll want to pause the preview, resize the window, and then unpause the preview:

// Pause the sequence grabber before resizing.
SGPause((**myWindowInfo).theSG, true);

// Resize and then update the video channel.
SizeWindow(theWindow, width, height, false);
MyUpdateChannels(theWindow);

// OK. We can restart again.
SGPause((**myWindowInfo).theSG, false);

Notice the call to MyUpdateChannels. This is a routine in the sample application that updates the video bounds and channel usage by calling SGSetChannelBounds and SGSetChannelUsage.

The user configuration dialog. Another feature that needs to be handled in a capture application is the user configuration dialog for each of the different capture medias. This is actually one of the simplest things to deal with because the sequence grabber component handles everything. It even stores the settings internally. To retrieve the settings, we can simply call SGGetChannelSettings at a later time. In the sample application, we get the channel settings before we close the connection to the sequence grabber. Then we save the settings in the preferences file.

This is all the code necessary to display and handle the user configuration dialog:

SGSettingsDialog(theSG, theChannel, 0, nil, 0, nil, 0);

Recording. The last important part of the sample code is sequence grabber recording. Before recording can begin, we need to specify an output file with SGSetDataOutput so that the sequence grabber knows where to save the captured media data:

StandardPutFile("\PName of new movie:", "\pMovie", &reply);
if (!reply.sfGood)
    return;
SGSetDataOutput(mySG, &reply.sfFile, seqGrabToDisk);

Then we start recording by simply calling

SGStartRecord(theSG);

We loop and call SGIdle until the mouse button is pressed to stop recording. This is the most efficient way to record: we don't want to call WaitNextEvent, since that would give other processes time. Instead, we want to hog the CPU time until the recording process is done.

while (!Button() && !err) {
    err = SGIdle(theSG);
}

We stop recording and start previewing again as follows:

SGStop(mySG);
SGStartPreview((**myWindowInfo).theSG);

And, of course, just to be nice, we flush the mouse-down events so that no application switching takes place after the mouse button is pressed:

FlushEvents(mDownMask, 0);

That's really all there is to the sequence grabber sample application.

SPECIAL CONSIDERATIONS FOR AV MODELS
As mentioned earlier, one of the key features of the sequence grabber is its ability to work with all hardware and system configurations. This is not an easy task considering all the different types of video capture boards. For example, there are boards that are simply frame grabbers, and there are those that support on-board hardware video compression. To make every configuration work, the sequence grabber has to handle every case. Here we'll discuss the unique features of the Macintosh AV models and some steps you can take to improve their capture rate.

The video-in circuitry allows the AV models to display 16-bit color and 8-bit grayscale. And, although the hardware can't display video-in at 24 bits per pixel, you can capture video using YUV 4:2:2 compression and achieve an effective 24 bits per pixel. To capture in YUV, you must use the AV's video digitizer hardware compression feature, which you can do simply by selecting "Component Video - YUV" from the list of compressors in the Compression panel of the video settings dialog. You should also make sure that you haven't checked a "Post Compress Video" or similar checkbox in a movie-grabbing application. Selecting this checkbox would bypass the hardware compression, and the sequence grabber would grab the data in raw RGB format.

The AV circuitry can't display video when it's capturing the compressed data. The sequence grabber realizes that it needs to decompress the data into the capture window in order to give the visual feedback that's normally expected. This is fine and dandy, but since there's no hardware decompression in the system, the image decompression is completed in software. This degrades the capture rate.

Knowing that the decompression during recording is what's hurting the capture rate, you can easily rectify the problem by turning off preview during recording so that decompression into the capture window won't take place. To do this, you just call SGSetChannelUsage for the video channel with the seqGrabPlayDuringRecord flag set to 0. In the sample code, a menu selection allows you to turn off video playthrough during recording.

The downside of using YUV compression is that playback without hardware decompression isn't very smooth because of the high data rate and raw processing power needed to decompress each pixel. After capturing, you should recompress the movie using a compressor such as Cinepak or Video that provides a better playback rate.

GO MAKE A MOVIE
The sequence grabber obviously makes the job of media capture simpler. But there are many other factors that can play a part. Hard drive transfer rate, disk fragmentation, SCSI bandwith, sound settings, and AppleTalk activity all play an important part in limiting the maximum capture rate. You can also maximize the capture rate by rebooting with no AppleTalk connections. You should also experiment with the different sound sample rates, as these also affect the capture rate.

New additions to the sequence grabber in QuickTime 2.0 also help. Instead of capturing to a single movie file, it's now possible to specify a different file for each channel. For example, you can record video to a large and fast external hard drive and record audio to the internal hard drive. This optimization allows for better allocation of resources and better efficiency because each channel has higher bandwidth. Using the sample code, if QuickTime 2.0 is installed, you can select recording to separate files.

There are, of course, other optimizations that can be explored. With a bit of creativity and testing, you can achieve the optimal capture rates.

RELATED READING

  • Inside Macintosh: QuickTime Components , Chapters 5-7, and Inside Macintosh: More Macintosh Toolbox , Chapter 6, "Component Manager" (Addison-Wesley, 1993).
  • "Video Digitizing Under QuickTime" by Casey King and Gary Woodcock, develop Issue 14. About the sequence grabber and video capture.

JOHN WANG (AppleLink WANG.JY) While writing the sequence grabber sample code for this column, John watched the movie Top Gun so many times that he can now duplicate each and every air combat scene with his favorite flight simulator, FA/18 Hornet. John once aspired to become a private pilot, but that idea was quickly quelled once his significant others found out. As Skate so succinctly put it, "Woof woof wooof?" Translation: "Who's going to feed me if you kill yourself?"*

FERNANDO ("NANO") URBINA (AppleLink NANO) uses his Macintosh AV to capture the views of the Rockies from his home office in Colorado Springs. He still doesn't understand how it can thunder and snow at the same time, but thinks he'll be able to figure this out once he adjusts to the lack of oxygen. Nano suffers severe withdrawal from his favorite coffee shop near the Apple campus in Cupertino, but manages to get a fix about once a month when he returns there. He worked on the original AV models and is now a member of the second-generation AV team. *

Thanks to Peter Hoddie and Don Johnson for reviewing this column. *

 

Community Search:
MacTech Search:

Software Updates via MacUpdate

Chromium 64.0.3282.167 - Fast and stable...
Chromium is an open-source browser project that aims to build a safer, faster, and more stable way for all Internet users to experience the web. Version 64.0.3282.167: [806388] High CVE-2018-6056:... Read more
Parallels Desktop 13.3.0 - Run Windows a...
Parallels allows you to run Windows and Mac applications side by side. Choose your view to make Windows invisible while still using its applications, or keep the familiar Windows background and... Read more
Bookends 13.0.6 - Reference management a...
Bookends is a full-featured bibliography/reference and information-management system for students and professionals. Bookends uses the cloud to sync reference libraries on all the Macs you use.... Read more
macOS 10.13.3 Supplemental Update 1.0 -...
macOS High Sierra Supplemental Update includes security improvements to Safari and WebKit to mitigate the effects of Spectre. Version 1.0: Update fixes an issue where using certain character... Read more
ffWorks 1.0.6 - Convert multimedia files...
ffWorks (was iFFmpeg), focused on simplicity, brings a fresh approach to the use of FFmpeg, allowing you to create ultra-high-quality movies without the need to write a single line of code on the... Read more
Adobe Acrobat 18.011.20035 - Powerful PD...
Acrobat DC is available only as a part of Adobe Creative Cloud, and can only be installed and/or updated through Adobe's Creative Cloud app. Adobe Acrobat DC with Adobe Document Cloud services is... Read more
Adobe Acrobat Reader 18.011.20035 - View...
Adobe Acrobat Reader allows users to view PDF documents. You may not know what a PDF file is, but you've probably come across one at some point. PDF files are used by companies and even the IRS to... Read more
EtreCheck 4.0.3 - For troubleshooting yo...
EtreCheck is an app that displays the important details of your system configuration and allow you to copy that information to the Clipboard. It is meant to be used with Apple Support Communities to... Read more
Yummy FTP Pro 2.0 - $29.99
Yummy FTP Pro is an advanced Mac file transfer app which provides a full-featured professional toolkit combined with blazing speeds and impeccable reliability, so whether you want to transfer a few... Read more
Opera 51.0.2830.34 - High-performance We...
Opera is a fast and secure browser trusted by millions of users. With the intuitive interface, Speed Dial and visual bookmarks for organizing favorite sites, news feature with fresh, relevant content... Read more

Latest Forum Discussions

See All

Check out these 5 games that are a lot l...
So you're in love with Minecraft, but you're looking for something else to play as well? You've come to the right place then, because this list is all about games that are a bit like Minecraft. Some of them, more than others. [Read more] | Read more »
Our top 5 characters from casual RPG Cre...
Creature Quest definitely lives up to its name with a host of collectible creatures based on fantasy tales and world mythologies. To celebrate Creature Quest’s first birthday, we’re going to lay out what we think are the five best characters in the... | Read more »
Around the Empire: What have you missed...
Did you know that Steel Media has a whole swathe of other sites dedicated to all aspects of mobile gaming? Sure you'll get the very best iPhone news, reviews, and opinions right here at 148Apps, but we don't want you missing out on a single piece... | Read more »
All the best games on sale for iPhone an...
Oh hi there, and welcome to our round-up of the best games that are currently on sale for iPhone and iPad. You thought I didn't see you there, did you, skulking behind the bushes? Trust me though, the bushes aren't where the best deals are. The... | Read more »
The Battle of Polytopia Guide - How to H...
A new update just released for The Battle of Polytopia (formerly Super Tribes), which introduces online multiplayer. For all the fans of Midjiwan’s lite take on Civilization, this is certainly welcome news, but playing online isn’t as easy and... | Read more »
Here are the very best mobile games to p...
It's Valentine's Day! Did you get loads of cards and chocolates and other tacky, simple expressions of human affection? Did you send out tat because you find it almost impossible to express emotion unless there's a section dedicated to it at your... | Read more »
Florence (Games)
Florence 1.0 Device: iOS Universal Category: Games Price: $2.99, Version: 1.0 (iTunes) Description: Florence is an interactive storybook from the award-winning lead designer of Monument Valley about the heart-racing highs and... | Read more »
Purrfect Date (Games)
Purrfect Date 1.0 Device: iOS Universal Category: Games Price: $4.99, Version: 1.0 (iTunes) Description: Cats are a lil’ like marmite. Either you absolutely head-over-heels love’ em, or… nahhh, who are we kidding?! Everyone... | Read more »
More monsters to collect and evolve in C...
A laid-back mix of RPG and TCG, Creature Quest is all about building your deck, evolving your creatures and winning in battle. It’s the creation of VC Mobile, set up by Might and Magic producer Jon Van Caneghem. There are elements of that classic... | Read more »
Check out this awesome hands-on with the...
Well, PlayerUnknown's Battlegrounds has come out on mobile. This isn't a clone, this isn't a riff on the battleroyale mechanics of the game, it's the official mobile port by Tencent. But there's a little bit of a hitch. [Read more] | Read more »

Price Scanner via MacPrices.net

Apple refurbished Mac minis in stock again st...
Apple has restocked Certified Refurbished Mac minis starting at $419. Apple’s one-year warranty is included with each mini, and shipping is free: – 1.4GHz Mac mini: $419 $80 off MSRP – 2.6GHz Mac... Read more
Tuesday MacBook Deals: $250 off 15″ 2.9GHz Ma...
Adorama has the Silver 15″ 2.9GHz Apple MacBook Pro on sale today for $250 off MSRP. Shipping is free, and Adorama charges sales tax for residents in NY & NJ only: – 15″ 2.9GHz Silver MacBook Pro... Read more
Save up to $350 with these Apple Certified Re...
Apple has a full line of Certified Refurbished iMacs available for up to $350 off original MSRP. Apple’s one-year warranty is standard, and shipping is free. The following models are available: – 27... Read more
B&H offers $200 discount on Silver 15″ Ma...
B&H Photo has Silver 15″ Apple MacBook Pros on sale for $200 off MSRP. Shipping is free, and B&H charges sales tax for NY & NJ residents only: – 15″ 2.8GHz Touch Bar MacBook Pro Silver (... Read more
12″ Apple iPad Pro Sale of the Year! Models u...
B&H Photo has 12″ #iPad Pros on sale for up to $150 off MSRP. Shipping is free, and B&H charges sales tax in NY & NJ only: – 12″ 64GB WiFi iPad Pro: $719 $80 off MSRP – 12″ 256GB WiFi... Read more
Deals on 32GB 9″ iPads: Up to $50 off MSRP, s...
B&H Photo has 2017 9.7″ 32GB iPads on sale for $299 including free shipping plus NY & NJ sales tax only. Their price is $30 off MSRP, and it’s currently the lowest price available for these... Read more
15″ 2.2GHz Retina MacBook Pro available for o...
Apple has Certified Refurbished 15″ 2.2GHz Retina MacBook Pros available for $1699. That’s $300 off MSRP for this model, and it’s the lowest price available for a 15″ MacBook Pro currently offered by... Read more
13″ 3.1GHz/256GB Silver Touch Bar MacBook Pro...
Amazon has the Silver 13″ 3.1GHz/256GB Touch Bar MacBook Pro (MPXX2LL/A) on sale for $1649.99 including free shipping. Their price is $150 off MSRP, and it’s the lowest price available for a new 13″... Read more
Saturday Sale: Amazon offers 13″ 1.8GHz/256GB...
Amazon has the 13″ 1.8GHz/256B Apple MacBook Air on sale today for $250 off MSRP including free shipping: – 13″ 1.8GHz/256GB MacBook Air (MQD42LL/A): $949.99, $250 off MSRP Their price is the lowest... Read more
Roundup of Apple Certified Refurbished 12″ Ma...
Apple has Certified Refurbished 2017 12″ Retina MacBooks available for $200-$240 off the cost of new models. Apple will include a standard one-year warranty with each MacBook, and shipping is free.... Read more

Jobs Board

*Apple* Retail - Multiple Positions - Apple,...
Job Description: Sales Specialist - Retail Customer Service and Sales Transform Apple Store visitors into loyal Apple customers. When customers enter the store, Read more
Strategist, *Apple* Media Products, Content...
# Strategist, Apple Media Products, Content and Marketing Job Number: 113399632 Santa Clara Valley, California, United States Posted: 20-Feb-2018 Weekly Hours: 40.00 Read more
*Apple* Store Leader - Retail District Manag...
Job Description:Job SummaryAs more and more people discover Apple , they visit our retail stores seeking ways to incorporate our products into their lives. It's your Read more
*Apple* Retail - Multiple Positions - Apple,...
Job Description:SalesSpecialist - Retail Customer Service and SalesTransform Apple Store visitors into loyal Apple customers. When customers enter the store, Read more
*Apple* Retail - Multiple Positions - Apple,...
Job Description: Sales Specialist - Retail Customer Service and Sales Transform Apple Store visitors into loyal Apple customers. When customers enter the store, Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.