QuickTime 1.6 FeaturesQuickTime QuickTime 1.6 April, 1993This note is a technical discussion of the changes between QuickTime 1.5 and QuickTime 1.6. QuickTime 1.6 introduces some new features, and is more reliable than other QuickTime versions. The note also discusses the new features of QuickTime 1.6's Component Manager.Topics• QuickTime 1.6 Features: Describes how to access the new features.• Component Manager 3.0 Features: Describes how to access the new features.• QuickTime 1.6 Bug Fixes: Describes the bug fixes.QuickTime 1.6 FeaturesThe new features of QuickTime 1.6 are fully described in this note. These new features can be logically divided into two sections: "Features You Get For Free" and "Features You Get With Some Code." This documentation assumes the reader is QuickTime-literate. If this documentation does not suffice, refer to Inside Macintosh: QuickTime and Inside Macintosh: QuickTime Components which are currently available from APDA. In addition, most QuickTime questions are answered through rummaging through the sample code and/or applications on the QuickTime 1.5 CD. Also, the QuickTime 1.0 CD serves as an excellent reference.Features You Get For FreeThis section describes the features of QuickTime 1.6 which are added transparently to QuickTime. In general, your application will not have to do anything to your application for these features. But the user may have to install a specific extension and/or have the appropriate equipment. QuickTime 1.6 exploits these extensions: Sound Manager, Macintosh Easy Open, and ColorSync. In addition, it exploits the CD ROM 300(i), grayscale PowerBooks, Macintosh LC II class machines, Quadras, and stereo output devices. The exact nature of the exploitation is discussed in the various sections below.Reduced Memory FootprintQuickTime 1.6 code has been segmented. QuickTime's code segmentation allows unused code segments to be unloaded when not in use. QuickTime 1.6 uses less than 18k when installed whereas QuickTime 1.5 used approximately 160k.Because of this segmentation, substantially less memory is required for movie playback. If applications are not using a particular functionality, the corresponding code segments may be unloaded. For example, movie editing code will not be loaded unless the movie application requires it. Sound Manager 3.0 SupportQuickTime 1.6 is released with the new Sound Manager, Version 3.0. Since the new Sound Manager completely replaces the existing Sound Manager, it will work with all versions of QuickTime and all existing applications. If the Sound Manager 3.0 is installed, QuickTime 1.6 will take advantage of it's new features.You can use QuickTime with the Sound Manager 3.0 in the following ways:• Spit multiple sound tracks into one sound resourceThe best feature of the new Sound Manager is the ability to mix multiple sound tracks into one sound resource.• Play sound more efficientlyThe new Sound Manager lessens the load on the CPU for sound. As a rule of thumb, you will be able to get one extra frame per second for video playback.• Support alternate sound output devicesThis allows you to hook up hardware to your Macintosh for CD quality 16-bit 44 kHz stereo sound output.• Allow better control over multiple sound channelsWith Sound Manager 3.0, sound overdriving is now possible. By setting the movie volume above 1.0, the sound will actually be overdriven. • Support true balance control• Handle sound mixing better, which improves the quality of multiple sound track playback• Use the new Sound Control PanelCompact Video EnhancementCompact Video playback to 16 bit destinations (thousands of colors) is now higher quality. The dithering algorithm has been significantly improved.Audio CD ImportA Movie Import component has been provided which allows you to open Audio CD tracks from QuickTime’s Standard File Preview dialog, just as you could open PICS and AIFF files with QuickTime 1.5. If you have a Apple CD 300 or CD 300i drive, you can use QuickTime 1.6 to convert tracks of your favorite audio CD directly into QuickTime movies. Figure 1. When you try to open an audio track on a CD 300(i), the Open button will change to a Convert… button. When you click this button, the Audio CD Import Options dialog will pop up. With this dialog, you can configure the sound settings of the movie. The rate, size, and channel can be specified for the movie. In addition, you can select the portion of the track which should become a movie. You can select the start time and end time for the track. You can play your selection to be sure you have the selection you want.Text Track ExportA Text Movie Export component lets you easily extract text from movies. With Macintosh Easy Open installed, you can copy a series of text frames from a movie, and paste them directly into any application that supports text, such as MPW.Macintosh Easy Open SupportQuickTime 1.6 fully supports Macintosh Easy Open. Macintosh Easy Open is an Apple system extension which provides document and clipboard translation for all applications. If a user has Macintosh Easy Open installed in combination with QuickTime 1.6, then they can copy and paste various media formats without thought.QuickTime 1.5 contained translation components for importing and exporting movie data from files and the clipboard. QuickTime 1.6 provides a Macintosh Easy Open translation component which makes all QuickTime movie import/export components work automatically with non-QuickTime-aware applications. For example, you can paste a sound track into a Sound Editing application, and it will translate the format from a QuickTime sound movie to a sound file.QuickTime 1.6 includes support for importing sound, PICTs, and PICS. It also supports exporting movies to PICT and sound. Additional MovieImport and MovieExport components can be found on the QuickTime 1.5 Developer CD in the Sample Components folder.Tear-free Movie PlaybackSupport has been added to the Image Compression Manager to reduce the tearing that is visible when playing back movies with large amounts of motion. The feature only works on machines with fast screen access, so it isn’t usually enabled for NuBus video cards. Typically, better tear-free movie playback will be seen on Compact Video movies in 16-bit on a Quadra. A good movie to look to see the improvement is the beginning of “Everybody Loves Me But You” on the QuickTime 1.5 Developer CD.PowerBook Movie Playback EnhancementsThe PowerBooks which use 4-bit gray scale (PowerBook 160, 180, Duo 210, Duo 230) are supported using new fast dithering. All decompressors transparently take advantage of this fast dithering.YUV CodecA YUV Compressor/Decompressor Component has been added to QuickTime 1.6. It stores data in YUV 4:2:2 format. The compression algorithm is not lossless, but the image quality is extremely high. The compression ratio is 2:1. It does not support frame differencing. It is useful with certain video input solutions. In addition, it is also useful as an intermediate storage format if you are applying multiple effects or transitions to an image.By default, YUV does not appear in the Standard Compression dialog. If you hold down the option key when clicking on the compressor list to display the complete list, it will appear.Features You Get With Some CodeThis section describes the features of QuickTime 1.6 which are NOT added transparently to QuickTime. Your application will need new code to take advantage of them. In this section, the use of these features are explained.Movie Toolbox EnhancementsThe Movie Toolbox has three new calls, and two new flags. First, we will talk about the new flag. When using either PasteHandleIntoMovie or ConvertFileToMovieFile to import data into a movie, you can now set the showUserSettingsDialog flag. This will cause the user settings dialog for that import operation to be displayed, if there is one. For example, when importing a picture, this would cause the Standard Compression dialog to be displayed so the compression method could be selected. showUserSettingsDialog = 2hintsHighQuality is a new flag to the SetMoviePlayHints and SetMediaPlayHints routines. It specifies that the given movie or media should render at the highest quality. Rendering at highest quality may take considerably more time and memory. Therefore, this mode is typically not appropriate for real time playback, but is very useful for recompressing as it can generate higher quality images. hintsHighQuality = 1<<8 The high quality mode can be used with other media handlers as well. For example, the Video Media Handler turns off fast dithering and allows high quality dithering. Now we will introduce the three new Movie Toolbox calls.SetMovieDrawingCompleteProcSetMovieDrawingCompleteProc lets you set a call back procedure that is called after a Movie has drawn in one or more of its tracks. In this way, your application can be aware of when QuickTime has drawn frames, and when it hasn’t. This information is very useful when combined with SetTrackGWorld (see below).pascal void SetMovieDrawingCompleteProc(Movie theMovie, MovieDrawingCompleteProcPtr proc, long refCon)theMovie The Movie to set the proc on.proc Your call back procedure, or nil to remove it.refCon Value to pass to your call back procedure.typedef pascal OSErr (*MovieDrawingCompleteProcPtr)(Movie theMovie, long refCon);Errors invalidMovie -2010 Your movie reference is bad.SetTrackGWorldSetTrackGWorld lets you force a track to draw into a particular GWorld. This GWorld may be different from that of the entire movie. After the track has drawn, it calls your transfer procedure to copy the track to the actual movie GWorld. When your transfer procedure is set, the current GWorld is set to the correct destination. You can also install a transfer procedure and set the GWorld to nil. This will result in your transfer procedure being called only as a notification that the track has drawn -- no transfer needs to take place.pascal void SetTrackGWorld(Track theTrack, CGrafPtr port, GDHandle gdh, TrackTransferProc proc, long refCon)theTrack The track to set the proc to.port The port for the track to draw to, or nil to use the Movie’s GWorld.gdh GDevice associated with the port.proc Returns pointer to your transfer procedure, or nil to remove it.refCon Value to pass to your tranfer procedure.typedef pascal OSErr (*TrackTransferProc)(Track t, long refCon);Errors invalidMovie -2009 Your track reference is bad.GetMovieCoverProcsGetMovieCoverProcs lets you retrieve the cover procs that you set with SetMovieCoverProcs.pascal OSErr GetMovieCoverProcs(Movie theMovie, MovieRgnCoverProc *uncoverProc, MovieRgnCoverProc *coverProc, long *refcon)Movie Movie reference.MovieRgnCoverProc Returns the uncover proc for the movie.MovieRgnCoverProc Returns the cover proc for the movie.long Returns the refcon for the cover procedures.Errors invalidMovie -2010 Your movie reference is bad. Image Compression EnhancementsThe Image Compression has four new calls, and it's performance has been increased. Both the Photo CD and JPEG decompressors have been upgraded to directly support the clipping of images. This greatly decreases the time necessary to display large images. In particular, it makes it much easier to work with high resolution Photo CD images. Now, we will discuss the four new calls.SetSequenceProgressProcSetSequenceProgressProc allows you to set a progress procedure on a Compression or Decompression Sequence, just as in the past you could have a progress procedure when compressing or decompressing a still image. pascal OSErr SetSequenceProgressProc(ImageSequence seqID, ProgressProcRecord *progressProc)seqID Sequence identifier.progressProc Pointer to a record containing information about the application's progress proc.The Image Compression Manager has 3 additional calls which allow applications to zoom a monitor. They are considered low-level calls (comparable to SetEntries) that should only be used when playing back QuickTime movies in a controlled environment with no user interaction. Also, because this capability is not present on all machines, applications should not depend on its availability.The new calls provide a standard way for developers to access the 2x mode of a user’s monitor for playback. Effectively, this allows you to have full screen Compact Video playback on low end Macintosh computers.Hardware 200% resize is currently available only on the Macintosh LC II, IIvx, IIvi, Performa 400, Performa 600, and Color Classic in 16-bit (thousands of colors) display mode on the 12-inch (512 x 384 pixels) monitors. In the future, other graphic devices may take advantage of it.To implement this functionality, the Image Compression Manager actually make calls to the Video Driver for the given device. Video card manufacturers interested in supporting this functionality in their cards should link DEVSUPPORT for more information.GDHasScaleGDHasScale returns the closest possible scaling that a particular screen device can be set to in a given pixel depth. It returns scaling information for a particular GDevice for a requested depth. It allows you to query a GDevice without actually changing it. For example, if you specify 0x20000, but the GDevice does not support it, GDHasScale will return with noErr, and a scale of 0x10000. Remember, it checks for a supported depth, so your requested depth must be supported by the GDevice. GDHasScale references the video driver through the graphics device structure.For multiple screens, see "Multiple Screen Revealed" in develop 10 to find out how to walk the GDeviceList.pascal OSErr GDHasScale(GDHandle gdh,short depth,Fixed *scale)gdh a handle to a screen graphics device. depth pixel depth of screen device. Use this field to specify which pixel depth that scaling information should returned for.scale a pointer to a fixed point scale value. On input, this field should be set to the desired scale value. On output, this field will contain the closest scale available for the given depth. A scale of 0x10000 indicates normal size, 0x20000 indicates double size, etc.Errors cDepthErr The requested depth is not supported.cDevErr Not a screen device.controlErr Video driver can not respond to this call.GDGetScaleGDGetScale returns the current scale of the given screen graphics device.pascal OSErr GDGetScale(GDHandle gdh,Fixed *scale,short *flags)gdh a handle to a screen graphics device.scale pointer to a fixed point field to hold the scale resultflags pointer to a short. It returns the status parameter flags for the video driver. For now, zero is always returned in this field.Errors cDevErr Not a screen device.controlErr Video driver can not respond to this call.GDSetScaleGDSetScale sets a screen graphics device to a new scale.pascal OSErr GDSetScale(GDHandle gdh,Fixed scale,short flags)gdh a handle to a screen graphics device.scale a fixed point scale value.flags always pass zero.Errors cDevErr Not a screen device.controlErr Video driver can not respond to this call.Base Media Handler EnhancementsThe Base Media Handler interface has been extended with 3 new calls, and a new flag. These features were added to provide high quality movie playback. The text media handler takes advantage of these new calls, and provides built-in support for anti-aliased text. It is achieved through a playback hint to the base media handler, which the Apple Text Media Handler derives. This hint, hintsHighQuality, has been discussed in the Movie Toolbox Enhancements section above.The MediaSetHints and MediaGetOffscreenBufferSize routines were added to the Derived Media Handler interface to support high quality mode. Since the Apple Text Media Handler derives the base media handler, it can use these new calls to support anti-aliased text.MediaSetHintsWhen SetMoviePlayHints or SetMediaPlayHints is called by an application, your media handler’s MediaSetHints routine is called. This allows you to implement appropriate behavior for the various media hints such as scrub mode and high quality mode.pascal ComponentResult MediaSetHints (ComponentInstance ci, long hints)ci Component instance of a base media handler.hints All hint bits the currently apply to the given media.Errors badComponentInstance 0x80008001 Get a new component instanceMediaGetOffscreenBufferSize Before the Base Media Handler allocates an offscreen buffer for your Derived Media Handler, it calls your MediaGetOffscreenBufferSize routine to allow your media handler to chose the dimensions of the buffer. The depth and color table that will be used for the buffer are also passed. When you are called the rectBounds parameter specifies the size that the Base Media Handler will use for your offscreen by default. You can modify this as appropriate before returning. This capability is useful if your media handler can only draw at particular sizes. It is also useful for implementing anti-aliased drawing as you can request a buffer that is larger than your destination area, and have the Base Media Handler scale the image down for you. pascal ComponentResult MediaGetOffscreenBufferSize (ComponentInstance ci, Rect *rectBounds, short depth, CTabHandle ctab)ci Component instance of a base media handler.Rect The boundaries of your off-screen buffer.depth Depth of the offscreen.ctab Color table associated with off-screen. You can set it to nil.Errors badComponentInstance 0x80008001 Get a new component instance.MediaGetNameMediaGetName let's you retrieve the name of the media type. For example, the video media handler will return the string "Video".pascal ComponentResult MediaGetName(MediaHandler mh, Str255 name, long requestedLanguage, long *actualLanguage )ComponentInstance The base media handler instance.Str255 The name of the media type.Long A bunch of flags.Errors badComponentInstance 0x80008001 Get a new component instance.Text Media Handler EnhancementsThe text media handler interface includes 6 new flags, and one new routine. The flags let you control the behavior of the text media handler. The display flags are used in conjunction with the AddTESample and AddTextSample routines. The display flags are passed in the displayFlags parameter.dfContinuousScroll is a display flag which tells the Apple Text Media Handler to let new samples cause previous samples to scroll out.dfFlowHoriz is a display flag which tells the Apple Text Media Handler to let horizontally scrolled text to flow within the text box. This behavior contrasts with letting text flow as if the text box had no right edge.dfDropShadow is a display flag which tells the Apple Text Media Handler to support true drop shadows. Using SetTextSampleData, the position and translucency of the drop shadow is under application control.dfAntiAlias is a display flag which tells the Apple Text Media handler to attempt to display text anti-aliased.dfKeyedText is a display flag which tells the Apple Text Media handler to render text over the background without drawing the background color. This technique is otherwise known as "Masked Text."enum {dfContinuousScroll = 1<<9, dfFlowHoriz = 1<<10,dfDropShadow = 1<<12, dfAntiAlias = 1<<13, dfKeyedText = 1<<14};findTextUseOffset is a new find text flag which instructs FindNextText to look at the value pointed to by the offset parameter and start the search at that offset into the text sample indicated by startTime. This allows you to continue a text search from within a given sample, so that multiple occurrences of the search string can be found within a single sample.findTextUseOffset = 16; SetTextSampleDataSetTextSampleData allows you to set values prior to calling AddTextSample or AddTESample. Two types are currently supported: 'drpo' and 'drpt'. The first type, 'drpo', is the drop shadow offset. Pass the address of a point for the data parameter. 'drpt' is the drop shadow translucency. Pass a value from 0 to 255, where 0 is the lightest and 256 is the darkest.pascal ComponentResult SetTextSampleData(MediaHandler mh, void *data, OSType dataType)mh Reference to the text media handler. Could use GetMediaHandler.data Pointer to data, defined by dataType parameter. handleType Sets the type of data in the handle. For now, either 'drpo' or 'drpt'.Errors badComponentInstance 0x80008001 Your media handler reference is hosed.Here is some sample pseudo-code (it might not compile):short trans = 127;Point dropOffset;dropOffset.h = dropOffset.v = 4;SetSampleData(mh,(void *)&dropOffset,'drpo');SetSampleData(mh,(void *)&trans,'drpt');Be sure to turn on the dfDropShadow display flag when you call AddTextSample or AddTESample.Import/Export Component EnhancementsExport components have one new flag, one new error, two new functions, one new data structure, one new component, and an enhancement to the Sound Export component. The Text Movie export component was introduced above. Import components have one new function. The Audio CD Movie Import component was already introduced.canMovieExportAuxDataHandle is a movie export component flag. A Movie Export Component that supports the MovieExportGetAuxiliaryData call should also now set the canMovieExportAuxDataHandle flag in its ComponentFlags. canMovieExportAuxDataHandle = 128The error auxiliaryExportDataUnavailable has been added. It will be returned by a Movie Export Component when MovieExportGetAuxiliaryData is called requesting a type of auxiliary data that the component cannot generate. auxiliaryExportDataUnavailable = -2058The Sound Movie Export component has been updated to take advantage of the new Sound Manager. Previously, only the first sound track in the movie was exported. Now sound tracks are mixed together before being exported. If your application wants to take advantage of the sound mixing, you can use PutMovieIntoTypedHandle. It will take advantage of the export component. Furthermore, you can now specify the format of the exported sound, so you can convert 16 bit sound to 8 bit sound, or reduce stereo to mono.MovieExportSetSampleDescriptionMovieExportSetSampleDescription allows an application to request the format of the exported data, the routine MovieExportSetSampleDescription has been added. This call is currently supported by the Movie Export Sound Component.pascal ComponentResult MovieExportSetSampleDescription(MovieImportComponent ci, SampleDescriptionHandle desc, OSType mediaType)ci Component Instance of movie import component.desc Handle to a valid QuickTime sample description.mediaType The type of the media that the sample description is from.Errors badComponentInstance 0x80008001 Get a new component instance.MovieImportGetAuxiliaryDataTypeMovieImportGetAuxiliaryDataType should return the type of the auxiliary data that it can accept. This is useful if you are interested with import components directly. For example, if you call the text import component with this call, it will indicate that it can accept 'styl' information.pascal ComponentResult MovieImportGetAuxiliaryDataType(MovieImportComponent ci, OSType *auxType)ci The movie import component instance. Retrieve it with OpenDefaultComponent or OpenComponent.auxType Pointer to the type of auxiliary data it can import. For example, a text import component can bring in 'text' data. But, if it says it can return 'styl', then it will import the style information as well.Errors badComponentInstance 0x80008001 Your movie import component reference is bad.Here is a new data structure for the text export component. This data is useful after a text track has been exported. An application may want to know the way the text was stored as a track.typedef struct { long displayFlags; long textJustification; RGBColor bgColor; Rect textBox; short beginHilite; short endHilite; RGBColor hiliteColor; Boolean doHiliteColor; TimeValue scrollDelayDur; Point dropShadowOffset; short dropShadowTransparency;} TextDisplayData;TextExportGetDisplayDataTextExportGetDisplayData returns the text display data for the text sample that was last exported by the given text export component. After exporting text from a text track, it is often useful to find out about the text track characteristics. This data structure contains this extra information.pascal ComponentResult TextExportGetDisplayData(TextExportComponent ci, TextDisplayData *data)ci The text export component instance. Retrieve it with OpenDefaultComponent or OpenComponent.displayData Pointer to the text display data.Errors badComponentInstance 0x80008001 Your movie import component reference is bad.ColorSyncColorSync is an extension for Macintosh providing a platform for consistent color reproduction between widely varying output devices. Color Matching ability was added to the Image Compression Manager DrawPicture calls. Accurate color reproduction of images (not movies) is made easier with QuickTime’s flexible DrawPicture calls. To enable color matching you simply set the useColorMatching flag in the flags parameter to these calls. You can set the flag even when ColorSync is not installed, although it will be ignored. useColorMatching = 4Sequence Grabber EnhancementThe Sequence Grabber component has just one flag added to it. grabPictCurrentImage is a new flag to the SGGrabPict call. It provides the fastest possible image capture, but may fail under certain circumstances. This failure is not fatal; it just will not return a picture. The routine does not pause the current preview or grab the next frame. It causes the currently displayed image to be captured. It is a good idea to call SGPause yourself before calling SGGrabPict with this flag. grabPictCurrentImage = 4Image Codec EnhancementThe interface for image codecs has three new functions and one new flag defined. codecConditionFirstScreen is a new codec condition flag to the ImageCodec.h file. #define codecConditionFirstScreen (1L<<12)The Standard Compression Dialog now provides Compressor Components with the option of displaying their own settings within the dialog. If a compressor supports the dialog, an additional button will appear. The compressors settings are saved with the standard compressor settings when the SCGetInfo call is used with the scCodecSettingsType flag. The codec can implement the functionality using the following three routines. CDRequestSettingsCDRequestSettings allows the display of a dialog of additional compression settings specific to the codec. This information is stored in a settings handle. The codec can store whatever data in any format wants in the settings handle and resize it accordingly. It should store some type of tag/version information that it can use to verify that the data belongs to the codec. The codec should NOT dispose the handle.pascal ComponentResult CDRequestSettings(ComponentInstance ci, Handle settings, Rect *rp, ModalFilterProcPtr filterProc)ci Component instance of codec.settings Handle of data specific to the codec. If the handle is empty, the codec should use some type of default settings. rp Pointer to rectangle giving the coordinates of the Standard Compression dialog in screen coordinates. The codec can use this to position its dialog in the same area of the screen.filterProc A pointer to modal dialog filter proc that the codec must either pass to ModalDialog or call at the beginning of the codec dialog's filter. This proc gives the calling application and Standard Compression a chance to process update events.CDGetSettingsCDGetSettings allows a codec to get the settings chosen by a user. From this call, the codec should return its current internal settings. If there are no current settings or the settings are the same as the defaults, the codec can set the handle to empty.pascal ComponentResult CDGetSettings(ComponentInstance ci, Handle settings)ci Component instance of codec.settings A handle that the codec should resize and fill in with the current internal settings. It should be resized to empty if there are no current internal settings.CDSetSettingsCDSetSettings allows a codec to set the settings of the optional dialog. Set the codecs current internal settings to the state specified in the settings handle. The codec should always do a validity check on the contents of the handle so that invalid settings are never used.pascal ComponentResult CDSetSettings(ComponentInstance ci, Handle settings)ci Component Instance of movie import component.settings A handle to internal settings original returned by either the CDRequestSettings or CDGetSettings calls. The codec should set it's internal settings to match those of the settings handle. Because the codec does not own the handle, it should not dispose of it, and should only copy its contents, not the handle itself. If the settings handle passed in is empty, the codec should set its internal settings to a default state.New Component Manager FeaturesThe Component Manager in QuickTime 1.6 has some new features. The result returned for the selector, gestaltComponentMgr, will be 3, indicating version number 3 of the Component Manager. It has added the ability to automatically resolve conflicts between different versions of the same Component. It will ensure that only the most recent version of a given component is actually registered. In addition, the Component Manager now supports Icon Suites for a Component, so a Component’s icon no longer has to be just black and white. The ComponentResource data structure can now have an optional extension. This extension defines additional information about the Component. The data structure is shown below.struct ComponentResourceExtension { long componentVersion; /* version of Component */ long componentRegisterFlags; /* flags for registration */ short componentIconSuite; /* resource id of Icon Suite */};typedef struct ComponentResourceExtension ComponentResourceExtension;The ComponentResourceExtension is appended to the end of existing ComponentResource structures. The Component Manager determines if it is present by examining the size of the resource.The componentVersion field contains the version number of the component. This should be identical to the value returned by GetComponentVersion. For convenience, if this value is set to 0, the component is called to get the version. This is useful during development. The version number stored in the ComponentResourceExtension is used by the Component Manager to avoid having to load and call the Component to retrieve the Component’s version during startup.The componentRegisterFlags allow you to define additional register information. These flags are shown below. // Component Resource Extension flagsenum { componentDoAutoVersion = 1<<0, componentWantsUnregister = 1<<1, componentAutoVersionIncludeFlags = 1<<2};The componentDoAutoVersion flag tells the Component Manager that you only want your Component registered if there is no later version available. If there is an older version of the Component installed, it will be unregistered. If an older version of the same Component attempts to register after you, it will be immediately unregistered. Further, if a newer version of the same Component registers after you, you will automatically be unregistered. Using the automatic version control feature of the Component Manager allows you to make sure that only the most recent version of your software is running on a given machine, regardless of how many versions many be installed.The componentWantsUnregister flag indicates that your Component wants to be called when it is unregistered. This is useful if your component allocates global memory at register time, for example. The prototype of the unregister message is identical to the register message. If your component has never been opened, its unregister message will not be called. The routine selector for unregister is given below.The componentAutoVersionIncludeFlags flag tells the Component Manager to use the component flags as criteria for it's component search. If a component wants automatic version control, the Component Manager has to search for similar components. Normally, the Component Manager only searches for another component using the type, subType, and manufacturer fields of a ComponentDescription record. This flag tells the Component Manager to include the componentFlags in its search.#define kComponentUnregisterSelect -7 Finally, the componentIconSuite field allows you to provide the resource id of a System 7 Icon Suite. If this field is 0, it indicates that there is no icon suite. GetComponentIconSuiteGetComponentIconSuite returns an Icon Suite for the given Component. This call only works on System 7 or later. If called on System 6, it returns an error. If the Component doesn’t have an Icon Suite but does have a Component Icon (as returned by GetComponentInfo), GetComponentIconSuite creates an Icon Suite containing just the black and white Component Icon. In this way, you can use GetComponentIconSuite without regard to whether or not a Component has an Icon Suite or just simply a Component Icon.For more details on Icon Suites, see the Tech Note on Icon Suites (M.IM.IconDrawing), "Drawing Icons the System 7 Way".pascal OSErr GetComponentIconSuite(Component aComponent, Handle *iconSuite)aComponent Component id, retrieved with FindNextComponent.iconSuite Pointer to the icon suite you will receive.Errors invalidComponentID -3000 Component reference is not valid.QuickTime 1.6 Bug FixesQuickTime 1.6 fixes all known bugs in QuickTime 1.5. Many of these bugs are listed below.Movie Toolbox• The Movie Toolbox interesting time calls have been substantially improved. The values returned are much more consistant and accurate.• GetMoviePict has two major improvements:GetMoviePict no longer fails on certain Compact Video movies.GetMoviePict now reports out of memory errors rather than returning empty pictures when memory is low.• UpdateMovieResource has been fixed for single fork files.• Editing movie's with alternate tracks no longer causes duplicate tracks to be created.• Movie Uncover Procedures have been significantly improved. If a movie with tracks that are semi-transparent has a Movie Uncover procedure set (by SetMovieCoverProcs), the uncover procedure is now called before each frame to fill/erase the background. Previously the Movie Toolbox performed the erase, which limited a cover procedure aware application's options.• The dialog sequence that appears when a movie data file is lost has been reworked to eliminate the "This is not a valid movie file" dialog.• Fixed problem with deactivating and reactivating Compact Video movies that caused “shimmering” effects in the image.• GetMoviePosterPict now properly handles tracks which are only in the poster and not in the movie.• Movies played in loop mode using the Movie Controller no longer briefly pause when they jump from the end back to the beginning of the movie.Movie Controller• The Movie Controller performs much smarter drawing, so it takes up less time during movie playback.• The Movie Controller no longer leaves the port clip changed after drawing the badge.Movie Import/Export• The Import AIFF Sound File to Movie component now always imports the entire file.• The PICT and PICS import components no longer scale down images larger than the screen.Text Media Handler• When multi-line text is grown, lines after line 1 were not displayed. The bug did not occur when grown exactly 2x. It is now fixed.• Empty text samples sometimes caused the Text Media Handler to lose track of subsequent text size. It is now fixed.• FindText did not do "case insensitive" searches properly. Furthermore it tried to dispose of the text string that was passed in. It is now fixed.• FindText "wrap around" search did not always work properly. It now does.• Hilite text samples did not always display properly. They now do.• If the track contained multiple text descriptions, performance was sometimes severely degraded -- not anymore.• Text clipping and scrolling is now much more reliable.Image Compression Manager• The AlignWindow call has been fixed to respect vertical repositioning.Compact Video• In some cases, the Compact Video compressor allowed the data rate to exceed the limit set by the calling application, causing playback problems from CD. QuickTime 1.6 fixes this bug.• Decompressing gray scale Compact Video data to an 8-bit color destination no longer crashes.Photo CD Decompressor• More accurate colors in decompression are displayed.Standard Compression• If scAllowZeroFrameRate is true, default to 0 frame rate.• The key frame rate now updates correctly when changed from hook procedure.• Rate-constrain item checked if non-zero default value present.Sequence Grabber• Sound wouldn’t get restarted or turned off correctly if the record bit wasn’t set in its channel usage. It is now fixed.• Video panel does not bus error if the digitizer doesn't support hue.Component Manager• The Component Manager no longer changes the current resource file when loading a Component.• The Component Manager now tracks files using File ID's when possible, rather than FSSpec's.• Fixed obscure boot problem that would hang the machine when a component was called to register and the system heap was extremely low on free memory.• It is now OK to pass an empty handle to GetComponentInfo. This is helpful, since it can return them.Further Reference:• Inside Macintosh, QuickTime• Inside Macintosh, QuickTime Components‡ ◊# ˇ ˇˇˇˇ # ◊ ° d WORD S † å ° d WORD R… † Ç