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