2013-09-30 25 views
6

私はCameraPreviewデータから短い連続mp4ファイルをMediaCodec.createInputSurface()経由で生成しようとしています。ただし、MediaCodecとそれに関連付けられたサーフェスを再作成するには、mCamera.setPreviewTexture(...)への別の呼び出しを許可するようにカメラを停止する必要があります。この遅延は、受け入れられない量のフレームの欠落を招く。Surface入力のMediaCodec:チャンク出力を生成する

したがって、入力サーフェスを再作成することなく、CODEC_CONFIGEND_OF_STREAMのデータを定期的に生成する必要があるため、mCamera.setPreviewTexture(...)を呼び出す必要があります。 MediaFormatが変更されていないと仮定してこれは可能ですか?

は(私はfaddenのCameraToMpegTest例を適応しています私の完全なコードはhereです。)

成功しなかった:

MediaCodecを排出、MediaCodec.signalEndOfInputStream()を呼び出し、その後、チャンク間MediaCodec.flush()を呼び出すことがでIllegalStateExceptionを生成します2番目のコールはMediaCodec.signalEndOfInputStream()です。

MediaCodec.signalEndOfInputStream()を呼び出すMediaCodecを排出し、再度MediaCodec.createInputSurface()を呼び出すことなく、チャンク間MediaCodec.stop(); MediaCodec.configure(...), MediaCodec.start()を呼び出すと、次のエラーを生成します。fadden感謝を

09-30 13:12:49.889 17638-17719/x.xx.xxxx E/Surface﹕ queueBuffer: error queuing buffer to SurfaceTexture, -19 
09-30 13:12:49.889 17638-17719/x.xx.xxxx E/IMGSRV﹕ :0: UnlockPostBuffer: Failed to queue buffer 0x592e1e70 
09-30 13:12:49.889 17638-17719/x.xx.xxxx E/CameraToMpegTest﹕ Encoding loop exception! 
09-30 13:12:49.889 17638-17719/x.xx.xxxx W/System.err﹕ java.lang.RuntimeException: eglSwapBuffers: EGL error: 0x300b 
09-30 13:12:49.896 17638-17719/x.xx.xxxx W/System.err﹕ at x.xx.xxxx.ChunkedHWRecorder$CodecInputSurface.checkEglError(ChunkedHWRecorder.java:731) 
09-30 13:12:49.896 17638-17719/x.xx.xxxx W/System.err﹕ at x.xx.xxxx.ChunkedHWRecorder$CodecInputSurface.swapBuffers(ChunkedHWRecorder.java:713) 
09-30 13:12:49.896 17638-17719/x.xx.xxxx W/System.err﹕ at x.xx.xxxx.ChunkedHWRecorder.startRecording(ChunkedHWRecorder.java:164) 
09-30 13:12:49.896 17638-17719/x.xx.xxxx W/System.err﹕ at x.xx.xxxx.HWRecorderActivity$CameraToMpegWrapper.run(HWRecorderActivity.java:76) 
09-30 13:12:49.896 17638-17719/x.xx.xxxx W/System.err﹕ at java.lang.Thread.run(Thread.java:841) 

を解決しました。完全なソリューションソースはhereです。

答えて

関連する問題