fixed some minor leaks

filters are now initialized on first use
This commit is contained in:
xant
2010-05-02 00:42:25 +02:00
parent eea899b56b
commit 3f2017aec6
7 changed files with 72 additions and 92 deletions
+2 -2
View File
@@ -23,7 +23,7 @@
- (void)reset
{
CVLayer *toDelete;
CVCocoaLayer *toDelete;
if (layer) {
[self deactivate];
[lock lock];
@@ -32,7 +32,7 @@
CVPixelBufferRelease(currentFrame);
currentFrame = NULL;
}
toDelete = (CVLayer *)layer;
toDelete = (CVCocoaLayer *)layer;
layer = NULL;
[lock unlock];
delete toDelete;
+3 -1
View File
@@ -62,6 +62,7 @@ class CVCocoaLayer;
CVCocoaLayer *layer;
IBOutlet CVLayerView *layerView;
bool doFilters;
bool filtersInitialized;
}
@property (readwrite) CVCocoaLayer *layer;
@@ -71,7 +72,6 @@ class CVCocoaLayer;
- (char *)name;
- (void)feedFrame:(CVPixelBufferRef)frame;
- (CVReturn)renderFrame;
- (id)initWithOpenGLContext:(CGLContextObj)context pixelFormat:(CGLPixelFormatObj)pixelFormat Context:(CFreej *)ctx;
- (id)initWithContext:(CFreej *)context;
- (void)startPreview; // enable preview rendering
- (void)stopPreview; // disable preview rendering
@@ -86,6 +86,7 @@ class CVCocoaLayer;
- (bool)needPreview;
- (NSString *)filterName;
- (NSDictionary *)filterParams;
- (void)setContext:(CFreej *)ctx;
- (void)setPreviewTarget:(CVPreview *)targetView;
- (void)lock; /// accessor to the internal mutex
- (void)unlock; /// accessor to the internal mutex
@@ -100,6 +101,7 @@ class CVCocoaLayer;
- (bool)doPreview;
- (IBAction)setFilterParameter:(id)sender; /// tags from 0 to 10
- (void)setBlendMode:(NSString *)mode;
- (void)initFilters;
@end
#endif
+62 -83
View File
@@ -75,52 +75,13 @@ static OSStatus SetNumberValue(CFMutableDictionaryRef inDict,
currentPreviewTexture = NULL;
doPreview = YES;
filterParams = [[NSMutableDictionary dictionary] retain];
// Create CGColorSpaceRef
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGColorSpaceRelease(colorSpace);
// Create CIFilters used for both preview and main frame
colorCorrectionFilter = [[CIFilter filterWithName:@"CIColorControls"] retain]; // Color filter
[colorCorrectionFilter setDefaults]; // set the filter to its default values
exposureAdjustFilter = [[CIFilter filterWithName:@"CIExposureAdjust"] retain];
[exposureAdjustFilter setDefaults];
// adjust exposure
[exposureAdjustFilter setValue:[NSNumber numberWithFloat:0.0] forKey:@"inputEV"];
// rotate
NSAffineTransform *rotateTransform = [NSAffineTransform transform];
[rotateTransform rotateByDegrees:0.0];
rotateFilter = [[CIFilter filterWithName:@"CIAffineTransform"] retain];
[rotateFilter setValue:rotateTransform forKey:@"inputTransform"];
translateFilter = [[CIFilter filterWithName:@"CIAffineTransform"] retain];
NSAffineTransform *translateTransform = [NSAffineTransform transform];
[translateTransform translateXBy:0.0 yBy:0.0];
[translateFilter setValue:translateTransform forKey:@"inputTransform"];
scaleFilter = [[CIFilter filterWithName:@"CIAffineTransform"] retain];
//CIFilter *scaleFilter = [CIFilter filterWithName:@"CILanczosScaleTransform"];
[scaleFilter setDefaults]; // set the filter to its default values
//[scaleFilter setValue:[NSNumber numberWithFloat:scaleFactor] forKey:@"inputScale"];
effectFilter = [[CIFilter filterWithName:@"CIZoomBlur"] retain]; // Effect filter
[effectFilter setName:@"ZoomBlur"];
[effectFilter setDefaults]; // set the filter to its default values
[effectFilter setValue:[NSNumber numberWithFloat:0.0] forKey:@"inputAmount"]; // don't apply effects at startup
compositeFilter = [[CIFilter filterWithName:@"CISourceOverCompositing"] retain]; // Composite filter
[CIAlphaFade class];
alphaFilter = [[CIFilter filterWithName:@"CIAlphaFade"] retain]; // AlphaFade filter
[alphaFilter setDefaults]; // XXX - setDefaults doesn't work properly
#if MAC_OS_X_VERSION_10_6
[alphaFilter setValue:[NSNumber numberWithFloat:1.0] forKey:@"outputOpacity"]; // set default value
#else
[alphaFilter setValue:[NSNumber numberWithFloat:0.5] forKey:@"outputOpacity"]; // set default value
#endif
return self;
}
- (id) initWithOpenGLContext:(CGLContextObj)context pixelFormat:(CGLPixelFormatObj)pixelFormat Context:(CFreej *)ctx
- (void)setContext:(CFreej *)ctx
{
return [self initWithContext:ctx];
freej = ctx;
}
- (void)dealloc
@@ -150,44 +111,6 @@ static OSStatus SetNumberValue(CFMutableDictionaryRef inDict,
NSAutoreleasePool *pool;
pool = [[NSAutoreleasePool alloc] init];
// Create CGColorSpaceRef
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGColorSpaceRelease(colorSpace);
// Create CIFilters used for both preview and main frame
colorCorrectionFilter = [[CIFilter filterWithName:@"CIColorControls"] retain]; // Color filter
[colorCorrectionFilter setDefaults]; // set the filter to its default values
exposureAdjustFilter = [[CIFilter filterWithName:@"CIExposureAdjust"] retain];
[exposureAdjustFilter setDefaults];
// adjust exposure
[exposureAdjustFilter setValue:[NSNumber numberWithFloat:0.0] forKey:@"inputEV"];
// rotate
NSAffineTransform *rotateTransform = [NSAffineTransform transform];
[rotateTransform rotateByDegrees:0.0];
rotateFilter = [[CIFilter filterWithName:@"CIAffineTransform"] retain];
[rotateFilter setValue:rotateTransform forKey:@"inputTransform"];
translateFilter = [[CIFilter filterWithName:@"CIAffineTransform"] retain];
NSAffineTransform *translateTransform = [NSAffineTransform transform];
[translateTransform translateXBy:0.0 yBy:0.0];
[translateFilter setValue:translateTransform forKey:@"inputTransform"];
scaleFilter = [[CIFilter filterWithName:@"CIAffineTransform"] retain];
//CIFilter *scaleFilter = [CIFilter filterWithName:@"CILanczosScaleTransform"];
[scaleFilter setDefaults]; // set the filter to its default values
//[scaleFilter setValue:[NSNumber numberWithFloat:scaleFactor] forKey:@"inputScale"];
effectFilter = [[CIFilter filterWithName:@"CIZoomBlur"] retain]; // Effect filter
[effectFilter setName:@"ZoomBlur"];
[effectFilter setDefaults]; // set the filter to its default values
[effectFilter setValue:[NSNumber numberWithFloat:0.0] forKey:@"inputAmount"]; // don't apply effects at startup
compositeFilter = [[CIFilter filterWithName:@"CISourceOverCompositing"] retain]; // Composite filter
[CIAlphaFade class];
alphaFilter = [[CIFilter filterWithName:@"CIAlphaFade"] retain]; // AlphaFade filter
[alphaFilter setDefaults]; // XXX - setDefaults doesn't work properly
[alphaFilter setValue:[NSNumber numberWithFloat:0.5] forKey:@"outputOpacity"]; // set default value
// Create display link
if (layerView) {
NSOpenGLPixelFormat *openGLPixelFormat = [layerView pixelFormat];
@@ -343,10 +266,10 @@ static OSStatus SetNumberValue(CFMutableDictionaryRef inDict,
NSString *filterName = [NSString stringWithFormat:@"CI%@", [[sender selectedItem] title]];
//NSLog(filterName);
[effectFilter release];
effectFilter = [[CIFilter filterWithName:filterName] retain];
effectFilter = [[CIFilter filterWithName:filterName] retain];
[effectFilter setDefaults];
[effectFilter setName:[[sender selectedItem] title]];
FilterParams *pdescr = [[layerView filterPanel] getFilterParamsDescriptorAtIndex:[sender indexOfSelectedItem]];
[effectFilter setDefaults];
NSView *cView = (NSView *)sender;
for (int i = 0; i < 4; i++) {
NSTextField *label = (NSTextField *)[cView nextKeyView];
@@ -464,6 +387,61 @@ static OSStatus SetNumberValue(CFMutableDictionaryRef inDict,
[pool release];
}
- (void)initFilters {
// Create CIFilters used for both preview and main frame
if (!colorCorrectionFilter) {
colorCorrectionFilter = [[CIFilter filterWithName:@"CIColorControls"] retain]; // Color filter
[colorCorrectionFilter setDefaults]; // set the filter to its default values
}
if (!exposureAdjustFilter) {
exposureAdjustFilter = [[CIFilter filterWithName:@"CIExposureAdjust"] retain];
[exposureAdjustFilter setDefaults];
// adjust exposure
[exposureAdjustFilter setValue:[NSNumber numberWithFloat:0.0] forKey:@"inputEV"];
}
// rotate
if (!rotateFilter) {
NSAffineTransform *rotateTransform = [NSAffineTransform transform];
rotateFilter = [[CIFilter filterWithName:@"CIAffineTransform"] retain];
[rotateTransform rotateByDegrees:0.0];
[rotateFilter setValue:rotateTransform forKey:@"inputTransform"];
}
if (!translateFilter) {
translateFilter = [[CIFilter filterWithName:@"CIAffineTransform"] retain];
NSAffineTransform *translateTransform = [NSAffineTransform transform];
[translateTransform translateXBy:0.0 yBy:0.0];
[translateFilter setValue:translateTransform forKey:@"inputTransform"];
}
if (!scaleFilter) {
scaleFilter = [[CIFilter filterWithName:@"CIAffineTransform"] retain];
//CIFilter *scaleFilter = [CIFilter filterWithName:@"CILanczosScaleTransform"];
[scaleFilter setDefaults]; // set the filter to its default values
}
//[scaleFilter setValue:[NSNumber numberWithFloat:scaleFactor] forKey:@"inputScale"];
if (!effectFilter) {
effectFilter = [[CIFilter filterWithName:@"CIZoomBlur"] retain]; // Effect filter
[effectFilter setDefaults]; // set the filter to its default values
[effectFilter setName:@"ZoomBlur"];
[effectFilter setValue:[NSNumber numberWithFloat:0.0] forKey:@"inputAmount"]; // don't apply effects at startup
}
if (!compositeFilter) {
compositeFilter = [[CIFilter filterWithName:@"CISourceOverCompositing"] retain]; // Composite filter
[compositeFilter setDefaults];
}
//[CIAlphaFade class];
if (!alphaFilter) {
alphaFilter = [[CIFilter filterWithName:@"CIAlphaFade"] retain]; // AlphaFade filter
[alphaFilter setDefaults]; // XXX - setDefaults doesn't work properly
#if MAC_OS_X_VERSION_10_6
[alphaFilter setValue:[NSNumber numberWithFloat:1.0] forKey:@"outputOpacity"]; // set default value
#else
[alphaFilter setValue:[NSNumber numberWithFloat:0.5] forKey:@"outputOpacity"]; // set default value
#endif
}
filtersInitialized = true;
}
- (CVTexture *)getTexture
{
@@ -476,6 +454,8 @@ static OSStatus SetNumberValue(CFMutableDictionaryRef inDict,
if (layer)
fjLayer = layer->fj_layer();
if (!filtersInitialized)
[self initFilters];
[lock lock];
if (newFrame) {
inputImage = [CIImage imageWithCVImageBuffer:currentFrame];
@@ -583,8 +563,7 @@ static OSStatus SetNumberValue(CFMutableDictionaryRef inDict,
}
- (void)activate
{
if (layer) {
{ if (layer) {
layer->activate();
if (freej) {
Layer *fjLayer = layer->fj_layer();
+1 -2
View File
@@ -78,8 +78,7 @@
#endif
CGColorSpaceRelease(colorSpace);
[lock lock];
[layerController initWithOpenGLContext:(CGLContextObj)[[self openGLContext] CGLContextObj]
pixelFormat:(CGLPixelFormatObj)[[self pixelFormat] CGLPixelFormatObj] Context:freej];
[layerController setContext:freej];
[lock unlock];
GLint params[] = { 1 };
CGLSetParameter( CGLGetCurrentContext(), kCGLCPSwapInterval, params );
-2
View File
@@ -191,10 +191,8 @@ static OSStatus SetNumberValue(CFMutableDictionaryRef inDict,
QTTime posterTime = [qtMovie duration];
posterTime.timeValue /= 2;
NSImage *poster = [qtMovie frameImageAtTime:posterTime];
if (layerView)
[layerView setPosterImage:poster];
//[lock unlock];
// register the layer within the freej context
if (!layer) {
+1 -1
View File
@@ -453,7 +453,7 @@ static CVReturn renderCallback(CVDisplayLinkRef displayLink,
texture = cvLayer->gl_texture();
NSString *blendMode = cvLayer->blendMode;
if (blendMode)
blendFilter = [CIFilter filterWithName:[[NSString alloc] initWithFormat:@"CI%@BlendMode", blendMode]];
blendFilter = [CIFilter filterWithName:[NSString stringWithFormat:@"CI%@BlendMode", blendMode]];
else
blendFilter = [CIFilter filterWithName:@"CIOverlayBlendMode"];
} else { // freej 'not-cocoa' layer type
+3 -1
View File
@@ -1190,6 +1190,7 @@
GCC_ENABLE_SSE3_EXTENSIONS = YES;
GCC_ENABLE_SYMBOL_SEPARATION = NO;
GCC_MODEL_TUNING = "";
GCC_OPTIMIZATION_LEVEL = s;
GCC_UNROLL_LOOPS = NO;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
HEADER_SEARCH_PATHS = (
@@ -1249,11 +1250,12 @@
GCC_CW_ASM_SYNTAX = NO;
GCC_ENABLE_CPP_EXCEPTIONS = NO;
GCC_ENABLE_CPP_RTTI = NO;
GCC_ENABLE_OBJC_GC = unsupported;
GCC_ENABLE_SSE3_EXTENSIONS = YES;
GCC_ENABLE_SUPPLEMENTAL_SSE3_INSTRUCTIONS = YES;
GCC_ENABLE_SYMBOL_SEPARATION = NO;
GCC_MODEL_TUNING = "";
GCC_OPTIMIZATION_LEVEL = 3;
GCC_OPTIMIZATION_LEVEL = s;
GCC_UNROLL_LOOPS = YES;
HEADER_SEARCH_PATHS = (
../lib,