# ff-common
Shared buffer-pooling abstractions for the ff-* crate family.
> **Project status (as of 2026-04-28):** The library foundation is in place. Development is currently focused on [**avio-editor-demo**](https://github.com/itsakeyfut/avio-editor-demo), a real-world video editing application built on `avio`. Building the demo surfaces bugs and drives API improvements in this library. Questions, bug reports, and feature requests are welcome — see the [main repository](https://github.com/itsakeyfut/avio) for full context.
## Overview
`ff-common` provides the `FramePool` trait and `PooledBuffer` type used internally across the `ff-*` crates. It has no external dependencies and does not link against FFmpeg.
`PooledBuffer` wraps an allocated block of memory and returns it to the originating pool automatically when dropped — no manual free call is needed. If no pool is associated, the memory is simply deallocated. `FramePool` is `Send + Sync`, so pools can be shared across threads without additional locking.
## Usage
`ff-common` is an internal workspace crate. It is not intended for direct use in application code. The following example shows the `PooledBuffer::standalone` constructor, which allocates a buffer without a backing pool:
```rust
use ff_common::PooledBuffer;
// Allocate a 4096-byte buffer with no pool backing.
// Memory is freed normally when `buf` is dropped.
let buf = PooledBuffer::standalone(4096);
assert_eq!(buf.len(), 4096);
```
## MSRV
Rust 1.93.0 (edition 2024).
## License
MIT OR Apache-2.0