Вызов setOutputFormat в недопустимом состоянии: 4 (где и почему)
У меня есть следующий код:
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);
Когда код выполняется, я вижу следующее в моих журналах;
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
Это смутило меня, потому что призыв кsetOutputFormat
был сделан между "C" и "D", но сообщение об ошибке, кажется, сразу после H (никогда не достигая "I"). Так что теперь я не знаю, что является причиной ошибки, и я не понимаю, где происходит ошибка.
РЕДАКТИРОВАТЬ: Я только что прошел по коду в отладчике - и, конечно, ошибка возникает во время вызова setProfile (profile) ... так что может показаться, что вызов setOutputFormat (между "C" и "D") должен был сработать хорошо, но тогда setProfile должен сам сделать второй вызов setOutputFormat, который затем завершается ошибкой ... это то, что происходит?
РЕДАКТИРОВАТЬ: И что на самом деле означает недействительное состояние 4? Есть ли где-нибудь список, который сообщает вам значение каждого возможного недопустимого номера состояния 1,2,3,4 ... и т. Д.