Skip to content

Commit

Permalink
filters working
Browse files Browse the repository at this point in the history
  • Loading branch information
HalfdanJ committed Oct 5, 2012
1 parent 8ea3bd5 commit 8050ac1
Show file tree
Hide file tree
Showing 8 changed files with 86 additions and 27 deletions.
6 changes: 4 additions & 2 deletions ViljensTriumf.xcodeproj/project.pbxproj
Expand Up @@ -30,6 +30,7 @@
DD4CC1EF161DF194000E459D /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DD4CC1EE161DF194000E459D /* QuartzCore.framework */; };
DDDCF65F161EBC0700E8E368 /* DeinterlaceFilter.m in Sources */ = {isa = PBXBuildFile; fileRef = DDDCF65E161EBC0700E8E368 /* DeinterlaceFilter.m */; };
DDDCF661161EBC1700E8E368 /* deinterlaceFilter.cikernel in Resources */ = {isa = PBXBuildFile; fileRef = DDDCF660161EBC1700E8E368 /* deinterlaceFilter.cikernel */; };
DDE64735161EC97E0007E490 /* BlackMagicController.mm in Sources */ = {isa = PBXBuildFile; fileRef = DDDCF65A161EB93500E8E368 /* BlackMagicController.mm */; };
/* End PBXBuildFile section */

/* Begin PBXCopyFilesBuildPhase section */
Expand Down Expand Up @@ -201,12 +202,12 @@
DD039731161C4FE000D0D629 /* BlackMagic */ = {
isa = PBXGroup;
children = (
8429C0DA156A7943000ADD56 /* BlackMagic.h */,
8429C0DB156A7943000ADD56 /* BlackMagic.mm */,
DDDCF65C161EBBF900E8E368 /* filters */,
DDDCF659161EB93500E8E368 /* BlackMagicController.h */,
DDDCF65A161EB93500E8E368 /* BlackMagicController.mm */,
DD039719161C4F9000D0D629 /* include */,
8429C0DA156A7943000ADD56 /* BlackMagic.h */,
8429C0DB156A7943000ADD56 /* BlackMagic.mm */,
DD039735161C591400D0D629 /* DecklinkCallback.h */,
DD039736161C591400D0D629 /* DecklinkCallback.mm */,
8429C0DC156A7943000ADD56 /* BlackMagic.xib */,
Expand Down Expand Up @@ -324,6 +325,7 @@
DD4CC1E9161DEA13000E459D /* bwShader.vert in Sources */,
DD4CC1EA161DEA13000E459D /* colorCorrectShader.frag in Sources */,
DD4CC1EB161DEA13000E459D /* colorCorrectShader.vert in Sources */,
DDE64735161EC97E0007E490 /* BlackMagicController.mm in Sources */,
DD4CC1EC161DEA13000E459D /* deinterlace.frag in Sources */,
DD4CC1ED161DEA13000E459D /* deinterlace.vert in Sources */,
DDDCF65F161EBC0700E8E368 /* DeinterlaceFilter.m in Sources */,
Expand Down
6 changes: 4 additions & 2 deletions ViljensTriumf/Plugins/BlackMagic.h
Expand Up @@ -33,8 +33,10 @@ class DeckLinkController;
CIContext * ciContext; //Dynamic switched context (main/control)

CIFilter * blurFilter;
CIFilter * deinterlaceFilter;

DeinterlaceFilter * deinterlaceFilter;
CIFilter * colorControlsFilter;
CIFilter * gammaAdjustFilter;
CIFilter * toneCurveFilter;
}

@end
78 changes: 62 additions & 16 deletions ViljensTriumf/Plugins/BlackMagic.mm
Expand Up @@ -5,9 +5,21 @@
@implementation BlackMagic

-(void)initPlugin{
[self addPropF:@"min"];
[self addPropF:@"max"];
[self addPropF:@"blur"];
[self addPropF:@"saturation"];
[self addPropF:@"brightness"];
[[self addPropF:@"contrast"] setMaxValue:1.5];

[[self addPropF:@"gamma"] setMaxValue:1.5];

/*[self addPropF:@"curvep1"];
[self addPropF:@"curvep2"];
[self addPropF:@"curvep3"];
[self addPropF:@"curvep4"];
[self addPropF:@"curvep5"];*/


// [self addPropF:@"blur"];
[self addPropB:@"deinterlace"];


blackMagicController = [[BlackMagicController alloc] init];
Expand Down Expand Up @@ -40,16 +52,19 @@ -(void)setup{

blurFilter = [[CIFilter filterWithName:@"CIGaussianBlur"] retain];
[blurFilter setDefaults];


NSBundle *bundle = [NSBundle bundleForClass: [self class]];// 2
NSString *code = [NSString stringWithContentsOfFile: [bundle// 3
pathForResource: @"deinterlaceFilter"
ofType: @"cikernel"]];
NSArray *kernels = [CIKernel kernelsWithString: code];// 4
hazeRemovalKernel = [kernels objectAtIndex:0];
colorControlsFilter = [[CIFilter filterWithName:@"CIColorControls"] retain];
[colorControlsFilter setDefaults];

gammaAdjustFilter = [[CIFilter filterWithName:@"CIGammaAdjust"] retain];
[gammaAdjustFilter setDefaults];

deinterlaceFilter = [CIFilter fil]
toneCurveFilter = [[CIFilter filterWithName:@"CIToneCurve"] retain];
[toneCurveFilter setDefaults];

deinterlaceFilter = [[DeinterlaceFilter alloc] init];
[deinterlaceFilter setDefaults];

CGLContextObj contextGl = CGLContextObj([[[[[globalController viewManager] glViews] objectAtIndex:0] openGLContext] CGLContextObj]);
CGLPixelFormatObj pixelformatGl = CGLPixelFormatObj([[[[[globalController viewManager] glViews] objectAtIndex:0] pixelFormat] CGLPixelFormatObj]);
Expand Down Expand Up @@ -91,7 +106,7 @@ -(void)update:(NSDictionary *)drawingInformation{
for(int i=0;i<3;i++){
DecklinkCallback * callback = [blackMagicController callbacks:i];
if(callback->newFrame){
pthread_mutex_lock(&callbacks[i]->mutex);
pthread_mutex_lock(&callback->mutex);
callback->newFrame = false;
int w = callback->w;
int h = callback->h;
Expand All @@ -101,9 +116,9 @@ -(void)update:(NSDictionary *)drawingInformation{
currentFrames[i].allocate(w, h, OF_IMAGE_COLOR);
}
*/
unsigned char * bytes = callbacks[i]->bytes;
unsigned char * bytes = callback->bytes;
currentFrames[i].setFromPixels(bytes, w, h, OF_IMAGE_COLOR);
pthread_mutex_unlock(&callbacks[i]->mutex);
pthread_mutex_unlock(&callback->mutex);
}
}

Expand Down Expand Up @@ -139,9 +154,38 @@ -(CIImage*) createCIImageFromTexture:(GLint)tex size:(NSSize)size{
-(CIImage*) filterCIImage:(CIImage*)inputImage{
// [resizeFilter setValue:inputImage forKey:@"inputImage"];
// [depthBlurFilter setValue:[resizeFilter valueForKey:@"outputImage"] forKey:@"inputImage"];
[blurFilter setValue:[NSNumber numberWithFloat:PropF(@"blur")] forKey:@"inputRadius"];
[blurFilter setValue:inputImage forKey:@"inputImage"];
CIImage * _outputImage = [blurFilter valueForKey:@"outputImage"];

CIImage * _outputImage = inputImage;

if(PropB(@"deinterlace")){
[deinterlaceFilter setInputImage:_outputImage];
_outputImage = [deinterlaceFilter valueForKey:@"outputImage"];
}

/* [blurFilter setValue:[NSNumber numberWithFloat:PropF(@"blur")] forKey:@"inputRadius"];
[blurFilter setValue:_outputImage forKey:@"inputImage"];
_outputImage = [blurFilter valueForKey:@"outputImage"];*/

[colorControlsFilter setValue:[NSNumber numberWithFloat:PropF(@"saturation")] forKey:@"inputSaturation"];
[colorControlsFilter setValue:[NSNumber numberWithFloat:PropF(@"contrast")] forKey:@"inputContrast"];
[colorControlsFilter setValue:[NSNumber numberWithFloat:PropF(@"brightness")] forKey:@"inputBrightness"];
[colorControlsFilter setValue:_outputImage forKey:@"inputImage"];
_outputImage = [colorControlsFilter valueForKey:@"outputImage"];


[gammaAdjustFilter setValue:[NSNumber numberWithFloat:PropF(@"gamma")] forKey:@"inputPower"];
[gammaAdjustFilter setValue:_outputImage forKey:@"inputImage"];
_outputImage = [gammaAdjustFilter valueForKey:@"outputImage"];

/* [toneCurveFilter setValue:[NSNumber numberWithFloat:PropF(@"curvep1")] forKey:@"inputPoint0"];
[toneCurveFilter setValue:[NSNumber numberWithFloat:PropF(@"curvep2")] forKey:@"inputPoint1"];
[toneCurveFilter setValue:[NSNumber numberWithFloat:PropF(@"curvep3")] forKey:@"inputPoint2"];
[toneCurveFilter setValue:[NSNumber numberWithFloat:PropF(@"curvep4")] forKey:@"inputPoint3"];
[toneCurveFilter setValue:[CIVector numberWithFloat:PropF(@"curvep5")] forKey:@"inputPoint4"];
[toneCurveFilter setValue:_outputImage forKey:@"inputImage"];
_outputImage = [toneCurveFilter valueForKey:@"outputImage"];*/


return _outputImage;
}

Expand Down Expand Up @@ -176,6 +220,8 @@ -(void) render{
CIImage * outputImage = [self createCIImageFromTexture:[self imageForSelector:outSelector]->getTextureReference().getTextureData().textureID size:NSMakeSize([self imageForSelector:outSelector]->getWidth(), [self imageForSelector:outSelector]->getHeight())];

outputImage = [self filterCIImage:outputImage];


glScaled(1.0/[outputImage extent].size.width, 1.0/[outputImage extent].size.height, 1);
//glScaled(1.0/720, 10/576.0, 1);
[ciContext drawImage:outputImage
Expand Down
3 changes: 3 additions & 0 deletions ViljensTriumf/Plugins/BlackMagicController.h
Expand Up @@ -17,6 +17,9 @@

IDeckLinkInput * deckLinkInputs[3];
DecklinkCallback * callbacks[3];

@public
IDeckLinkGLScreenPreviewHelper* glhelper;

}

Expand Down
2 changes: 2 additions & 0 deletions ViljensTriumf/Plugins/BlackMagicController.mm
Expand Up @@ -36,6 +36,8 @@ -(void) initDecklink {

}

glhelper = CreateOpenGLScreenPreviewHelper();

for(int index=0;index<deviceList.size();index++){
// Get the IDeckLinkInput for the selected device
if ((deviceList[index]->QueryInterface(IID_IDeckLinkInput, (void**)&deckLinkInputs[index]) != S_OK))
Expand Down
6 changes: 4 additions & 2 deletions ViljensTriumf/Plugins/filters/DeinterlaceFilter.h
Expand Up @@ -6,9 +6,11 @@
//
//

#import <CoreImage/CoreImage.h>
#import <QuartzCore/QuartzCore.h>

@interface DeinterlaceFilter : CIFilter{
CIImage *inputImage;
CIImage * _inputImage;
}

@property (strong) CIImage *inputImage;
@end
3 changes: 2 additions & 1 deletion ViljensTriumf/Plugins/filters/DeinterlaceFilter.m
Expand Up @@ -11,6 +11,7 @@
static CIKernel *deinterlaceKernel = nil;

@implementation DeinterlaceFilter
@synthesize inputImage = _inputImage;

- (id)init
{
Expand All @@ -28,7 +29,7 @@ - (id)init

- (CIImage *)outputImage
{
CISampler *src = [CISampler samplerWithImage: inputImage];
CISampler *src = [CISampler samplerWithImage: self.inputImage];

return [self apply: deinterlaceKernel, src, kCIApplyOptionDefinition, [src definition], nil];
}
Expand Down
9 changes: 5 additions & 4 deletions ViljensTriumf/Plugins/filters/deinterlaceFilter.cikernel
Expand Up @@ -22,13 +22,14 @@ kernel vec4 v002SimpleDeinterlace(sampler image)
// our odd sampling
vec4 oddevenfield = sample(image, vec2(texcoord0.x, texcoord0.y + 1.0));
vec4 oddoddfield = sample(image, texcoord0);
vec4 oddresult = mix(oddevenfield, oddoddfield, 0.5);
vec4 oddresult = mix(oddevenfield, oddoddfield, 0.5);

// our even sampling
vec4 evenevenfield = sample(image, texcoord0);
/* vec4 evenevenfield = sample(image, texcoord0);
vec4 evenoddfield = sample(image, vec2(texcoord0.x, texcoord0.y - 1.0));
vec4 evenresult = mix(evenevenfield, evenoddfield, 0.5);

*/
// final output
return mix(oddresult, evenresult, isodd);
return oddresult;
// return mix(oddresult, evenresult, isodd);
}

0 comments on commit 8050ac1

Please sign in to comment.