Commit e52c15ae0411910cbd3acfffa74ace5b162063fd
1 parent
397fb860
new universal template format
Showing
2 changed files
with
25 additions
and
27 deletions
openbr/universal_template.cpp
| @@ -8,14 +8,22 @@ | @@ -8,14 +8,22 @@ | ||
| 8 | 8 | ||
| 9 | #include "universal_template.h" | 9 | #include "universal_template.h" |
| 10 | 10 | ||
| 11 | -br_utemplate br_new_utemplate(const int8_t *imageID, const int8_t *templateID, int32_t algorithmID, uint32_t size, const int8_t *data) | 11 | +br_utemplate br_new_utemplate(const int8_t *imageID, int32_t algorithmID, size_t x, size_t y, size_t width, size_t height, const char *url, const char *data, uint32_t dataSize) |
| 12 | { | 12 | { |
| 13 | + const uint32_t urlSize = strlen(url) + 1; | ||
| 14 | + const uint32_t size = urlSize + dataSize; | ||
| 13 | br_utemplate utemplate = (br_utemplate) malloc(sizeof(br_universal_template) + size); | 15 | br_utemplate utemplate = (br_utemplate) malloc(sizeof(br_universal_template) + size); |
| 14 | memcpy(utemplate->imageID, imageID, 16); | 16 | memcpy(utemplate->imageID, imageID, 16); |
| 15 | - memcpy(utemplate->templateID, templateID, 16); | 17 | + memcpy(utemplate->templateID, QCryptographicHash::hash(QByteArray(data, dataSize), QCryptographicHash::Md5).data(), 16); |
| 16 | utemplate->algorithmID = algorithmID; | 18 | utemplate->algorithmID = algorithmID; |
| 19 | + utemplate->x = x; | ||
| 20 | + utemplate->y = y; | ||
| 21 | + utemplate->width = width; | ||
| 22 | + utemplate->height = height; | ||
| 23 | + utemplate->urlSize = urlSize; | ||
| 17 | utemplate->size = size; | 24 | utemplate->size = size; |
| 18 | - memcpy(utemplate+1, data, size); | 25 | + memcpy(reinterpret_cast<char*>(utemplate+1) + 0, url , urlSize); |
| 26 | + memcpy(reinterpret_cast<char*>(utemplate+1) + urlSize, data, dataSize); | ||
| 19 | return utemplate; | 27 | return utemplate; |
| 20 | } | 28 | } |
| 21 | 29 | ||
| @@ -26,19 +34,7 @@ void br_free_utemplate(br_const_utemplate utemplate) | @@ -26,19 +34,7 @@ void br_free_utemplate(br_const_utemplate utemplate) | ||
| 26 | 34 | ||
| 27 | void br_append_utemplate(FILE *file, br_const_utemplate utemplate) | 35 | void br_append_utemplate(FILE *file, br_const_utemplate utemplate) |
| 28 | { | 36 | { |
| 29 | - br_append_utemplate_contents(file, utemplate->imageID, utemplate->templateID, utemplate->algorithmID, utemplate->size, utemplate->data); | ||
| 30 | -} | ||
| 31 | - | ||
| 32 | -void br_append_utemplate_contents(FILE *file, const unsigned char *imageID, const unsigned char *templateID, int32_t algorithmID, uint32_t size, const unsigned char *data) | ||
| 33 | -{ | ||
| 34 | - static QMutex lock; | ||
| 35 | - QMutexLocker locker(&lock); | ||
| 36 | - | ||
| 37 | - fwrite(imageID, 16, 1, file); | ||
| 38 | - fwrite(templateID, 16, 1, file); | ||
| 39 | - fwrite(&algorithmID, 4, 1, file); | ||
| 40 | - fwrite(&size, 4, 1, file); | ||
| 41 | - fwrite(data, 1, size, file); | 37 | + fwrite(utemplate, sizeof(br_universal_template) + utemplate->size, 1, file); |
| 42 | } | 38 | } |
| 43 | 39 | ||
| 44 | void br_iterate_utemplates(br_const_utemplate begin, br_const_utemplate end, br_utemplate_callback callback, br_callback_context context) | 40 | void br_iterate_utemplates(br_const_utemplate begin, br_const_utemplate end, br_utemplate_callback callback, br_callback_context context) |
openbr/universal_template.h
| @@ -36,10 +36,18 @@ extern "C" { | @@ -36,10 +36,18 @@ extern "C" { | ||
| 36 | struct br_universal_template | 36 | struct br_universal_template |
| 37 | { | 37 | { |
| 38 | unsigned char imageID[16]; /*!< MD5 hash of the undecoded origin file. */ | 38 | unsigned char imageID[16]; /*!< MD5 hash of the undecoded origin file. */ |
| 39 | - unsigned char templateID[16]; /*!< MD5 hash of _data_. */ | ||
| 40 | - int32_t algorithmID; /*!< type of _data_. */ | ||
| 41 | - uint32_t size; /*!< length of _data_. */ | ||
| 42 | - unsigned char data[]; /*!< _size_-byte buffer. */ | 39 | + unsigned char templateID[16]; /*!< MD5 hash of _data_ after _urlSize_. */ |
| 40 | + int32_t algorithmID; /*!< interpretation of _data_ after _urlSize_. */ | ||
| 41 | + uint32_t x; /*!< region of interest horizontal offset (pixels). */ | ||
| 42 | + uint32_t y; /*!< region of interest vertical offset (pixels). */ | ||
| 43 | + uint32_t width; /*!< region of interest horizontal size (pixels). */ | ||
| 44 | + uint32_t height; /*!< region of interest vertical size (pixels). */ | ||
| 45 | + uint32_t urlSize; /*!< length of null-terminated URL at the beginning of _data_, | ||
| 46 | + including the null-terminator character. */ | ||
| 47 | + uint32_t size; /*!< length of _data_. */ | ||
| 48 | + unsigned char data[]; /*!< _size_-byte buffer. | ||
| 49 | + The first _urlSize_ bytes represent the URL. | ||
| 50 | + The remaining (_size_ - _urlSize_) bytes represent the template data. */ | ||
| 43 | }; | 51 | }; |
| 44 | 52 | ||
| 45 | typedef struct br_universal_template *br_utemplate; | 53 | typedef struct br_universal_template *br_utemplate; |
| @@ -49,7 +57,7 @@ typedef const struct br_universal_template *br_const_utemplate; | @@ -49,7 +57,7 @@ typedef const struct br_universal_template *br_const_utemplate; | ||
| 49 | * \brief br_universal_template constructor. | 57 | * \brief br_universal_template constructor. |
| 50 | * \see br_free_utemplate | 58 | * \see br_free_utemplate |
| 51 | */ | 59 | */ |
| 52 | -BR_EXPORT br_utemplate br_new_utemplate(const int8_t *imageID, const int8_t *templateID, int32_t algorithmID, uint32_t size, const int8_t *data); | 60 | +BR_EXPORT br_utemplate br_new_utemplate(const int8_t *imageID, int32_t algorithmID, size_t x, size_t y, size_t width, size_t height, const char *url, const char *data, uint32_t dataSize); |
| 53 | 61 | ||
| 54 | /*! | 62 | /*! |
| 55 | * \brief br_universal_template destructor. | 63 | * \brief br_universal_template destructor. |
| @@ -64,12 +72,6 @@ BR_EXPORT void br_free_utemplate(br_const_utemplate utemplate); | @@ -64,12 +72,6 @@ BR_EXPORT void br_free_utemplate(br_const_utemplate utemplate); | ||
| 64 | BR_EXPORT void br_append_utemplate(FILE *file, br_const_utemplate utemplate); | 72 | BR_EXPORT void br_append_utemplate(FILE *file, br_const_utemplate utemplate); |
| 65 | 73 | ||
| 66 | /*! | 74 | /*! |
| 67 | - * \brief Serialize a br_universal_template to a file. | ||
| 68 | - * \see br_append_utemplate | ||
| 69 | - */ | ||
| 70 | -BR_EXPORT void br_append_utemplate_contents(FILE *file, const unsigned char *imageID, const unsigned char *templateID, int32_t algorithmID, uint32_t size, const unsigned char *data); | ||
| 71 | - | ||
| 72 | -/*! | ||
| 73 | * \brief br_universal_template iterator callback. | 75 | * \brief br_universal_template iterator callback. |
| 74 | * \see br_iterate_utemplates | 76 | * \see br_iterate_utemplates |
| 75 | */ | 77 | */ |