/* This file is part of the KDE project.+ −
+ −
Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).+ −
+ −
This library is free software: you can redistribute it and/or modify+ −
it under the terms of the GNU Lesser General Public License as published by+ −
the Free Software Foundation, either version 2.1 or 3 of the License.+ −
+ −
This library is distributed in the hope that it will be useful,+ −
but WITHOUT ANY WARRANTY; without even the implied warranty of+ −
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the+ −
GNU Lesser General Public License for more details.+ −
+ −
You should have received a copy of the GNU Lesser General Public License+ −
along with this library. If not, see <http://www.gnu.org/licenses/>.+ −
*/+ −
+ −
#ifndef PHONON_QASYNCREADER_H+ −
#define PHONON_QASYNCREADER_H+ −
+ −
#include <QtCore/QWaitCondition>+ −
#include <QtCore/QQueue>+ −
#include <QtCore/QMutex>+ −
+ −
#include "qpin.h"+ −
+ −
QT_BEGIN_NAMESPACE+ −
+ −
namespace Phonon+ −
{+ −
namespace DS9+ −
{+ −
//his class reads asynchronously from a QIODevice+ −
class QAsyncReader : public QPin, public IAsyncReader+ −
{+ −
public:+ −
QAsyncReader(QBaseFilter *, const QVector<AM_MEDIA_TYPE> &mediaTypes);+ −
~QAsyncReader();+ −
+ −
//reimplementation from IUnknown+ −
STDMETHODIMP QueryInterface(REFIID iid, void** out);+ −
STDMETHODIMP_(ULONG) AddRef();+ −
STDMETHODIMP_(ULONG) Release();+ −
+ −
//reimplementation from IAsyncReader+ −
STDMETHODIMP RequestAllocator(IMemAllocator *,ALLOCATOR_PROPERTIES *,IMemAllocator **);+ −
STDMETHODIMP Request(IMediaSample *,DWORD_PTR);+ −
STDMETHODIMP WaitForNext(DWORD,IMediaSample **,DWORD_PTR *);+ −
STDMETHODIMP SyncReadAligned(IMediaSample *);+ −
STDMETHODIMP SyncRead(LONGLONG,LONG,BYTE *);+ −
STDMETHODIMP Length(LONGLONG *,LONGLONG *) = 0;+ −
STDMETHODIMP BeginFlush();+ −
STDMETHODIMP EndFlush();+ −
+ −
protected:+ −
STDMETHODIMP syncReadAlignedUnlocked(IMediaSample *);+ −
virtual HRESULT read(LONGLONG pos, LONG length, BYTE *buffer, LONG *actual) = 0;+ −
+ −
private:+ −
struct AsyncRequest+ −
{+ −
AsyncRequest(IMediaSample *s = 0, DWORD_PTR u = 0) : sample(s), user(u) {}+ −
IMediaSample *sample;+ −
DWORD_PTR user;+ −
};+ −
+ −
QQueue<AsyncRequest> m_requestQueue;+ −
QWaitCondition m_requestWait;+ −
};+ −
}+ −
}+ −
+ −
QT_END_NAMESPACE+ −
+ −
#endif+ −