이제 WMF를 사용하여 Qt에서 실제 카메라 프레임을 표시합니다. 처음에는 WMF로 IMFSampleGrabberSinkCallback에서 상속 된 그래버 클래스에있는 OnProcessSample의 이미지 프레임을 얻는 것이 좋습니다.WMF 및 Qt OnProcessSample 슬롯에서 신호를 가져올 수 없습니다.
WMF.CPP는 UI에 프레임지고 통보하기 위해
STDMETHODIMP Grabber::OnProcessSample
(
REFGUID guidMajorMediaType,
DWORD dwSampleFlags,
LONGLONG llSampleTime,
LONGLONG llSampleDuration,
const BYTE * pSampleBuffer,
DWORD dwSampleSize
)
{
QMutexLocker locker(&m_SampleMutex);
pMySignal->setValue();
return S_OK;
}
저는 다음과 같은 신호 & 슬롯에서 QObject를 상속 간단한 클래스를 만들려고.
MainWindow.h
class MySignal : public QObject
{
Q_OBJECT
public:
MySignal(QObject * parent = 0, char* name = 0)
{
setObjectName (name);
}
void setValue() { emit EnvokeSignal(); }
public slots:
void ReceiveSignal();
signals:
void EnvokeSignal();
};
class MySignal2 : public QObject
{
Q_OBJECT
public:
MySignal2(QObject * parent = 0, char* name = 0)
{
setObjectName (name);
}
void setValue() { emit EnvokeSignal2(); }
public slots:
void ReceiveSignal2();
signals:
void EnvokeSignal2();
};
MainWindow.cpp
MySignal* pMySignal;
void MySignal::ReceiveSignal()
{
//qDebug()<<"Objectname = "<< objectName() <<" val = "<< v;
OutputDebugString(L" === ReceiveSignal === \n");
}
void MySignal2::ReceiveSignal2()
{
//qDebug()<<"Objectname = "<< objectName() <<" val = "<< v;
OutputDebugString(L" === ReceiveSignal === \n");
}
void MainWindow::on_pushButton_clicked()
{
MySignal SignalSlotCleass(0, "a");
MySignal2 Signal2SlotCleass(0, "b");
pMySignal = &SignalSlotCleass;
QObject::connect(&SignalSlotCleass, &MySignal::EnvokeSignal, &Signal2SlotCleass, &MySignal2::ReceiveSignal2);
EnumerateCamDevice_StartupMF();
}
내가 MySignal1, MySignal2 같은 두 클래스를 사용할 때, 나는 슬롯 방식의 신호 메시지를 얻을 수 있습니다. 하지만 WMF.cpp를 OnProcessSample 함수와 병합하려고하면 Slot 함수에서 OnProcessSample에서 보낸 신호 메시지를 가져올 수 없습니다. 누구든지이 문제를 알고 있다면 그것을 극복 할 수있는 조언을 제공해 주시겠습니까?
. 실제로 도움이됩니다 ~ 감사^__^ – MichaelH
듣기 좋다.) – Guinness