Falha ao retornar a Surface

public void gravar(Bitmap b){
  Camera c=Camera.open();
  MediaRecorder mMediaRecorder=new MediaRecorder();
  //
  mMediaRecorder.setCamera(c);
  
  //Passe o objeto de arquivo a ser gravado.  Chame isso depois de setOutputFormat(), mas antes de prepare().  O arquivo deve ser pesquisável.  Depois de configurar o próximo arquivo de saída, o aplicativo não deve usar o arquivo até stop().  O aplicativo é responsável por limpar arquivos não utilizados após stop() ser chamado.
  mMediaRecorder.setOutputFile("/sdcard/Pictures/video.mp4");
  
  try{
  //
  mMediaRecorder.prepare();
  }catch(Exception e){}
  //Obtém a superfície para gravar ao usar a fonte de vídeo SURFACE.
  //Só pode ser chamado após prepare().  Os quadros renderizados para o Surface antes de start() serão descartados.
  Surface s=mMediaRecorder.getSurface();
  
  //Set video frame capture rate.
  double fps=5;
  mMediaRecorder.setCaptureRate(fps);
  
  //Configura o gravador para usar uma superfície persistente ao usar a fonte de vídeo SURFACE.
 // mMediaRecorder.setInputSurface(s);
  //Sets the maximum duration (in ms) of the recording session.
  int max_duration_ms=30000;
  mMediaRecorder.setMaxDuration(max_duration_ms);
  
  //Define uma superfície para mostrar uma visualização da mídia gravada (vídeo).
//  mMediaRecorder.setPreviewDisplay(s);
  
  //Sets the frame rate of the video to be captured.
  int rate=5;
  mMediaRecorder.setVideoFrameRate(rate);
  
  //Define a largura e a altura do vídeo a ser capturado.
  int width=1080;
  int height=720;
  mMediaRecorder.setVideoSize(width,height);
  
  //Começa a capturar e codificar dados para o arquivo especificado com setOutputFile().
  mMediaRecorder.start();
//Begins capturing and encoding data to the file specified with setOutputFile().
  try{Thread.sleep(5000);}catch(Exception e){}
  mMediaRecorder.stop();
  
 }