summaryrefslogtreecommitdiff
path: root/src/plugins/wmf/mfstream.h
diff options
context:
space:
mode:
authorLing Hu <ling.hu@nokia.com>2012-06-28 15:27:13 +1000
committerQt by Nokia <qt-info@nokia.com>2012-06-29 05:59:46 +0200
commiteb5b216ac42da2dfb2479ad0f1b140665e3268a3 (patch)
treebe625dc159dd5653ad095103ad22c37d2ecacdf1 /src/plugins/wmf/mfstream.h
parent340f18d4b5b43408c501772b581088b4aba387e9 (diff)
downloadqtmultimedia-eb5b216ac42da2dfb2479ad0f1b140665e3268a3.tar.gz
Refactoring wmf plugin
make mf startup/shutdwon inside plugin instead of player component make sourceresolver a common component for a wmf related tasks. Change-Id: I49cdc4fa512a62398a68cd2be2f522f567d11c7c Reviewed-by: Michael Goddard <michael.goddard@nokia.com>
Diffstat (limited to 'src/plugins/wmf/mfstream.h')
-rw-r--r--src/plugins/wmf/mfstream.h150
1 files changed, 150 insertions, 0 deletions
diff --git a/src/plugins/wmf/mfstream.h b/src/plugins/wmf/mfstream.h
new file mode 100644
index 000000000..ef854b56f
--- /dev/null
+++ b/src/plugins/wmf/mfstream.h
@@ -0,0 +1,150 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** 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.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef MFSTREAM_H
+#define MFSTREAM_H
+
+#include <mfapi.h>
+#include <mfidl.h>
+#include <QtCore/qmutex.h>
+#include <QtCore/qiodevice.h>
+#include <QtCore/qcoreevent.h>
+
+QT_USE_NAMESPACE
+
+class MFStream : public QObject, public IMFByteStream
+{
+ Q_OBJECT
+public:
+ MFStream(QIODevice *stream, bool ownStream);
+
+ ~MFStream();
+
+ //from IUnknown
+ STDMETHODIMP QueryInterface(REFIID riid, LPVOID *ppvObject);
+
+ STDMETHODIMP_(ULONG) AddRef(void);
+
+ STDMETHODIMP_(ULONG) Release(void);
+
+
+ //from IMFByteStream
+ STDMETHODIMP GetCapabilities(DWORD *pdwCapabilities);
+
+ STDMETHODIMP GetLength(QWORD *pqwLength);
+
+ STDMETHODIMP SetLength(QWORD);
+
+ STDMETHODIMP GetCurrentPosition(QWORD *pqwPosition);
+
+ STDMETHODIMP SetCurrentPosition(QWORD qwPosition);
+
+ STDMETHODIMP IsEndOfStream(BOOL *pfEndOfStream);
+
+ STDMETHODIMP Read(BYTE *pb, ULONG cb, ULONG *pcbRead);
+
+ STDMETHODIMP BeginRead(BYTE *pb, ULONG cb, IMFAsyncCallback *pCallback,
+ IUnknown *punkState);
+
+ STDMETHODIMP EndRead(IMFAsyncResult* pResult, ULONG *pcbRead);
+
+ STDMETHODIMP Write(const BYTE *, ULONG, ULONG *);
+
+ STDMETHODIMP BeginWrite(const BYTE *, ULONG ,
+ IMFAsyncCallback *,
+ IUnknown *);
+
+ STDMETHODIMP EndWrite(IMFAsyncResult *,
+ ULONG *);
+
+ STDMETHODIMP Seek(
+ MFBYTESTREAM_SEEK_ORIGIN SeekOrigin,
+ LONGLONG llSeekOffset,
+ DWORD,
+ QWORD *pqwCurrentPosition);
+
+ STDMETHODIMP Flush();
+
+ STDMETHODIMP Close();
+
+private:
+ class AsyncReadState : public IUnknown
+ {
+ public:
+ AsyncReadState(BYTE *pb, ULONG cb);
+
+ //from IUnknown
+ STDMETHODIMP QueryInterface(REFIID riid, LPVOID *ppvObject);
+
+ STDMETHODIMP_(ULONG) AddRef(void);
+
+ STDMETHODIMP_(ULONG) Release(void);
+
+ BYTE* pb() const;
+ ULONG cb() const;
+ ULONG bytesRead() const;
+
+ void setBytesRead(ULONG cbRead);
+
+ private:
+ long m_cRef;
+ BYTE *m_pb;
+ ULONG m_cb;
+ ULONG m_cbRead;
+ };
+
+ long m_cRef;
+ QIODevice *m_stream;
+ bool m_ownStream;
+ DWORD m_workQueueId;
+ QMutex m_mutex;
+
+ void doRead();
+
+private Q_SLOTS:
+ void handleReadyRead();
+
+protected:
+ void customEvent(QEvent *event);
+ IMFAsyncResult *m_currentReadResult;
+};
+
+#endif