rename project in pubspect. testing streamingview.

This commit is contained in:
Jordan 2024-03-15 08:22:44 -07:00
parent 59daf14ee4
commit 2f80cb3e55
9 changed files with 97 additions and 39 deletions

View File

@ -1,4 +1,4 @@
name: dart_openmvg name: libdart_openmvg
description: "Dart Bindings for OpenMVG" description: "Dart Bindings for OpenMVG"
version: 0.0.1 version: 0.0.1
homepage: homepage:

View File

@ -64,13 +64,15 @@ add_library(${LIBDART_OPENMVG} SHARED
"image.cxx" "image.cxx"
) )
set(CEREAL_INCLUDE_DIR ${OpenMVG_DIR}/../../../include/openMVG_dependencies/cereal/include/cereal/)
target_include_directories( target_include_directories(
${LIBDART_OPENMVG} ${LIBDART_OPENMVG}
PRIVATE PRIVATE
${FFMPEG_INCLUDE_DIRS} ${FFMPEG_INCLUDE_DIRS}
${PNG_INCLUDE_DIRS} ${PNG_INCLUDE_DIRS}
${ARCHIMEDES_INCLUDE_DIRS} ${ARCHIMEDES_INCLUDE_DIRS}
${OpenMVG_DIR}/../../../include/openMVG_dependencies/cereal/include/cereal/ ${CEREAL_INCLUDE_DIR}
) )
target_link_libraries( target_link_libraries(
@ -119,6 +121,7 @@ target_include_directories(
PRIVATE PRIVATE
${LIBDART_OPENMVG_INCLUDE_DIRS} ${LIBDART_OPENMVG_INCLUDE_DIRS}
${OpenMVG_INCLUDE_DIRS}/src ${OpenMVG_INCLUDE_DIRS}/src
${CEREAL_INCLUDE_DIR}
) )
set_target_properties(test_image set_target_properties(test_image

View File

@ -20,15 +20,44 @@ FILE *make_buffer(const uint8_t *data, const size_t data_len)
return file; return file;
} }
int read_buffer(FILE *file, uint8_t **buffer, size_t *length) {
if (file != NULL) {
// Get the file size
fseek(file, 0, SEEK_END);
(*length) = ftell(file);
fseek(file, 0, SEEK_SET);
const Frame *new_frame_from_data(const uint8_t *data, const size_t data_len, int w, int h, int depth) // Allocate memory
*buffer = (uint8_t *) malloc((*length) * sizeof(char));
if (buffer == NULL) {
printf("Error: Unable to allocate memory.\n");
return 1;
}
// Read file
size_t newLen = fread(*buffer, sizeof(char), *length, file);
if (newLen == 0) {
if (feof(file)) {
printf("Error: End of file reached.\n");
return 2;
}
printf("Error: Reading file.\n");
return 3;
}
return 4;
}
return 5;
}
Frame *new_frame_from_data(const uint8_t *data, const size_t data_len, int w, int h, int depth)
{ {
FILE *buf = make_buffer(data, data_len); FILE *buf = make_buffer(data, data_len);
return new_frame_from_handle(buf, w, h, depth); return new_frame_from_handle(buf, w, h, depth);
} }
const Frame *new_frame_from_handle(FILE *stream, int w, int h, int depth) Frame *new_frame_from_handle(FILE *stream, int w, int h, int depth)
{ {
Frame *f = (Frame *)malloc(sizeof(Frame)); Frame *f = (Frame *)malloc(sizeof(Frame));
f->stream = stream; f->stream = stream;

View File

@ -3,6 +3,10 @@
#include <stdint.h> #include <stdint.h>
#include "./base.hpp" #include "./base.hpp"
#ifndef __FRAME_H
#define __FRAME_H
typedef struct _Frame typedef struct _Frame
{ {
FILE *stream; FILE *stream;
@ -13,8 +17,12 @@ typedef struct _Frame
FILE *make_buffer(const uint8_t *, const size_t); FILE *make_buffer(const uint8_t *, const size_t);
_FFI_PLUGIN int read_buffer(FILE *, uint8_t **, size_t *);
const Frame *new_frame_from_handle(FILE *, int, int, int);
_FFI_PLUGIN _FFI_PLUGIN
const Frame *new_frame_from_data(const uint8_t *, const size_t, int, int, int); Frame *new_frame_from_handle(FILE *, int, int, int);
_FFI_PLUGIN
Frame *new_frame_from_data(const uint8_t *, const size_t, int, int, int);
#endif // __FRAME_H

View File

@ -94,6 +94,7 @@ int Archimedes::images_to_sfm(const Frame **frames, size_t n_frames)
SfM_Data sfmData {}; SfM_Data sfmData {};
sfmData.views = Views(); sfmData.views = Views();
return 0; return 0;
} }

View File

@ -48,21 +48,6 @@ extern "C" {
#define error_t int #define error_t int
#ifdef __cplusplus
class StreamedView : openMVG::sfm::View {
private:
const Frame *mFrame;
public:
StreamedView(const Frame *);
};
#endif
typedef struct _ImageResult typedef struct _ImageResult
{ {

View File

@ -1,15 +1,21 @@
#include "streamingview.hpp" #include "streamingview.hpp"
#include <string.h>
template<class Archive> void libdart_openmvg::StreamingView::load(cereal::BinaryInputArchive &ar) const {
void libdart_openmvg::StreamingView::load(cereal::BinaryOutputArchive &ar) const { uint8_t *data = NULL;
int i = 0; const size_t dLen1 = (mFrame->w * mFrame->h * mFrame->depth * sizeof(uint8_t));
while (i = fgetc(mFrame->stream) != EOF) { ar.loadBinary(data, sizeof(uint8_t) * dLen1);
ar(i); const size_t dlen2 = sizeof(data) * sizeof(uint8_t);
} mFrame->stream = make_buffer(data, dlen2);
rewind(mFrame->stream);
} }
template<class Archive> void libdart_openmvg::StreamingView::save(cereal::BinaryOutputArchive &ar) const {
void libdart_openmvg::StreamingView::save(cereal::BinaryInputArchive &ar) const { uint8_t * data = NULL;
// int i = 0; size_t data_len = 0;
// todo int ret = 0;
if(ret = read_buffer(mFrame->stream, &data, &data_len)) {
std::cerr << "ERROR: " << ret << std::endl;
}
ar.saveBinary(data, data_len);
} }

View File

@ -12,14 +12,12 @@ namespace libdart_openmvg
{ {
private: private:
const Frame *mFrame; Frame *mFrame;
public: public:
StreamingView(const Frame *frame) : mFrame(frame), View () {} StreamingView(Frame *frame) : mFrame(frame), View () {}
template <class Archive> void save(cereal::BinaryOutputArchive &) const;
void save(cereal::BinaryInputArchive &) const; void load(cereal::BinaryInputArchive &) const;
template <class Archive>
void load(cereal::BinaryOutputArchive &) const;
}; };
} }

View File

@ -1,6 +1,11 @@
#include <archives/binary.hpp>
#include <CUnit/Basic.h> #include <CUnit/Basic.h>
#include "../image.h" #include "../image.h"
#include "../streamingview.hpp"
#include <cwalk.h> #include <cwalk.h>
#ifdef __cplusplus
#include <iostream>
#endif // __cplusplus
#define STRLEN 2048 #define STRLEN 2048
@ -100,6 +105,28 @@ void test_archimedes_get_data(void)
CU_ASSERT_TRUE(result->data_len > 0); CU_ASSERT_TRUE(result->data_len > 0);
} }
void test_archimedes_streamed_view(void) {
imageHandle = fopen(frame1Path, "rw+");
Frame *f = new_frame_from_handle(
imageHandle,
768,
768,
64
);
const libdart_openmvg::StreamingView view(f);
std::cerr << "OPENING " << frame1Path << std::endl;
std::ifstream inStream(std::string(frame1Path), std::ios::in | std::ios::binary);
std::ofstream outStream;
cereal::BinaryInputArchive inArchive(inStream);
cereal::BinaryOutputArchive outArchive(outStream);
// view.save(outArchive);
view.load(inArchive);
}
int main() { int main() {
CU_pSuite pSuite = NULL; CU_pSuite pSuite = NULL;
@ -117,7 +144,8 @@ int main() {
/* add the tests to the suite */ /* add the tests to the suite */
if ((NULL == CU_add_test(pSuite, "frame can be created", test_create_frame)) || if ((NULL == CU_add_test(pSuite, "frame can be created", test_create_frame)) ||
(NULL == CU_add_test(pSuite, "frame can be created from data", test_frame_from_data)) || (NULL == CU_add_test(pSuite, "frame can be created from data", test_frame_from_data)) ||
(NULL == CU_add_test(pSuite, "data can be retrieved from frame", test_archimedes_get_data))) (NULL == CU_add_test(pSuite, "data can be retrieved from frame", test_archimedes_get_data)) ||
(NULL == CU_add_test(pSuite, "Streaming view can read & write data", test_archimedes_streamed_view)))
{ {
CU_cleanup_registry(); CU_cleanup_registry();
return CU_get_error(); return CU_get_error();