Skip to content

node-av / lib / FrameUtils

Class: FrameUtils ​

Defined in: src/lib/frame-utils.ts:66

Frame processing utilities with persistent native frame pools.

Provides efficient crop, scale, and format conversion operations with minimal JavaScript/C++ boundary crossings.

Example ​

typescript
// Create processor for 320x180 NV12 input
const processor = new FrameUtils(320, 180);

// Process frame with crop and resize
const output = processor.process(inputBuffer, {
  crop: { left: 10, top: 10, width: 100, height: 100 },
  resize: { width: 200, height: 200 },
  format: { to: 'rgba' }
});

// Clean up when done
processor.close();

Implements ​

  • Disposable

Constructors ​

Constructor ​

new FrameUtils(width, height): FrameUtils

Defined in: src/lib/frame-utils.ts:77

Create a new FrameUtils processor.

Parameters ​

width ​

number

Input frame width (must be consistent for all frames)

height ​

number

Input frame height (must be consistent for all frames)

Returns ​

FrameUtils

Methods ​

[dispose]() ​

[dispose](): void

Defined in: src/lib/frame-utils.ts:140

Dispose of the processor.

Called automatically when using using statements.

Returns ​

void

Example ​

typescript
using processor = new FrameUtils(320, 180);
// Use processor...
// Automatically disposed at the end of the block

Implementation of ​

Disposable.[dispose]


close() ​

close(): void

Defined in: src/lib/frame-utils.ts:121

Close and release all resources.

Frees all pooled frames and SWS contexts.

Returns ​

void

Example ​

typescript
processor.close();

process() ​

process(buffer, options?): Buffer

Defined in: src/lib/frame-utils.ts:104

Process a frame with the specified options.

Parameters ​

buffer ​

Buffer

Input buffer containing NV12 frame data

options? ​

ImageOptions = {}

Processing options

Returns ​

Buffer

Processed frame as a Buffer

Example ​

typescript
// Simple resize
const resized = processor.process(input, {
  resize: { width: 640, height: 480 }
});

// Crop and convert to RGB
const cropped = processor.process(input, {
  crop: { left: 100, top: 100, width: 200, height: 200 },
  format: { to: 'rgb' }
});