mirror of
https://github.com/hyperion-project/hyperion.ng.git
synced 2025-03-01 10:33:28 +00:00
Qt6 support (#1363)
* Initial Qt6 config * Change Package order to reingfence missing packages * Update to QT 6.2.0 * Qt 6.2.0 updates * macOS fix * Simplify handling QT5 & Qt6 in parallel * Updates for Windows * Fix macos build * macOS linker fix * General support of QTDIR, update docu * MaxOS add default qt directories * Fix merge typo * Update default CMakeSettings.json with installation path options * Add additional libs required by Qt6 to CompileHowTo * Fix Qt5 items Co-authored-by: Paulchen-Panther <16664240+Paulchen-Panther@users.noreply.github.com>
This commit is contained in:
@@ -172,7 +172,6 @@ bool MFGrabber::init()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return _initialized;
|
||||
}
|
||||
|
||||
@@ -194,6 +193,7 @@ HRESULT MFGrabber::init_device(QString deviceName, DeviceProperties props)
|
||||
IMFAttributes* deviceAttributes = nullptr, *sourceReaderAttributes = nullptr;
|
||||
IMFMediaType* type = nullptr;
|
||||
HRESULT hr = S_OK;
|
||||
IAMVideoProcAmp* pProcAmp = nullptr;
|
||||
|
||||
Debug(_log, "Init %s, %d x %d @ %d fps (%s)", QSTRING_CSTR(deviceName), props.width, props.height, props.fps, QSTRING_CSTR(pixelFormatToString(pixelformat)));
|
||||
DebugIf (verbose, _log, "Symbolic link: %s", QSTRING_CSTR(props.symlink));
|
||||
@@ -233,7 +233,6 @@ HRESULT MFGrabber::init_device(QString deviceName, DeviceProperties props)
|
||||
else
|
||||
Debug(_log, "Device opened");
|
||||
|
||||
IAMVideoProcAmp *pProcAmp = nullptr;
|
||||
if (SUCCEEDED(device->QueryInterface(IID_PPV_ARGS(&pProcAmp))))
|
||||
{
|
||||
for (auto control : _deviceControls[deviceName])
|
||||
@@ -402,7 +401,7 @@ void MFGrabber::enumVideoCaptureDevices()
|
||||
if (SUCCEEDED(devices[i]->GetAllocatedString(MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_SYMBOLIC_LINK, &symlink, &length)))
|
||||
{
|
||||
QList<DeviceProperties> devicePropertyList;
|
||||
QString dev = QString::fromUtf16((const ushort*)name);
|
||||
QString dev = QString::fromUtf16((const char16_t*)name);
|
||||
|
||||
IMFMediaSource *pSource = nullptr;
|
||||
if (SUCCEEDED(devices[i]->ActivateObject(IID_PPV_ARGS(&pSource))))
|
||||
@@ -429,7 +428,7 @@ void MFGrabber::enumVideoCaptureDevices()
|
||||
if (pixelformat != PixelFormat::NO_CHANGE)
|
||||
{
|
||||
DeviceProperties properties;
|
||||
properties.symlink = QString::fromUtf16((const ushort*)symlink);
|
||||
properties.symlink = QString::fromUtf16((const char16_t*)symlink);
|
||||
properties.width = width;
|
||||
properties.height = height;
|
||||
properties.fps = numerator / denominator;
|
||||
@@ -462,7 +461,7 @@ void MFGrabber::enumVideoCaptureDevices()
|
||||
control.minValue = minVal;
|
||||
control.maxValue = maxVal;
|
||||
control.step = stepVal;
|
||||
control.default = defaultVal;
|
||||
control.def = defaultVal;
|
||||
|
||||
long currentVal;
|
||||
if (SUCCEEDED(videoProcAmp->Get(it.key(), ¤tVal, &flag)))
|
||||
@@ -515,7 +514,9 @@ void MFGrabber::start_capturing()
|
||||
{
|
||||
HRESULT hr = _sourceReader->ReadSample(MF_SOURCE_READER_FIRST_VIDEO_STREAM, 0, NULL, NULL, NULL, NULL);
|
||||
if (!SUCCEEDED(hr))
|
||||
{
|
||||
Error(_log, "ReadSample (%i)", hr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -784,7 +785,7 @@ QJsonArray MFGrabber::discover(const QJsonObject& params)
|
||||
property["step"] = control.step;
|
||||
property["current"] = control.currentValue;
|
||||
controls[control.property] = property;
|
||||
controls_default[control.property] = control.default;
|
||||
controls_default[control.property] = control.def;
|
||||
}
|
||||
device["properties"] = controls;
|
||||
|
||||
|
@@ -124,12 +124,15 @@ public:
|
||||
|
||||
// Variables declaration
|
||||
IMFMediaBuffer* buffer = nullptr;
|
||||
BYTE* data = nullptr;
|
||||
DWORD maxLength = 0, currentLength = 0;
|
||||
|
||||
|
||||
|
||||
if (FAILED(hrStatus))
|
||||
{
|
||||
_hrStatus = hrStatus;
|
||||
_com_error error(_hrStatus);
|
||||
Error(_grabber->_log, "%s", error.ErrorMessage());
|
||||
Error(_grabber->_log, "0x%08x: %s", _hrStatus, std::system_category().message(_hrStatus).c_str());
|
||||
goto done;
|
||||
}
|
||||
|
||||
@@ -145,18 +148,15 @@ public:
|
||||
_hrStatus = pSample->ConvertToContiguousBuffer(&buffer);
|
||||
if (FAILED(_hrStatus))
|
||||
{
|
||||
_com_error error(_hrStatus);
|
||||
Error(_grabber->_log, "Buffer conversion failed => %s", error.ErrorMessage());
|
||||
Error(_grabber->_log, "Buffer conversion failed => 0x%08x: %s", _hrStatus, std::system_category().message(_hrStatus).c_str());
|
||||
goto done;
|
||||
}
|
||||
|
||||
BYTE* data = nullptr;
|
||||
DWORD maxLength = 0, currentLength = 0;
|
||||
|
||||
_hrStatus = buffer->Lock(&data, &maxLength, ¤tLength);
|
||||
if (FAILED(_hrStatus))
|
||||
{
|
||||
_com_error error(_hrStatus);
|
||||
Error(_grabber->_log, "Access to the buffer memory failed => %s", error.ErrorMessage());
|
||||
Error(_grabber->_log, "Access to the buffer memory failed => 0x%08x: %s", _hrStatus, std::system_category().message(_hrStatus).c_str());
|
||||
goto done;
|
||||
}
|
||||
|
||||
@@ -165,8 +165,7 @@ public:
|
||||
_hrStatus = buffer->Unlock();
|
||||
if (FAILED(_hrStatus))
|
||||
{
|
||||
_com_error error(_hrStatus);
|
||||
Error(_grabber->_log, "Unlocking the buffer memory failed => %s", error.ErrorMessage());
|
||||
Error(_grabber->_log, "Unlocking the buffer memory failed => 0x%08x: %s", _hrStatus, std::system_category().message(_hrStatus).c_str());
|
||||
}
|
||||
|
||||
done:
|
||||
@@ -183,7 +182,7 @@ public:
|
||||
return _hrStatus;
|
||||
}
|
||||
|
||||
HRESULT SourceReaderCB::InitializeVideoEncoder(IMFMediaType* type, PixelFormat format)
|
||||
HRESULT InitializeVideoEncoder(IMFMediaType* type, PixelFormat format)
|
||||
{
|
||||
_pixelformat = format;
|
||||
if (format == PixelFormat::MJPEG || format == PixelFormat::BGR24 || format == PixelFormat::NO_CHANGE)
|
||||
@@ -198,8 +197,7 @@ public:
|
||||
_hrStatus = CoCreateInstance(CLSID_CColorConvertDMO, nullptr, CLSCTX_INPROC_SERVER, IID_IMFTransform, (void**)&_transform);
|
||||
if (FAILED(_hrStatus))
|
||||
{
|
||||
_com_error error(_hrStatus);
|
||||
Error(_grabber->_log, "Creation of the Color Converter failed => %s", error.ErrorMessage());
|
||||
Error(_grabber->_log, "Creation of the Color Converter failed => 0x%08x: %s", _hrStatus, std::system_category().message(_hrStatus).c_str());
|
||||
goto done;
|
||||
}
|
||||
|
||||
@@ -207,8 +205,7 @@ public:
|
||||
_hrStatus = _transform->SetInputType(0, type, 0);
|
||||
if (FAILED(_hrStatus))
|
||||
{
|
||||
_com_error error(_hrStatus);
|
||||
Error(_grabber->_log, "Setting the input media type failed => %s", error.ErrorMessage());
|
||||
Error(_grabber->_log, "Setting the input media type failed => 0x%08x: %s", _hrStatus, std::system_category().message(_hrStatus).c_str());
|
||||
goto done;
|
||||
}
|
||||
|
||||
@@ -216,8 +213,7 @@ public:
|
||||
_hrStatus = MFCreateMediaType(&output);
|
||||
if (FAILED(_hrStatus))
|
||||
{
|
||||
_com_error error(_hrStatus);
|
||||
Error(_grabber->_log, "Creating a new media type failed => %s", error.ErrorMessage());
|
||||
Error(_grabber->_log, "Creating a new media type failed => 0x%08x: %s", _hrStatus, std::system_category().message(_hrStatus).c_str());
|
||||
goto done;
|
||||
}
|
||||
|
||||
@@ -225,8 +221,7 @@ public:
|
||||
_hrStatus = type->CopyAllItems(output);
|
||||
if (FAILED(_hrStatus))
|
||||
{
|
||||
_com_error error(_hrStatus);
|
||||
Error(_grabber->_log, "Copying of all attributes from input to output media type failed => %s", error.ErrorMessage());
|
||||
Error(_grabber->_log, "Copying of all attributes from input to output media type failed => 0x%08x: %s", _hrStatus, std::system_category().message(_hrStatus).c_str());
|
||||
goto done;
|
||||
}
|
||||
|
||||
@@ -253,8 +248,7 @@ public:
|
||||
_hrStatus = _transform->SetOutputType(0, output, 0);
|
||||
if (FAILED(_hrStatus))
|
||||
{
|
||||
_com_error error(_hrStatus);
|
||||
Error(_grabber->_log, "Setting the output media type failed => %s", error.ErrorMessage());
|
||||
Error(_grabber->_log, "Setting the output media type failed => 0x%08x: %s", _hrStatus, std::system_category().message(_hrStatus).c_str());
|
||||
goto done;
|
||||
}
|
||||
|
||||
@@ -262,8 +256,7 @@ public:
|
||||
_hrStatus = _transform->GetInputStatus(0, &mftStatus);
|
||||
if (FAILED(_hrStatus))
|
||||
{
|
||||
_com_error error(_hrStatus);
|
||||
Error(_grabber->_log, "Failed to query the input stream for more data => %s", error.ErrorMessage());
|
||||
Error(_grabber->_log, "Failed to query the input stream for more data => 0x%08x: %s", _hrStatus, std::system_category().message(_hrStatus).c_str());
|
||||
goto done;
|
||||
}
|
||||
|
||||
@@ -283,7 +276,7 @@ public:
|
||||
return _hrStatus;
|
||||
}
|
||||
|
||||
BOOL SourceReaderCB::isBusy()
|
||||
BOOL isBusy()
|
||||
{
|
||||
EnterCriticalSection(&_critsec);
|
||||
BOOL result = _isBusy;
|
||||
@@ -310,18 +303,18 @@ private:
|
||||
DeleteCriticalSection(&_critsec);
|
||||
}
|
||||
|
||||
IMFSample* SourceReaderCB::TransformSample(IMFTransform* transform, IMFSample* in_sample)
|
||||
IMFSample* TransformSample(IMFTransform* transform, IMFSample* in_sample)
|
||||
{
|
||||
IMFSample* result = nullptr;
|
||||
IMFMediaBuffer* out_buffer = nullptr;
|
||||
MFT_OUTPUT_DATA_BUFFER outputDataBuffer = { 0 };
|
||||
DWORD status = 0;
|
||||
|
||||
// Process the input sample
|
||||
_hrStatus = transform->ProcessInput(0, in_sample, 0);
|
||||
if (FAILED(_hrStatus))
|
||||
{
|
||||
_com_error error(_hrStatus);
|
||||
Error(_grabber->_log, "Failed to process the input sample => %s", error.ErrorMessage());
|
||||
Error(_grabber->_log, "Failed to process the input sample => 0x%08x: %s", _hrStatus, std::system_category().message(_hrStatus).c_str());
|
||||
goto done;
|
||||
}
|
||||
|
||||
@@ -330,8 +323,7 @@ private:
|
||||
_hrStatus = transform->GetOutputStreamInfo(0, &streamInfo);
|
||||
if (FAILED(_hrStatus))
|
||||
{
|
||||
_com_error error(_hrStatus);
|
||||
Error(_grabber->_log, "Failed to retrieve buffer requirement for output current => %s", error.ErrorMessage());
|
||||
Error(_grabber->_log, "Failed to retrieve buffer requirement for output current => 0x%08x: %s", _hrStatus, std::system_category().message(_hrStatus).c_str());
|
||||
goto done;
|
||||
}
|
||||
|
||||
@@ -339,8 +331,7 @@ private:
|
||||
_hrStatus = MFCreateMemoryBuffer(streamInfo.cbSize, &out_buffer);
|
||||
if (FAILED(_hrStatus))
|
||||
{
|
||||
_com_error error(_hrStatus);
|
||||
Error(_grabber->_log, "Failed to create an output media buffer => %s", error.ErrorMessage());
|
||||
Error(_grabber->_log, "Failed to create an output media buffer => 0x%08x: %s", _hrStatus, std::system_category().message(_hrStatus).c_str());
|
||||
goto done;
|
||||
}
|
||||
|
||||
@@ -348,8 +339,7 @@ private:
|
||||
_hrStatus = MFCreateSample(&result);
|
||||
if (FAILED(_hrStatus))
|
||||
{
|
||||
_com_error error(_hrStatus);
|
||||
Error(_grabber->_log, "Failed to create an empty media sample => %s", error.ErrorMessage());
|
||||
Error(_grabber->_log, "Failed to create an empty media sampl => 0x%08x: %s", _hrStatus, std::system_category().message(_hrStatus).c_str());
|
||||
goto done;
|
||||
}
|
||||
|
||||
@@ -357,8 +347,7 @@ private:
|
||||
_hrStatus = result->AddBuffer(out_buffer);
|
||||
if (FAILED(_hrStatus))
|
||||
{
|
||||
_com_error error(_hrStatus);
|
||||
Error(_grabber->_log, "Failed to add the output media buffer to the media sample => %s", error.ErrorMessage());
|
||||
Error(_grabber->_log, "Failed to add the output media buffer to the media sample => 0x%08x: %s", _hrStatus, std::system_category().message(_hrStatus).c_str());
|
||||
goto done;
|
||||
}
|
||||
|
||||
@@ -369,14 +358,11 @@ private:
|
||||
outputDataBuffer.pEvents = nullptr;
|
||||
outputDataBuffer.pSample = result;
|
||||
|
||||
DWORD status = 0;
|
||||
|
||||
// Generate the output sample
|
||||
_hrStatus = transform->ProcessOutput(0, 1, &outputDataBuffer, &status);
|
||||
if (FAILED(_hrStatus))
|
||||
{
|
||||
_com_error error(_hrStatus);
|
||||
Error(_grabber->_log, "Failed to generate the output sample => %s", error.ErrorMessage());
|
||||
Error(_grabber->_log, "Failed to generate the output sample => 0x%08x: %s", _hrStatus, std::system_category().message(_hrStatus).c_str());
|
||||
}
|
||||
else
|
||||
{
|
||||
|
Reference in New Issue
Block a user