Merge remote-tracking branch 'origin/stable' into dev

Change-Id: Ie93615076177662e75d46f3d13beeb88d424b4a6
This commit is contained in:
Frederik Gladhorn
2014-02-12 14:11:35 +01:00
19 changed files with 908 additions and 79 deletions

View File

@@ -173,6 +173,8 @@ public:
DSCameraSession::DSCameraSession(QObject *parent)
: QObject(parent)
,m_currentImageId(0)
, needsHorizontalMirroring(false)
, needsVerticalMirroring(true)
{
pBuild = NULL;
pGraph = NULL;
@@ -581,7 +583,7 @@ void DSCameraSession::captureFrame()
mutex.lock();
image = QImage(frames.at(0)->buffer,m_windowSize.width(),m_windowSize.height(),
QImage::Format_RGB888).rgbSwapped().mirrored(true);
QImage::Format_RGB888).rgbSwapped().mirrored(needsHorizontalMirroring, needsVerticalMirroring);
QVideoFrame frame(image);
frame.setStartTime(frames.at(0)->time);
@@ -595,7 +597,7 @@ void DSCameraSession::captureFrame()
mutex.lock();
image = QImage(frames.at(0)->buffer,m_windowSize.width(),m_windowSize.height(),
QImage::Format_RGB32).mirrored(true);
QImage::Format_RGB32).mirrored(needsHorizontalMirroring, needsVerticalMirroring);
QVideoFrame frame(image);
frame.setStartTime(frames.at(0)->time);
@@ -805,7 +807,39 @@ void DSCameraSession::updateProperties()
types.clear();
resolutions.clear();
IAMVideoControl *pVideoControl = 0;
hr = pBuild->FindInterface(&PIN_CATEGORY_CAPTURE, &MEDIATYPE_Video,pCap,
IID_IAMVideoControl, (void**)&pVideoControl);
if (FAILED(hr)) {
qWarning() << "Failed to get the video control";
} else {
IPin *pPin = 0;
if (pCap) {
hr = getPin(pCap, PINDIR_OUTPUT, &pPin);
if (FAILED(hr)) {
qWarning() << "Failed to get the pin for the video control";
} else {
long supportedModes;
hr = pVideoControl->GetCaps(pPin, &supportedModes);
if (FAILED(hr)) {
qWarning() << "Failed to get the supported modes of the video control";
} else if (supportedModes & VideoControlFlag_FlipHorizontal || supportedModes & VideoControlFlag_FlipVertical) {
long mode;
hr = pVideoControl->GetMode(pPin, &mode);
if (FAILED(hr)) {
qWarning() << "Failed to get the mode of the video control";
} else {
if (supportedModes & VideoControlFlag_FlipHorizontal)
needsHorizontalMirroring = (mode & VideoControlFlag_FlipHorizontal);
if (supportedModes & VideoControlFlag_FlipVertical)
needsVerticalMirroring = (mode & VideoControlFlag_FlipVertical);
}
}
pPin->Release();
}
}
pVideoControl->Release();
}
for (int iIndex = 0; iIndex < iCount; iIndex++) {
hr = pConfig->GetStreamCaps(iIndex, &pmt, reinterpret_cast<BYTE*>(&scc));
if (hr == S_OK) {

View File

@@ -188,6 +188,8 @@ private:
QString m_snapshot;
int m_currentImageId;
bool needsHorizontalMirroring;
bool needsVerticalMirroring;
protected:
HRESULT getPin(IBaseFilter *pFilter, PIN_DIRECTION PinDir, IPin **ppPin);
bool createFilterGraph();