added start function to wireChunk

This commit is contained in:
badaix 2015-08-12 22:04:33 +02:00
parent d51cb125fc
commit 063ed462f9
3 changed files with 24 additions and 19 deletions

View file

@ -27,17 +27,17 @@ using namespace std;
namespace msg namespace msg
{ {
PcmChunk::PcmChunk(const SampleFormat& sampleFormat, size_t ms) : WireChunk(sampleFormat.rate*sampleFormat.frameSize*ms / 1000), format(sampleFormat), idx(0) PcmChunk::PcmChunk(const SampleFormat& sampleFormat, size_t ms) : WireChunk(sampleFormat.rate*sampleFormat.frameSize*ms / 1000), format(sampleFormat), idx_(0)
{ {
} }
PcmChunk::PcmChunk(const PcmChunk& pcmChunk) : WireChunk(pcmChunk), format(pcmChunk.format), idx(0) PcmChunk::PcmChunk(const PcmChunk& pcmChunk) : WireChunk(pcmChunk), format(pcmChunk.format), idx_(0)
{ {
} }
PcmChunk::PcmChunk() : WireChunk(), idx(0) PcmChunk::PcmChunk() : WireChunk(), idx_(0)
{ {
} }
@ -50,12 +50,12 @@ PcmChunk::~PcmChunk()
int PcmChunk::seek(int frames) int PcmChunk::seek(int frames)
{ {
idx += frames; idx_ += frames;
if (idx > getFrameCount()) if (idx_ > getFrameCount())
idx = getFrameCount(); idx_ = getFrameCount();
if (idx < 0) if (idx_ < 0)
idx = 0; idx_ = 0;
return idx; return idx_;
} }
@ -63,14 +63,14 @@ int PcmChunk::readFrames(void* outputBuffer, size_t frameCount)
{ {
//logd << "read: " << frameCount << ", total: " << (wireChunk->length / format.frameSize) << ", idx: " << idx;// << std::endl; //logd << "read: " << frameCount << ", total: " << (wireChunk->length / format.frameSize) << ", idx: " << idx;// << std::endl;
int result = frameCount; int result = frameCount;
if (idx + frameCount > (payloadSize / format.frameSize)) if (idx_ + frameCount > (payloadSize / format.frameSize))
result = (payloadSize / format.frameSize) - idx; result = (payloadSize / format.frameSize) - idx_;
//logd << ", from: " << format.frameSize*idx << ", to: " << format.frameSize*idx + format.frameSize*result; //logd << ", from: " << format.frameSize*idx << ", to: " << format.frameSize*idx + format.frameSize*result;
if (outputBuffer != NULL) if (outputBuffer != NULL)
memcpy((char*)outputBuffer, (char*)(payload) + format.frameSize*idx, format.frameSize*result); memcpy((char*)outputBuffer, (char*)(payload) + format.frameSize*idx_, format.frameSize*result);
idx += result; idx_ += result;
//logd << ", new idx: " << idx << ", result: " << result << ", wireChunk->length: " << wireChunk->length << ", format.frameSize: " << format.frameSize << "\n";//std::endl; //logd << ", new idx: " << idx << ", result: " << result << ", wireChunk->length: " << wireChunk->length << ", format.frameSize: " << format.frameSize << "\n";//std::endl;
return result; return result;
} }

View file

@ -23,7 +23,6 @@
#include "message.h" #include "message.h"
#include "wireChunk.h" #include "wireChunk.h"
#include "sampleFormat.h" #include "sampleFormat.h"
#include "common/timeDefs.h"
namespace msg namespace msg
@ -45,12 +44,12 @@ public:
int readFrames(void* outputBuffer, size_t frameCount); int readFrames(void* outputBuffer, size_t frameCount);
int seek(int frames); int seek(int frames);
inline chronos::time_point_hrc start() const virtual chronos::time_point_hrc start() const
{ {
return chronos::time_point_hrc( return chronos::time_point_hrc(
chronos::sec(timestamp.sec) + chronos::sec(timestamp.sec) +
chronos::usec(timestamp.usec) + chronos::usec(timestamp.usec) +
chronos::usec((chronos::usec::rep)(1000000. * ((double)idx / (double)format.rate))) chronos::usec((chronos::usec::rep)(1000000. * ((double)idx_ / (double)format.rate)))
); );
} }
@ -68,12 +67,12 @@ public:
template<typename T> template<typename T>
inline T durationLeft() const inline T durationLeft() const
{ {
return std::chrono::duration_cast<T>(chronos::nsec((chronos::nsec::rep)(1000000 * (getFrameCount() - idx) / format.msRate()))); return std::chrono::duration_cast<T>(chronos::nsec((chronos::nsec::rep)(1000000 * (getFrameCount() - idx_) / format.msRate())));
} }
inline bool isEndOfChunk() const inline bool isEndOfChunk() const
{ {
return idx >= getFrameCount(); return idx_ >= getFrameCount();
} }
inline size_t getFrameCount() const inline size_t getFrameCount() const
@ -89,7 +88,7 @@ public:
SampleFormat format; SampleFormat format;
private: private:
uint32_t idx; uint32_t idx_;
}; };
} }

View file

@ -26,6 +26,7 @@
#include <streambuf> #include <streambuf>
#include <vector> #include <vector>
#include "message.h" #include "message.h"
#include "common/timeDefs.h"
namespace msg namespace msg
@ -68,6 +69,11 @@ public:
return sizeof(int32_t) + sizeof(int32_t) + sizeof(uint32_t) + payloadSize; return sizeof(int32_t) + sizeof(int32_t) + sizeof(uint32_t) + payloadSize;
} }
virtual chronos::time_point_hrc start() const
{
return chronos::time_point_hrc(chronos::sec(timestamp.sec) + chronos::usec(timestamp.usec));
}
tv timestamp; tv timestamp;
uint32_t payloadSize; uint32_t payloadSize;
char* payload; char* payload;