2013-07-24 12 views
5

Desidero utilizzare MediaCodec per codificare una superficie in H.264.MediaCodec createInputSurface

Con API 18 c'è un modo per codificare da una superficie chiamando createInputSurface() e disegnando su quella superficie.

Ottengo un IllegalStateException su createInputSurface(). Ecco uscita logcat supplementare:

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 

Tutta la comprensione di come le nuove opere api sarebbe utile.

risposta

5

Il messaggio di errore importante è questo:

createInputSurface requires AndroidOpaque color format 

Per l'input di superficie, si must impostare il formato di colore per COLOR_FormatSurface (noto anche come AndroidOpaque.)

Vedere gli esempi here, in particolare EncodeAndMuxTest.

+0

Grazie che ha aiutato molto! Ho pensato che avesse qualcosa a che fare con questo, ma non ho trovato nulla su AndroidOpaque – Broatian

Problemi correlati