From 631fffee8a28b1bec5ed1f1d26a20e0135967f99 Mon Sep 17 00:00:00 2001 From: Mamadou DIOP Date: Mon, 17 Aug 2015 01:56:35 +0200 Subject: - --- plugins/pluginWinMF/internals/mf_sample_queue.h | 81 +++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 plugins/pluginWinMF/internals/mf_sample_queue.h (limited to 'plugins/pluginWinMF/internals/mf_sample_queue.h') diff --git a/plugins/pluginWinMF/internals/mf_sample_queue.h b/plugins/pluginWinMF/internals/mf_sample_queue.h new file mode 100644 index 0000000..b42ecde --- /dev/null +++ b/plugins/pluginWinMF/internals/mf_sample_queue.h @@ -0,0 +1,81 @@ +/* Copyright (C) 2013 Mamadou DIOP +* Copyright (C) 2013 Doubango Telecom +* +* This file is part of Open Source Doubango Framework. +* +* DOUBANGO is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* DOUBANGO 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 General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with DOUBANGO. +*/ +#ifndef PLUGIN_WIN_MF_SAMPLE_QUEUE_H +#define PLUGIN_WIN_MF_SAMPLE_QUEUE_H + +#include "../plugin_win_mf_config.h" + +#include +#include +#include +#include +#include + +class MFSampleQueue : public IUnknown +{ +protected: + + // Nodes in the linked list + struct Node + { + Node *prev; + Node *next; + IMFSample* item; + + Node() : prev(NULL), next(NULL) + { + } + + Node(IMFSample* item) : prev(NULL), next(NULL) + { + this->item = item; + } + + IMFSample* Item() const { return item; } + }; + + +protected: + Node m_anchor; + long m_nCount; + CRITICAL_SECTION m_critSec; + +private: + long m_nRefCount; + +public: + + MFSampleQueue(); + virtual ~MFSampleQueue(); + + // IUnknown + STDMETHODIMP QueryInterface(REFIID iid, void** ppv); + STDMETHODIMP_(ULONG) AddRef(); + STDMETHODIMP_(ULONG) Release(); + + HRESULT Queue(IMFSample* item); + HRESULT Dequeue(IMFSample* *ppItem); + HRESULT Clear(); + + inline BOOL IsEmpty() const { return m_anchor.next == &m_anchor; } + inline long Count() { return m_nCount; } +}; + + +#endif /* PLUGIN_WIN_MF_SAMPLE_QUEUE_H */ \ No newline at end of file -- cgit v1.1