MediaCodec 解码到缓冲区不起作用,而解码到表面工作
MediaCodec decoding to buffer does not work while decoding to surface works
App的视频解码代码是典型的,如MediaCodec document中的示例代码。没什么特别的。配置语句如下:
myMediaCodec.configure(myMediaFormat, mySurface, null, 0);
一切正常。但是,如果我将上面的代码更改为以下代码以将视频解码到缓冲区而不是表面:
myMediaCodec.configure(myMediaFormat, null, null, 0);
然后是下面的代码:
int iOutputBufferIndex = myMediaCodec.dequeueOutputBuffer(myBufferInfo, 100000);
将永远 return MediaCodec.INFO_TRY_AGAIN_LATER。更奇怪的是,任何后续的 myMediaCodec.stop() 或 myMediaCodec.release() 调用都将挂起(即调用永远不会 returns 或产生异常)。
这发生在通用 (AGPTek) 平板电脑(Allwinner A31S,1.5GHz Cortex A7 四核)上。在模拟器和另一台平板电脑(Asus Memo Pad)上,一切正常。
我请求任何提示来帮助解决这个问题。
在尝试此操作之前,您是否提供了一个单一的输入缓冲区数据,或者在 dequeueInputBuffer
也阻塞或 returns INFO_TRY_AGAIN_LATER
之前,您是否传递了尽可能多的数据包?解码器可能仅在输入一个数据包后就不会输出数据(如果解码器有一些延迟),但如果它与 Suface 输出一起工作,它应该以相同的方式表现。
如果那(尽可能多地排队输入缓冲区)不起作用,我会说这听起来像是一个解码器错误。
App的视频解码代码是典型的,如MediaCodec document中的示例代码。没什么特别的。配置语句如下:
myMediaCodec.configure(myMediaFormat, mySurface, null, 0);
一切正常。但是,如果我将上面的代码更改为以下代码以将视频解码到缓冲区而不是表面:
myMediaCodec.configure(myMediaFormat, null, null, 0);
然后是下面的代码:
int iOutputBufferIndex = myMediaCodec.dequeueOutputBuffer(myBufferInfo, 100000);
将永远 return MediaCodec.INFO_TRY_AGAIN_LATER。更奇怪的是,任何后续的 myMediaCodec.stop() 或 myMediaCodec.release() 调用都将挂起(即调用永远不会 returns 或产生异常)。 这发生在通用 (AGPTek) 平板电脑(Allwinner A31S,1.5GHz Cortex A7 四核)上。在模拟器和另一台平板电脑(Asus Memo Pad)上,一切正常。
我请求任何提示来帮助解决这个问题。
在尝试此操作之前,您是否提供了一个单一的输入缓冲区数据,或者在 dequeueInputBuffer
也阻塞或 returns INFO_TRY_AGAIN_LATER
之前,您是否传递了尽可能多的数据包?解码器可能仅在输入一个数据包后就不会输出数据(如果解码器有一些延迟),但如果它与 Suface 输出一起工作,它应该以相同的方式表现。
如果那(尽可能多地排队输入缓冲区)不起作用,我会说这听起来像是一个解码器错误。