5 // Created by 柳 on 09/09/12.
6 // Copyright 2009 __MyCompanyName__. All rights reserved.
12 @implementation ElisMedia
14 // QuickTime X を試すためにかなり書き換えた。
15 - (id)initWithMovieFile:(NSString*)path
19 movie = [[QTMovie alloc] initWithFile:path error:nil];
20 [movie gotoBeginning];
22 QTOpenGLTextureContextCreate(kCFAllocatorDefault,
23 [[mainView openGLContext] CGLContextObj],
24 [[mainView pixelFormat] CGLPixelFormatObj],
28 SetMovieVisualContext([movie quickTimeMovie], textureContext);
29 // [mainView setContext:textureContext];
31 attr = [NSDictionary dictionaryWithObjectsAndKeys:
32 QTMovieFrameImageTypeCIImage, QTMovieFrameImageType,
33 [NSNumber numberWithBool:YES], QTMovieFrameImageSessionMode, // 内部でキャッシュしろ
34 [NSNumber numberWithBool:YES], QTMovieFrameImageHighQuality, // 画質低下を許さない
35 [movie attributeForKey:QTMovieNaturalSizeAttribute], QTMovieFrameImageSize, // 勝手にリサイズするな
36 [NSNumber numberWithBool:NO], QTMovieFrameImageSingleField, // インターレース解除?
47 - (id)initWithImageFile:(NSString*)path
53 image = [[CIImage alloc] initWithContentsOfURL:[NSURL fileURLWithPath: path]];
60 - (id)initWithSoundFile:(NSString*)path
65 sound = [[QTMovie alloc] initWithFile:path error:nil];
66 [sound setVolume:0.5]; // あまりにうるさい。
72 - (id)initWithText:(NSString*)t
78 attr = [[NSMutableDictionary alloc] init];
80 [attr setValue:[NSFont fontWithName:@"HiraKakuPro-W3" size:24.0f] forKey:NSFontAttributeName];
81 [attr setValue:[NSColor colorWithCalibratedRed:255 green:255 blue:255 alpha:255] forKey:NSForegroundColorAttributeName];
82 im = [[NSImage alloc] initWithSize:NSMakeSize(640, 480)];
84 [t drawInRect:NSMakeRect(0, 0, 640, 480) withAttributes:attr];
86 image = [[CIImage alloc] initWithData:[im TIFFRepresentation]];
92 - (id)initWithQuartzFile:(NSString*)path
94 return [self initWithMovieFile:path];
99 - (CIImage*)getFrameForTime:(CVTimeStamp*)timeStamp
101 CVImageBufferRef currentFrame;
105 QTVisualContextCopyImageForTime(textureContext, NULL, timeStamp, ¤tFrame);
106 ret = [CIImage imageWithCVImageBuffer:currentFrame];
107 CVOpenGLTextureRelease(currentFrame);
115 - (CIImage*)getFrameForQTTime:(QTTime)time
117 // 64ビットでframeImageAtTimeメソッドは使えないみたい。どうしろと。
118 time.timeValue *= speed;
120 return [movie frameImageAtTime:time withAttributes:attr error:nil];
126 - (void)releaseContext
129 QTVisualContextTask(textureContext);
132 - (void)setCurrentTime:(QTTime)time
134 // time.timeValue *= speed;
136 [movie setAttribute:[NSValue valueWithQTTime:time] forKey:QTMovieCurrentTimeAttribute];
138 [sound setCurrentTime:time];
143 if(movie && !playing){
147 if(sound && !playing){
159 if(sound && playing){
168 return [movie duration];
174 NSLog(@"movie finalize");
176 SetMovieVisualContext([movie quickTimeMovie], NULL);
178 CFRelease(textureContext);