2013-07-24 12 views
5

Ich möchte den MediaCodec verwenden, um eine Oberfläche in H.264 zu codieren.MediaCodec createInputSurface

Mit API 18 gibt es eine Möglichkeit, von einer Oberfläche zu codieren, indem createInputSurface() aufgerufen und auf dieser Oberfläche gezeichnet wird.

Ich bekomme eine IllegalStateException auf createInputSurface(). Hier ist zusätzliche Logcat-Ausgabe:

D/H264Encoder(17570): MediaFormat: {frame-rate=25, bitrate=1000000, height=600, mime=video/avc, color-format=19, i-frame-interval=75, width=800} 
D/NvOsDebugPrintf( 125): NvMMLiteOpen : Block : BlockType = 4 
D/NvOsDebugPrintf( 125): NvRmPowerModuleClockControl on MOD[29] INST[0] 
D/NvOsDebugPrintf( 125): NvRmModuleResetWithHold deassert MOD[29] INST[0] 
D/NvOsDebugPrintf( 125): NvMMLiteBlockCreate : Block : BlockType = 4 
I/ACodec (17570): setupVideoEncoder succeeded 
E/OMXNodeInstance( 125): OMX_EnableAndroidNativeBuffers failed with error -2147479547 (0x80001005) 
E/OMXNodeInstance( 125): createInputSurface requires AndroidOpaque color format 
E/ACodec (17570): [OMX.Nvidia.h264.encoder] onCreateInputSurface returning error -38 
W/MediaCodec(17570): createInputSurface failed, err=-38 

Jeder Einblick, wie die neue API funktioniert, wäre hilfreich.

Antwort

5

Die wichtige Fehlermeldung ist dies:

createInputSurface requires AndroidOpaque color format 

Für Oberflächeneingang, Sie Muss das Farbformat zu COLOR_FormatSurface (auch als AndroidOpaque bekannt.) Gesetzt

Siehe Beispiele here, insbesondere EncodeAndMuxTest.

+0

Danke, das hat sehr geholfen! Ich nahm an, dass es etwas damit zu tun hat, konnte aber auf AndroidOpaque nichts finden – Broatian