aboutsummaryrefslogtreecommitdiffstats
path: root/src/modules/dcc/codec.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/modules/dcc/codec.cpp')
-rw-r--r--src/modules/dcc/codec.cpp35
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;
}