Class BufferPool

All Implemented Interfaces:
Proxy
Direct Known Subclasses:
VideoBufferPool

@Generated("org.javagi.JavaGI") public class BufferPool extends GstObject

A GstBufferPool is an object that can be used to pre-allocate and recycle buffers of the same size and with the same properties.

A GstBufferPool is created with gst_buffer_pool_new().

Once a pool is created, it needs to be configured. A call to gst_buffer_pool_get_config() returns the current configuration structure from the pool. With gst_buffer_pool_config_set_params() and gst_buffer_pool_config_set_allocator() the bufferpool parameters and allocator can be configured. Other properties can be configured in the pool depending on the pool implementation.

A bufferpool can have extra options that can be enabled with gst_buffer_pool_config_add_option(). The available options can be retrieved with gst_buffer_pool_get_options(). Some options allow for additional configuration properties to be set.

After the configuration structure has been configured, gst_buffer_pool_set_config() updates the configuration in the pool. This can fail when the configuration structure is not accepted.

After the pool has been configured, it can be activated with gst_buffer_pool_set_active(). This will preallocate the configured resources in the pool.

When the pool is active, gst_buffer_pool_acquire_buffer() can be used to retrieve a buffer from the pool.

Buffers allocated from a bufferpool will automatically be returned to the pool with gst_buffer_pool_release_buffer() when their refcount drops to 0.

The bufferpool can be deactivated again with gst_buffer_pool_set_active(). All further gst_buffer_pool_acquire_buffer() calls will return an error. When all buffers are returned to the pool they will be freed.

  • Constructor Details

    • BufferPool

      public BufferPool(MemorySegment address)
      Create a BufferPool instance for the provided memory address.
      Parameters:
      address - the memory address of the native object
    • BufferPool

      public BufferPool()
      Create a new BufferPool.
  • Method Details

    • getType

      public static @Nullable Type getType()
      Get the GType of the BufferPool class.
      Returns:
      the GType
    • getMemoryLayout

      public static MemoryLayout getMemoryLayout()
      The memory layout of the native struct.
      Returns:
      the memory layout
    • asParent

      protected BufferPool asParent()
      Return this instance as if it were its parent type. Comparable to the Java super keyword, but ensures the parent typeclass is also used in native code.
      Overrides:
      asParent in class GstObject
      Returns:
      the instance as if it were its parent type
    • configAddOption

      public static void configAddOption(Structure config, String option)

      Enables the option in config. This will instruct the bufferpool to enable the specified option on the buffers that it allocates.

      The options supported by pool can be retrieved with gst_buffer_pool_get_options().

      Parameters:
      config - a GstBufferPool configuration
      option - an option to add
    • configGetAllocator

      public static boolean configGetAllocator(Structure config, @Nullable Out<Allocator> allocator, @Nullable AllocationParams params)
      Gets the allocator and params from config.
      Parameters:
      config - a GstBufferPool configuration
      allocator - a GstAllocator, or null
      params - GstAllocationParams, or null
      Returns:
      true, if the values are set.
    • configGetOption

      public static @Nullable String configGetOption(Structure config, int index)
      Parses an available config and gets the option at index of the options API array.
      Parameters:
      config - a GstBufferPool configuration
      index - position in the option array to read
      Returns:
      the option at index.
    • configGetParams

      public static boolean configGetParams(Structure config, @Nullable Out<Caps> caps, @Nullable Out<Integer> size, @Nullable Out<Integer> minBuffers, @Nullable Out<Integer> maxBuffers)
      Gets the configuration values from config.
      Parameters:
      config - a GstBufferPool configuration
      caps - the caps of buffers
      size - the size of each buffer, not including prefix and padding
      minBuffers - the minimum amount of buffers to allocate.
      maxBuffers - the maximum amount of buffers to allocate or 0 for unlimited.
      Returns:
      true if all parameters could be fetched.
    • configHasOption

      public static boolean configHasOption(Structure config, String option)
      Checks if config contains option.
      Parameters:
      config - a GstBufferPool configuration
      option - an option
      Returns:
      true if the options array contains option.
    • configNOptions

      public static int configNOptions(Structure config)
      Retrieves the number of values currently stored in the options array of the config structure.
      Parameters:
      config - a GstBufferPool configuration
      Returns:
      the options array size as a guint.
    • configSetAllocator

      public static void configSetAllocator(Structure config, @Nullable Allocator allocator, @Nullable AllocationParams params)

      Sets the allocator and params on config.

      One of allocator and params can be null, but not both. When allocator is null, the default allocator of the pool will use the values in param to perform its allocation. When param is null, the pool will use the provided allocator with its default GstAllocationParams.

      A call to gst_buffer_pool_set_config() can update the allocator and params with the values that it is able to do. Some pools are, for example, not able to operate with different allocators or cannot allocate with the values specified in params. Use gst_buffer_pool_get_config() to get the currently used values.

      Parameters:
      config - a GstBufferPool configuration
      allocator - a GstAllocator
      params - GstAllocationParams
    • configSetParams

      public static void configSetParams(Structure config, @Nullable Caps caps, int size, int minBuffers, int maxBuffers)
      Configures config with the given parameters.
      Parameters:
      config - a GstBufferPool configuration
      caps - caps for the buffers
      size - the size of each buffer, not including prefix and padding
      minBuffers - the minimum amount of buffers to allocate.
      maxBuffers - the maximum amount of buffers to allocate or 0 for unlimited.
    • configValidateParams

      public static boolean configValidateParams(Structure config, @Nullable Caps caps, int size, int minBuffers, int maxBuffers)
      Validates that changes made to config are still valid in the context of the expected parameters. This function is a helper that can be used to validate changes made by a pool to a config when gst_buffer_pool_set_config() returns false. This expects that caps haven't changed and that minBuffers aren't lower then what we initially expected. This does not check if options or allocator parameters are still valid, won't check if size have changed, since changing the size is valid to adapt padding.
      Parameters:
      config - a GstBufferPool configuration
      caps - the excepted caps of buffers
      size - the expected size of each buffer, not including prefix and padding
      minBuffers - the expected minimum amount of buffers to allocate.
      maxBuffers - the expect maximum amount of buffers to allocate or 0 for unlimited.
      Returns:
      true, if the parameters are valid in this context.
      Since:
      1.4
    • acquireBuffer

      public FlowReturn acquireBuffer(@Nullable Out<Buffer> buffer, @Nullable BufferPoolAcquireParams params)

      Acquires a buffer from pool. buffer should point to a memory location that can hold a pointer to the new buffer. When the pool is empty, this function will by default block until a buffer is released into the pool again or when the pool is set to flushing or deactivated.

      params can contain optional parameters to influence the allocation.

      Parameters:
      buffer - a location for a GstBuffer
      params - parameters.
      Returns:
      a GstFlowReturn such as FlowReturn.FLUSHING when the pool is inactive.
    • getConfig

      public Structure getConfig()
      Gets a copy of the current configuration of the pool. This configuration can be modified and used for the gst_buffer_pool_set_config() call.
      Returns:
      a copy of the current configuration of pool.
    • getOptions

      public String[] getOptions()
      Gets a null terminated array of string with supported bufferpool options for pool. An option would typically be enabled with gst_buffer_pool_config_add_option().
      Returns:
      a null terminated array of strings.
    • hasOption

      public boolean hasOption(String option)
      Checks if the bufferpool supports option.
      Parameters:
      option - an option
      Returns:
      true if the buffer pool contains option.
    • isActive

      public boolean isActive()
      Checks if this BufferPool is active. A pool can be activated with the gst_buffer_pool_set_active() call.
      Returns:
      true when the pool is active.
    • releaseBuffer

      public void releaseBuffer(Buffer buffer)

      Releases buffer to pool. buffer should have previously been allocated from this BufferPool with gst_buffer_pool_acquire_buffer().

      This function is usually called automatically when the last ref on buffer disappears.

      Parameters:
      buffer - a GstBuffer
    • setActive

      public boolean setActive(boolean active)

      Controls the active state of pool. When the pool is inactive, new calls to gst_buffer_pool_acquire_buffer() will return with FlowReturn.FLUSHING.

      Activating the bufferpool will preallocate all resources in the pool based on the configuration of the pool.

      Deactivating will free the resources again when there are no outstanding buffers. When there are outstanding buffers, they will be freed as soon as they are all returned to the pool.

      Parameters:
      active - the new active state
      Returns:
      false when the pool was not configured or when preallocation of the buffers failed.
    • setConfig

      public boolean setConfig(Structure config)

      Sets the configuration of the pool. If the pool is already configured, and the configuration hasn't changed, this function will return true. If the pool is active, this method will return false and active configuration will remain. Buffers allocated from this pool must be returned or else this function will do nothing and return false.

      config is a GstStructure that contains the configuration parameters for the pool. A default and mandatory set of parameters can be configured with gst_buffer_pool_config_set_params(), gst_buffer_pool_config_set_allocator() and gst_buffer_pool_config_add_option().

      If the parameters in config can not be set exactly, this function returns false and will try to update as much state as possible. The new state can then be retrieved and refined with gst_buffer_pool_get_config().

      This function takes ownership of config.

      Parameters:
      config - a GstStructure
      Returns:
      true when the configuration could be set.
    • setFlushing

      public void setFlushing(boolean flushing)
      Enables or disables the flushing state of a this BufferPool without freeing or allocating buffers.
      Parameters:
      flushing - whether to start or stop flushing
      Since:
      1.4
    • allocBuffer

      protected FlowReturn allocBuffer(@Nullable Out<Buffer> buffer, @Nullable BufferPoolAcquireParams params)
      Allocate a buffer. the default implementation allocates buffers from the configured memory allocator and with the configured parameters. All metadata that is present on the allocated buffer will be marked as GST_META_FLAG_POOLED and GST_META_FLAG_LOCKED and will not be removed from the buffer in GstBufferPoolClass::reset_buffer. The buffer should have the GST_BUFFER_FLAG_TAG_MEMORY cleared.
      Parameters:
      buffer - a location for a GstBuffer
      params - parameters.
      Returns:
      a GstFlowReturn to indicate whether the allocation was successful.
    • flushStart

      protected void flushStart()
      Enter the flushing state.
      Since:
      1.4
    • flushStop

      protected void flushStop()
      Leave the flushing state.
      Since:
      1.4
    • freeBuffer

      protected void freeBuffer(Buffer buffer)
      Free a buffer. The default implementation unrefs the buffer.
      Parameters:
      buffer - the GstBuffer to free
    • resetBuffer

      protected void resetBuffer(Buffer buffer)
      Reset the buffer to its state when it was freshly allocated. The default implementation will clear the flags, timestamps and will remove the metadata without the GST_META_FLAG_POOLED flag (even the metadata with GST_META_FLAG_LOCKED). If the GST_BUFFER_FLAG_TAG_MEMORY was set, this function can also try to restore the memory and clear the GST_BUFFER_FLAG_TAG_MEMORY again.
      Parameters:
      buffer - the GstBuffer to reset
    • start

      protected boolean start()

      Start the bufferpool. The default implementation will preallocate min-buffers buffers and put them in the queue.

      Subclasses do not need to chain up to the parent's default implementation if they don't want min-buffers based preallocation.

      Returns:
      whether the pool could be started.
    • stop

      protected boolean stop()
      Stop the bufferpool. the default implementation will free the preallocated buffers. This function is called when all the buffers are returned to the pool.
      Returns:
      whether the pool could be stopped.
    • builder

      public static BufferPool.Builder<? extends BufferPool.Builder> builder()
      A BufferPool.Builder object constructs a BufferPool with the specified properties. Use the various set...() methods to set properties, and finish construction with BufferPool.Builder.build().
      Returns:
      the builder object