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

Reply via email to