1
在我的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()
失败的看法?问候。