diff options
author | Artem Dyomin <artem.dyomin@qt.io> | 2023-01-18 13:38:08 +0100 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2023-01-18 14:39:27 +0000 |
commit | 0438ef9069c094ab714648efaa6ec1c9d86e7e71 (patch) | |
tree | d9e1388bf3cdf5820647b1e8bd34b5b43564c7b7 | |
parent | 8a3a69d7b24616cffc53a5f5963bc974a7d7ecaf (diff) |
Fix camera crash on macOS
The crash was reproduced with OBS virtual camera
which doesn't provide kCVImageBufferYCbCrMatrixKey
Change-Id: I9c13de41e7d892b4d58aa151f914b450dd28716e
Reviewed-by: Lars Knoll <lars@knoll.priv.no>
(cherry picked from commit a5127186701df965dd94f712c64981eacd022b0a)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r-- | src/plugins/multimedia/darwin/qavfhelpers.mm | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/src/plugins/multimedia/darwin/qavfhelpers.mm b/src/plugins/multimedia/darwin/qavfhelpers.mm index 1863274b6..bbfcc2d85 100644 --- a/src/plugins/multimedia/darwin/qavfhelpers.mm +++ b/src/plugins/multimedia/darwin/qavfhelpers.mm @@ -96,16 +96,17 @@ QVideoFrameFormat QAVFHelpers::videoFormatForImageBuffer(CVImageBufferRef buffer auto colorSpace = QVideoFrameFormat::ColorSpace_Undefined; auto colorTransfer = QVideoFrameFormat::ColorTransfer_Unknown; - CFStringRef cSpace = reinterpret_cast<CFStringRef>( - CVBufferGetAttachment(buffer, kCVImageBufferYCbCrMatrixKey, nullptr)); - if (CFEqual(cSpace, kCVImageBufferYCbCrMatrix_ITU_R_709_2)) { - colorSpace = QVideoFrameFormat::ColorSpace_BT709; - } else if (CFEqual(cSpace, kCVImageBufferYCbCrMatrix_ITU_R_601_4) || - CFEqual(cSpace, kCVImageBufferYCbCrMatrix_SMPTE_240M_1995)) { - colorSpace = QVideoFrameFormat::ColorSpace_BT601; - } else if (@available(macOS 10.11, iOS 9.0, *)) { - if (CFEqual(cSpace, kCVImageBufferYCbCrMatrix_ITU_R_2020)) { - colorSpace = QVideoFrameFormat::ColorSpace_BT2020; + if (CFStringRef cSpace = reinterpret_cast<CFStringRef>( + CVBufferGetAttachment(buffer, kCVImageBufferYCbCrMatrixKey, nullptr))) { + if (CFEqual(cSpace, kCVImageBufferYCbCrMatrix_ITU_R_709_2)) { + colorSpace = QVideoFrameFormat::ColorSpace_BT709; + } else if (CFEqual(cSpace, kCVImageBufferYCbCrMatrix_ITU_R_601_4) + || CFEqual(cSpace, kCVImageBufferYCbCrMatrix_SMPTE_240M_1995)) { + colorSpace = QVideoFrameFormat::ColorSpace_BT601; + } else if (@available(macOS 10.11, iOS 9.0, *)) { + if (CFEqual(cSpace, kCVImageBufferYCbCrMatrix_ITU_R_2020)) { + colorSpace = QVideoFrameFormat::ColorSpace_BT2020; + } } } |