mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-30 21:30:04 +00:00 
			
		
		
		
	qt_multimedia_camera: fix image handling in Qt 5.15+ ... (#6231)
... In Qt 5.15+ the QImage will not accept non-natively handled pixel formats anymore. We can however use the newly added conversion method provided in `QVideoFrame` to convert it to `QImage` instead
This commit is contained in:
		
							parent
							
								
									c8ff1d744a
								
							
						
					
					
						commit
						b588d6181b
					
				
					 1 changed files with 20 additions and 13 deletions
				
			
		|  | @ -19,25 +19,31 @@ namespace Camera { | |||
| QList<QVideoFrame::PixelFormat> QtCameraSurface::supportedPixelFormats( | ||||
|     [[maybe_unused]] QAbstractVideoBuffer::HandleType handleType) const { | ||||
|     return QList<QVideoFrame::PixelFormat>() | ||||
|            << QVideoFrame::Format_ARGB32 << QVideoFrame::Format_ARGB32_Premultiplied | ||||
|            << QVideoFrame::Format_RGB32 << QVideoFrame::Format_RGB24 << QVideoFrame::Format_RGB565 | ||||
|            << QVideoFrame::Format_RGB555 << QVideoFrame::Format_ARGB8565_Premultiplied | ||||
|            << QVideoFrame::Format_BGRA32 << QVideoFrame::Format_BGRA32_Premultiplied | ||||
|            << QVideoFrame::Format_BGR32 << QVideoFrame::Format_BGR24 << QVideoFrame::Format_BGR565 | ||||
|            << QVideoFrame::Format_BGR555 << QVideoFrame::Format_BGRA5658_Premultiplied | ||||
|            << QVideoFrame::Format_AYUV444 << QVideoFrame::Format_AYUV444_Premultiplied | ||||
|            << QVideoFrame::Format_YUV444 << QVideoFrame::Format_YUV420P << QVideoFrame::Format_YV12 | ||||
|            << QVideoFrame::Format_UYVY << QVideoFrame::Format_YUYV << QVideoFrame::Format_NV12 | ||||
|            << QVideoFrame::Format_NV21 << QVideoFrame::Format_IMC1 << QVideoFrame::Format_IMC2 | ||||
|            << QVideoFrame::Format_IMC3 << QVideoFrame::Format_IMC4 << QVideoFrame::Format_Y8 | ||||
|            << QVideoFrame::Format_Y16 << QVideoFrame::Format_Jpeg << QVideoFrame::Format_CameraRaw | ||||
|            << QVideoFrame::Format_AdobeDng; // Supporting all the formats
 | ||||
|            << QVideoFrame::Format_RGB32 << QVideoFrame::Format_RGB24 | ||||
|            << QVideoFrame::Format_ARGB32_Premultiplied << QVideoFrame::Format_ARGB32 | ||||
|            << QVideoFrame::Format_RGB565 << QVideoFrame::Format_RGB555 | ||||
|            << QVideoFrame::Format_Jpeg | ||||
|            // the following formats are supported via Qt internal conversions
 | ||||
|            << QVideoFrame::Format_ARGB8565_Premultiplied << QVideoFrame::Format_BGRA32 | ||||
|            << QVideoFrame::Format_BGRA32_Premultiplied << QVideoFrame::Format_BGR32 | ||||
|            << QVideoFrame::Format_BGR24 << QVideoFrame::Format_BGR565 << QVideoFrame::Format_BGR555 | ||||
|            << QVideoFrame::Format_AYUV444 << QVideoFrame::Format_YUV444 | ||||
|            << QVideoFrame::Format_YUV420P << QVideoFrame::Format_YV12 << QVideoFrame::Format_UYVY | ||||
|            << QVideoFrame::Format_YUYV << QVideoFrame::Format_NV12 | ||||
|            << QVideoFrame::Format_NV21; // Supporting all the QImage convertible formats, ordered by
 | ||||
|                                         // QImage decoding performance
 | ||||
| } | ||||
| 
 | ||||
| bool QtCameraSurface::present(const QVideoFrame& frame) { | ||||
|     if (!frame.isValid()) { | ||||
|         return false; | ||||
|     } | ||||
| #if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0) | ||||
|     QMutexLocker locker(&mutex); | ||||
|     // In Qt 5.15, the image is already flipped
 | ||||
|     current_frame = frame.image(); | ||||
|     locker.unlock(); | ||||
| #else | ||||
|     QVideoFrame cloneFrame(frame); | ||||
|     cloneFrame.map(QAbstractVideoBuffer::ReadOnly); | ||||
|     const QImage image(cloneFrame.bits(), cloneFrame.width(), cloneFrame.height(), | ||||
|  | @ -46,6 +52,7 @@ bool QtCameraSurface::present(const QVideoFrame& frame) { | |||
|     current_frame = image.mirrored(true, true); | ||||
|     locker.unlock(); | ||||
|     cloneFrame.unmap(); | ||||
| #endif | ||||
|     return true; | ||||
| } | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue