我正在尝试编写一个简单的视频编码器,在“曲面输入”模式下使用Android平台的MediaCodec
类。
这些是我正在遵循的步骤(为了简洁起见支持代码):
mediaCodec = MediaCodec::CreateByType(looper, "video/avc", true);
mediaCodec->configure(config, NULL, NULL, CONFIGURE_FLAG_ENCODE);
mediaCodec->createInputSurface(&inputSurface);
mediaCodec->start();
在此之后,我试图从创建的输入表面(这是一个IGraphiBufferProducer
接口对象)出列缓冲区,但它失败并出现NO_INIT
错误:
inputSurface->dequeueBuffer(&slot, &fence, w, h, format, 0);
ADB日志中的错误消息是:
BufferQueueProducer: [GraphicBufferSource] dequeueBuffer: BufferQueue has no connected producer
知道为什么缓冲区队列没有连接的生产者?我假设MediaCodec
类将处理缓冲区队列的创建以及生产者和消费者与队列的连接。
我正在使用Android API级别26(7.1.2)。我正在使用平台级别的库,因为我的用例需要访问GraphicBuffer
个对象。
提前致谢!
编辑:一般的想法是:
答案 0 :(得分:0)
// * NO_INIT - the buffer queue has been abandoned or the producer is not
// connected.
我猜您的代码中缺少的部分就是“连接”。
IGraphiBufferProducer
有这样一种方法,你使用它吗?