Change device to webcam

This commit is contained in:
2025-11-02 16:51:28 -06:00
parent 0bc71ea64a
commit cdd18903a9
7 changed files with 44 additions and 46 deletions

View File

@@ -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<FileStream>("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<FileStream>("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;

View File

@@ -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;

View File

@@ -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<Color>& Data();

View File

@@ -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<HiddenFieldData> 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<Image> ReadFrame();
void ReadFrame(Image* img);
void Close();
~Device();
~Webcam();
static bool IsEnabled();
static std::vector<DeviceInfo> GetDevices();
static void GetDevices(std::vector<DeviceInfo>& devices);
static std::vector<WebcamInfo> GetWebcams();
static void GetWebcams(std::vector<WebcamInfo>& devices);
};

View File

@@ -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;
}

View File

@@ -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;

View File

@@ -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<WebcamDevice>(device, set2);
#endif
}
void Device::Open()
void Webcam::Open()
{
#if defined(TESSESFRAMEWORKGFX_ENABLE_WEBCAM)
auto dev = std::dynamic_pointer_cast<WebcamDevice>(this->field);
@@ -37,22 +37,20 @@ namespace Tesses::Framework::Graphics {
#endif
}
std::shared_ptr<Image> Device::ReadFrame()
void Webcam::ReadFrame(Image* img)
{
#if defined(TESSESFRAMEWORKGFX_ENABLE_WEBCAM)
auto dev = std::dynamic_pointer_cast<WebcamDevice>(this->field);
if(dev != nullptr)
{
std::shared_ptr<Image> image=nullptr;
auto frame = dev->dev.read();
if(frame != nullptr)
{
image = std::make_shared<Image>();
auto strm = std::make_shared<Tesses::Framework::Streams::MemoryStream>(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<Tesses::Framework::Streams::MemoryStream>(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<WebcamDevice>(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<DeviceInfo> Device::GetDevices()
std::vector<WebcamInfo> Webcam::GetWebcams()
{
std::vector<DeviceInfo> info;
GetDevices(info);
std::vector<WebcamInfo> info;
GetWebcams(info);
return info;
}
void Device::GetDevices(std::vector<DeviceInfo>& devices)
void Webcam::GetWebcams(std::vector<WebcamInfo>& 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
}