summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Reufer <thomas@reufer.ch>2014-03-27 07:34:59 +0100
committerThomas Reufer <thomas@reufer.ch>2014-03-27 07:34:59 +0100
commit687c7cc3d216cf85e6bd28e80b17a33bfcae4662 (patch)
tree99ac3d73c7ad4e24bae712128c94f86cef61c7c7
parentb55b41753187a665740b216e39fd2bdf3ef21b95 (diff)
downloadvdr-plugin-rpihddevice-687c7cc3d216cf85e6bd28e80b17a33bfcae4662.tar.gz
vdr-plugin-rpihddevice-687c7cc3d216cf85e6bd28e80b17a33bfcae4662.tar.bz2
fixed audio pts queue
-rw-r--r--audio.c21
1 files changed, 14 insertions, 7 deletions
diff --git a/audio.c b/audio.c
index 52ab22e..83585ed 100644
--- a/audio.c
+++ b/audio.c
@@ -59,7 +59,7 @@ public:
uint64_t GetPts(void)
{
- return m_ptsQueue.empty() ? 0 : m_ptsQueue.front().pts;
+ return m_ptsQueue.empty() ? 0 : m_ptsQueue.front()->pts;
}
unsigned int GetFreeSpace(void)
@@ -101,7 +101,10 @@ public:
memset(m_packet.data, 0, FF_INPUT_BUFFER_PADDING_SIZE);
while (!m_ptsQueue.empty())
+ {
+ delete m_ptsQueue.front();
m_ptsQueue.pop();
+ }
}
bool Append(const unsigned char *data, uint64_t pts, unsigned int length)
@@ -117,7 +120,7 @@ public:
m_size += length;
memset(m_packet.data + m_size, 0, FF_INPUT_BUFFER_PADDING_SIZE);
- Pts entry = {pts, length};
+ Pts* entry = new Pts(pts, length);
m_ptsQueue.push(entry);
m_parsed = false;
@@ -139,18 +142,19 @@ public:
// clear current PTS since it's not valid anymore after
// shrinking the packet
if (!m_ptsQueue.empty())
- m_ptsQueue.front().pts = 0;
+ m_ptsQueue.front()->pts = 0;
while (!m_ptsQueue.empty() && length)
{
- if (m_ptsQueue.front().length <= length)
+ if (m_ptsQueue.front()->length <= length)
{
- length -= m_ptsQueue.front().length;
+ length -= m_ptsQueue.front()->length;
+ delete m_ptsQueue.front();
m_ptsQueue.pop();
}
else
{
- length -= m_ptsQueue.front().length -= length;
+ length -= m_ptsQueue.front()->length -= length;
length = 0;
}
}
@@ -257,6 +261,9 @@ private:
struct Pts
{
+ Pts(uint64_t _pts, unsigned int _length)
+ : pts(_pts), length(_length) { };
+
uint64_t pts;
unsigned int length;
};
@@ -267,7 +274,7 @@ private:
unsigned int m_channels;
unsigned int m_samplingRate;
unsigned int m_size;
- std::queue<Pts> m_ptsQueue;
+ std::queue<Pts*> m_ptsQueue;
bool m_parsed;
/* ------------------------------------------------------------------------- */