feat: Make Frame thread-safe and improve error messages (#2327)
* fix: Fix multi-Thread access on Java * fix: Thread-lock access on iOS as well * whoops add missing header impl * Update Podfile.lock * fix: Don't use `CFGetRetainCount` * fix: Lock access on iOS as well * C++ format * More detailed error * chore: Move getters into `Frame` * Format c++ * Use enum `orientation` again * format * fix: Synchronize `isValid` on Java * Also log pixelformat * feat: Use Java enums in C++ * Format C++
This commit is contained in:
@@ -20,11 +20,80 @@
|
||||
if (self) {
|
||||
_buffer = buffer;
|
||||
_orientation = orientation;
|
||||
CFRetain(buffer);
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void)dealloc {
|
||||
CFRelease(_buffer);
|
||||
}
|
||||
|
||||
@synthesize buffer = _buffer;
|
||||
@synthesize orientation = _orientation;
|
||||
|
||||
- (NSString*)pixelFormat {
|
||||
CMFormatDescriptionRef format = CMSampleBufferGetFormatDescription(_buffer);
|
||||
FourCharCode mediaType = CMFormatDescriptionGetMediaSubType(format);
|
||||
switch (mediaType) {
|
||||
case kCVPixelFormatType_32BGRA:
|
||||
case kCVPixelFormatType_Lossy_32BGRA:
|
||||
return @"rgb";
|
||||
case kCVPixelFormatType_420YpCbCr8BiPlanarFullRange:
|
||||
case kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange:
|
||||
case kCVPixelFormatType_420YpCbCr10BiPlanarFullRange:
|
||||
case kCVPixelFormatType_420YpCbCr10BiPlanarVideoRange:
|
||||
case kCVPixelFormatType_Lossy_420YpCbCr8BiPlanarFullRange:
|
||||
case kCVPixelFormatType_Lossy_420YpCbCr8BiPlanarVideoRange:
|
||||
case kCVPixelFormatType_Lossy_420YpCbCr10PackedBiPlanarVideoRange:
|
||||
return @"yuv";
|
||||
default:
|
||||
return @"unknown";
|
||||
}
|
||||
}
|
||||
|
||||
- (BOOL)isMirrored {
|
||||
switch (_orientation) {
|
||||
case UIImageOrientationUp:
|
||||
case UIImageOrientationDown:
|
||||
case UIImageOrientationLeft:
|
||||
case UIImageOrientationRight:
|
||||
return false;
|
||||
case UIImageOrientationDownMirrored:
|
||||
case UIImageOrientationUpMirrored:
|
||||
case UIImageOrientationLeftMirrored:
|
||||
case UIImageOrientationRightMirrored:
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
- (BOOL)isValid {
|
||||
return _buffer != nil && CMSampleBufferIsValid(_buffer);
|
||||
}
|
||||
|
||||
- (size_t)width {
|
||||
CVPixelBufferRef imageBuffer = CMSampleBufferGetImageBuffer(_buffer);
|
||||
return CVPixelBufferGetWidth(imageBuffer);
|
||||
}
|
||||
|
||||
- (size_t)height {
|
||||
CVPixelBufferRef imageBuffer = CMSampleBufferGetImageBuffer(_buffer);
|
||||
return CVPixelBufferGetHeight(imageBuffer);
|
||||
}
|
||||
|
||||
- (double)timestamp {
|
||||
CMTime timestamp = CMSampleBufferGetPresentationTimeStamp(_buffer);
|
||||
return CMTimeGetSeconds(timestamp) * 1000.0;
|
||||
}
|
||||
|
||||
- (size_t)bytesPerRow {
|
||||
CVPixelBufferRef imageBuffer = CMSampleBufferGetImageBuffer(_buffer);
|
||||
return CVPixelBufferGetBytesPerRow(imageBuffer);
|
||||
}
|
||||
|
||||
- (size_t)planesCount {
|
||||
CVPixelBufferRef imageBuffer = CMSampleBufferGetImageBuffer(_buffer);
|
||||
return CVPixelBufferGetPlaneCount(imageBuffer);
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
Reference in New Issue
Block a user