Retired Document
Important: This sample code may not represent best practices for current development. The project may use deprecated symbols and illustrate technologies and techniques that are no longer recommended.
Start Code/MovieToImages.c
// Graphics Importer and Exporter Samples |
// This example opens a movie file, allows you to save |
// the movie as a sequence of frames. It then creates a new |
// reference movie from those images and saves it. |
// Originally written by Sam Bushell for QuickTime "Live" '99 |
// WWDC 2000 Introduction to QuickTime |
#include "MacShell.h" |
void MovieToImage( void ) |
{ |
OSErr err = noErr; |
Handle hOpenTypeList = NewHandle(0); |
long numTypes = 0; |
FSSpec theFSSpec; |
Boolean isSelected, isReplacing; |
Rect naturalBounds, windowBounds; |
WindowPtr window = NULL; |
short refNum = -1, resID = NULL; |
Movie movie = 0; |
MovieExportComponent movieExporter = 0; |
Boolean canceled = true; |
MovieImportComponent movieImporter = 0; |
Track usedTrack; |
TimeValue addedDuration; |
long outFlags; |
if ( !BuildMovieValidFileTypes( hOpenTypeList, &numTypes ) ) { |
HLock( hOpenTypeList ); |
} else { |
DisposeHandle( hOpenTypeList ); |
return; |
} |
err = GetOneFileWithPreview(numTypes, (OSTypePtr)*hOpenTypeList, &theFSSpec, NULL); |
DisposeHandle( hOpenTypeList ); |
if ( err ) return; |
// open a movie file |
err = OpenMovieFile( &theFSSpec, &refNum, fsRdPerm ); |
err = NewMovieFromFile( &movie, refNum, &resID, NULL, newMovieActive, NULL ); |
err = CloseMovieFile( refNum ); |
refNum = -1; |
GetMovieBox( movie, &naturalBounds ); |
windowBounds = naturalBounds; |
OffsetRect( &windowBounds, 10, 45 ); |
window = NewCWindow( NULL, &windowBounds, "\pMovie <-> Images", true, documentProc, (WindowPtr)-1, true, 0); |
SetPortWindowPort( window ); |
// play the movie |
SetMovieGWorld( movie, GetWindowPort( window), NULL ); |
GoToBeginningOfMovie( movie ); |
StartMovie( movie ); |
while( false == IsMovieDone( movie ) ) { |
MoviesTask( NULL, 0 ); |
} |
StopMovie( movie ); |
pause(); |
// save the movie as a sequence of image files. |
err = PutFile( "\pSave as image sequence:", "\psequence", &theFSSpec, &isSelected, &isReplacing); |
if (err) return; |
// open a movie exporter |
// Step 1. Insert OpenADefaultComponent1.clp here... |
// configure the export component by showing the dialog box |
// Step 2. Insert MovieExportDoUserDialog.clp here... |
if( canceled ) return; |
// attach a progress function; -1 for default progress function |
SetMovieProgressProc( movie, (MovieProgressUPP)-1, 0 ); |
// convert the movie into a specified file(s) and type |
// Step 3. Insert ConvertMovieToFile.clp here... |
CloseComponent( movieExporter ); |
DisposeMovie( movie ); |
movie = 0; |
EraseRect( &naturalBounds ); |
hOpenTypeList = NewHandle(0); |
// now re-open the sequence of image files as a reference movie |
if ( !BuildGraphicsImporterValidFileTypes( hOpenTypeList, &numTypes ) ) { |
HLock( hOpenTypeList ); |
} else { |
DisposeHandle( hOpenTypeList ); |
return; |
} |
err = GetOneFileWithPreview(numTypes, (OSTypePtr)*hOpenTypeList, &theFSSpec, NULL); |
DisposeHandle( hOpenTypeList ); |
if ( err ) return; |
// open a movie importer |
// Step 4. Insert OpenADefaultComponent2.clp here... |
// we're using a movie importer that imports images using graphics importers |
// this subType-specific call enables the "Import Image Sequence..." behaviour, |
// letting the movie importer search for adjacent files with names matching a numeric pattern. |
GraphicsImageImportSetSequenceEnabled( movieImporter, true ); |
canceled = true; |
// configure the import component by showing the user dialog box |
// Step 5. Insert MovieImportDoUserDialog.clp here... |
if( canceled ) return; |
// create the new movie |
movie = NewMovie(newMovieActive); |
// do the import of the sequence |
// Step 6. Insert MovieImportFile.clp here... |
CloseComponent( movieImporter ); |
// play the reference movie. |
SetMovieGWorld(movie, GetWindowPort(window), NULL); |
GoToBeginningOfMovie( movie ); |
StartMovie( movie ); |
while( false == IsMovieDone( movie ) ) { |
MoviesTask( NULL, 0 ); |
} |
StopMovie( movie ); |
// save the reference movie. |
err = PutFile( "\pSave as reference movie:", "\preference movie.mov", &theFSSpec, &isSelected, &isReplacing); |
if (err) return; |
// create a movie file; has options controled by flags |
// Step 7. Insert CreateMovieFile.clp here... |
// Step 8. Insert Step8.clp here... |
UpdateMovie( movie ); |
MoviesTask( NULL, 0 ); |
DisposeMovie( movie ); |
} |
Copyright © 2003 Apple Computer, Inc. All Rights Reserved. Terms of Use | Privacy Policy | Updated: 2003-01-14