I think the problem with your above code is in the lines:
GPUImageView *filterview = [[GPUImageView alloc] init];
_preview = filterview;
If you've defined your GPUImageView in Interface Builder, _preview
is going to pointing to a property that you've associated with that view in IB. The above code replaces that pointer with a view that's not the one defined in IB. Therefore, your visible view will never get your camera content.
You need to instead remove those two lines and use
[filter addTarget:_preview];
making sure that your above setup comes after your view controller has had a chance to properly associate your outlets with your NIB and that the view in IB is indeed a GPUImageView.