2016-05-16 455 views
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_TYPEMediaFormat.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()失败的看法?问候。

回答