Android.media.MediaCodec throws an exception in queueInputBuffer ()

I need to convert an audio file from PCM to AMR, and I tried to make it with MediaCodec from Android API 16+. I got an IllegalStateException when calling queueInputBuffer:

07-16 19:40:55.519: E/AndroidRuntime(19227): FATAL EXCEPTION: main 07-16 19:40:55.519: E/AndroidRuntime(19227): java.lang.IllegalStateException 07-16 19:40:55.519: E/AndroidRuntime(19227): at android.media.MediaCodec.queueInputBuffer(Native Method) 

Here is my code:

  private static MediaCodec mediaCodec; private static void initMediaCodec() { mediaCodec = MediaCodec.createEncoderByType("audio/3gpp"); MediaFormat mediaFormat = MediaFormat.createAudioFormat("audio/3gpp", 8000, 1); mediaFormat.setInteger(MediaFormat.KEY_BIT_RATE, 12800); mediaFormat.setInteger(MediaFormat.KEY_SAMPLE_RATE, 8000); mediaFormat.setInteger(MediaFormat.KEY_CHANNEL_COUNT, 1); mediaCodec.configure(mediaFormat, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE); mediaCodec.start(); } <...> initMediaCodec(); ByteBuffer[] inputBuffers = mediaCodec.getInputBuffers(); ByteBuffer[] outputBuffers = mediaCodec.getOutputBuffers(); int inputBufferIndex = mediaCodec.dequeueInputBuffer(-1); if (inputBufferIndex >= 0) { ByteBuffer inputBuffer = inputBuffers[inputBufferIndex]; inputBuffer.clear(); inputBuffer.put(fileBuffer); //fileBuffer is ByteBuffer from my input audio file mediaCodec.queueInputBuffer(inputBufferIndex, 0, fileBuffer.capacity(), 0, 0); } <...> 

I mentioned that inputBuffers has 4 elements in it with a capacity of 320, my audio file buffer can have a capacity of 96000 +.

Any help would be appreciated. Thanks!

+4
source share

Source: https://habr.com/ru/post/1491702/


All Articles