В моем приложении для Android мне нужно закодировать видео в реальном времени в gpu. Вот некоторые соответствующий код:MediaCodec createInputSurface() выдает незаконное государственное исключение
MediaFormat format = MediaFormat.createVideoFormat(MIME_TYPE, WIDTH, HEIGHT);
format.setInteger(MediaFormat.KEY_COLOR_FORMAT,
MediaCodecInfo.CodecCapabilities.COLOR_FormatSurface);
format.setInteger(MediaFormat.KEY_BIT_RATE, BITRATE);
format.setInteger(MediaFormat.KEY_FRAME_RATE, FRAME_RATE);
format.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, IFRAME_INTERVAL);
this._encoder = MediaCodec.createEncoderByType(MIME_TYPE);
this._encoder.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
Surface s = this._encoder.createInputSurface();
Когда MIME_TYPE
является MediaFormat.MIMETYPE_VIDEO_AVC,
, этот код работает, как ожидалось. Однако, когда тип mime равен MediaFormat.MIMETYPE_VIDEO_VP8,
, вызов createInputSurface()
вызывает исключение из-за незаконного состояния. Вот еще информация от LogCat:
I/ACodec: setupVideoEncoder succeeded
E/OMXNodeInstance: OMX_GetExtensionIndex OMX.google.android.index.storeMetaDataInBuffers failed
E/ACodec: [OMX.google.vpx.encoder] onCreateInputSurface returning error -2147483648
W/MediaCodec: createInputSurface failed, err=-2147483648
Я имею в виду, VP8 кодер присутствует на устройстве. В противном случае MediaCodec.configure()
не удался. Цените свое понимание причин отказа createInputSurface()
? С уважением.