diff --git a/examples/capture.cpp b/examples/capture.cpp index aab6016..5ec0192 100644 --- a/examples/capture.cpp +++ b/examples/capture.cpp @@ -10,33 +10,32 @@ using namespace Tesses::Framework::Streams; int main(int argc, char** argv) { Tesses::Framework::TF_Init(); - auto devs = Device::GetDevices(); + auto devs = Webcam::GetWebcams(); for(auto dev : devs) { for(auto res : dev.Resolutions) { - Device dev2(dev.Device, res,10); + Webcam dev2(dev.Device, res,10); dev2.Open(); usleep(5000000); - auto frame = dev2.ReadFrame(); - if(frame != nullptr) - { - Image clock; - Image clock2; - auto strm = std::make_shared("capture.png","wb"); - auto date = Tesses::Framework::Date::DateTime::Now(); - auto dateStr = date.ToString("%Y/%m/%d %I:%M %p"); + Image frame; + Image clock; + Image clock2; + dev2.ReadFrame(&frame); + auto strm = std::make_shared("capture.png","wb"); + auto date = Tesses::Framework::Date::DateTime::Now(); + auto dateStr = date.ToString("%Y/%m/%d %I:%M %p"); - clock.SetSize(GetCharWidth(dateStr.size()),CharHeight+2, Color(0,0,0,0)); + clock.SetSize(GetCharWidth(dateStr.size()),CharHeight+2, Color(0,0,0,0)); //frame->FillRectangle(Rectangle(0,0,w,CharHeight+2),Colors::Blue); - clock.DrawString(dateStr,Point(0,1),Colors::Black); - clock.Resize(&clock2,Size(clock.Width()*2,clock.Height()*2)); - frame->DrawImage(&clock2,Point(0,0), ImageCopyEffect::InvertIfNotTransparent); - Formats::Png.Save(strm,frame.get()); + clock.DrawString(dateStr,Point(0,1),Colors::Black); + clock.Resize(&clock2,Size(clock.Width()*2,clock.Height()*2)); + frame.DrawImage(&clock2,Point(0,0), ImageCopyEffect::InvertIfNotTransparent); + Formats::Png.Save(strm,&frame); - } + dev2.Close(); break; diff --git a/examples/getdevices.cpp b/examples/getdevices.cpp index 2d277b9..abfcc97 100644 --- a/examples/getdevices.cpp +++ b/examples/getdevices.cpp @@ -9,7 +9,7 @@ using namespace Tesses::Framework::Streams; int main(int argc, char** argv) { - auto devs = Device::GetDevices(); + auto devs = Webcam::GetWebcams(); for(auto dev : devs) { std::cout << dev.Name << std::endl; diff --git a/include/TessesFrameworkGFX/Image.hpp b/include/TessesFrameworkGFX/Image.hpp index 77e9231..deee349 100644 --- a/include/TessesFrameworkGFX/Image.hpp +++ b/include/TessesFrameworkGFX/Image.hpp @@ -44,8 +44,8 @@ namespace Tesses::Framework::Graphics { uint32_t Width(); uint32_t Height(); void SetSize(uint32_t w, uint32_t h); - void SetSize(uint32_t w, uint32_t h, Color c); - void SetPixel(uint32_t x, uint32_t y, Color c); + void SetSize(uint32_t w, uint32_t h, const Color& c); + void SetPixel(uint32_t x, uint32_t y, const Color& c); Color GetPixel(uint32_t x, uint32_t y); std::vector& Data(); diff --git a/include/TessesFrameworkGFX/Webcam.hpp b/include/TessesFrameworkGFX/Webcam.hpp index 13cfbcb..373ced0 100644 --- a/include/TessesFrameworkGFX/Webcam.hpp +++ b/include/TessesFrameworkGFX/Webcam.hpp @@ -4,7 +4,7 @@ namespace Tesses::Framework::Graphics { - class DeviceInfo { + class WebcamInfo { public: uint8_t Device; std::string Name; @@ -12,22 +12,22 @@ namespace Tesses::Framework::Graphics }; - class Device { + class Webcam { private: std::shared_ptr field; public: - Device(uint8_t device, const Size& sz, uint8_t fps=10); + Webcam(uint8_t device, const Size& sz, uint8_t fps=10); void Open(); - std::shared_ptr ReadFrame(); + void ReadFrame(Image* img); void Close(); - ~Device(); + ~Webcam(); static bool IsEnabled(); - static std::vector GetDevices(); - static void GetDevices(std::vector& devices); + static std::vector GetWebcams(); + static void GetWebcams(std::vector& devices); }; diff --git a/src/Image.cpp b/src/Image.cpp index d730f82..a5ba87b 100644 --- a/src/Image.cpp +++ b/src/Image.cpp @@ -33,14 +33,14 @@ namespace Tesses::Framework::Graphics { this->h = h; this->data.resize(w * h); } - void Image::SetSize(uint32_t w, uint32_t h, Color c) + void Image::SetSize(uint32_t w, uint32_t h, const Color& c) { this->w = w; this->h = h; this->data.resize(w * h); for(size_t i = 0; i < this->data.size(); i++) this->data[i] = c; } - void Image::SetPixel(uint32_t x, uint32_t y, Color c) + void Image::SetPixel(uint32_t x, uint32_t y, const Color& c) { this->data[y*w+x] = c; } diff --git a/src/ImageFormats/Formats.cpp b/src/ImageFormats/Formats.cpp index 05ad05a..2ca4984 100644 --- a/src/ImageFormats/Formats.cpp +++ b/src/ImageFormats/Formats.cpp @@ -6,6 +6,7 @@ namespace Tesses::Framework::Graphics::ImageFormats { JpegFormat Formats::Jpeg; ImageFormat* Formats::FromExtension(std::string ext) { + ext = Http::HttpUtils::ToLower(ext); if(ext == ".jpg" || ext == ".jpeg") return &Jpeg; if(ext==".png") return &Png; if(ext==".bmp") return &Bitmap; diff --git a/src/Webcam.cpp b/src/Webcam.cpp index 1313fb0..aa7fab9 100644 --- a/src/Webcam.cpp +++ b/src/Webcam.cpp @@ -16,7 +16,7 @@ namespace Tesses::Framework::Graphics { - Device::Device(uint8_t device, const Size& sz, uint8_t fps) + Webcam::Webcam(uint8_t device, const Size& sz, uint8_t fps) { #if defined(TESSESFRAMEWORKGFX_ENABLE_WEBCAM) webcam::video_settings set2; @@ -29,7 +29,7 @@ namespace Tesses::Framework::Graphics { this->field = std::make_shared(device, set2); #endif } - void Device::Open() + void Webcam::Open() { #if defined(TESSESFRAMEWORKGFX_ENABLE_WEBCAM) auto dev = std::dynamic_pointer_cast(this->field); @@ -37,22 +37,20 @@ namespace Tesses::Framework::Graphics { #endif } - std::shared_ptr Device::ReadFrame() + void Webcam::ReadFrame(Image* img) { #if defined(TESSESFRAMEWORKGFX_ENABLE_WEBCAM) auto dev = std::dynamic_pointer_cast(this->field); if(dev != nullptr) { - std::shared_ptr image=nullptr; auto frame = dev->dev.read(); if(frame != nullptr) { - image = std::make_shared(); - auto strm = std::make_shared(true); - strm->WriteBlock((const uint8_t*)frame->get_data(),(size_t)frame->get_data_lenght()); - strm->Seek(0,Tesses::Framework::Streams::SeekOrigin::Begin); - ImageFormats::Formats::Jpeg.Load(strm,image.get()); + auto strm = std::make_shared(true); + strm->WriteBlock((const uint8_t*)frame->get_data(),(size_t)frame->get_data_lenght()); + strm->Seek(0,Tesses::Framework::Streams::SeekOrigin::Begin); + ImageFormats::Formats::Jpeg.Load(strm,image); } delete frame; @@ -64,19 +62,19 @@ namespace Tesses::Framework::Graphics { return nullptr; } - void Device::Close() + void Webcam::Close() { #if defined(TESSESFRAMEWORKGFX_ENABLE_WEBCAM) auto dev = std::dynamic_pointer_cast(this->field); if(dev != nullptr) dev->dev.close(); #endif } - Device::~Device() + Webcam::~Webcam() { } - bool Device::IsEnabled() + bool Webcam::IsEnabled() { #if defined(TESSESFRAMEWORKGFX_ENABLE_WEBCAM) return true; @@ -84,13 +82,13 @@ namespace Tesses::Framework::Graphics { return false; } - std::vector Device::GetDevices() + std::vector Webcam::GetWebcams() { - std::vector info; - GetDevices(info); + std::vector info; + GetWebcams(info); return info; } - void Device::GetDevices(std::vector& devices) + void Webcam::GetWebcams(std::vector& webcams) { #if defined(TESSESFRAMEWORKGFX_ENABLE_WEBCAM) const webcam::device_info_enumeration & enumeration = webcam::enumerator::enumerate(); @@ -101,7 +99,7 @@ namespace Tesses::Framework::Graphics { const webcam::device_info & device_info = enumeration.get(device_index); const webcam::model_info & model_info = device_info.get_model_info(); - DeviceInfo info; + WebcamInfo info; info.Device = (uint8_t)(device_index+1); info.Name = model_info.get_name(); @@ -118,7 +116,7 @@ namespace Tesses::Framework::Graphics { info.Resolutions.push_back(Size(sz.get_width(),sz.get_height())); } } - devices.push_back(info); + webcams.push_back(info); } #endif }