Skip to content

fix: bound AudioResampler buffers and keep cropped I420 buffers alive - #413

Merged
devopvoid merged 1 commit into
mainfrom
fix/resampler-i420-crop
Oct 22, 2026
Merged

devopvoid merged 1 commit into
mainfrom
fix/resampler-i420-crop

Conversation

@devopvoid

Copy link
Copy Markdown
Owner
  • AudioResampler passed the output array's capacity to native code instead of the requested samples per channel and ignored the channel count, so stereo wrote past the array. Both arrays are now checked against samplesPerChannel * channels, with WebRTC's limits on samples and channels, and the native side checks them again. The class also loads the native library itself.
  • NativeI420Buffer.cropAndScale without scaling returned a wrapper with no native handle over the source's memory. The crop is now a native buffer (WrapI420Buffer) that holds a reference to its source. Plane views end at the last pixel, crop rectangles are validated, and a released buffer in a VideoFrame throws instead of reaching native code as null.

AudioResampler passed the output array's capacity instead of the requested
samples per channel and ignored the channel count, so stereo wrote past the
array. Both arrays are now checked against samplesPerChannel * channels.

Cropping a NativeI420Buffer without scaling returned a wrapper with no native
handle over the source's memory. The crop is now a native buffer that holds a
reference to its source.
@devopvoid
devopvoid merged commit aa338da into main Oct 22, 2026
22 checks passed
@devopvoid
devopvoid deleted the fix/resampler-i420-crop branch October 22, 2026 16:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant