Skip to content

Commit eb21712

Browse files
authored
fix: Fix Frame.isMirrored (#3078)
* fix: Fix `Frame.isMirrored` * Update Frame.m * fix: Infer `isMirrored` from true connection value
1 parent f39ca07 commit eb21712

5 files changed

Lines changed: 13 additions & 20 deletions

File tree

package/ios/Core/CameraSession.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -268,15 +268,15 @@ final class CameraSession: NSObject, AVCaptureVideoDataOutputSampleBufferDelegat
268268
public final func captureOutput(_ captureOutput: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {
269269
switch captureOutput {
270270
case is AVCaptureVideoDataOutput:
271-
onVideoFrame(sampleBuffer: sampleBuffer, orientation: connection.orientation)
271+
onVideoFrame(sampleBuffer: sampleBuffer, orientation: connection.orientation, isMirrored: connection.isVideoMirrored)
272272
case is AVCaptureAudioDataOutput:
273273
onAudioFrame(sampleBuffer: sampleBuffer)
274274
default:
275275
break
276276
}
277277
}
278278

279-
private final func onVideoFrame(sampleBuffer: CMSampleBuffer, orientation: Orientation) {
279+
private final func onVideoFrame(sampleBuffer: CMSampleBuffer, orientation: Orientation, isMirrored: Bool) {
280280
if let recordingSession {
281281
do {
282282
// Write the Video Buffer to the .mov/.mp4 file
@@ -290,7 +290,7 @@ final class CameraSession: NSObject, AVCaptureVideoDataOutputSampleBufferDelegat
290290

291291
if let delegate {
292292
// Call Frame Processor (delegate) for every Video Frame
293-
delegate.onFrame(sampleBuffer: sampleBuffer, orientation: orientation)
293+
delegate.onFrame(sampleBuffer: sampleBuffer, orientation: orientation, isMirrored: isMirrored)
294294
}
295295
}
296296

package/ios/Core/CameraSessionDelegate.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ protocol CameraSessionDelegate: AnyObject {
4444
/**
4545
Called for every frame (if video or frameProcessor is enabled)
4646
*/
47-
func onFrame(sampleBuffer: CMSampleBuffer, orientation: Orientation)
47+
func onFrame(sampleBuffer: CMSampleBuffer, orientation: Orientation, isMirrored: Bool)
4848
/**
4949
Called whenever a QR/Barcode has been scanned. Only if the CodeScanner Output is enabled
5050
*/

package/ios/FrameProcessors/Frame.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ NS_ASSUME_NONNULL_BEGIN
1616

1717
@interface Frame : NSObject
1818

19-
- (instancetype)initWithBuffer:(CMSampleBufferRef)buffer orientation:(UIImageOrientation)orientation;
19+
- (instancetype)initWithBuffer:(CMSampleBufferRef)buffer orientation:(UIImageOrientation)orientation isMirrored:(BOOL)isMirrored;
2020
- (instancetype)init NS_UNAVAILABLE;
2121

2222
- (void)incrementRefCount;

package/ios/FrameProcessors/Frame.m

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,15 @@
1313
@implementation Frame {
1414
CMSampleBufferRef _Nonnull _buffer;
1515
UIImageOrientation _orientation;
16+
BOOL _isMirrored;
1617
}
1718

18-
- (instancetype)initWithBuffer:(CMSampleBufferRef)buffer orientation:(UIImageOrientation)orientation {
19+
- (instancetype)initWithBuffer:(CMSampleBufferRef)buffer orientation:(UIImageOrientation)orientation isMirrored:(BOOL)isMirrored {
1920
self = [super init];
2021
if (self) {
2122
_buffer = buffer;
2223
_orientation = orientation;
24+
_isMirrored = isMirrored;
2325
}
2426
return self;
2527
}
@@ -61,18 +63,7 @@ - (NSString*)pixelFormat {
6163
}
6264

6365
- (BOOL)isMirrored {
64-
switch (_orientation) {
65-
case UIImageOrientationUp:
66-
case UIImageOrientationDown:
67-
case UIImageOrientationLeft:
68-
case UIImageOrientationRight:
69-
return false;
70-
case UIImageOrientationDownMirrored:
71-
case UIImageOrientationUpMirrored:
72-
case UIImageOrientationLeftMirrored:
73-
case UIImageOrientationRightMirrored:
74-
return true;
75-
}
66+
return _isMirrored;
7667
}
7768

7869
- (BOOL)isValid {

package/ios/React/CameraView.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -360,7 +360,7 @@ public final class CameraView: UIView, CameraSessionDelegate, PreviewViewDelegat
360360
])
361361
}
362362

363-
func onFrame(sampleBuffer: CMSampleBuffer, orientation: Orientation) {
363+
func onFrame(sampleBuffer: CMSampleBuffer, orientation: Orientation, isMirrored: Bool) {
364364
// Update latest frame that can be used for snapshot capture
365365
latestVideoFrame = Snapshot(imageBuffer: sampleBuffer, orientation: orientation)
366366

@@ -370,7 +370,9 @@ public final class CameraView: UIView, CameraSessionDelegate, PreviewViewDelegat
370370
#if VISION_CAMERA_ENABLE_FRAME_PROCESSORS
371371
if let frameProcessor = frameProcessor {
372372
// Call Frame Processor
373-
let frame = Frame(buffer: sampleBuffer, orientation: orientation.imageOrientation)
373+
let frame = Frame(buffer: sampleBuffer,
374+
orientation: orientation.imageOrientation,
375+
isMirrored: isMirrored)
374376
frameProcessor.call(frame)
375377
}
376378
#endif

0 commit comments

Comments
 (0)