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