diff --git a/.gitignore b/.gitignore
index 2d0f019..136e0eb 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,6 +6,7 @@ config.h
*.oo
simpleskycam
*~
+*.bkp
U2SM200C-AST_Cfg_A.bin
U2SM200C-AST_Cfg_SAVE.bin
gmon.out
diff --git a/convert.cc b/convert.cc
index 146742a..508d899 100644
--- a/convert.cc
+++ b/convert.cc
@@ -217,6 +217,7 @@ int ConvertStop(ConvertData *cdata, uint32_t pixelformat) {
return VDEV_STATUS_OK;
};
+
/*
* converts the video from input type to RGB24 type - 24Bit
*/
@@ -491,3 +492,20 @@ uint32_t convert_to_pixelformat(std::string s) {
};
+/*
+ * copy part of an raw image
+ * destination must be pointer in case we need to align the size of the destination image.
+ * this function will also realloc needed memory if needed. (only if: givin size < needed size)
+ */
+int PixCopy(unsigned char *srcdata, uint32_t srcpixfmt, int srcw, int srch,
+ unsigned char **dstdataptr, int *dstsize, int *dstw, int *dsth,
+ int regionx, int regiony, int regionw, int regionh) {
+
+ if (srcpixfmt == 0 || srcpixfmt == V4L2_PIX_FMT_MJPEG) return 0;
+ if (srcdata == NULL) return 0;
+
+ return 0;
+}
+
+
+
diff --git a/convert.h b/convert.h
index aa7f36b..4b45805 100644
--- a/convert.h
+++ b/convert.h
@@ -21,6 +21,10 @@ int Convert (ConvertData *cdata, VideoFrame *dest, unsigned char *ptrsrc, int sr
int ConvertStart(ConvertData *cdata, uint32_t pixelformat);
int ConvertStop(ConvertData *cdata, uint32_t pixelformat);
+int PixCopy(unsigned char *srcdata, uint32_t srcpixfmt, int srcw, int srch,
+ unsigned char **dstdataptr, int *dstsize, int *dstw, int *dsth,
+ int regionx, int regiony, int regionw, int regionh);
+
extern uint32_t convert_pixelformats[];
std::string convert_from_pixelformat (uint32_t fmt);
uint32_t convert_to_pixelformat(std::string s);
diff --git a/detect.cc b/detect.cc
index 2d94879..6a7c574 100644
--- a/detect.cc
+++ b/detect.cc
@@ -9,6 +9,8 @@
#include "config.h"
#include "gui.h"
#include "detect.h"
+#include "convert.h"
+#include "configuration.h" // needed to get V4L formats
extern Detect detect;
extern PosCtl posctl;
@@ -33,7 +35,7 @@ Detect::Detect() { // @suppress("Class members should be properly initialized")
inFrame.SetSize(64, 64);
oldFrame.SetSize(64, 64);
image.SetSize(64, 64);
- imagegtk.SetSize(64, 64);
+ imageRGBout.SetSize(64, 64);
thread = NULL;
thread = g_thread_new("Detect", _DetectThread, NULL);
objectW = 300;
@@ -61,19 +63,31 @@ Detect::~Detect() {
-int Detect::NewFrame(VideoFrame *newframe) {
+/*
+ * copy the framedata into the next thread. Source data must be already mutex locked.
+ * raw data will only be copied if the source is not an compressed stream
+ */
+int Detect::CopyNewFrame(VideoFrame *newframe, VideoFrameRaw *rawframe) {
if (newframe == NULL) return -1;
LockInMutex();
+
+ if (rawframe->pixfmt != V4L2_PIX_FMT_MJPEG)
+ inRawFrame.CopyFrom(rawframe);
+ else
+ inRawFrame.Delete();
+
inFrame.CopyFrom(newframe);
inFrameNew = 1;
+
UnLockInMutex();
return 0;
};
-//
-// NewFrame: will set new frame
-// Thread: newFrame |------> Find Object --- not found ---> send gui information
+/*
+ * NewFrame: will set new frame
+ * Thread: newFrame |------> Find Object --- not found ---> send gui information
+ */
void Detect::Thread() {
DetectOutput doutput;
struct timeval timestamp;
@@ -140,12 +154,15 @@ void Detect::Thread() {
// copy output image for gtk
LockImageMutex();
- imagegtk.CopyFrom(&image);
+ imageRGBout.CopyFrom(&image);
+ if (imageRawout.RectCopyFrom(&inRawFrame, (objectX-objectW/2), (objectY-objectH/2), objectW, objectH) == 0)
+ imageRawout.CopyFrom(&imageRGBout);
UnLockImageMutex();
doutput.posx = objectX;
doutput.posy = objectY;
- doutput.image = &imagegtk;
+ doutput.image = &imageRGBout;
+ doutput.rawimage = &imageRawout;
if (detmatrix != NULL)
memcpy (doutput.detmatrix, detmatrix, sizeof(uint32_t) * DET_MAXSHIFT * DET_MAXSHIFT);
diff --git a/detect.h b/detect.h
index b2fc5ba..6d2afc2 100644
--- a/detect.h
+++ b/detect.h
@@ -169,7 +169,9 @@ class PosCtl {
struct {
- VideoFrame *image; // detected image
+ VideoFrame *image; // detected image
+ VideoFrameRaw *rawimage; // detected rawimage
+
uint32_t *detmatrix;
int posx; // position of the detected object
int posy; // position of the detected object
@@ -181,10 +183,12 @@ class Detect {
private:
int running;
VideoFrame inFrame; // input frame
+ VideoFrameRaw inRawFrame; // input RawFrame
VideoFrame oldFrame; // oldinput frame
int inFrameNew; // new input frame;
VideoFrame image; // output image
- VideoFrame imagegtk; // output image -- send to gtk
+ VideoFrame imageRGBout; // output image -- send to gtk
+ VideoFrameRaw imageRawout; // output raw image
GMutex muteximage;
GMutex mutexin;
GMutex mutex; // general mutex for changing settings
@@ -214,7 +218,7 @@ public:
Detect();
~Detect();
- int NewFrame(VideoFrame *newframe);
+ int CopyNewFrame(VideoFrame *newframe, VideoFrameRaw *rawframe); // set new frame data
//
// Thread Releated Functions (maybe soon private?)
diff --git a/posctl.cc b/posctl.cc
index 0389e58..bb9928c 100644
--- a/posctl.cc
+++ b/posctl.cc
@@ -663,7 +663,7 @@ void posctl_gui_update() {
gtk_entry_set_text_nofocus (dec_kd, txt);
strfromd (txt, sizeof(txt-1), (char *)"%f", posctl.GetFilter());
- gtk_entry_set_text (GTK_ENTRY(pos_filter), txt);
+ gtk_entry_set_text_nofocus(pos_filter, txt);
const gchar *txtptr = gtk_entry_get_text(GTK_ENTRY(e_posdevice));
if (strncmp(txtptr, "SIMULATION", 11) == 0) gtk_widget_show (btnsimreset);
diff --git a/process-image.drawio b/process-image.drawio
index 204b7f1..7e91e93 100644
--- a/process-image.drawio
+++ b/process-image.drawio
@@ -1 +1 @@
-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
\ No newline at end of file
+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
\ No newline at end of file
diff --git a/video.cc b/video.cc
index b4b4b1c..d776900 100644
--- a/video.cc
+++ b/video.cc
@@ -528,6 +528,7 @@ gboolean cb_thread_video (gpointer data) {
GtkWidget *btnstop = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "btn-video-stop"));
VideoDevThreadData *cbdata = (VideoDevThreadData*) data;
VideoFrame *vf = NULL;
+ VideoFrameRaw *vfr = NULL;
if (videodev == NULL) return false;
@@ -536,11 +537,13 @@ gboolean cb_thread_video (gpointer data) {
// read out all controls
if (cbdata != NULL) {
vf = &cbdata->vf;
+ vfr = &cbdata->vfr;
if (cbdata->running == 1) {
videoctrl_grid_build();
cbdata->running = 2;
}
if (vf->w <= 0 || vf->h <= 0 || vf->data == NULL) vf = NULL;
+ if (vfr->w <= 0 || vfr->h <= 0 || vfr->data == NULL) vfr = NULL;
}
//
@@ -589,7 +592,7 @@ gboolean cb_thread_video (gpointer data) {
vf->ToPixbuf(video_pixbuf); // convert Frame to pixeldata
histogram_update(vf); // update histogram
- detect.NewFrame(vf); // push new data to detect object
+ detect.CopyNewFrame(vf, vfr); // push new data to detect object
videodev->UnLockMutex();
diff --git a/videodev-v4l2.cc b/videodev-v4l2.cc
index bf1f684..e1dd477 100644
--- a/videodev-v4l2.cc
+++ b/videodev-v4l2.cc
@@ -263,8 +263,7 @@ int VideoDev_V4L2::InitMMap() {
if (-1 == xioctl(fd, VIDIOC_REQBUFS, &bufreq)) {
if (EINVAL == errno) {
- printf("%s does not support "
- "memory mappingn", conf_device.c_str());
+ printf("%s does not support memory mapping", conf_device.c_str());
return VDEV_STATUS_ERROR;
} else {
printf ("%s:%d %s Error %s\n", __FILE__, __LINE__, __FUNCTION__, strerror(errno));
@@ -425,9 +424,9 @@ int VideoDev_V4L2::CaptureStop() {
/*
- * try to grab one frame and convert it into RGB32.
* If something goes wrong return an error code.
* Return code VDEV_STATUS_AGAIN is not an error. There was no video image ready to read.
+ * To reduce the time of malloc/free reuse the destination buffer.
*/
int VideoDev_V4L2::Grab(VideoFrameRaw *vf) {
struct v4l2_buffer buf;
@@ -467,6 +466,8 @@ int VideoDev_V4L2::Grab(VideoFrameRaw *vf) {
case EIO:
printf ( "%s:%d error on VIDIOC_DQBUF EIO %s\n", __FILE__, __LINE__, strerror(errno));
+ return VDEV_STATUS_ERROR;
+
default:
printf ( "%s:%d error on VIDIOC_DQBUF %s\n", __FILE__, __LINE__, strerror(errno));
return VDEV_STATUS_ERROR;
diff --git a/videodev.cc b/videodev.cc
index ae0d00e..29ba340 100644
--- a/videodev.cc
+++ b/videodev.cc
@@ -190,6 +190,7 @@ void VideoDev::ThreadProcess() {
running = 0;
break;
}
+
//
// keep 25fps, write every second a message
cycle_time = get_cycletime(&cycle_timestamp);
diff --git a/videoframe.cc b/videoframe.cc
index 88c7a9e..96a7776 100644
--- a/videoframe.cc
+++ b/videoframe.cc
@@ -5,6 +5,8 @@
#include "config.h"
#include "gui.h"
#include "error.h"
+#include "convert.h"
+#include "videodev.h"
VideoFrameRaw::VideoFrameRaw() {
size = 0;
@@ -40,7 +42,19 @@ int VideoFrameRaw::CopyFrom(int spixfmt, int sw, int sh, int ssize, unsigned cha
pixfmt = spixfmt;
memcpy (data, sdata, size);
- return 0;
+ return 1;
+}
+
+
+int VideoFrameRaw::CopyFrom(VideoFrameRaw *src) {
+ if (src == NULL) return 0;
+ return CopyFrom(src->pixfmt, src->w, src->h, src->size, src->data);
+}
+
+
+int VideoFrameRaw::CopyFrom(VideoFrame *src) {
+ if (src == NULL) return 0;
+ return CopyFrom(V4L2_PIX_FMT_RGB32, src->w, src->h, src->size, src->data);
}
@@ -68,6 +82,13 @@ int VideoFrameRaw::ReAlloc(int newsize) {
}
+int VideoFrameRaw::RectCopyFrom(VideoFrameRaw *src, int rectx, int recty, int rectw, int recth) {
+ return PixCopy (src->data, src->pixfmt, src->w, src->h,
+ &data, &size, &w, &h,
+ rectx, recty, rectw, recth);
+}
+
+
#define VIDEOFRAME_DEPTH_BYTES 3
VideoFrame::VideoFrame() {
data = NULL;
@@ -169,6 +190,9 @@ void VideoFrame::CopyTo(FloatImage *dest) {
+
+
+
void VideoFrame::ToPixbuf(GdkPixbuf* dest) {
int destw, desth;
unsigned char *destpixel;
@@ -188,10 +212,6 @@ void VideoFrame::ToPixbuf(GdkPixbuf* dest) {
}
-
-
-
-
FloatImage::FloatImage() {
data = NULL;
w = 0;
diff --git a/videoframe.h b/videoframe.h
index f87a3dc..55e6677 100644
--- a/videoframe.h
+++ b/videoframe.h
@@ -4,21 +4,6 @@
#include "gui.h"
#include "config.h"
-class VideoFrameRaw {
-private:
-public:
- unsigned char *data;
- int size;
- int w;
- int h;
- uint32_t pixfmt;
- VideoFrameRaw();
- ~VideoFrameRaw();
- int ReAlloc(int newsize);
- int CopyFrom(int spixfmt, int sw, int sh, int ssize, unsigned char *sdata);
-};
-
-
class FloatImage {
public:
@@ -36,9 +21,13 @@ public:
void SetW(int nw) { SetSize(nw, h); };
void SetH(int nh) { SetSize(w, nh); };
void CopyFrom(FloatImage *source);
+ void Delete() { w = 0; h = 0; };
};
+/*
+ * contains RGB data
+ */
class VideoFrame {
private:
public:
@@ -59,6 +48,26 @@ public:
void CopyFrom(FloatImage *source);
void CopyTo(FloatImage *dest);
void ToPixbuf(GdkPixbuf* dest);
+ void Delete() { w = 0; h = 0; };
+};
+
+
+class VideoFrameRaw {
+private:
+public:
+ unsigned char *data;
+ int size;
+ int w;
+ int h;
+ uint32_t pixfmt;
+ VideoFrameRaw();
+ ~VideoFrameRaw();
+ int ReAlloc(int newsize);
+ int CopyFrom(VideoFrame *src);
+ int CopyFrom(VideoFrameRaw *src);
+ int CopyFrom(int spixfmt, int sw, int sh, int ssize, unsigned char *sdata);
+ int RectCopyFrom(VideoFrameRaw *src, int rectx, int recty, int rectw, int recth);
+ void Delete() { w = 0; h = 0; pixfmt = 0;};
};