2013-07-24 34 views
5

Tôi muốn sử dụng MediaCodec để mã hóa một Bề mặt thành H.264.MediaCodec createInputSurface

Với API 18 có cách mã hóa từ bề mặt bằng cách gọi hàm createInputSurface() và vẽ trên bề mặt đó.

Tôi nhận được IllegalStateException trên createInputSurface(). Đây là đầu ra logcat bổ sung:

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 

Bất kỳ thông tin chi tiết nào về cách hoạt động của api mới sẽ hữu ích.

Trả lời

5

Thông báo lỗi quan trọng là thế này:

createInputSurface requires AndroidOpaque color format 

Đối với đầu vào bề mặt, bạn phải thiết lập các định dạng màu sắc để COLOR_FormatSurface (còn gọi là AndroidOpaque.)

Xem ví dụ here, đáng chú ý EncodeAndMuxTest.

+0

Cảm ơn điều đó đã giúp ích rất nhiều! Tôi cho rằng nó có liên quan đến điều này nhưng không thể tìm thấy bất kỳ thứ gì trên AndroidOpaque – Broatian