Search code examples
iosobjective-cvideocore

Switch Filters with VideoCore VCSimpleSession


There is a filter property on VCSimpleSession of type VCFilter:

typedef NS_ENUM(NSInteger, VCFilter) {
    VCFilterNormal,
    VCFilterGray,
    VCFilterInvertColors,
    VCFilterSepia,
    VCFilterFisheye,
    VCFilterGlow
};

Where is the implementation for these filters? How can I use them?


Solution

  • Each filter lives in their own file in filters/Basic directory, and added at runtime with FilterFactory.cpp:

    FilterFactory::FilterFactory() {
        {
            filters::BasicVideoFilterBGRA b;
            filters::GrayscaleVideoFilter g;
            filters::InvertColorsVideoFilter i;
            filters::SepiaVideoFilter s;
            filters::FisheyeVideoFilter f;
            filters::GlowVideoFilter gl;
        }
    }
    

    You can set the filters using the setFilter: method. The sample app iterates through all of the filters with a UIButton like so:

    - (IBAction)btnFilterTouch:(id)sender {
        switch (_session.filter) {
            case VCFilterNormal:
                [_session setFilter:VCFilterGray];
                break;
            case VCFilterGray:
                [_session setFilter:VCFilterInvertColors];
                break;
            case VCFilterInvertColors:
                [_session setFilter:VCFilterSepia];
                break;
            case VCFilterSepia:
                [_session setFilter:VCFilterFisheye];
                break;
            case VCFilterFisheye:
                [_session setFilter:VCFilterGlow];
                break;
            case VCFilterGlow:
                [_session setFilter:VCFilterNormal];
                break;
            default:
                break;
        }
    }