BBuffer¶
A BBuffer
references a chunk of shared memory where media
data can be passed between applications and nodes. The control header for
these buffers is passed through the use of a safer IPC mechanism, but the
actual data these headers represent typically require a high data rate, and
for the sake of maximizing performance, shared memory is the method by
which the buffers are managed.
BBuffer
s originate at some BBufferProducer
,
which has a BBufferGroup
that acts as a source of
BBuffer
s (see
BBufferConsumer::SetOutputBuffersFor()
). BBuffer
s
are sent through all participating nodes, possibly being sent down a long
chain—much like a bucket brigade—until finally the node arrives at a node
that chooses not to pass along the BBuffer
any further, at
which the buffer’s Recycle()
function is
called to return the buffer to the BBufferGroup
’s store, where
it gets reused by another batch of data.
An application or custom node can set up BBuffer
s that
reference a specific area of memory, such as a low-level driver buffer, a
BBitmap
, or a BDirectWindow
’s area of a frame
buffer. This ability can provide for great optimization by avoiding
unnecessary copy operations.
The BSmallBuffer
class, derived from BBuffer
, is
used for very small buffers; they don’t go in BBufferGroup
s,
and get handled specially to optimize performance.
Warning
BBuffer
should never be subclassed, since they’re mostly
owned and managed by the Media Server. Even if you create your own
BBuffer
, once you’ve called
BBufferConsumer::SetOutputBuffersFor()
, the “same” buffer
received back by your BBufferConsumer
may actually be another
instance of the BBuffer
class.