43 lines
1.7 KiB
Swift
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))
|
|
}
|
|
}
|