使用 VideoCore VCSimpleSession 切换过滤器

Switch Filters with VideoCore VCSimpleSession

VCSimpleSession 上有一个 VCFilter 类型的过滤器 属性:

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

这些过滤器的实现在哪里?我该如何使用它们?

每个过滤器都位于 filters/Basic 目录中的自己的文件中,并在运行时添加 FilterFactory.cpp:

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

您可以使用 setFilter: 方法设置过滤器。 sample app 使用 UIButton 遍历所有过滤器,如下所示:

- (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;
    }
}