pub struct ParallelTileEncoder {
pub layout: TileLayout,
}Expand description
Splits a raw pixel frame into tiles, processes them in parallel, and reassembles the result.
§Example
use oximedia_codec::tile_encoder::{TileConfig, ParallelTileEncoder};
let config = TileConfig::new()
.tile_cols(2)
.tile_rows(2)
.frame_width(64)
.frame_height(64);
let encoder = ParallelTileEncoder::new(config);
let frame: Vec<u8> = (0u8..=255).cycle().take(64 * 64 * 3).collect();
let tiles = encoder.split_frame(&frame, 3);
assert_eq!(tiles.len(), 4);
// Identity encode: return each tile unchanged.
let processed = encoder
.encode_tiles_parallel(tiles, |tile| Ok(tile))
?;
let merged = ParallelTileEncoder::merge_tiles(&processed, 64, 64, 3);
assert_eq!(merged, frame);Fields§
§layout: TileLayoutPre-computed tile layout.
Implementations§
Source§impl ParallelTileEncoder
impl ParallelTileEncoder
Sourcepub fn new(config: TileConfig) -> Self
pub fn new(config: TileConfig) -> Self
Create a ParallelTileEncoder from config.
Sourcepub fn split_frame(&self, frame: &[u8], channels: u8) -> Vec<TileBuffer>
pub fn split_frame(&self, frame: &[u8], channels: u8) -> Vec<TileBuffer>
Split frame into TileBuffers, one per tile in the layout.
channels is the number of bytes per pixel in frame.
Sourcepub fn merge_tiles(
tiles: &[TileBuffer],
frame_width: u32,
frame_height: u32,
channels: u8,
) -> Vec<u8> ⓘ
pub fn merge_tiles( tiles: &[TileBuffer], frame_width: u32, frame_height: u32, channels: u8, ) -> Vec<u8> ⓘ
Merge a slice of TileBuffers back into a complete frame.
The returned Vec<u8> has frame_width * frame_height * channels bytes.
Sourcepub fn encode_tiles_parallel<F>(
&self,
tiles: Vec<TileBuffer>,
encode_fn: F,
) -> Result<Vec<TileBuffer>, String>
pub fn encode_tiles_parallel<F>( &self, tiles: Vec<TileBuffer>, encode_fn: F, ) -> Result<Vec<TileBuffer>, String>
Process tiles in parallel using encode_fn.
Each tile is passed by value to encode_fn. The closure must return
either a (possibly modified) TileBuffer or an error string.
Uses Rayon for parallel execution. The output order matches the input
order (raster order when produced by split_frame).
§Errors
Returns the first error string produced by any invocation of
encode_fn.
Auto Trait Implementations§
impl Freeze for ParallelTileEncoder
impl RefUnwindSafe for ParallelTileEncoder
impl Send for ParallelTileEncoder
impl Sync for ParallelTileEncoder
impl Unpin for ParallelTileEncoder
impl UnsafeUnpin for ParallelTileEncoder
impl UnwindSafe for ParallelTileEncoder
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more