title: Android, manupulate camera preview frames
body: <p>I want to make an Android application that uses the camera and applies image processing filters on the preview frames. </p>
  
  <pre><code>package alex.filter;
  
  import java.io.IOException;
  
  import android.content.Context;
  import android.graphics.Canvas;
  import android.hardware.Camera;
  import android.hardware.Camera.PreviewCallback;
  import android.view.SurfaceHolder;
  import android.view.SurfaceView;
  
  class Preview extends SurfaceView implements SurfaceHolder.Callback {
  
      SurfaceHolder mHolder;
      public Camera camera;
  
      Preview(Context context) {
          super(context);
          mHolder = getHolder();
          mHolder.addCallback(this);
          mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
      }
  
      public void surfaceCreated(SurfaceHolder holder) {        
          camera = Camera.open();        
  
          try {
              camera.setPreviewDisplay(holder);
  
              camera.setPreviewCallback(new PreviewCallback() {
                  public void onPreviewFrame(byte[] data, Camera arg1) {                    
                      for( int i = 0 ; i &lt; data.length ; i ++ ){
                          data[ i] = 0; // or some sirius filter
                      }                                                            
                      Preview.this.invalidate();
                  }
              });
          } catch (IOException e) {
              e.printStackTrace();
          }
          }
  
      public void surfaceDestroyed(SurfaceHolder holder) {        
          camera.stopPreview();        
          camera = null;
      }
  
      public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {        
          Camera.Parameters parameters = camera.getParameters();
          parameters.setPreviewSize(w, h);
          camera.setParameters(parameters);
          camera.startPreview();
      }
  
      @Override
      public void draw(Canvas canvas) {
          super.draw(canvas);        
      }
  }
  </code></pre>
  
  <p>However, I see no changes in the emulator no matter what I do in the <code>onPreviewFrame</code> method.</p>