From 00468f9d9257626ac94a86efd8467be599f09e0c Mon Sep 17 00:00:00 2001 From: yushulx Date: Tue, 14 Jan 2025 15:10:35 +0800 Subject: [PATCH] Update for macOS --- litecam/dist/lib/macos/liblitecam.dylib | Bin 229600 -> 229600 bytes litecam/src/CameraMacOS.mm | 37 +++++++++++++++++------- 2 files changed, 26 insertions(+), 11 deletions(-) diff --git a/litecam/dist/lib/macos/liblitecam.dylib b/litecam/dist/lib/macos/liblitecam.dylib index add12b3cb06c10395394631bbacda4923f18bd46..6a9fb68d6072f22c91b3c9edba9c82d96825b75e 100755 GIT binary patch delta 29393 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 iH)D9`oSucV;!1b@@au1e7f)_Awq3b9TKN+I8pv delta 29551 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 diff --git a/litecam/src/CameraMacOS.mm b/litecam/src/CameraMacOS.mm index c63382a..80ccc9d 100644 --- a/litecam/src/CameraMacOS.mm +++ b/litecam/src/CameraMacOS.mm @@ -118,7 +118,7 @@ - (void)captureOutput:(AVCaptureOutput *)output } AVCaptureSession *cs = [[AVCaptureSession alloc] init]; - captureSession = (void *)cs; + captureSession = (__bridge void *)cs; if (![cs canAddInput:input]) { std::cerr << "Cannot add device input to session." << std::endl; @@ -131,7 +131,7 @@ - (void)captureOutput:(AVCaptureOutput *)output output.videoSettings = @{(NSString *)kCVPixelBufferPixelFormatTypeKey: @(kCVPixelFormatType_32BGRA)}; output.alwaysDiscardsLateVideoFrames = YES; - videoOutput = (void *)output; + videoOutput = (__bridge void *)output; if (![cs canAddOutput:output]) { @@ -265,38 +265,53 @@ - (void)captureOutput:(AVCaptureOutput *)output AVCaptureSession *session = (__bridge AVCaptureSession *)captureSession; - if (!session || session.inputs.count == 0) { + if (!session || session.inputs.count == 0) + { std::cerr << "No inputs found in capture session." << std::endl; return mediaTypes; } - AVCaptureDeviceInput *input = (__bridge AVCaptureDeviceInput *)session.inputs.firstObject; - AVCaptureDevice *device = input.device; + AVCaptureDeviceInput *input = nil; + if ([session.inputs.firstObject isKindOfClass:[AVCaptureDeviceInput class]]) + { + input = (AVCaptureDeviceInput *)session.inputs.firstObject; + } + else + { + std::cerr << "Error: First input is not an AVCaptureDeviceInput." << std::endl; + return mediaTypes; + } - if (!device) { + AVCaptureDevice *device = input.device; + if (!device) + { std::cerr << "No device found." << std::endl; return mediaTypes; } - for (AVCaptureDeviceFormat *format in device.formats) { + // Iterate over all available formats for the device + for (AVCaptureDeviceFormat *format in device.formats) + { MediaTypeInfo mediaType = {}; CMFormatDescriptionRef formatDescription = format.formatDescription; FourCharCode mediaSubType = CMFormatDescriptionGetMediaSubType(formatDescription); - // Store width and height + // Get width and height from format description CMVideoDimensions dimensions = CMVideoFormatDescriptionGetDimensions(formatDescription); mediaType.width = dimensions.width; mediaType.height = dimensions.height; - // Convert mediaSubType to a string - snprintf(mediaType.subtypeName, sizeof(mediaType.subtypeName), "Format %.4s", (char *)&mediaSubType); + // Convert FourCharCode (mediaSubType) to a readable string + snprintf(mediaType.subtypeName, sizeof(mediaType.subtypeName), "%.4s", (char *)&mediaSubType); + // Add the media type info to the list mediaTypes.push_back(mediaType); } return mediaTypes; } + void ReleaseFrame(FrameData &frame) { if (frame.rgbData) @@ -324,4 +339,4 @@ void saveFrameAsJPEG(const unsigned char *data, int width, int height, const std std::cerr << "Error saving frame as JPEG." << std::endl; } } -/////////////////////////////////////////////////////////////////////////////// \ No newline at end of file +///////////////////////////////////////////////////////////////////////////////