2013-07-24 71 views
5

我想使用MediaCodec將Surface編碼爲H.264。MediaCodec createInputSurface

使用API​​ 18,可以通過調用createInputSurface()並在該表面上繪圖來從表面編碼。

我在createInputSurface()上得到一個IllegalStateException。這裏是額外的logcat輸出:

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 

任何有關如何新的api的作品會有所幫助。

回答

5

重要錯誤消息是這樣的:

createInputSurface requires AndroidOpaque color format 

對於表面輸入,必須設置顏色格式COLOR_FormatSurface(也稱爲AndroidOpaque。)

見的例子here,特別是EncodeAndMuxTest。

+0

非常感謝幫助!我認爲它與此有關,但在AndroidOpaque上找不到任何東西 – Broatian