You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
1.7 KiB
67 lines
1.7 KiB
//
|
|
// SCExposureAdjustProcessingModule.m
|
|
// Snapchat
|
|
//
|
|
// Created by Yu-Kuan (Anthony) Lai on 6/1/17.
|
|
// Copyright © 2017 Snapchat, Inc. All rights reserved.
|
|
//
|
|
|
|
#import "SCExposureAdjustProcessingModule.h"
|
|
|
|
#import "SCProcessingModuleUtils.h"
|
|
|
|
@import CoreImage;
|
|
@import CoreMedia;
|
|
|
|
static const CGFloat kSCExposureAdjustProcessingModuleMaxEVValue = 2.0;
|
|
|
|
@implementation SCExposureAdjustProcessingModule {
|
|
CIContext *_context;
|
|
CIFilter *_filter;
|
|
CFMutableDictionaryRef _attributes;
|
|
CVPixelBufferPoolRef _bufferPool;
|
|
}
|
|
|
|
- (instancetype)init
|
|
{
|
|
if (self = [super init]) {
|
|
_context = [CIContext context];
|
|
_filter = [CIFilter filterWithName:@"CIExposureAdjust"];
|
|
[_filter setValue:@0.0 forKey:@"inputEV"];
|
|
}
|
|
return self;
|
|
}
|
|
|
|
- (void)setEVValue:(CGFloat)value
|
|
{
|
|
CGFloat newEVValue = value * kSCExposureAdjustProcessingModuleMaxEVValue;
|
|
[_filter setValue:@(newEVValue) forKey:@"inputEV"];
|
|
}
|
|
|
|
- (void)dealloc
|
|
{
|
|
CVPixelBufferPoolFlush(_bufferPool, kCVPixelBufferPoolFlushExcessBuffers);
|
|
CVPixelBufferPoolRelease(_bufferPool);
|
|
}
|
|
|
|
- (BOOL)requiresDepthData
|
|
{
|
|
return NO;
|
|
}
|
|
|
|
- (CMSampleBufferRef)render:(RenderData)renderData
|
|
{
|
|
CMSampleBufferRef input = renderData.sampleBuffer;
|
|
CVPixelBufferRef pixelBuffer = CMSampleBufferGetImageBuffer(input);
|
|
CIImage *image = [CIImage imageWithCVPixelBuffer:pixelBuffer];
|
|
|
|
[_filter setValue:image forKey:kCIInputImageKey];
|
|
CIImage *result = [_filter outputImage];
|
|
|
|
return [SCProcessingModuleUtils sampleBufferFromImage:result
|
|
oldSampleBuffer:input
|
|
bufferPool:_bufferPool
|
|
context:_context];
|
|
}
|
|
|
|
@end
|