0

我:

  1. 创建android::MediaBufferGroup
  2. buf_group.add_buffer(new android::MediaBuffer(bufsize));在初始化时用多个填充它;
  3. buf_group->acquire_buffer(&buffer)当我需要一个缓冲区发送到某个地方时做;
  4. 用于buffer->data()获取实际内存位置以存储数据,使用set_range和设置元数据,然后将缓冲区馈送到其他组件;
  5. 另一个组件release是缓冲区,将它们重新调整回 MediaBufferGroup。

它有效,但不可靠。有时获取的缓冲区data()返回 NULL,有时程序在release()...

如何正确使用 MediaBufferGroup?我应该使用一些同步吗?

4

2 回答 2

0

MediaBuffer 是 stagefright 框架中的一个基本容器。

关于 MediaBuffer/MediaBufferGroup/MediaSource 的使用,ASOP frameworks/av/cmds/stagefright下有一些简单的示例代码。

注意类 SineSource 的实现及其用法。

于 2014-11-26T03:36:54.270 回答
0

几乎所有步骤都是正确的。不清楚的一点是第 4 步。通常,MediaBuffer消费者通过read调用从生产者那里拉取。所以,我假设在你的设置中,

  1. 上述所有步骤均由生产者执行

  2. 消费者调用mSource->read(&newBuffer);wherenewBuffer定义为MediaBuffer *newBuffer;

  3. 在生产者端,MediaBuffer *mBuffer;. 读取调用将被处理,输出应填充为*out = mBuffer;.

  4. 为安全起见,请mBufferNULL此步骤后初始化。

  5. 消费完缓冲区后,消费者应释放缓冲区newBuffer->release;

  6. newBuffer同样,为了安全起见,请NULL在此步骤之后初始化。

通过这些更改,我认为您的代码应该可以根据您的描述正常工作。

于 2014-02-02T23:52:38.483 回答