twonly-app-dependencies/camera_avfoundation/darwin/Tests/CameraImageStreamScalerTests.swift
2026-10-07 22:18:23 +02:00

43 lines
1.7 KiB
Swift

// Copyright 2026 twonly contributors. BSD-style license; see LICENSE.
import AVFoundation
import XCTest
@testable import camera_avfoundation
final class CameraImageStreamScalerTests: XCTestCase {
func testReducesBGRAFrameWithoutChangingPreviewBuffer() throws {
var pixelBuffer: CVPixelBuffer?
XCTAssertEqual(
CVPixelBufferCreate(
kCFAllocatorDefault, 1920, 1080, kCVPixelFormatType_32BGRA, nil, &pixelBuffer),
kCVReturnSuccess)
let buffer = try XCTUnwrap(pixelBuffer)
CVPixelBufferLockBaseAddress(buffer, [])
defer { CVPixelBufferUnlockBaseAddress(buffer, []) }
let address = try XCTUnwrap(CVPixelBufferGetBaseAddress(buffer))
memset(address, 127, CVPixelBufferGetBytesPerRow(buffer) * 1080)
let plane = try XCTUnwrap(CameraImageStreamScaler.scaleBGRA(buffer, maximumDimension: 640))
XCTAssertEqual(plane.width, 640)
XCTAssertEqual(plane.height, 360)
XCTAssertEqual(plane.bytesPerRow, 2560)
XCTAssertEqual(plane.bytes.data.count, 640 * 360 * 4)
XCTAssertEqual(plane.bytes.data.first, 127)
XCTAssertEqual(CVPixelBufferGetWidth(buffer), 1920)
XCTAssertEqual(CVPixelBufferGetHeight(buffer), 1080)
XCTAssertEqual(address.load(as: UInt8.self), 127)
}
func testDoesNotUpscaleSmallFrames() throws {
var pixelBuffer: CVPixelBuffer?
XCTAssertEqual(
CVPixelBufferCreate(
kCFAllocatorDefault, 320, 240, kCVPixelFormatType_32BGRA, nil, &pixelBuffer),
kCVReturnSuccess)
let buffer = try XCTUnwrap(pixelBuffer)
CVPixelBufferLockBaseAddress(buffer, [])
defer { CVPixelBufferUnlockBaseAddress(buffer, []) }
XCTAssertNil(CameraImageStreamScaler.scaleBGRA(buffer, maximumDimension: 640))
}
}