我有以下简单的gstreamer管道:
+--------+ +--------------+
| appsrc | -> | vximagesink |
+--------+ +--------------+
在appsrc的“需要数据”回调中,我有以下几行:
Glib::RefPtr<Gst::Memory> memory =
Gst::Memory::create(static_cast<Gst::MemoryFlags>(0), ptr, size, 0, size);
Glib::RefPtr<Gst::Buffer> buffer = Gst::Buffer::create();
buffer->insert_memory(-1, std::move(memory));
buffer->set_pts(timestamp);
buffer->set_duration(gst_util_uint64_scale_int(1, GST_SECOND, 30));
srcapp->push_buffer(buffer);
“ ptr”已预先分配,并保存有效数据。
根据文档,在此代码中,分配的数据将被包装在一个内存对象内,而该对象又被缓冲区对象包装。但是这里有些东西行不通,因为vximagesink发送一个错误事件,提示“内部错误:无法分配图像” (这种情况发生在xvimagesink没有可用的池但不需要池的情况下在此示例中。)
管道的构建非常简单(我没有显示属性设置):
pipeline->add(appsrc)->add(sink);
appsrc->link(sink);
我在做什么错了?