解码到表面工作时,MediaCodec解码到缓冲区不起作用

时间:2015-01-19 06:17:29

标签: android mediacodec

应用的视频解码代码很典型,就像MediaCodec document中的示例代码一样。没什么特别的。配置语句如下所示:

myMediaCodec.configure(myMediaFormat, mySurface, null, 0);

一切正常。但是,如果我将上面的代码更改为以下代码,将视频解码为缓冲区而不是表面:

myMediaCodec.configure(myMediaFormat, null, null, 0);

然后是以下代码:

int iOutputBufferIndex = myMediaCodec.dequeueOutputBuffer(myBufferInfo, 100000);

将始终返回MediaCodec.INFO_TRY_AGAIN_LATER。更扼要的是,myMediaCodec.stop()或myMediaCodec.release()的任何后续调用都将挂起(即调用永远不会返回或生成异常)。 这发生在通用(AGPTek)平板电脑(Allwinner A31S,1.5GHz Cortex A7 Quad Core)上。在模拟器和另一台平板电脑(华硕Memo Pad)上,一切正常。

我要求任何提示来帮助解决这个问题。

1 个答案:

答案 0 :(得分:1)

在尝试此操作之前,您是否提供一个单一输入缓冲区的数据,或者在dequeueInputBuffer阻止或返回INFO_TRY_AGAIN_LATER之前传递尽可能多的数据包?解码器可能只在一个输入数据包之后输出数据(如果解码器有一些延迟),但如果它与Suface输出一起工作,那么它的行为可能与那里相同。

如果那个(排队尽可能多的输入缓冲区)不起作用,我会说这听起来像解码器错误。

相关问题