mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-02-06 09:39:55 +00:00
cellCamera: support all formats and set RGB32 if possible
This commit is contained in:
parent
d161d8c545
commit
60d35e17ac
@ -306,7 +306,7 @@ void qt_camera_handler::update_camera_settings()
|
||||
const QList<QSize> resolutions = m_camera->supportedViewfinderResolutions(settings);
|
||||
if (resolutions.isEmpty())
|
||||
{
|
||||
camera_log.error("No resolution available for the view finder settings: frame_rate=%f, width=%d, height=%d, pixel_format=%d",
|
||||
camera_log.warning("No resolution available for the view finder settings: frame_rate=%f, width=%d, height=%d, pixel_format=%d",
|
||||
settings.maximumFrameRate(), settings.resolution().width(), settings.resolution().height(), static_cast<int>(settings.pixelFormat()));
|
||||
}
|
||||
for (const QSize& resolution : resolutions)
|
||||
@ -322,7 +322,7 @@ void qt_camera_handler::update_camera_settings()
|
||||
const QList<QCamera::FrameRateRange> frame_rate_ranges = m_camera->supportedViewfinderFrameRateRanges(settings);
|
||||
if (frame_rate_ranges.isEmpty())
|
||||
{
|
||||
camera_log.error("No frame rate available for the view finder settings: frame_rate=%f, width=%d, height=%d, pixel_format=%d",
|
||||
camera_log.warning("No frame rate available for the view finder settings: frame_rate=%f, width=%d, height=%d, pixel_format=%d",
|
||||
settings.maximumFrameRate(), settings.resolution().width(), settings.resolution().height(), static_cast<int>(settings.pixelFormat()));
|
||||
}
|
||||
for (const QCamera::FrameRateRange& frame_rate : frame_rate_ranges)
|
||||
@ -341,24 +341,32 @@ void qt_camera_handler::update_camera_settings()
|
||||
const QList<QVideoFrame::PixelFormat> pixel_formats = m_camera->supportedViewfinderPixelFormats(settings);
|
||||
if (pixel_formats.isEmpty())
|
||||
{
|
||||
camera_log.error("No pixel format available for the view finder settings: frame_rate=%f, width=%d, height=%d, pixel_format=%d",
|
||||
camera_log.warning("No pixel format available for the view finder settings: frame_rate=%f, width=%d, height=%d, pixel_format=%d",
|
||||
settings.maximumFrameRate(), settings.resolution().width(), settings.resolution().height(), static_cast<int>(settings.pixelFormat()));
|
||||
}
|
||||
//for (const QVideoFrame::PixelFormat& pixel_format : pixel_formats)
|
||||
//{
|
||||
// if (pixel_format matches m_format)
|
||||
// {
|
||||
// settings.setPixelFormat(pixel_format);
|
||||
// break;
|
||||
// }
|
||||
//}
|
||||
for (const QVideoFrame::PixelFormat& pixel_format : pixel_formats)
|
||||
{
|
||||
if (pixel_format == QVideoFrame::Format_RGB32)
|
||||
{
|
||||
settings.setPixelFormat(pixel_format);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (m_camera->supportedViewfinderSettings(settings).isEmpty())
|
||||
{
|
||||
camera_log.warning("No camera setting available for the view finder settings: frame_rate=%f, width=%d, height=%d, pixel_format=%d",
|
||||
settings.maximumFrameRate(), settings.resolution().width(), settings.resolution().height(), static_cast<int>(settings.pixelFormat()));
|
||||
}
|
||||
else
|
||||
{
|
||||
camera_log.notice("Setting view finder settings: frame_rate=%f, width=%d, height=%d, pixel_format=%d",
|
||||
settings.maximumFrameRate(), settings.resolution().width(), settings.resolution().height(), static_cast<int>(settings.pixelFormat()));
|
||||
|
||||
// Apply settings.
|
||||
m_camera->setViewfinderSettings(settings);
|
||||
}
|
||||
}
|
||||
|
||||
// Update video surface if possible
|
||||
if (m_surface)
|
||||
|
@ -32,11 +32,43 @@ QList<QVideoFrame::PixelFormat> qt_camera_video_surface::supportedPixelFormats(Q
|
||||
{
|
||||
Q_UNUSED(type)
|
||||
|
||||
// Let's only allow RGB formats for now
|
||||
// Support all cameras
|
||||
QList<QVideoFrame::PixelFormat> result;
|
||||
result
|
||||
<< QVideoFrame::Format_ARGB32
|
||||
<< QVideoFrame::Format_ARGB32_Premultiplied
|
||||
<< QVideoFrame::Format_RGB32
|
||||
<< QVideoFrame::Format_RGB24;
|
||||
<< 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
|
||||
<< QVideoFrame::Format_ABGR32
|
||||
<< QVideoFrame::Format_YUV422P;
|
||||
return result;
|
||||
}
|
||||
|
||||
@ -56,10 +88,14 @@ bool qt_camera_video_surface::present(const QVideoFrame& frame)
|
||||
return false;
|
||||
}
|
||||
|
||||
// Create shallow copy
|
||||
QImage image(tmp.bits(), tmp.width(), tmp.height(), tmp.bytesPerLine(), QVideoFrame::imageFormatFromPixelFormat(tmp.pixelFormat()));
|
||||
// Get image. This usually also converts the image to ARGB32.
|
||||
QImage image = frame.image();
|
||||
|
||||
if (!image.isNull())
|
||||
if (image.isNull())
|
||||
{
|
||||
camera_log.warning("Image is invalid: pixel_format=%d, format=%d", static_cast<int>(tmp.pixelFormat()), static_cast<int>(QVideoFrame::imageFormatFromPixelFormat(tmp.pixelFormat())));
|
||||
}
|
||||
else
|
||||
{
|
||||
// Scale image if necessary
|
||||
if (m_width > 0 && m_height > 0 && m_width != image.width() && m_height != image.height())
|
||||
|
Loading…
x
Reference in New Issue
Block a user