diff options
Diffstat (limited to 'src/modules/dcc/codec.cpp')
| -rw-r--r-- | src/modules/dcc/codec.cpp | 35 |
1 files changed, 24 insertions, 11 deletions
diff --git a/src/modules/dcc/codec.cpp b/src/modules/dcc/codec.cpp index 1ea1172c9..e70a532c9 100644 --- a/src/modules/dcc/codec.cpp +++ b/src/modules/dcc/codec.cpp @@ -122,36 +122,49 @@ const char * KviDccVideoCodec::name() return m_szName.ptr(); } -KviDccVideoNullCodec::KviDccVideoNullCodec() +KviDccVideoJpegCodec::KviDccVideoJpegCodec() : KviDccVideoCodec() { - m_szName = "null (no compression)"; + m_szName = "jpeg"; } -KviDccVideoNullCodec::~KviDccVideoNullCodec() +KviDccVideoJpegCodec::~KviDccVideoJpegCodec() { } -void KviDccVideoNullCodec::encode(KviDataBuffer * signal,KviDataBuffer * stream) +void KviDccVideoJpegCodec::encode(KviDataBuffer * signal,KviDataBuffer * stream) { if(signal->size() < 1)return; stream->append(signal->data(),signal->size()); signal->resize(0); } -void KviDccVideoNullCodec::decode(KviDataBuffer * stream,KviDataBuffer * signal) +void KviDccVideoJpegCodec::decode(KviDataBuffer * stream,KviDataBuffer * signal) { + static unsigned const char jpg_magic_init[4] = { 0xFF, 0xD8, 0xFF, 0xE0}; //SOI + APP0 + static unsigned const char jpg_magic_end[2] = { 0xFF, 0xD9}; //EOI + if(stream->size() < 1)return; - signal->append(stream->data(),stream->size()); - stream->resize(0); + + int start = stream->find(jpg_magic_init, 4); + int end = stream->find(jpg_magic_end, 2); + if(start != -1 && end != -1) + { + //remove junk before jpeg start + stream->remove(start); + int len = end - start + 1; + signal->clear(); + signal->append(stream->data(),stream->size()); + stream->remove(len); + } } -int KviDccVideoNullCodec::encodedFrameSize() +int KviDccVideoJpegCodec::encodedFrameSize() { - return 1024; + return 0; } -int KviDccVideoNullCodec::decodedFrameSize() +int KviDccVideoJpegCodec::decodedFrameSize() { - return 1024; + return 0; } |
