RtpDataQueue.h

Go to the documentation of this file.
00001 
00034 #pragma once
00035 
00036 // STL
00037 #include <queue>
00038 
00039 // RTVC
00040 #include <Shared/MediaSample.h>
00041 
00043 class RtpDataQueue
00044 {
00045 public:
00046 
00047         RtpDataQueue()
00048                 :m_bHasBeenSyncedUsingRtcp(false)
00049         {;}
00050 
00051         ~RtpDataQueue()
00052         {
00053                 CAutoLock lock(&m_lock); 
00054                 while ( !m_qSamples.empty() )
00055                 {
00056                         MediaSample* pSample = m_qSamples.front();
00057                         m_qSamples.pop();
00058                         delete pSample;
00059                 }
00060         }
00061 
00062         void addMediaSample(unsigned char* data, unsigned dataSize, double dStartTime, bool bHasBeenRtcpSynchronised)
00063         {
00064                 CAutoLock lock(&m_lock); 
00065                 if (!m_bHasBeenSyncedUsingRtcp)
00066                 {
00067                         if (bHasBeenRtcpSynchronised)
00068                         {
00069                                 m_bHasBeenSyncedUsingRtcp = true;
00070                                 // Create a marked sample
00071                                 MediaSample* pMediaSample = MediaSample::createMediaSample(data, dataSize, dStartTime, true);
00072                                 m_qSamples.push(pMediaSample);
00073                         }
00074                 }
00075                 // Else add a normal sample to the queue
00076                 MediaSample* pMediaSample = MediaSample::createMediaSample(data, dataSize, dStartTime /*, false*/);
00077                 m_qSamples.push(pMediaSample);
00078         }
00079 
00080         MediaSample* getNextSample()
00081         {
00082                 CAutoLock lock(&m_lock); 
00083                 if (!m_qSamples.empty())
00084                 {
00085                         MediaSample* pSample = m_qSamples.front();
00086                         m_qSamples.pop();
00087                         return pSample;
00088                 }
00089                 return NULL;
00090         }
00091 
00092         bool hasSamples()
00093         {
00094                 CAutoLock lock(&m_lock); 
00095                 return !m_qSamples.empty();
00096         }
00097 
00098 private:
00099         bool m_bHasBeenSyncedUsingRtcp;
00100 
00101         CCritSec m_lock;
00102         std::queue<MediaSample*> m_qSamples;
00103 };

Generated on Fri Mar 13 14:12:38 2009 for RTVC by  doxygen 1.5.3