ext/movie.c in rmov-0.1.2 vs ext/movie.c in rmov-0.1.3

- old
+ new

@@ -58,33 +58,33 @@ you go through Movie.open. */ static VALUE movie_load_from_file(VALUE obj, VALUE filepath) { if (MOVIE(obj)) { - rb_raise(eQuicktime, "Movie has already been loaded."); + rb_raise(eQuickTime, "Movie has already been loaded."); } else { OSErr err; FSSpec fs; short frefnum = -1; short movie_resid = 0; Movie *movie = ALLOC(Movie); err = NativePathNameToFSSpec(RSTRING(filepath)->ptr, &fs, 0); if (err != 0) - rb_raise(eQuicktime, "Error %d occurred while reading file at %s", err, RSTRING(filepath)->ptr); + rb_raise(eQuickTime, "Error %d occurred while reading file at %s", err, RSTRING(filepath)->ptr); err = OpenMovieFile(&fs, &frefnum, fsRdPerm); if (err != 0) - rb_raise(eQuicktime, "Error %d occurred while opening movie at %s", err, RSTRING(filepath)->ptr); + rb_raise(eQuickTime, "Error %d occurred while opening movie at %s", err, RSTRING(filepath)->ptr); err = NewMovieFromFile(movie, frefnum, &movie_resid, 0, newMovieActive, 0); if (err != 0) - rb_raise(eQuicktime, "Error %d occurred while loading movie at %s", err, RSTRING(filepath)->ptr); + rb_raise(eQuickTime, "Error %d occurred while loading movie at %s", err, RSTRING(filepath)->ptr); err = CloseMovieFile(frefnum); if (err != 0) - rb_raise(eQuicktime, "Error %d occurred while closing movie file at %s", err, RSTRING(filepath)->ptr); + rb_raise(eQuickTime, "Error %d occurred while closing movie file at %s", err, RSTRING(filepath)->ptr); RMOVIE(obj)->movie = *movie; return obj; } @@ -98,11 +98,11 @@ Movie.empty. */ static VALUE movie_load_empty(VALUE obj) { if (MOVIE(obj)) { - rb_raise(eQuicktime, "Movie has already been loaded."); + rb_raise(eQuickTime, "Movie has already been loaded."); } else { RMOVIE(obj)->movie = NewMovie(0); return obj; } } @@ -331,11 +331,11 @@ FSSpec fs; VALUE new_movie_obj = rb_obj_alloc(cMovie); err = NativePathNameToFSSpec(RSTRING(filepath)->ptr, &fs, 0); if (err != fnfErr) - rb_raise(eQuicktime, "Error %d occurred while opening file for export at %s", err, RSTRING(filepath)->ptr); + rb_raise(eQuickTime, "Error %d occurred while opening file for export at %s", err, RSTRING(filepath)->ptr); // TODO make these flags settable through an options hash RMOVIE(new_movie_obj)->movie = FlattenMovieData(MOVIE(obj), flattenDontInterleaveFlatten | flattenCompressMovieResource @@ -362,30 +362,30 @@ picture = GetMoviePict(MOVIE(obj), MOVIE_TIME(obj, frame_time)); err = NativePathNameToFSSpec(RSTRING(filepath)->ptr, &fs, 0); if (err != fnfErr) - rb_raise(eQuicktime, "Error %d occurred while opening file for export at %s.", err, RSTRING(filepath)->ptr); + rb_raise(eQuickTime, "Error %d occurred while opening file for export at %s.", err, RSTRING(filepath)->ptr); // Convert the picture handle into a PICT file (still in a handle) // by adding a 512-byte header to the start. handle = NewHandleClear(512); err = HandAndHand((Handle)picture, handle); if (err != noErr) - rb_raise(eQuicktime, "Error %d occurred while converting handle for pict export %s.", err, RSTRING(filepath)->ptr); + rb_raise(eQuickTime, "Error %d occurred while converting handle for pict export %s.", err, RSTRING(filepath)->ptr); err = OpenADefaultComponent(GraphicsImporterComponentType, kQTFileTypePicture, &component); if (err != noErr) - rb_raise(eQuicktime, "Error %d occurred while opening picture component for %s.", err, RSTRING(filepath)->ptr); + rb_raise(eQuickTime, "Error %d occurred while opening picture component for %s.", err, RSTRING(filepath)->ptr); err = GraphicsImportSetDataHandle(component, handle); if (err != noErr) - rb_raise(eQuicktime, "Error %d occurred while setting graphics importer data handle for %s.", err, RSTRING(filepath)->ptr); + rb_raise(eQuickTime, "Error %d occurred while setting graphics importer data handle for %s.", err, RSTRING(filepath)->ptr); err = GraphicsImportExportImageFile(component, 0, 0, &fs, smSystemScript); if (err != noErr) - rb_raise(eQuicktime, "Error %d occurred while exporting pict to file %s.", err, RSTRING(filepath)->ptr); + rb_raise(eQuickTime, "Error %d occurred while exporting pict to file %s.", err, RSTRING(filepath)->ptr); CloseComponent(component); DisposeHandle(handle); DisposeHandle((Handle)picture); @@ -411,15 +411,31 @@ { SetMoviePosterTime(MOVIE(obj), MOVIE_TIME(obj, seconds)); return Qnil; } +/* + call-seq: new_track(width, height) -> track + + Creates a new track with the given width/height on the movie and returns it. + + This method is generally not called directly. Instead you should call + new_video_track or new_audio_track. If you call method make sure to + call new_media on track to setup the media. +*/ +static VALUE movie_new_track(VALUE obj, VALUE width, VALUE height) +{ + VALUE track_obj = rb_obj_alloc(cTrack); + RTRACK(track_obj)->track = NewMovieTrack(MOVIE(obj), NUM2INT(width), NUM2INT(height), kFullVolume); + return track_obj; +} + void Init_quicktime_movie() { - VALUE mQuicktime; - mQuicktime = rb_define_module("Quicktime"); - cMovie = rb_define_class_under(mQuicktime, "Movie", rb_cObject); + VALUE mQuickTime; + mQuickTime = rb_define_module("QuickTime"); + cMovie = rb_define_class_under(mQuickTime, "Movie", rb_cObject); rb_define_alloc_func(cMovie, movie_new); rb_define_method(cMovie, "load_from_file", movie_load_from_file, 1); rb_define_method(cMovie, "load_empty", movie_load_empty, 0); rb_define_method(cMovie, "raw_duration", movie_raw_duration, 0); rb_define_method(cMovie, "time_scale", movie_time_scale, 0); @@ -436,6 +452,7 @@ rb_define_method(cMovie, "flatten", movie_flatten, 1); rb_define_method(cMovie, "export_pict", movie_export_pict, 2); rb_define_method(cMovie, "dispose", movie_dispose, 0); rb_define_method(cMovie, "poster_time", movie_get_poster_time, 0); rb_define_method(cMovie, "poster_time=", movie_set_poster_time, 1); + rb_define_method(cMovie, "new_track", movie_new_track, 2); }