setOutputFormat chamado em um estado inválido: 4 (onde e por que)
Eu tenho o seguinte código:
Log.i("xx","A");
media_recorder = new MediaRecorder();
Log.i("xx","B");
media_recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
Log.i("xx","C");
media_recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
Log.i("xx","D");
media_recorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
Log.i("xx","E");
media_recorder.setVideoSize(320, 240);
Log.i("xx","F");
media_recorder.setVideoFrameRate(15);
Log.i("xx","G");
CamcorderProfile profile = CamcorderProfile.get(CameraInfo.CAMERA_FACING_FRONT,CamcorderProfile.QUALITY_LOW);
Log.i("xx","H");
media_recorder.setProfile(profile);
Log.i("xx","I");
media_recorder.setOutputFile(fname);
Quando o código é executado, vejo o seguinte em meus logs;
02-07 16:12:47.628: I/xx(15436): A
02-07 16:12:47.628: I/xx(15436): B
02-07 16:12:47.638: I/xx(15436): C
02-07 16:12:47.638: I/xx(15436): D
02-07 16:12:47.638: I/xx(15436): E
02-07 16:12:47.638: I/xx(15436): F
02-07 16:12:47.638: I/xx(15436): G
02-07 16:12:47.638: I/xx(15436): H
02-07 16:12:47.638: E/MediaRecorder(15436): setOutputFormat called in an invalid state: 4
Isso me confundiu porque a chamada parasetOutputFormat
foi feita entre "C" e "D", mas o relatório do erro parece ocorrer imediatamente após H (nunca atingindo "I"). Então agora eu não sei o que está causando o erro, e estou confuso sobre onde o erro está ocorrendo.
EDITAR: Acabei de percorrer o código no depurador - e com certeza o erro ocorre durante a chamada para setProfile (perfil) ... portanto, parece que a chamada feita para setOutputFormat (entre "C" e "D") deve ter funcionado ok, mas o setProfile deve fazer uma segunda chamada para setOutputFormat que falhará ... é isso que está acontecendo?
EDITAR: E o que realmente significa o estado inválido 4? Existe alguma lista em algum lugar que informa o significado de cada possível número inválido de estado 1,2,3,4 ... etc?