Revision: 76010
http://sourceforge.net/p/brlcad/code/76010
Author: starseeker
Date: 2020-06-03 15:49:26 +0000 (Wed, 03 Jun 2020)
Log Message:
-----------
start working on fb to icv writing
Modified Paths:
--------------
brlcad/branches/dm-fb-merge/include/dm.h
brlcad/branches/dm-fb-merge/include/icv/io.h
brlcad/branches/dm-fb-merge/src/libdm/fb_generic.c
brlcad/branches/dm-fb-merge/src/libicv/bw.c
brlcad/branches/dm-fb-merge/src/libicv/encoding.c
brlcad/branches/dm-fb-merge/src/libicv/pix.c
brlcad/branches/dm-fb-merge/src/libicv/png.c
Modified: brlcad/branches/dm-fb-merge/include/dm.h
===================================================================
--- brlcad/branches/dm-fb-merge/include/dm.h 2020-06-03 15:10:40 UTC (rev
76009)
+++ brlcad/branches/dm-fb-merge/include/dm.h 2020-06-03 15:49:26 UTC (rev
76010)
@@ -410,6 +410,7 @@
DM_EXPORT extern int fb_write_fp(struct fb *ifp, FILE *fp, int req_width, int
req_height, int crunch, int inverse, struct bu_vls *result);
DM_EXPORT extern int fb_read_fd(struct fb *ifp, int fd, int file_width, int
file_height, int file_xoff, int file_yoff, int scr_width, int scr_height, int
scr_xoff, int scr_yoff, int fileinput, char *file_name, int one_line_only, int
multiple_lines, int autosize, int inverse, int clear, int zoom, struct bu_vls
*result);
DM_EXPORT extern int fb_read_icv(struct fb *ifp, icv_image_t *img, int
file_xoff, int file_yoff, int scr_xoff, int scr_yoff, int clear, int zoom, int
inverse, int one_line_only, int multiple_lines, struct bu_vls *result);
+DM_EXPORT extern icv_image_t *fb_write_icv(struct fb *ifp, int scr_xoff, int
scr_yoff, int width, int height);
DM_EXPORT extern void fb_set_interface(struct fb *ifp, const char
*interface_type);
DM_EXPORT extern void fb_set_name(struct fb *ifp, const char *name);
Modified: brlcad/branches/dm-fb-merge/include/icv/io.h
===================================================================
--- brlcad/branches/dm-fb-merge/include/icv/io.h 2020-06-03 15:10:40 UTC
(rev 76009)
+++ brlcad/branches/dm-fb-merge/include/icv/io.h 2020-06-03 15:49:26 UTC
(rev 76010)
@@ -158,6 +158,23 @@
*/
ICV_EXPORT unsigned char *icv_data2uchar(const icv_image_t *bif);
+/**
+ * Converts unsigned char array to double array.
+ * This function returns array of double data.
+ *
+ * Used to convert data from pix, bw, ppm type images for icv_image
+ * struct.
+ *
+ * This does not free the char data.
+ *
+ * @param data pointer to the array to be converted.
+ * @param size Size of the array.
+ * @return double array.
+ *
+ */
+ICV_EXPORT double *icv_uchar2double(unsigned char *data, size_t size);
+
+
/** @} */
__END_DECLS
Modified: brlcad/branches/dm-fb-merge/src/libdm/fb_generic.c
===================================================================
--- brlcad/branches/dm-fb-merge/src/libdm/fb_generic.c 2020-06-03 15:10:40 UTC
(rev 76009)
+++ brlcad/branches/dm-fb-merge/src/libdm/fb_generic.c 2020-06-03 15:49:26 UTC
(rev 76010)
@@ -765,7 +765,33 @@
return BRLCAD_OK;
}
+icv_image_t *
+fb_write_icv(struct fb *ifp, int UNUSED(scr_xoff), int UNUSED(scr_yoff), int
UNUSED(width), int UNUSED(height))
+{
+ icv_image_t *fbimg;
+ BU_ALLOC(fbimg, struct icv_image);
+ ICV_IMAGE_INIT(fbimg);
+ // Create a local buffer for fb_read to populate with char data, and
+ // populate it - this isolates us from any backend specific framebuffer
+ // storage details.
+ unsigned char *buffer = (unsigned char *)bu_calloc(3 * fb_getwidth(ifp) *
fb_getheight(ifp), sizeof(char), "raw image");
+ unsigned char *scanline;
+ for (int y=0; y < fb_getheight(ifp); y++) {
+ scanline = &buffer[y*fb_getwidth(ifp)*3];
+ fb_read(ifp, 0, y, scanline, fb_getwidth(ifp));
+ }
+
+ fbimg->width = fb_getwidth(ifp);
+ fbimg->height = fb_getheight(ifp);
+ fbimg->data = icv_uchar2double(buffer, 3 * fbimg->width * fbimg->height);
+ fbimg->magic = ICV_IMAGE_MAGIC;
+ fbimg->channels = 3;
+ fbimg->color_space = ICV_COLOR_SPACE_RGB;
+
+ return fbimg;
+}
+
/*
* Local Variables:
* mode: C
Modified: brlcad/branches/dm-fb-merge/src/libicv/bw.c
===================================================================
--- brlcad/branches/dm-fb-merge/src/libicv/bw.c 2020-06-03 15:10:40 UTC (rev
76009)
+++ brlcad/branches/dm-fb-merge/src/libicv/bw.c 2020-06-03 15:49:26 UTC (rev
76010)
@@ -27,9 +27,6 @@
#include "bu/malloc.h"
#include "icv_private.h"
-/* defined in encoding.c */
-extern double *uchar2double(unsigned char *data, size_t size);
-
int
bw_write(icv_image_t *bif, const char *filename)
{
@@ -131,7 +128,7 @@
}
if (size)
- bif->data = uchar2double(data, size);
+ bif->data = icv_uchar2double(data, size);
else {
/* zero sized image */
bu_free(bif, "icv container");
Modified: brlcad/branches/dm-fb-merge/src/libicv/encoding.c
===================================================================
--- brlcad/branches/dm-fb-merge/src/libicv/encoding.c 2020-06-03 15:10:40 UTC
(rev 76009)
+++ brlcad/branches/dm-fb-merge/src/libicv/encoding.c 2020-06-03 15:49:26 UTC
(rev 76010)
@@ -29,22 +29,8 @@
#include "bu/malloc.h"
#include "bn.h"
-/**
- * converts unsigned char array to double array.
- * This function returns array of double data.
- *
- * Used to convert data from pix, bw, ppm type images for icv_image
- * struct.
- *
- * This does not free the char data.
- *
- * @param data pointer to the array to be converted.
- * @param size Size of the array.
- * @return double array.
- *
- */
double *
-uchar2double(unsigned char *data, size_t size)
+icv_uchar2double(unsigned char *data, size_t size)
{
double *double_data, *double_p;
unsigned char *char_p;
Modified: brlcad/branches/dm-fb-merge/src/libicv/pix.c
===================================================================
--- brlcad/branches/dm-fb-merge/src/libicv/pix.c 2020-06-03 15:10:40 UTC
(rev 76009)
+++ brlcad/branches/dm-fb-merge/src/libicv/pix.c 2020-06-03 15:49:26 UTC
(rev 76010)
@@ -27,9 +27,6 @@
#include "bu/log.h"
#include "icv_private.h"
-/* defined in encoding.c */
-extern double *uchar2double(unsigned char *data, size_t size);
-
int
pix_write(icv_image_t *bif, const char *filename)
{
@@ -118,7 +115,7 @@
bif->width = width;
}
if (size)
- bif->data = uchar2double(data, size);
+ bif->data = icv_uchar2double(data, size);
else {
/* zero sized image */
bu_free(bif, "icv container");
@@ -126,7 +123,7 @@
fclose(fp);
return NULL;
}
- bif->data = uchar2double(data, size);
+ bif->data = icv_uchar2double(data, size);
bu_free(data, "pix_read : unsigned char data");
bif->magic = ICV_IMAGE_MAGIC;
bif->channels = 3;
Modified: brlcad/branches/dm-fb-merge/src/libicv/png.c
===================================================================
--- brlcad/branches/dm-fb-merge/src/libicv/png.c 2020-06-03 15:10:40 UTC
(rev 76009)
+++ brlcad/branches/dm-fb-merge/src/libicv/png.c 2020-06-03 15:49:26 UTC
(rev 76010)
@@ -32,9 +32,6 @@
#include "vmath.h"
#include "icv_private.h"
-/* defined in encoding.c */
-extern double *uchar2double(unsigned char *data, size_t size);
-
int
png_write(icv_image_t *bif, const char *filename)
{
@@ -180,7 +177,7 @@
png_read_image(png_p, rows);
- bif->data = uchar2double(image, 3 * bif->width * bif->height);
+ bif->data = icv_uchar2double(image, 3 * bif->width * bif->height);
bu_free(image, "png_read : unsigned char data");
bif->magic = ICV_IMAGE_MAGIC;
bif->channels = 3;
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits