GPUImage group filters

半腔热情 提交于 2019-12-04 19:42:06

you have missed some code statement for doing it which is as below.

   [brightnessFilter addTarget: contrastFilter];
   [contrastFilter addTarget: exposureFilter];

  [(GPUImageFilterGroup *) groupFilter setInitialFilters:[NSArray arrayWithObject: brightnessFilter]];
  [(GPUImageFilterGroup *) groupFilter setTerminalFilter:exposureFilter];

Thanks

Here is a full code to apply Brightness, Contrast and Saturation to video

i get the reference code from this link and i make change in that..

** in this code we use GPUImage Frameworks

1). in .h file

#import "GPUImage.h"

@interface ViewController : UIViewController
{
    GPUImageMovie *movieFile;
    GPUImageMovieWriter *movieWriter;
    GPUImageUIElement *uiElementInput;
}

2). in .m file

- (void)editVideo
{
    NSURL *sampleURL = [[NSBundle mainBundle] URLForResource:@"Sample Video" withExtension:@"m4v"];

    movieFile = [[GPUImageMovie alloc] initWithURL:sampleURL];
    movieFile.runBenchmark = YES;
    movieFile.playAtActualSpeed = YES;

    GPUImageFilterGroup *groupFilter = [[GPUImageFilterGroup alloc]init]; //1

    GPUImageBrightnessFilter *brightnessFilter = [[GPUImageBrightnessFilter alloc] init]; //2
    GPUImageContrastFilter *contrastFilter = [[GPUImageContrastFilter alloc] init]; //3
    GPUImageSaturationFilter *saturationFilter = [[GPUImageSaturationFilter alloc] init]; //4

    [(GPUImageBrightnessFilter*)brightnessFilter setBrightness:0.10]; // change value between -1.00 to 1.00
    [(GPUImageContrastFilter*)contrastFilter setContrast:1.48];     // change value between 0.00 to 4.00
    [(GPUImageSaturationFilter*)saturationFilter setSaturation:2.00];   //change value between 0.00 to 2.00

    GPUImageAlphaBlendFilter *blendFilter = [[GPUImageAlphaBlendFilter alloc] init]; //5
    blendFilter.mix = 0.0;

                                                            /* ************************************************** */

    UIView *contentView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, [[UIScreen mainScreen] bounds].size.width, [[UIScreen mainScreen] bounds].size.height-20)];
    contentView.backgroundColor = [UIColor clearColor];

    uiElementInput = [[GPUImageUIElement alloc] initWithView:contentView];
    [brightnessFilter addTarget:contrastFilter];
    [contrastFilter addTarget:saturationFilter];
    [saturationFilter addTarget:blendFilter];
    [uiElementInput addTarget:blendFilter];

    [(GPUImageFilterGroup *) groupFilter setInitialFilters:[NSArray arrayWithObject: brightnessFilter]];
    [(GPUImageFilterGroup *) groupFilter setTerminalFilter:blendFilter];

    [movieFile addTarget:brightnessFilter];
    [movieFile addTarget:contrastFilter];
    [movieFile addTarget:saturationFilter];

    // Only rotate the video for display, leave orientation the same for recording
    GPUImageView *filterView = (GPUImageView *)vwVideo;
    [brightnessFilter addTarget:filterView];
    [contrastFilter addTarget:filterView];
    [saturationFilter addTarget:filterView];
    [blendFilter addTarget:filterView];

    [brightnessFilter setFrameProcessingCompletionBlock:^(GPUImageOutput * filter, CMTime frameTime){
        if (frameTime.value/frameTime.timescale == 2) {
            [contentView viewWithTag:1].hidden = NO;
        }
        [uiElementInput update];
    }];

    [contrastFilter setFrameProcessingCompletionBlock:^(GPUImageOutput * filter, CMTime frameTime){
        if (frameTime.value/frameTime.timescale == 2) {
            [contentView viewWithTag:1].hidden = NO;
        }
        [uiElementInput update];
    }];

    [saturationFilter setFrameProcessingCompletionBlock:^(GPUImageOutput * filter, CMTime frameTime){
        if (frameTime.value/frameTime.timescale == 2) {
            [contentView viewWithTag:1].hidden = NO;
        }
        [uiElementInput update];
    }];

    //In addition to displaying to the screen, write out a processed version of the movie to disk
    NSString *pathToMovie = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/Movie.m4v"];
    unlink([pathToMovie UTF8String]); // If a file already exists, AVAssetWriter won't let you record new frames, so delete the old movie

    movieWriter = [[GPUImageMovieWriter alloc] initWithMovieURL:[NSURL fileURLWithPath:pathToMovie] size:CGSizeMake(640.0, 480.0)];
    [brightnessFilter addTarget:movieWriter];
    [contrastFilter addTarget:movieWriter];
    [blendFilter addTarget:movieWriter];

    // Configure this for video from the movie file, where we want to preserve all video frames and audio samples
    movieWriter.shouldPassthroughAudio = YES;
    movieFile.audioEncodingTarget = movieWriter;
    [movieFile enableSynchronizedEncodingUsingMovieWriter:movieWriter];

    [movieWriter startRecording];
    [movieFile startProcessing];

    [movieWriter setCompletionBlock:^{
        UISaveVideoAtPathToSavedPhotosAlbum(pathToMovie, nil, nil, nil);
    }];
}

*Note :- Please run that demo example in device not in simulator for perfect result.

After process done you will get effected video in your device and for different effect you can change the value at setBrightness , setContrast and setSaturation (see in code)

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!