Re: six things I wasn't able to do with Cocoa
Re: six things I wasn't able to do with Cocoa
- Subject: Re: six things I wasn't able to do with Cocoa
- From: Alex Curylo <email@hidden>
- Date: Fri, 28 May 2010 12:33:41 -0700
On 2010-05-28, at 12:02 PM, email@hidden wrote:
> i've tried everything -- how do other people get movie posters and/or grab
> movie frames?
With classic QuickTime if there was no poster frame specifically set in the movie QuickTime would reliably return the first frame. With QuickTimeKit that is ... inconsistent. Safest to just grab the first frame yourself.
As for capturing frames, here's the I believe currently recommended way to do it:
NSDictionary *imageAttrs = [NSDictionary dictionaryWithObjectsAndKeys:
QTMovieFrameImageTypeNSImage, QTMovieFrameImageType,
[NSArray arrayWithObject:@"NSBitmapImageRep"], QTMovieFrameImageRepresentationsType,
[NSNumber numberWithBool:YES], QTMovieFrameImageDeinterlaceFields,
[NSNumber numberWithBool:YES], QTMovieFrameImageHighQuality,
[NSNumber numberWithBool:YES], QTMovieFrameImageSingleField,
nil
];
QTTime captureTime = [0 .. self.movie.duration];
NSError *captureError = nil;
NSImage *captureFullFrame = [self.movie frameImageAtTime:captureTime
withAttributes:imageAttrs
error:&captureError
];
That allows for a variety of other image types besides QTMovieFrameImageTypeNSImage, but is QuickTime 7.2 dependent. If you need older version compatibility, use
- (NSImage *)frameImageAtTime:(QTTime)time;
Either way, these should only be called on the main thread. Theoretically you can detach movies and move them around between threads, but you have a good chance of running into issues doing so, particularly if you're working with QTKit captured movies; something about the rendering context I think, although the details are old enough to be kinda fuzzy now. Safer to just call performSelectorOnMainThread: to get each grabbed frame if you've got a background renderer or suchlike, I'd say.
--
Alex Curylo -- email@hidden -- http://www.alexcurylo.com/
"...the variable PI can be given that value [3.141592653589793] with
a DATA statement. This simplifies the modifying of the program,
should the value of PI ever change." -- SDS Sigma series Fortran manual
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden