2016-05-16 14 views
1

私のAndroidアプリケーションでは、gpuでライブカメラビデオをエンコードする必要があります。 MIME_TYPEMediaFormat.MIMETYPE_VIDEO_AVC,ある場合は期待通り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タイプが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()が失敗する理由についてのあなたの洞察を感謝しますか?よろしく。

答えて

関連する問題