Initial copy of QtMultimediaKit.
Comes from original repo, with SHA1: 2c82d5611655e5967f5c5095af50c0991c4378b2
This commit is contained in:
31
src/plugins/directshow/camera/camera.pri
Normal file
31
src/plugins/directshow/camera/camera.pri
Normal file
@@ -0,0 +1,31 @@
|
||||
INCLUDEPATH += $$PWD
|
||||
|
||||
DEFINES += QMEDIA_DIRECTSHOW_CAMERA
|
||||
|
||||
win32-g++: DEFINES += QT_NO_WMSDK
|
||||
|
||||
win32: DEFINES += _CRT_SECURE_NO_WARNINGS
|
||||
|
||||
HEADERS += \
|
||||
$$PWD/dscameraservice.h \
|
||||
$$PWD/dscameracontrol.h \
|
||||
$$PWD/dsvideorenderer.h \
|
||||
$$PWD/dsvideodevicecontrol.h \
|
||||
$$PWD/dsimagecapturecontrol.h \
|
||||
$$PWD/dscamerasession.h \
|
||||
$$PWD/dsvideowidgetcontrol.h \
|
||||
$$PWD/dscameraservice.h \
|
||||
$$PWD/directshowglobal.h
|
||||
|
||||
|
||||
SOURCES += \
|
||||
$$PWD/dscameraservice.cpp \
|
||||
$$PWD/dscameracontrol.cpp \
|
||||
$$PWD/dsvideorenderer.cpp \
|
||||
$$PWD/dsvideodevicecontrol.cpp \
|
||||
$$PWD/dsimagecapturecontrol.cpp \
|
||||
$$PWD/dscamerasession.cpp \
|
||||
$$PWD/dsvideowidgetcontrol.cpp
|
||||
|
||||
INCLUDEPATH += $(DXSDK_DIR)/include
|
||||
LIBS += -lstrmiids -ldmoguids -luuid -lmsdmo -lole32 -loleaut32
|
||||
236
src/plugins/directshow/camera/directshowglobal.h
Normal file
236
src/plugins/directshow/camera/directshowglobal.h
Normal file
@@ -0,0 +1,236 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
|
||||
** All rights reserved.
|
||||
** Contact: Nokia Corporation (qt-info@nokia.com)
|
||||
**
|
||||
** This file is part of the Qt Mobility Components.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** No Commercial Usage
|
||||
** This file contains pre-release code and may not be distributed.
|
||||
** You may use this file in accordance with the terms and conditions
|
||||
** contained in the Technology Preview License Agreement accompanying
|
||||
** this package.
|
||||
**
|
||||
** GNU Lesser General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||
** General Public License version 2.1 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.LGPL included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU Lesser General Public License version 2.1 requirements
|
||||
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||
**
|
||||
** In addition, as a special exception, Nokia gives you certain additional
|
||||
** rights. These rights are described in the Nokia Qt LGPL Exception
|
||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||
**
|
||||
** If you have questions regarding the use of this file, please contact
|
||||
** Nokia at qt-info@nokia.com.
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef DIRECTSHOWGLOBAL_H
|
||||
#define DIRECTSHOWGLOBAL_H
|
||||
|
||||
#include <QtCore/qglobal.h>
|
||||
|
||||
#include <dshow.h>
|
||||
|
||||
DEFINE_GUID(MEDIASUBTYPE_I420,
|
||||
0x30323449,0x0000,0x0010,0x80,0x00,0x00,0xAA,0x00,0x38,0x9B,0x71);
|
||||
|
||||
extern const GUID MEDIASUBTYPE_RGB24;
|
||||
extern const GUID MEDIASUBTYPE_RGB32;
|
||||
extern const GUID MEDIASUBTYPE_YUY2;
|
||||
extern const GUID MEDIASUBTYPE_MJPG;
|
||||
extern const GUID MEDIASUBTYPE_RGB555;
|
||||
extern const GUID MEDIASUBTYPE_YVU9;
|
||||
extern const GUID MEDIASUBTYPE_UYVY;
|
||||
extern const GUID PIN_CATEGORY_CAPTURE;
|
||||
extern const GUID PIN_CATEGORY_PREVIEW;
|
||||
|
||||
extern const IID IID_IPropertyBag;
|
||||
extern const IID IID_ISampleGrabber;
|
||||
extern const IID IID_ICaptureGraphBuilder2;
|
||||
extern const IID IID_IAMStreamConfig;
|
||||
|
||||
|
||||
extern const CLSID CLSID_CVidCapClassManager;
|
||||
extern const CLSID CLSID_VideoInputDeviceCategory;
|
||||
extern const CLSID CLSID_SampleGrabber;
|
||||
extern const CLSID CLSID_CaptureGraphBuilder2;
|
||||
|
||||
#define SAFE_RELEASE(x) { if(x) x->Release(); x = NULL; }
|
||||
|
||||
typedef struct IFileSinkFilter *LPFILESINKFILTER;
|
||||
typedef struct IAMCopyCaptureFileProgress *LPAMCOPYCAPTUREFILEPROGRESS;
|
||||
|
||||
#ifndef __ICaptureGraphBuilder2_INTERFACE_DEFINED__
|
||||
#define __ICaptureGraphBuilder2_INTERFACE_DEFINED__
|
||||
struct ICaptureGraphBuilder2 : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT STDMETHODCALLTYPE SetFiltergraph(
|
||||
/* [in] */ IGraphBuilder *pfg) = 0;
|
||||
|
||||
virtual HRESULT STDMETHODCALLTYPE GetFiltergraph(
|
||||
/* [out] */ IGraphBuilder **ppfg) = 0;
|
||||
|
||||
virtual HRESULT STDMETHODCALLTYPE SetOutputFileName(
|
||||
/* [in] */ const GUID *pType,
|
||||
/* [in] */ LPCOLESTR lpstrFile,
|
||||
/* [out] */ IBaseFilter **ppf,
|
||||
/* [out] */ IFileSinkFilter **ppSink) = 0;
|
||||
|
||||
virtual /* [local] */ HRESULT STDMETHODCALLTYPE FindInterface(
|
||||
/* [in] */ const GUID *pCategory,
|
||||
/* [in] */ const GUID *pType,
|
||||
/* [in] */ IBaseFilter *pf,
|
||||
/* [in] */ REFIID riid,
|
||||
/* [out] */ void **ppint) = 0;
|
||||
|
||||
virtual HRESULT STDMETHODCALLTYPE RenderStream(
|
||||
/* [in] */ const GUID *pCategory,
|
||||
/* [in] */ const GUID *pType,
|
||||
/* [in] */ IUnknown *pSource,
|
||||
/* [in] */ IBaseFilter *pfCompressor,
|
||||
/* [in] */ IBaseFilter *pfRenderer) = 0;
|
||||
|
||||
virtual HRESULT STDMETHODCALLTYPE ControlStream(
|
||||
/* [in] */ const GUID *pCategory,
|
||||
/* [in] */ const GUID *pType,
|
||||
/* [in] */ IBaseFilter *pFilter,
|
||||
/* [in] */ REFERENCE_TIME *pstart,
|
||||
/* [in] */ REFERENCE_TIME *pstop,
|
||||
/* [in] */ WORD wStartCookie,
|
||||
/* [in] */ WORD wStopCookie) = 0;
|
||||
|
||||
virtual HRESULT STDMETHODCALLTYPE AllocCapFile(
|
||||
/* [in] */ LPCOLESTR lpstr,
|
||||
/* [in] */ DWORDLONG dwlSize) = 0;
|
||||
|
||||
virtual HRESULT STDMETHODCALLTYPE CopyCaptureFile(
|
||||
/* [in] */ LPOLESTR lpwstrOld,
|
||||
/* [in] */ LPOLESTR lpwstrNew,
|
||||
/* [in] */ int fAllowEscAbort,
|
||||
/* [in] */ IAMCopyCaptureFileProgress *pCallback) = 0;
|
||||
|
||||
virtual HRESULT STDMETHODCALLTYPE FindPin(
|
||||
/* [in] */ IUnknown *pSource,
|
||||
/* [in] */ PIN_DIRECTION pindir,
|
||||
/* [in] */ const GUID *pCategory,
|
||||
/* [in] */ const GUID *pType,
|
||||
/* [in] */ BOOL fUnconnected,
|
||||
/* [in] */ int num,
|
||||
/* [out] */ IPin **ppPin) = 0;
|
||||
|
||||
};
|
||||
#endif
|
||||
|
||||
#ifndef __IAMStreamConfig_INTERFACE_DEFINED__
|
||||
#define __IAMStreamConfig_INTERFACE_DEFINED__
|
||||
struct IAMStreamConfig : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT STDMETHODCALLTYPE SetFormat(
|
||||
/* [in] */ AM_MEDIA_TYPE *pmt) = 0;
|
||||
|
||||
virtual HRESULT STDMETHODCALLTYPE GetFormat(
|
||||
/* [out] */ AM_MEDIA_TYPE **ppmt) = 0;
|
||||
|
||||
virtual HRESULT STDMETHODCALLTYPE GetNumberOfCapabilities(
|
||||
/* [out] */ int *piCount,
|
||||
/* [out] */ int *piSize) = 0;
|
||||
|
||||
virtual HRESULT STDMETHODCALLTYPE GetStreamCaps(
|
||||
/* [in] */ int iIndex,
|
||||
/* [out] */ AM_MEDIA_TYPE **ppmt,
|
||||
/* [out] */ BYTE *pSCC) = 0;
|
||||
|
||||
};
|
||||
#endif
|
||||
|
||||
#ifndef __IErrorLog_INTERFACE_DEFINED__
|
||||
#define __IErrorLog_INTERFACE_DEFINED__
|
||||
struct IErrorLog : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual HRESULT STDMETHODCALLTYPE AddError(
|
||||
/* [in] */ LPCOLESTR pszPropName,
|
||||
/* [in] */ EXCEPINFO *pExcepInfo) = 0;
|
||||
|
||||
};
|
||||
#endif
|
||||
|
||||
#ifndef __IPropertyBag_INTERFACE_DEFINED__
|
||||
#define __IPropertyBag_INTERFACE_DEFINED__
|
||||
struct IPropertyBag : public IUnknown
|
||||
{
|
||||
public:
|
||||
virtual /* [local] */ HRESULT STDMETHODCALLTYPE Read(
|
||||
/* [in] */ LPCOLESTR pszPropName,
|
||||
/* [out][in] */ VARIANT *pVar,
|
||||
/* [in] */ IErrorLog *pErrorLog) = 0;
|
||||
|
||||
virtual HRESULT STDMETHODCALLTYPE Write(
|
||||
/* [in] */ LPCOLESTR pszPropName,
|
||||
/* [in] */ VARIANT *pVar) = 0;
|
||||
|
||||
};
|
||||
#endif
|
||||
|
||||
typedef struct IMediaSample *LPMEDIASAMPLE;
|
||||
|
||||
EXTERN_C const IID IID_ISampleGrabberCB;
|
||||
|
||||
#ifndef __ISampleGrabberCB_INTERFACE_DEFINED__
|
||||
#define __ISampleGrabberCB_INTERFACE_DEFINED__
|
||||
|
||||
#undef INTERFACE
|
||||
#define INTERFACE ISampleGrabberCB
|
||||
DECLARE_INTERFACE_(ISampleGrabberCB, IUnknown)
|
||||
{
|
||||
// STDMETHOD(QueryInterface) (THIS_ const GUID *, void **) PURE;
|
||||
STDMETHOD(QueryInterface) (THIS_ REFIID riid, void **) PURE;
|
||||
STDMETHOD_(ULONG, AddRef) (THIS) PURE;
|
||||
STDMETHOD_(ULONG, Release) (THIS) PURE;
|
||||
STDMETHOD_(HRESULT, SampleCB) (THIS_ double, LPMEDIASAMPLE) PURE;
|
||||
STDMETHOD_(HRESULT, BufferCB) (THIS_ double, BYTE *, long) PURE;
|
||||
};
|
||||
#undef INTERFACE
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef __ISampleGrabber_INTERFACE_DEFINED__
|
||||
#define __ISampleGrabber_INTERFACE_DEFINED__
|
||||
|
||||
#define INTERFACE ISampleGrabber
|
||||
DECLARE_INTERFACE_(ISampleGrabber,IUnknown)
|
||||
{
|
||||
STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
|
||||
STDMETHOD_(ULONG,AddRef)(THIS) PURE;
|
||||
STDMETHOD_(ULONG,Release)(THIS) PURE;
|
||||
STDMETHOD(SetOneShot)(THIS_ BOOL) PURE;
|
||||
STDMETHOD(SetMediaType)(THIS_ const AM_MEDIA_TYPE*) PURE;
|
||||
STDMETHOD(GetConnectedMediaType)(THIS_ AM_MEDIA_TYPE*) PURE;
|
||||
STDMETHOD(SetBufferSamples)(THIS_ BOOL) PURE;
|
||||
STDMETHOD(GetCurrentBuffer)(THIS_ long*,long*) PURE;
|
||||
STDMETHOD(GetCurrentSample)(THIS_ IMediaSample**) PURE;
|
||||
STDMETHOD(SetCallback)(THIS_ ISampleGrabberCB *,long) PURE;
|
||||
};
|
||||
#undef INTERFACE
|
||||
#endif
|
||||
|
||||
|
||||
#endif
|
||||
103
src/plugins/directshow/camera/dscameracontrol.cpp
Normal file
103
src/plugins/directshow/camera/dscameracontrol.cpp
Normal file
@@ -0,0 +1,103 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
|
||||
** All rights reserved.
|
||||
** Contact: Nokia Corporation (qt-info@nokia.com)
|
||||
**
|
||||
** This file is part of the Qt Mobility Components.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** No Commercial Usage
|
||||
** This file contains pre-release code and may not be distributed.
|
||||
** You may use this file in accordance with the terms and conditions
|
||||
** contained in the Technology Preview License Agreement accompanying
|
||||
** this package.
|
||||
**
|
||||
** GNU Lesser General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||
** General Public License version 2.1 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.LGPL included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU Lesser General Public License version 2.1 requirements
|
||||
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||
**
|
||||
** In addition, as a special exception, Nokia gives you certain additional
|
||||
** rights. These rights are described in the Nokia Qt LGPL Exception
|
||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||
**
|
||||
** If you have questions regarding the use of this file, please contact
|
||||
** Nokia at qt-info@nokia.com.
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include <QtCore/qdebug.h>
|
||||
|
||||
#include "dscameracontrol.h"
|
||||
#include "dscameraservice.h"
|
||||
#include "dscamerasession.h"
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
DSCameraControl::DSCameraControl(QObject *parent)
|
||||
:QCameraControl(parent), m_captureMode(QCamera::CaptureStillImage)
|
||||
{
|
||||
m_session = qobject_cast<DSCameraSession*>(parent);
|
||||
connect(m_session, SIGNAL(stateChanged(QCamera::State)),this, SIGNAL(stateChanged(QCamera::State)));
|
||||
}
|
||||
|
||||
DSCameraControl::~DSCameraControl()
|
||||
{
|
||||
}
|
||||
|
||||
void DSCameraControl::setState(QCamera::State state)
|
||||
{
|
||||
switch (state) {
|
||||
case QCamera::ActiveState:
|
||||
start();
|
||||
break;
|
||||
case QCamera::UnloadedState: /* fall through */
|
||||
case QCamera::LoadedState:
|
||||
stop();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
bool DSCameraControl::isCaptureModeSupported(QCamera::CaptureMode mode) const
|
||||
{
|
||||
bool bCaptureSupported = false;
|
||||
switch (mode) {
|
||||
case QCamera::CaptureStillImage:
|
||||
bCaptureSupported = true;
|
||||
break;
|
||||
case QCamera::CaptureVideo:
|
||||
bCaptureSupported = false;
|
||||
break;
|
||||
}
|
||||
return bCaptureSupported;
|
||||
}
|
||||
|
||||
void DSCameraControl::start()
|
||||
{
|
||||
m_session->record();
|
||||
}
|
||||
|
||||
void DSCameraControl::stop()
|
||||
{
|
||||
m_session->stop();
|
||||
}
|
||||
|
||||
QCamera::State DSCameraControl::state() const
|
||||
{
|
||||
return (QCamera::State)m_session->state();
|
||||
}
|
||||
|
||||
QT_END_NAMESPACE
|
||||
94
src/plugins/directshow/camera/dscameracontrol.h
Normal file
94
src/plugins/directshow/camera/dscameracontrol.h
Normal file
@@ -0,0 +1,94 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
|
||||
** All rights reserved.
|
||||
** Contact: Nokia Corporation (qt-info@nokia.com)
|
||||
**
|
||||
** This file is part of the Qt Mobility Components.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** No Commercial Usage
|
||||
** This file contains pre-release code and may not be distributed.
|
||||
** You may use this file in accordance with the terms and conditions
|
||||
** contained in the Technology Preview License Agreement accompanying
|
||||
** this package.
|
||||
**
|
||||
** GNU Lesser General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||
** General Public License version 2.1 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.LGPL included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU Lesser General Public License version 2.1 requirements
|
||||
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||
**
|
||||
** In addition, as a special exception, Nokia gives you certain additional
|
||||
** rights. These rights are described in the Nokia Qt LGPL Exception
|
||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||
**
|
||||
** If you have questions regarding the use of this file, please contact
|
||||
** Nokia at qt-info@nokia.com.
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef DSCAMERACONTROL_H
|
||||
#define DSCAMERACONTROL_H
|
||||
|
||||
#include <QtCore/qobject.h>
|
||||
#include <qcameracontrol.h>
|
||||
|
||||
QT_BEGIN_HEADER
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
class DSCameraService;
|
||||
class DSCameraSession;
|
||||
|
||||
|
||||
class DSCameraControl : public QCameraControl
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
DSCameraControl(QObject *parent = 0);
|
||||
~DSCameraControl();
|
||||
|
||||
void start();
|
||||
void stop();
|
||||
QCamera::State state() const;
|
||||
|
||||
QCamera::CaptureMode captureMode() const { return m_captureMode; }
|
||||
void setCaptureMode(QCamera::CaptureMode mode)
|
||||
{
|
||||
if (m_captureMode != mode) {
|
||||
m_captureMode = mode;
|
||||
emit captureModeChanged(mode);
|
||||
}
|
||||
}
|
||||
|
||||
void setState(QCamera::State state);
|
||||
|
||||
QCamera::Status status() const { return QCamera::UnavailableStatus; }
|
||||
bool isCaptureModeSupported(QCamera::CaptureMode mode) const;
|
||||
bool canChangeProperty(PropertyChangeType /* changeType */, QCamera::Status /* status */) const {return false; }
|
||||
|
||||
private:
|
||||
DSCameraSession *m_session;
|
||||
DSCameraService *m_service;
|
||||
QCamera::CaptureMode m_captureMode;
|
||||
};
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
||||
QT_END_HEADER
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
114
src/plugins/directshow/camera/dscameraservice.cpp
Normal file
114
src/plugins/directshow/camera/dscameraservice.cpp
Normal file
@@ -0,0 +1,114 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
|
||||
** All rights reserved.
|
||||
** Contact: Nokia Corporation (qt-info@nokia.com)
|
||||
**
|
||||
** This file is part of the Qt Mobility Components.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** No Commercial Usage
|
||||
** This file contains pre-release code and may not be distributed.
|
||||
** You may use this file in accordance with the terms and conditions
|
||||
** contained in the Technology Preview License Agreement accompanying
|
||||
** this package.
|
||||
**
|
||||
** GNU Lesser General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||
** General Public License version 2.1 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.LGPL included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU Lesser General Public License version 2.1 requirements
|
||||
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||
**
|
||||
** In addition, as a special exception, Nokia gives you certain additional
|
||||
** rights. These rights are described in the Nokia Qt LGPL Exception
|
||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||
**
|
||||
** If you have questions regarding the use of this file, please contact
|
||||
** Nokia at qt-info@nokia.com.
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include <QtCore/qvariant.h>
|
||||
#include <QtCore/qdebug.h>
|
||||
#include <QtGui/qwidget.h>
|
||||
#include <QVideoWidgetControl.h>
|
||||
|
||||
|
||||
#include "dscameraservice.h"
|
||||
#include "dscameracontrol.h"
|
||||
#include "dscamerasession.h"
|
||||
#include "dsvideorenderer.h"
|
||||
#include "dsvideodevicecontrol.h"
|
||||
#include "dsimagecapturecontrol.h"
|
||||
#include "dsvideowidgetcontrol.h"
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
DSCameraService::DSCameraService(QObject *parent):
|
||||
QMediaService(parent)
|
||||
{
|
||||
m_session = new DSCameraSession(this);
|
||||
|
||||
m_control = new DSCameraControl(m_session);
|
||||
|
||||
m_videoDevice = new DSVideoDeviceControl(m_session);
|
||||
|
||||
m_videoRenderer = new DSVideoRendererControl(m_session, this);
|
||||
|
||||
m_imageCapture = new DSImageCaptureControl(m_session);
|
||||
|
||||
m_viewFinderWidget = new DSVideoWidgetControl(m_session);
|
||||
|
||||
m_device = QByteArray("default");
|
||||
}
|
||||
|
||||
DSCameraService::~DSCameraService()
|
||||
{
|
||||
delete m_control;
|
||||
delete m_videoDevice;
|
||||
delete m_videoRenderer;
|
||||
delete m_imageCapture;
|
||||
delete m_viewFinderWidget;
|
||||
delete m_session;
|
||||
}
|
||||
|
||||
QMediaControl* DSCameraService::requestControl(const char *name)
|
||||
{
|
||||
if(qstrcmp(name,QCameraControl_iid) == 0)
|
||||
return m_control;
|
||||
|
||||
if (qstrcmp(name, QCameraImageCaptureControl_iid) == 0)
|
||||
return m_imageCapture;
|
||||
|
||||
if (qstrcmp(name, QVideoWidgetControl_iid) == 0) {
|
||||
if (m_viewFinderWidget) {
|
||||
return m_viewFinderWidget;
|
||||
}
|
||||
}
|
||||
|
||||
if(qstrcmp(name,QVideoRendererControl_iid) == 0)
|
||||
return m_videoRenderer;
|
||||
|
||||
if(qstrcmp(name,QVideoDeviceControl_iid) == 0)
|
||||
return m_videoDevice;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void DSCameraService::releaseControl(QMediaControl *control)
|
||||
{
|
||||
// Implemented as a singleton, so we do nothing.
|
||||
}
|
||||
|
||||
QT_END_NAMESPACE
|
||||
88
src/plugins/directshow/camera/dscameraservice.h
Normal file
88
src/plugins/directshow/camera/dscameraservice.h
Normal file
@@ -0,0 +1,88 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
|
||||
** All rights reserved.
|
||||
** Contact: Nokia Corporation (qt-info@nokia.com)
|
||||
**
|
||||
** This file is part of the Qt Mobility Components.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** No Commercial Usage
|
||||
** This file contains pre-release code and may not be distributed.
|
||||
** You may use this file in accordance with the terms and conditions
|
||||
** contained in the Technology Preview License Agreement accompanying
|
||||
** this package.
|
||||
**
|
||||
** GNU Lesser General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||
** General Public License version 2.1 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.LGPL included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU Lesser General Public License version 2.1 requirements
|
||||
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||
**
|
||||
** In addition, as a special exception, Nokia gives you certain additional
|
||||
** rights. These rights are described in the Nokia Qt LGPL Exception
|
||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||
**
|
||||
** If you have questions regarding the use of this file, please contact
|
||||
** Nokia at qt-info@nokia.com.
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef DSCAMERASERVICE_H
|
||||
#define DSCAMERASERVICE_H
|
||||
|
||||
#include <QtCore/qobject.h>
|
||||
|
||||
#include <qmediaservice.h>
|
||||
|
||||
QT_BEGIN_HEADER
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
class DSCameraControl;
|
||||
class DSCameraSession;
|
||||
class DSVideoOutputControl;
|
||||
class DSVideoDeviceControl;
|
||||
class DSVideoRendererControl;
|
||||
class DSImageCaptureControl;
|
||||
class DSVideoWidgetControl;
|
||||
|
||||
|
||||
class DSCameraService : public QMediaService
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
DSCameraService(QObject *parent = 0);
|
||||
~DSCameraService();
|
||||
|
||||
virtual QMediaControl* requestControl(const char *name);
|
||||
virtual void releaseControl(QMediaControl *control);
|
||||
|
||||
private:
|
||||
DSCameraControl *m_control;
|
||||
DSCameraSession *m_session;
|
||||
DSVideoOutputControl *m_videoOutput;
|
||||
DSVideoWidgetControl *m_viewFinderWidget;
|
||||
DSVideoDeviceControl *m_videoDevice;
|
||||
DSVideoRendererControl *m_videoRenderer;
|
||||
DSImageCaptureControl *m_imageCapture;
|
||||
QByteArray m_device;
|
||||
};
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
||||
QT_END_HEADER
|
||||
|
||||
#endif
|
||||
1160
src/plugins/directshow/camera/dscamerasession.cpp
Normal file
1160
src/plugins/directshow/camera/dscamerasession.cpp
Normal file
File diff suppressed because it is too large
Load Diff
208
src/plugins/directshow/camera/dscamerasession.h
Normal file
208
src/plugins/directshow/camera/dscamerasession.h
Normal file
@@ -0,0 +1,208 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
|
||||
** All rights reserved.
|
||||
** Contact: Nokia Corporation (qt-info@nokia.com)
|
||||
**
|
||||
** This file is part of the Qt Mobility Components.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** No Commercial Usage
|
||||
** This file contains pre-release code and may not be distributed.
|
||||
** You may use this file in accordance with the terms and conditions
|
||||
** contained in the Technology Preview License Agreement accompanying
|
||||
** this package.
|
||||
**
|
||||
** GNU Lesser General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||
** General Public License version 2.1 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.LGPL included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU Lesser General Public License version 2.1 requirements
|
||||
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||
**
|
||||
** In addition, as a special exception, Nokia gives you certain additional
|
||||
** rights. These rights are described in the Nokia Qt LGPL Exception
|
||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||
**
|
||||
** If you have questions regarding the use of this file, please contact
|
||||
** Nokia at qt-info@nokia.com.
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef DSCAMERASESSION_H
|
||||
#define DSCAMERASESSION_H
|
||||
|
||||
#include <QtCore/qobject.h>
|
||||
#include <QTime>
|
||||
#include <QUrl>
|
||||
#include <QMutex>
|
||||
|
||||
#include <qcamera.h>
|
||||
#include <QtMultimedia/qvideoframe.h>
|
||||
#include <QtMultimedia/qabstractvideosurface.h>
|
||||
#include <QtMultimedia/qvideosurfaceformat.h>
|
||||
|
||||
#include <tchar.h>
|
||||
#include <dshow.h>
|
||||
#include <objbase.h>
|
||||
#include <initguid.h>
|
||||
#pragma comment(lib, "strmiids.lib")
|
||||
#pragma comment(lib, "ole32.lib")
|
||||
#include <windows.h>
|
||||
|
||||
#pragma include_alias("dxtrans.h","qedit.h")
|
||||
#define __IDxtCompositor_INTERFACE_DEFINED__
|
||||
#define __IDxtAlphaSetter_INTERFACE_DEFINED__
|
||||
#define __IDxtJpeg_INTERFACE_DEFINED__
|
||||
#define __IDxtKey_INTERFACE_DEFINED__
|
||||
#include <qedit.h>
|
||||
|
||||
struct ICaptureGraphBuilder2;
|
||||
struct ISampleGrabber;
|
||||
|
||||
QT_BEGIN_HEADER
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
class DSVideoRenderer;
|
||||
class SampleGrabberCallbackPrivate;
|
||||
|
||||
|
||||
struct video_buffer {
|
||||
unsigned char* buffer;
|
||||
int length;
|
||||
qint64 time;
|
||||
};
|
||||
|
||||
typedef QMap<unsigned int, QList<QSize> > FormatResolutionMap;
|
||||
|
||||
class DSCameraSession : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
DSCameraSession(QObject *parent = 0);
|
||||
~DSCameraSession();
|
||||
|
||||
bool deviceReady();
|
||||
bool pictureInProgress();
|
||||
|
||||
// camera controls
|
||||
|
||||
int framerate() const;
|
||||
void setFrameRate(int rate);
|
||||
int brightness() const;
|
||||
void setBrightness(int b);
|
||||
int contrast() const;
|
||||
void setContrast(int c);
|
||||
int saturation() const;
|
||||
void setSaturation(int s);
|
||||
int hue() const;
|
||||
void setHue(int h);
|
||||
int sharpness() const;
|
||||
void setSharpness(int s);
|
||||
int zoom() const;
|
||||
void setZoom(int z);
|
||||
bool backlightCompensation() const;
|
||||
void setBacklightCompensation(bool);
|
||||
int whitelevel() const;
|
||||
void setWhitelevel(int w);
|
||||
int rotation() const;
|
||||
void setRotation(int r);
|
||||
bool flash() const;
|
||||
void setFlash(bool f);
|
||||
bool autofocus() const;
|
||||
void setAutofocus(bool f);
|
||||
|
||||
QSize frameSize() const;
|
||||
void setFrameSize(const QSize& s);
|
||||
void setDevice(const QString &device);
|
||||
QList<QVideoFrame::PixelFormat> supportedPixelFormats();
|
||||
QVideoFrame::PixelFormat pixelFormat() const;
|
||||
void setPixelFormat(QVideoFrame::PixelFormat fmt);
|
||||
QList<QSize> supportedResolutions(QVideoFrame::PixelFormat format);
|
||||
|
||||
// media control
|
||||
|
||||
bool setOutputLocation(const QUrl &sink);
|
||||
QUrl outputLocation() const;
|
||||
qint64 position() const;
|
||||
int state() const;
|
||||
void record();
|
||||
void pause();
|
||||
void stop();
|
||||
|
||||
void setSurface(QAbstractVideoSurface* surface);
|
||||
|
||||
int captureImage(const QString &fileName);
|
||||
|
||||
AM_MEDIA_TYPE StillMediaType;
|
||||
QList<video_buffer*> frames;
|
||||
SampleGrabberCallbackPrivate* StillCapCB;
|
||||
|
||||
QMutex mutex;
|
||||
|
||||
Q_SIGNALS:
|
||||
void stateChanged(QCamera::State);
|
||||
void imageCaptured(int id, const QImage &preview);
|
||||
void imageSaved(int id, const QString &fileName);
|
||||
void readyForCaptureChanged(bool);
|
||||
|
||||
private Q_SLOTS:
|
||||
void captureFrame();
|
||||
|
||||
private:
|
||||
QVideoSurfaceFormat actualFormat;
|
||||
QList<QVideoFrame::PixelFormat> types;
|
||||
|
||||
QTime timeStamp;
|
||||
bool graph;
|
||||
bool active;
|
||||
bool opened;
|
||||
bool available;
|
||||
QCamera::State m_state;
|
||||
QByteArray m_device;
|
||||
QUrl m_sink;
|
||||
DSVideoRenderer* m_output;
|
||||
QAbstractVideoSurface* m_surface;
|
||||
QVideoFrame::PixelFormat pixelF;
|
||||
QSize m_windowSize;
|
||||
FormatResolutionMap resolutions;
|
||||
|
||||
ICaptureGraphBuilder2* pBuild;
|
||||
IGraphBuilder* pGraph;
|
||||
IBaseFilter* pCap;
|
||||
IBaseFilter* pSG_Filter;
|
||||
ISampleGrabber *pSG;
|
||||
|
||||
|
||||
QString m_snapshot;
|
||||
int m_currentImageId;
|
||||
protected:
|
||||
HRESULT getPin(IBaseFilter *pFilter, PIN_DIRECTION PinDir, IPin **ppPin);
|
||||
bool createFilterGraph();
|
||||
void updateProperties();
|
||||
bool setProperties();
|
||||
bool openStream();
|
||||
void closeStream();
|
||||
bool startStream();
|
||||
void stopStream();
|
||||
void suspendStream();
|
||||
void resumeStream();
|
||||
};
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
||||
QT_END_HEADER
|
||||
|
||||
|
||||
#endif
|
||||
83
src/plugins/directshow/camera/dsimagecapturecontrol.cpp
Normal file
83
src/plugins/directshow/camera/dsimagecapturecontrol.cpp
Normal file
@@ -0,0 +1,83 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
|
||||
** All rights reserved.
|
||||
** Contact: Nokia Corporation (qt-info@nokia.com)
|
||||
**
|
||||
** This file is part of the Qt Mobility Components.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** No Commercial Usage
|
||||
** This file contains pre-release code and may not be distributed.
|
||||
** You may use this file in accordance with the terms and conditions
|
||||
** contained in the Technology Preview License Agreement accompanying
|
||||
** this package.
|
||||
**
|
||||
** GNU Lesser General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||
** General Public License version 2.1 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.LGPL included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU Lesser General Public License version 2.1 requirements
|
||||
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||
**
|
||||
** In addition, as a special exception, Nokia gives you certain additional
|
||||
** rights. These rights are described in the Nokia Qt LGPL Exception
|
||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||
**
|
||||
** If you have questions regarding the use of this file, please contact
|
||||
** Nokia at qt-info@nokia.com.
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include <QtCore/QDebug>
|
||||
|
||||
#include "dsimagecapturecontrol.h"
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
DSImageCaptureControl::DSImageCaptureControl(DSCameraSession *session)
|
||||
:QCameraImageCaptureControl(session), m_session(session), m_ready(false)
|
||||
{
|
||||
connect(m_session, SIGNAL(stateChanged(QCamera::State)), SLOT(updateState()));
|
||||
connect(m_session, SIGNAL(imageCaptured(const int, QImage)),
|
||||
this, SIGNAL(imageCaptured(const int, QImage)));
|
||||
connect(m_session, SIGNAL(imageSaved(const int, const QString &)),
|
||||
this, SIGNAL(imageSaved(const int, const QString &)));
|
||||
connect(m_session, SIGNAL(readyForCaptureChanged(bool)),
|
||||
this, SIGNAL(readyForCaptureChanged(bool)));
|
||||
}
|
||||
|
||||
DSImageCaptureControl::~DSImageCaptureControl()
|
||||
{
|
||||
}
|
||||
|
||||
bool DSImageCaptureControl::isReadyForCapture() const
|
||||
{
|
||||
return m_ready;
|
||||
}
|
||||
|
||||
int DSImageCaptureControl::capture(const QString &fileName)
|
||||
{
|
||||
return m_session->captureImage(fileName);
|
||||
}
|
||||
|
||||
void DSImageCaptureControl::updateState()
|
||||
{
|
||||
bool ready = (m_session->state() == QCamera::ActiveState) &&
|
||||
!m_session->pictureInProgress();
|
||||
if(m_ready != ready)
|
||||
emit readyForCaptureChanged(m_ready = ready);
|
||||
}
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
||||
80
src/plugins/directshow/camera/dsimagecapturecontrol.h
Normal file
80
src/plugins/directshow/camera/dsimagecapturecontrol.h
Normal file
@@ -0,0 +1,80 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
|
||||
** All rights reserved.
|
||||
** Contact: Nokia Corporation (qt-info@nokia.com)
|
||||
**
|
||||
** This file is part of the Qt Mobility Components.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** No Commercial Usage
|
||||
** This file contains pre-release code and may not be distributed.
|
||||
** You may use this file in accordance with the terms and conditions
|
||||
** contained in the Technology Preview License Agreement accompanying
|
||||
** this package.
|
||||
**
|
||||
** GNU Lesser General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||
** General Public License version 2.1 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.LGPL included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU Lesser General Public License version 2.1 requirements
|
||||
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||
**
|
||||
** In addition, as a special exception, Nokia gives you certain additional
|
||||
** rights. These rights are described in the Nokia Qt LGPL Exception
|
||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||
**
|
||||
** If you have questions regarding the use of this file, please contact
|
||||
** Nokia at qt-info@nokia.com.
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef DSIMAGECAPTURECONTROL_H
|
||||
#define DSIMAGECAPTURECONTROL_H
|
||||
|
||||
#include <qcameraimagecapturecontrol.h>
|
||||
#include "dscamerasession.h"
|
||||
|
||||
QT_BEGIN_HEADER
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
class DSImageCaptureControl : public QCameraImageCaptureControl
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
DSImageCaptureControl(DSCameraSession *session);
|
||||
virtual ~DSImageCaptureControl();
|
||||
|
||||
bool isReadyForCapture() const;
|
||||
int capture(const QString &fileName);
|
||||
|
||||
virtual QCameraImageCapture::DriveMode driveMode() const { return QCameraImageCapture::SingleImageCapture; }
|
||||
virtual void setDriveMode(QCameraImageCapture::DriveMode mode) { }
|
||||
|
||||
virtual void cancelCapture() {}
|
||||
|
||||
private slots:
|
||||
void updateState();
|
||||
|
||||
|
||||
private:
|
||||
DSCameraSession *m_session;
|
||||
bool m_ready;
|
||||
};
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
||||
QT_END_HEADER
|
||||
|
||||
#endif // DSCAPTURECONTROL_H
|
||||
168
src/plugins/directshow/camera/dsvideodevicecontrol.cpp
Normal file
168
src/plugins/directshow/camera/dsvideodevicecontrol.cpp
Normal file
@@ -0,0 +1,168 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
|
||||
** All rights reserved.
|
||||
** Contact: Nokia Corporation (qt-info@nokia.com)
|
||||
**
|
||||
** This file is part of the Qt Mobility Components.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** No Commercial Usage
|
||||
** This file contains pre-release code and may not be distributed.
|
||||
** You may use this file in accordance with the terms and conditions
|
||||
** contained in the Technology Preview License Agreement accompanying
|
||||
** this package.
|
||||
**
|
||||
** GNU Lesser General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||
** General Public License version 2.1 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.LGPL included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU Lesser General Public License version 2.1 requirements
|
||||
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||
**
|
||||
** In addition, as a special exception, Nokia gives you certain additional
|
||||
** rights. These rights are described in the Nokia Qt LGPL Exception
|
||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||
**
|
||||
** If you have questions regarding the use of this file, please contact
|
||||
** Nokia at qt-info@nokia.com.
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include <QDebug>
|
||||
#include <QFile>
|
||||
#include <QtGui/QIcon>
|
||||
|
||||
#include "dsvideodevicecontrol.h"
|
||||
#include "dscamerasession.h"
|
||||
|
||||
#include <tchar.h>
|
||||
#include <dshow.h>
|
||||
#include <objbase.h>
|
||||
#include <initguid.h>
|
||||
#include <Ocidl.h>
|
||||
#include <string.h>
|
||||
|
||||
extern const CLSID CLSID_VideoInputDeviceCategory;
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
DSVideoDeviceControl::DSVideoDeviceControl(QObject *parent)
|
||||
: QVideoDeviceControl(parent)
|
||||
{
|
||||
m_session = qobject_cast<DSCameraSession*>(parent);
|
||||
|
||||
devices.clear();
|
||||
descriptions.clear();
|
||||
|
||||
CoInitialize(NULL);
|
||||
ICreateDevEnum* pDevEnum = NULL;
|
||||
IEnumMoniker* pEnum = NULL;
|
||||
// Create the System device enumerator
|
||||
HRESULT hr = CoCreateInstance(CLSID_SystemDeviceEnum, NULL,
|
||||
CLSCTX_INPROC_SERVER, IID_ICreateDevEnum,
|
||||
reinterpret_cast<void**>(&pDevEnum));
|
||||
if(SUCCEEDED(hr)) {
|
||||
// Create the enumerator for the video capture category
|
||||
hr = pDevEnum->CreateClassEnumerator(
|
||||
CLSID_VideoInputDeviceCategory, &pEnum, 0);
|
||||
if (S_OK == hr) {
|
||||
pEnum->Reset();
|
||||
// go through and find all video capture devices
|
||||
IMoniker* pMoniker = NULL;
|
||||
while(pEnum->Next(1, &pMoniker, NULL) == S_OK) {
|
||||
IPropertyBag *pPropBag;
|
||||
hr = pMoniker->BindToStorage(0, 0, IID_IPropertyBag,
|
||||
(void**)(&pPropBag));
|
||||
if(FAILED(hr)) {
|
||||
pMoniker->Release();
|
||||
continue; // skip this one
|
||||
}
|
||||
// Find the description
|
||||
WCHAR str[120];
|
||||
VARIANT varName;
|
||||
varName.vt = VT_BSTR;
|
||||
hr = pPropBag->Read(L"FriendlyName", &varName, 0);
|
||||
if(SUCCEEDED(hr)) {
|
||||
wcsncpy(str, varName.bstrVal, sizeof(str)/sizeof(str[0]));
|
||||
QString temp(QString::fromUtf16((unsigned short*)str));
|
||||
devices.append(QString("ds:%1").arg(temp).toLocal8Bit().constData());
|
||||
hr = pPropBag->Read(L"Description", &varName, 0);
|
||||
wcsncpy(str, varName.bstrVal, sizeof(str)/sizeof(str[0]));
|
||||
QString temp2(QString::fromUtf16((unsigned short*)str));
|
||||
descriptions.append(temp2.toLocal8Bit().constData());
|
||||
}
|
||||
pPropBag->Release();
|
||||
pMoniker->Release();
|
||||
}
|
||||
pEnum->Release();
|
||||
}
|
||||
pDevEnum->Release();
|
||||
}
|
||||
CoUninitialize();
|
||||
|
||||
selected = 0;
|
||||
}
|
||||
|
||||
int DSVideoDeviceControl::deviceCount() const
|
||||
{
|
||||
return devices.count();
|
||||
}
|
||||
|
||||
QString DSVideoDeviceControl::deviceName(int index) const
|
||||
{
|
||||
if(index >= 0 && index <= devices.count())
|
||||
return devices.at(index);
|
||||
|
||||
return QString();
|
||||
}
|
||||
|
||||
QString DSVideoDeviceControl::deviceDescription(int index) const
|
||||
{
|
||||
if(index >= 0 && index <= descriptions.count())
|
||||
return descriptions.at(index);
|
||||
|
||||
return QString();
|
||||
}
|
||||
|
||||
QIcon DSVideoDeviceControl::deviceIcon(int index) const
|
||||
{
|
||||
Q_UNUSED(index)
|
||||
|
||||
return QIcon();
|
||||
}
|
||||
|
||||
int DSVideoDeviceControl::defaultDevice() const
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int DSVideoDeviceControl::selectedDevice() const
|
||||
{
|
||||
return selected;
|
||||
}
|
||||
|
||||
void DSVideoDeviceControl::setSelectedDevice(int index)
|
||||
{
|
||||
if(index >= 0 && index <= devices.count()) {
|
||||
if (m_session) {
|
||||
QString device = devices.at(index);
|
||||
if (device.startsWith("ds:"))
|
||||
device.remove(0,3);
|
||||
m_session->setDevice(device);
|
||||
}
|
||||
selected = index;
|
||||
}
|
||||
}
|
||||
|
||||
QT_END_NAMESPACE
|
||||
83
src/plugins/directshow/camera/dsvideodevicecontrol.h
Normal file
83
src/plugins/directshow/camera/dsvideodevicecontrol.h
Normal file
@@ -0,0 +1,83 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
|
||||
** All rights reserved.
|
||||
** Contact: Nokia Corporation (qt-info@nokia.com)
|
||||
**
|
||||
** This file is part of the Qt Mobility Components.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** No Commercial Usage
|
||||
** This file contains pre-release code and may not be distributed.
|
||||
** You may use this file in accordance with the terms and conditions
|
||||
** contained in the Technology Preview License Agreement accompanying
|
||||
** this package.
|
||||
**
|
||||
** GNU Lesser General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||
** General Public License version 2.1 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.LGPL included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU Lesser General Public License version 2.1 requirements
|
||||
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||
**
|
||||
** In addition, as a special exception, Nokia gives you certain additional
|
||||
** rights. These rights are described in the Nokia Qt LGPL Exception
|
||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||
**
|
||||
** If you have questions regarding the use of this file, please contact
|
||||
** Nokia at qt-info@nokia.com.
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef DSVIDEODEVICECONTROL_H
|
||||
#define DSVIDEODEVICECONTROL_H
|
||||
|
||||
#include <qvideodevicecontrol.h>
|
||||
|
||||
QT_BEGIN_HEADER
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
class DSCameraSession;
|
||||
|
||||
//QTM_USE_NAMESPACE
|
||||
|
||||
class DSVideoDeviceControl : public QVideoDeviceControl
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
DSVideoDeviceControl(QObject *parent = 0);
|
||||
|
||||
int deviceCount() const;
|
||||
QString deviceName(int index) const;
|
||||
QString deviceDescription(int index) const;
|
||||
QIcon deviceIcon(int index) const;
|
||||
int defaultDevice() const;
|
||||
int selectedDevice() const;
|
||||
|
||||
public Q_SLOTS:
|
||||
void setSelectedDevice(int index);
|
||||
|
||||
private:
|
||||
DSCameraSession* m_session;
|
||||
|
||||
QList<QString> devices;
|
||||
QList<QString> descriptions;
|
||||
|
||||
int selected;
|
||||
};
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
||||
QT_END_HEADER
|
||||
|
||||
#endif
|
||||
72
src/plugins/directshow/camera/dsvideorenderer.cpp
Normal file
72
src/plugins/directshow/camera/dsvideorenderer.cpp
Normal file
@@ -0,0 +1,72 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
|
||||
** All rights reserved.
|
||||
** Contact: Nokia Corporation (qt-info@nokia.com)
|
||||
**
|
||||
** This file is part of the Qt Mobility Components.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** No Commercial Usage
|
||||
** This file contains pre-release code and may not be distributed.
|
||||
** You may use this file in accordance with the terms and conditions
|
||||
** contained in the Technology Preview License Agreement accompanying
|
||||
** this package.
|
||||
**
|
||||
** GNU Lesser General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||
** General Public License version 2.1 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.LGPL included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU Lesser General Public License version 2.1 requirements
|
||||
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||
**
|
||||
** In addition, as a special exception, Nokia gives you certain additional
|
||||
** rights. These rights are described in the Nokia Qt LGPL Exception
|
||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||
**
|
||||
** If you have questions regarding the use of this file, please contact
|
||||
** Nokia at qt-info@nokia.com.
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include <QtCore/qdebug.h>
|
||||
|
||||
#include "dsvideorenderer.h"
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
DSVideoRendererControl::DSVideoRendererControl(DSCameraSession* session, QObject *parent)
|
||||
:QVideoRendererControl(parent),
|
||||
m_surface(0),
|
||||
m_session(session)
|
||||
{
|
||||
}
|
||||
|
||||
DSVideoRendererControl::~DSVideoRendererControl()
|
||||
{
|
||||
}
|
||||
|
||||
QAbstractVideoSurface* DSVideoRendererControl::surface() const
|
||||
{
|
||||
return m_surface;
|
||||
}
|
||||
|
||||
void DSVideoRendererControl::setSurface(QAbstractVideoSurface *surface)
|
||||
{
|
||||
m_surface = surface;
|
||||
if(m_session)
|
||||
m_session->setSurface(m_surface);
|
||||
}
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
||||
77
src/plugins/directshow/camera/dsvideorenderer.h
Normal file
77
src/plugins/directshow/camera/dsvideorenderer.h
Normal file
@@ -0,0 +1,77 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
|
||||
** All rights reserved.
|
||||
** Contact: Nokia Corporation (qt-info@nokia.com)
|
||||
**
|
||||
** This file is part of the Qt Mobility Components.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** No Commercial Usage
|
||||
** This file contains pre-release code and may not be distributed.
|
||||
** You may use this file in accordance with the terms and conditions
|
||||
** contained in the Technology Preview License Agreement accompanying
|
||||
** this package.
|
||||
**
|
||||
** GNU Lesser General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||
** General Public License version 2.1 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.LGPL included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU Lesser General Public License version 2.1 requirements
|
||||
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||
**
|
||||
** In addition, as a special exception, Nokia gives you certain additional
|
||||
** rights. These rights are described in the Nokia Qt LGPL Exception
|
||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||
**
|
||||
** If you have questions regarding the use of this file, please contact
|
||||
** Nokia at qt-info@nokia.com.
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef DSVIDEORENDERER_H
|
||||
#define DSVIDEORENDERER_H
|
||||
|
||||
#include <qvideorenderercontrol.h>
|
||||
#include "dscamerasession.h"
|
||||
|
||||
class CameraFormatConverter;
|
||||
|
||||
QT_BEGIN_HEADER
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
|
||||
class DSVideoRendererControl : public QVideoRendererControl
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
DSVideoRendererControl(DSCameraSession* session, QObject *parent = 0);
|
||||
~DSVideoRendererControl();
|
||||
|
||||
QAbstractVideoSurface *surface() const;
|
||||
void setSurface(QAbstractVideoSurface *surface);
|
||||
|
||||
void setSession(DSCameraSession* session);
|
||||
|
||||
private:
|
||||
QAbstractVideoSurface* m_surface;
|
||||
DSCameraSession* m_session;
|
||||
CameraFormatConverter* converter;
|
||||
};
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
||||
QT_END_HEADER
|
||||
|
||||
#endif // DSVIDEORENDERER_H
|
||||
250
src/plugins/directshow/camera/dsvideowidgetcontrol.cpp
Normal file
250
src/plugins/directshow/camera/dsvideowidgetcontrol.cpp
Normal file
@@ -0,0 +1,250 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
|
||||
** All rights reserved.
|
||||
** Contact: Nokia Corporation (qt-info@nokia.com)
|
||||
**
|
||||
** This file is part of the Qt Mobility Components.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** No Commercial Usage
|
||||
** This file contains pre-release code and may not be distributed.
|
||||
** You may use this file in accordance with the terms and conditions
|
||||
** contained in the Technology Preview License Agreement accompanying
|
||||
** this package.
|
||||
**
|
||||
** GNU Lesser General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||
** General Public License version 2.1 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.LGPL included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU Lesser General Public License version 2.1 requirements
|
||||
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||
**
|
||||
** In addition, as a special exception, Nokia gives you certain additional
|
||||
** rights. These rights are described in the Nokia Qt LGPL Exception
|
||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||
**
|
||||
** If you have questions regarding the use of this file, please contact
|
||||
** Nokia at qt-info@nokia.com.
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include <QtCore/qcoreevent.h>
|
||||
#include <QtCore/qtimer.h>
|
||||
|
||||
#include "DSVideoWidgetControl.h"
|
||||
#include "dscamerasession.h"
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
DSVideoWidgetSurface::DSVideoWidgetSurface(QLabel *pWidget, QObject *parent)
|
||||
{
|
||||
widget = pWidget;
|
||||
myPixmap = 0;
|
||||
}
|
||||
|
||||
QList<QVideoFrame::PixelFormat> DSVideoWidgetSurface::supportedPixelFormats(
|
||||
QAbstractVideoBuffer::HandleType handleType) const
|
||||
{
|
||||
if (handleType == QAbstractVideoBuffer::NoHandle) {
|
||||
return QList<QVideoFrame::PixelFormat>()
|
||||
<< QVideoFrame::Format_RGB32
|
||||
<< QVideoFrame::Format_RGB24;
|
||||
} else {
|
||||
return QList<QVideoFrame::PixelFormat>();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
bool DSVideoWidgetSurface::present(const QVideoFrame &frame)
|
||||
{
|
||||
QVideoFrame myFrame = frame;
|
||||
myFrame.map(QAbstractVideoBuffer::ReadOnly);
|
||||
QImage image(
|
||||
frame.bits(),
|
||||
frame.width(),
|
||||
frame.height(),
|
||||
frame.bytesPerLine(),
|
||||
imageFormat);
|
||||
if (image.isNull())
|
||||
{
|
||||
// Try to adapt
|
||||
QImage image2(
|
||||
frame.bits(),
|
||||
frame.width(),
|
||||
frame.height(),
|
||||
frame.bytesPerLine(),
|
||||
QImage::Format_RGB888);
|
||||
image = image2;
|
||||
}
|
||||
myFrame.unmap();
|
||||
delete myPixmap;
|
||||
myPixmap = new QPixmap(QPixmap::fromImage(image).scaled(widget->size()));
|
||||
widget->setPixmap(*myPixmap);
|
||||
widget->repaint();
|
||||
return true;
|
||||
}
|
||||
|
||||
void DSVideoWidgetSurface::setImageFormat(QImage::Format fmt)
|
||||
{
|
||||
imageFormat = fmt;
|
||||
}
|
||||
|
||||
void DSVideoWidgetSurface::updateVideoRect()
|
||||
{
|
||||
}
|
||||
|
||||
void DSVideoWidgetSurface::paint(QPainter *painter)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
DSVideoWidgetControl::DSVideoWidgetControl(DSCameraSession* session, QObject *parent) :
|
||||
m_session(session), QVideoWidgetControl(parent),
|
||||
m_widget(new QLabel()),
|
||||
m_fullScreen(false)
|
||||
{
|
||||
m_widget->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
|
||||
m_widget->setAlignment(Qt::AlignCenter);
|
||||
m_widget->setAttribute(Qt::WA_NoSystemBackground, true);
|
||||
|
||||
surface = new DSVideoWidgetSurface(m_widget);
|
||||
|
||||
QPalette palette;
|
||||
palette.setColor(QPalette::Background, Qt::black);
|
||||
m_widget->setPalette(palette);
|
||||
m_widget->setAutoFillBackground( true );
|
||||
|
||||
// Request QEvents
|
||||
m_widget->installEventFilter(this);
|
||||
m_windowId = m_widget->effectiveWinId();
|
||||
|
||||
surface->setImageFormat(QImage::Format_RGB888);
|
||||
session->setSurface(surface);
|
||||
}
|
||||
|
||||
DSVideoWidgetControl::~DSVideoWidgetControl()
|
||||
{
|
||||
delete m_widget;
|
||||
}
|
||||
|
||||
bool DSVideoWidgetControl::eventFilter(QObject *object, QEvent *e)
|
||||
{
|
||||
if (object == m_widget) {
|
||||
switch (e->type()) {
|
||||
case QEvent::ParentChange:
|
||||
case QEvent::WinIdChange:
|
||||
case QEvent::Show:
|
||||
m_windowId = m_widget->effectiveWinId();
|
||||
emit widgetUpdated();
|
||||
break;
|
||||
case QEvent::Resize:
|
||||
emit widgetResized(m_widget->size());
|
||||
break;
|
||||
case QEvent::PolishRequest:
|
||||
m_widget->ensurePolished();
|
||||
break;
|
||||
|
||||
default:
|
||||
// Do nothing
|
||||
break;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
QWidget *DSVideoWidgetControl::videoWidget()
|
||||
{
|
||||
return m_widget;
|
||||
}
|
||||
|
||||
Qt::AspectRatioMode DSVideoWidgetControl::aspectRatioMode() const
|
||||
{
|
||||
return m_aspectRatioMode;
|
||||
}
|
||||
|
||||
void DSVideoWidgetControl::setAspectRatioMode(Qt::AspectRatioMode ratio)
|
||||
{
|
||||
if (m_aspectRatioMode==ratio) {
|
||||
return;
|
||||
}
|
||||
m_aspectRatioMode = ratio;
|
||||
|
||||
if (m_aspectRatioMode == Qt::KeepAspectRatio)
|
||||
m_widget->setScaledContents(false);
|
||||
else {
|
||||
m_widget->setScaledContents(true);
|
||||
}
|
||||
}
|
||||
|
||||
bool DSVideoWidgetControl::isFullScreen() const
|
||||
{
|
||||
return m_fullScreen;
|
||||
}
|
||||
|
||||
void DSVideoWidgetControl::setFullScreen(bool fullScreen)
|
||||
{
|
||||
if (m_widget && !fullScreen && m_fullScreen) {
|
||||
m_widget->showNormal();
|
||||
m_fullScreen = false;
|
||||
} else if (m_widget && fullScreen) {
|
||||
m_widget->showFullScreen();
|
||||
m_fullScreen = true;
|
||||
}
|
||||
|
||||
emit fullScreenChanged(fullScreen);
|
||||
}
|
||||
|
||||
int DSVideoWidgetControl::brightness() const
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
void DSVideoWidgetControl::setBrightness(int brightness)
|
||||
{
|
||||
Q_UNUSED(brightness);
|
||||
}
|
||||
|
||||
int DSVideoWidgetControl::contrast() const
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
void DSVideoWidgetControl::setContrast(int contrast)
|
||||
{
|
||||
Q_UNUSED(contrast);
|
||||
}
|
||||
|
||||
int DSVideoWidgetControl::hue() const
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
void DSVideoWidgetControl::setHue(int hue)
|
||||
{
|
||||
Q_UNUSED(hue);
|
||||
}
|
||||
|
||||
int DSVideoWidgetControl::saturation() const
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
void DSVideoWidgetControl::setSaturation(int saturation)
|
||||
{
|
||||
Q_UNUSED(saturation);
|
||||
}
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
||||
// End of file
|
||||
154
src/plugins/directshow/camera/dsvideowidgetcontrol.h
Normal file
154
src/plugins/directshow/camera/dsvideowidgetcontrol.h
Normal file
@@ -0,0 +1,154 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
|
||||
** All rights reserved.
|
||||
** Contact: Nokia Corporation (qt-info@nokia.com)
|
||||
**
|
||||
** This file is part of the Qt Mobility Components.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** No Commercial Usage
|
||||
** This file contains pre-release code and may not be distributed.
|
||||
** You may use this file in accordance with the terms and conditions
|
||||
** contained in the Technology Preview License Agreement accompanying
|
||||
** this package.
|
||||
**
|
||||
** GNU Lesser General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||
** General Public License version 2.1 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.LGPL included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU Lesser General Public License version 2.1 requirements
|
||||
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||
**
|
||||
** In addition, as a special exception, Nokia gives you certain additional
|
||||
** rights. These rights are described in the Nokia Qt LGPL Exception
|
||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||
**
|
||||
** If you have questions regarding the use of this file, please contact
|
||||
** Nokia at qt-info@nokia.com.
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef DSVIDEOWIDGETCONTROL_H
|
||||
#define DSVIDEOWIDGETCONTROL_H
|
||||
|
||||
#include <QtCore/qobject.h>
|
||||
#include <QtGui>
|
||||
#include <QtMultimedia/qvideoframe.h>
|
||||
#include <QtMultimedia/qabstractvideosurface.h>
|
||||
#include <QtMultimedia/qvideosurfaceformat.h>
|
||||
|
||||
#include <qvideowidgetcontrol.h>
|
||||
#include "DsCameraControl.h"
|
||||
|
||||
QT_BEGIN_HEADER
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
class DSVideoWidgetSurface : public QAbstractVideoSurface
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
DSVideoWidgetSurface(QLabel *pWidget, QObject *parent = 0);
|
||||
|
||||
QList<QVideoFrame::PixelFormat> supportedPixelFormats(
|
||||
QAbstractVideoBuffer::HandleType handleType = QAbstractVideoBuffer::NoHandle) const;
|
||||
|
||||
bool present(const QVideoFrame &frame);
|
||||
|
||||
QRect videoRect() const { return targetRect; }
|
||||
void updateVideoRect();
|
||||
|
||||
void paint(QPainter *painter);
|
||||
void setImageFormat(QImage::Format fmt);
|
||||
|
||||
private:
|
||||
QLabel *widget;
|
||||
QImage::Format imageFormat;
|
||||
QRect targetRect;
|
||||
QSize imageSize;
|
||||
QRect sourceRect;
|
||||
QPixmap* myPixmap;
|
||||
};
|
||||
|
||||
class DSVideoWidgetControl : public QVideoWidgetControl
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
DSVideoWidgetSurface* surface;
|
||||
public: // Constructor & Destructor
|
||||
|
||||
DSVideoWidgetControl(DSCameraSession* session, QObject *parent = 0);
|
||||
virtual ~DSVideoWidgetControl();
|
||||
|
||||
public: // QVideoWidgetControl
|
||||
|
||||
QWidget *videoWidget();
|
||||
|
||||
// Aspect Ratio
|
||||
Qt::AspectRatioMode aspectRatioMode() const;
|
||||
void setAspectRatioMode(Qt::AspectRatioMode ratio);
|
||||
|
||||
// Full Screen
|
||||
bool isFullScreen() const;
|
||||
void setFullScreen(bool fullScreen);
|
||||
|
||||
// Brightness
|
||||
int brightness() const;
|
||||
void setBrightness(int brightness);
|
||||
|
||||
// Contrast
|
||||
int contrast() const;
|
||||
void setContrast(int contrast);
|
||||
|
||||
// Hue
|
||||
int hue() const;
|
||||
void setHue(int hue);
|
||||
|
||||
// Saturation
|
||||
int saturation() const;
|
||||
void setSaturation(int saturation);
|
||||
|
||||
public: // Internal
|
||||
|
||||
bool eventFilter(QObject *object, QEvent *event);
|
||||
|
||||
/*
|
||||
Q_SIGNALS: // QVideoWidgetControl
|
||||
|
||||
void fullScreenChanged(bool fullScreen);
|
||||
void brightnessChanged(int brightness);
|
||||
void contrastChanged(int contrast);
|
||||
void hueChanged(int hue);
|
||||
void saturationChanged(int saturation);
|
||||
*/
|
||||
|
||||
Q_SIGNALS: // Internal Signals
|
||||
|
||||
void widgetResized(QSize size);
|
||||
void widgetUpdated();
|
||||
|
||||
private: // Data
|
||||
|
||||
DSCameraSession* m_session;
|
||||
QLabel *m_widget;
|
||||
WId m_windowId;
|
||||
Qt::AspectRatioMode m_aspectRatioMode;
|
||||
bool m_fullScreen;
|
||||
};
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
||||
QT_END_HEADER
|
||||
|
||||
#endif // DSVideoWidgetControl_H
|
||||
Reference in New Issue
Block a user