2016-05-16 4 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_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()? С уважением.

ответ

Смежные вопросы