From 45a45701f6f715de7248681ea47ea1442c80015c Mon Sep 17 00:00:00 2001 From: Syping Date: Tue, 7 Feb 2023 03:06:22 +0100 Subject: [PATCH] libragephoto: various changes - libragephoto_global.h seperated to RagePhotoConfig.h and RagePhotoLibrary.h - RagePhotoData.h renamed to RagePhotoTypedefs.h - RagePhotoData: updated struct and documentated it - RagePhotoC: changed ragephoto_setphotodata ABI, added ragephoto_setphotodatac for copying - RagePhotoA: adapted for the ABI changes - RagePhoto: adapted for the ABI changes and updated struct --- CMakeLists.txt | 26 +++--- src/RagePhoto.cpp | 53 ++++++------ src/RagePhoto.h | 10 +-- src/RagePhotoA.h | 7 +- src/RagePhotoC.h | 81 ++++++++++--------- ...photo_global.h.in => RagePhotoConfig.h.in} | 34 +------- src/RagePhotoData.h | 54 ------------- src/RagePhotoLibrary.h | 59 ++++++++++++++ src/RagePhotoTypedefs.h | 55 +++++++++++++ 9 files changed, 206 insertions(+), 173 deletions(-) rename src/{libragephoto_global.h.in => RagePhotoConfig.h.in} (57%) delete mode 100644 src/RagePhotoData.h create mode 100644 src/RagePhotoLibrary.h create mode 100644 src/RagePhotoTypedefs.h diff --git a/CMakeLists.txt b/CMakeLists.txt index e39df3f..24d0c41 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,7 +17,7 @@ ****************************************************************************]] cmake_minimum_required(VERSION 3.7) -project(ragephoto VERSION 0.2.0 LANGUAGES CXX) +project(ragephoto VERSION 0.3.0 LANGUAGES CXX) include(GNUInstallDirs) set(CMAKE_INCLUDE_CURRENT_DIR ON) @@ -27,13 +27,6 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON) # RagePhoto CMake includes include(cmake/unicode.cmake) -# RagePhoto WebAssembly ON -if (EMSCRIPTEN) - set(EM_ON ON) -else() - set(EM_ON OFF) -endif() - # RagePhoto Top Level ON if (${CMAKE_PROJECT_NAME} STREQUAL "ragephoto") set(RPTL_ON ON) @@ -44,16 +37,17 @@ endif() # RagePhoto Source files set(RAGEPHOTO_HEADERS src/RagePhoto.h - src/RagePhotoData.h + src/RagePhotoLibrary.h + src/RagePhotoTypedefs.h ) set(RAGEPHOTO_SOURCES src/RagePhoto.cpp ) # RagePhoto Library Type -option(RAGEPHOTO_STATIC "Build libragephoto as static library" ${EM_ON}) +option(RAGEPHOTO_STATIC "Build libragephoto as static library" OFF) if (RAGEPHOTO_STATIC) - option(RAGEPHOTO_C_API "Build libragephoto with C API support" ${EM_ON}) + option(RAGEPHOTO_C_API "Build libragephoto with C API support" OFF) set(LIBRAGEPHOTO_LIBTYPE LIBRAGEPHOTO_STATIC) else() option(RAGEPHOTO_C_API "Build libragephoto with C API support" ON) @@ -90,9 +84,9 @@ endif() # RagePhoto Configures + Target + Installs configure_file(src/ragephoto.pc.in "${ragephoto_BINARY_DIR}/pkgconfig/ragephoto.pc" @ONLY) -configure_file(src/libragephoto_global.h.in "${ragephoto_BINARY_DIR}/include/libragephoto_global.h" @ONLY) +configure_file(src/RagePhotoConfig.h.in "${ragephoto_BINARY_DIR}/include/RagePhotoConfig.h" @ONLY) list(APPEND RAGEPHOTO_HEADERS - "${ragephoto_BINARY_DIR}/include/libragephoto_global.h" + "${ragephoto_BINARY_DIR}/include/RagePhotoConfig.h" ) if (RAGEPHOTO_STATIC) add_library(ragephoto STATIC ${RAGEPHOTO_HEADERS} ${RAGEPHOTO_SOURCES} ${RAGEPHOTO_STATIC_RESOURCES}) @@ -100,6 +94,7 @@ else() add_library(ragephoto SHARED ${RAGEPHOTO_HEADERS} ${RAGEPHOTO_SOURCES} ${RAGEPHOTO_SHARED_RESOURCES}) set_target_properties(ragephoto PROPERTIES PREFIX "lib" + VERSION "${ragephoto_VERSION}" ) endif() target_compile_definitions(ragephoto PRIVATE @@ -130,13 +125,16 @@ if (EMSCRIPTEN) ) target_compile_definitions(ragephoto-wasm PRIVATE LIBRAGEPHOTO_LIBRARY + LIBRAGEPHOTO_WASM ${LIBRAGEPHOTO_DEFINES} ) target_link_options(ragephoto-wasm PRIVATE "SHELL:-O3" "SHELL:--no-entry" - "SHELL:-s WASM=1" "SHELL:-s ALLOW_MEMORY_GROWTH=1" + "SHELL:-s MODULARIZE=1" + "SHELL:-s WASM=1" + "SHELL:-s EXPORT_NAME=libragephotoModule" "SHELL:-s EXPORTED_FUNCTIONS=_free,_malloc" "SHELL:-s EXPORTED_RUNTIME_METHODS=ccall,cwrap" ) diff --git a/src/RagePhoto.cpp b/src/RagePhoto.cpp index 8a2c063..30d0ec8 100644 --- a/src/RagePhoto.cpp +++ b/src/RagePhoto.cpp @@ -125,20 +125,7 @@ inline void uInt32ToCharLE(uint32_t x, char *y) /* BEGIN OF RAGEPHOTO CLASS */ RagePhoto::RagePhoto() { -#if __cplusplus >= 201707L - m_data = new RagePhotoData { - .jpeg = nullptr, - .description = nullptr, - .json = nullptr, - .title = nullptr, - .error = 0, - .photoFormat = 0, - .unnamedSum1 = 0, - .unnamedSum2 = 0 - }; -#else m_data = new RagePhotoData { 0 }; -#endif setBufferDefault(); } @@ -354,9 +341,9 @@ bool RagePhoto::load(const char *data, size_t length) return false; } #if __BYTE_ORDER == __LITTLE_ENDIAN - std::memcpy(&m_data->photoBuffer, uInt32Buffer, 4); + std::memcpy(&m_data->jpegBuffer, uInt32Buffer, 4); #else - m_data->photoBuffer = charToUInt32LE(uInt32Buffer); + m_data->jpegBuffer = charToUInt32LE(uInt32Buffer); #endif size = readBuffer(data, uInt32Buffer, &pos, 4, length); @@ -510,7 +497,7 @@ bool RagePhoto::load(const char *data, size_t length) std::cout << "headerSum: " << m_data->headerSum << std::endl; std::cout << "unnamedSum1: " << m_data->unnamedSum1 << std::endl; std::cout << "unnamedSum2: " << m_data->unnamedSum2 << std::endl; - std::cout << "photoBuffer: " << m_data->photoBuffer << std::endl; + std::cout << "photoBuffer: " << m_data->jpegBuffer << std::endl; std::cout << "descBuffer: " << m_data->descBuffer << std::endl; std::cout << "descOffset: " << m_data->descOffset << std::endl; std::cout << "description: " << m_data->description << std::endl; @@ -562,7 +549,7 @@ bool RagePhoto::loadFile(const std::string &filename) } } -uint8_t RagePhoto::error() const +int32_t RagePhoto::error() const { return m_data->error; } @@ -590,7 +577,7 @@ uint32_t RagePhoto::photoSize() const if (m_data->jpeg) return m_data->jpegSize; else - return 0UL; + return 0; } const char* RagePhoto::description() const @@ -663,7 +650,7 @@ bool RagePhoto::save(char *data, uint32_t photoFormat) const size_t photoHeader_size = 256; #endif - if (m_data->jpegSize > m_data->photoBuffer) { + if (m_data->jpegSize > m_data->jpegBuffer) { m_data->error = Error::PhotoBufferTight; // 36 return false; } @@ -757,9 +744,9 @@ bool RagePhoto::save(char *data, uint32_t photoFormat) writeBuffer("JPEG", data, &pos, length, 4); #if __BYTE_ORDER == __LITTLE_ENDIAN - std::memcpy(uInt32Buffer, &m_data->photoBuffer, 4); + std::memcpy(uInt32Buffer, &m_data->jpegBuffer, 4); #else - uInt32ToCharLE(m_data->photoBuffer, uInt32Buffer); + uInt32ToCharLE(m_data->jpegBuffer, uInt32Buffer); #endif writeBuffer(uInt32Buffer, data, &pos, length, 4); @@ -771,7 +758,7 @@ bool RagePhoto::save(char *data, uint32_t photoFormat) writeBuffer(uInt32Buffer, data, &pos, length, 4); writeBuffer(m_data->jpeg, data, &pos, length, m_data->jpegSize); - for (size_t i = m_data->jpegSize; i < m_data->photoBuffer; i++) { + for (size_t i = m_data->jpegSize; i < m_data->jpegBuffer; i++) { writeBuffer("\0", data, &pos, length, 1); } @@ -889,9 +876,9 @@ bool RagePhoto::saveFile(const std::string &filename) inline size_t RagePhoto::saveSize(RagePhotoData *ragePhotoData, uint32_t photoFormat) { if (photoFormat == PhotoFormat::GTA5) - return (ragePhotoData->photoBuffer + ragePhotoData->jsonBuffer + ragePhotoData->titlBuffer + ragePhotoData->descBuffer + GTA5_HEADERSIZE + 56UL); + return (ragePhotoData->jpegBuffer + ragePhotoData->jsonBuffer + ragePhotoData->titlBuffer + ragePhotoData->descBuffer + GTA5_HEADERSIZE + 56UL); else if (photoFormat == PhotoFormat::RDR2) - return (ragePhotoData->photoBuffer + ragePhotoData->jsonBuffer + ragePhotoData->titlBuffer + ragePhotoData->descBuffer + RDR2_HEADERSIZE + 56UL); + return (ragePhotoData->jpegBuffer + ragePhotoData->jsonBuffer + ragePhotoData->titlBuffer + ragePhotoData->descBuffer + RDR2_HEADERSIZE + 56UL); else return 0; } @@ -931,7 +918,7 @@ inline void RagePhoto::setBufferOffsets() inline void RagePhoto::setBufferOffsets(RagePhotoData *ragePhotoData) { - ragePhotoData->jsonOffset = ragePhotoData->photoBuffer + 28; + ragePhotoData->jsonOffset = ragePhotoData->jpegBuffer + 28; ragePhotoData->titlOffset = ragePhotoData->jsonOffset + ragePhotoData->jsonBuffer + 8; ragePhotoData->descOffset = ragePhotoData->titlOffset + ragePhotoData->titlBuffer + 8; ragePhotoData->endOfFile = ragePhotoData->descOffset + ragePhotoData->descBuffer + 12; @@ -972,7 +959,7 @@ bool RagePhoto::setData(RagePhotoData *ragePhotoData, bool takeOwnership) return false; std::memcpy(m_data->jpeg, ragePhotoData->jpeg, ragePhotoData->jpegSize); m_data->jpegSize = ragePhotoData->jpegSize; - m_data->photoBuffer = ragePhotoData->photoBuffer; + m_data->jpegBuffer = ragePhotoData->jpegBuffer; } if (ragePhotoData->json) { @@ -1090,7 +1077,7 @@ bool RagePhoto::setPhoto(const char *data, uint32_t size, uint32_t bufferSize) } if (bufferSize != 0) { - m_data->photoBuffer = bufferSize; + m_data->jpegBuffer = bufferSize; setBufferOffsets(); } @@ -1140,7 +1127,7 @@ ragephoto_bool_t ragephoto_loadfile(ragephoto_t instance, const char *filename) return ragePhoto->loadFile(filename); } -uint8_t ragephoto_error(ragephoto_t instance) +int32_t ragephoto_error(ragephoto_t instance) { RagePhoto *ragePhoto = static_cast(instance); return ragePhoto->error(); @@ -1262,10 +1249,16 @@ void ragephoto_setbufferoffsets(ragephoto_t instance) ragePhoto->setBufferOffsets(); } -void ragephoto_setphotodata(ragephoto_t instance, RagePhotoData *ragePhotoData, ragephoto_bool_t takeOwnership) +void ragephoto_setphotodata(ragephoto_t *instance, RagePhotoData *ragePhotoData) +{ + RagePhoto *ragePhoto = static_cast(*instance); + ragePhoto->setData(ragePhotoData, true); +} + +void ragephoto_setphotodatac(ragephoto_t instance, RagePhotoData *ragePhotoData) { RagePhoto *ragePhoto = static_cast(instance); - ragePhoto->setData(ragePhotoData, takeOwnership); + ragePhoto->setData(ragePhotoData, false); } void ragephoto_setphotodesc(ragephoto_t instance, const char *description, uint32_t bufferSize) diff --git a/src/RagePhoto.h b/src/RagePhoto.h index 254ef2f..7a6af18 100644 --- a/src/RagePhoto.h +++ b/src/RagePhoto.h @@ -20,8 +20,8 @@ #define RAGEPHOTO_H #ifdef __cplusplus -#include "libragephoto_global.h" -#include "RagePhotoData.h" +#include "RagePhotoLibrary.h" +#include "RagePhotoTypedefs.h" #include #include #include @@ -30,7 +30,7 @@ /** * \brief GTA V and RDR 2 Photo Parser. */ -class LIBRAGEPHOTO_CXX_EXPORT RagePhoto +class LIBRAGEPHOTO_CXX_BINDING RagePhoto { public: /** Default sizes */ @@ -44,7 +44,7 @@ public: RDR2_HEADERSIZE = 272UL, /**< RDR 2 Header Size */ }; /** Parsing and set errors */ - enum Error : uint8_t { + enum Error : int32_t { DescBufferTight = 39, /**< Description Buffer is too tight */ DescMallocError = 31, /**< Description Buffer can't be allocated */ DescReadError = 32, /**< Description can't be read successfully */ @@ -109,7 +109,7 @@ public: * \param filename File to load */ bool loadFile(const std::string &filename); - uint8_t error() const; /**< Returns the last error occurred. */ + int32_t error() const; /**< Returns the last error occurred. */ uint32_t format() const; /**< Returns the Photo Format (GTA V or RDR 2). */ const std::string photo() const; /**< Returns the Photo JPEG data. */ const char *photoData() const; /**< Returns the Photo JPEG data. */ diff --git a/src/RagePhotoA.h b/src/RagePhotoA.h index b77fcd1..5034e09 100644 --- a/src/RagePhotoA.h +++ b/src/RagePhotoA.h @@ -44,7 +44,7 @@ public: RDR2_HEADERSIZE = 272UL, /**< RDR 2 Header Size */ }; /** Parsing and set errors */ - enum Error : uint8_t { + enum Error : int32_t { DescBufferTight = 39, /**< Description Buffer is too tight */ DescMallocError = 31, /**< Description Buffer can't be allocated */ DescReadError = 32, /**< Description can't be read successfully */ @@ -228,7 +228,10 @@ public: } /** Sets the internal RagePhotoData object. */ bool setData(RagePhotoData *ragePhotoData, bool takeOwnership = true) { - ragephoto_setphotodata(instance, ragePhotoData, takeOwnership); + if (takeOwnership) + ragephoto_setphotodata(&instance, ragePhotoData); + else + ragephoto_setphotodatac(instance, ragePhotoData); } /** Sets the Photo description. */ void setDescription(const char *description, uint32_t bufferSize = 0) { diff --git a/src/RagePhotoC.h b/src/RagePhotoC.h index 55a832c..9dc941e 100644 --- a/src/RagePhotoC.h +++ b/src/RagePhotoC.h @@ -19,8 +19,8 @@ #ifndef RAGEPHOTOC_H #define RAGEPHOTOC_H -#include "libragephoto_global.h" -#include "RagePhotoData.h" +#include "RagePhotoLibrary.h" +#include "RagePhotoTypedefs.h" #include #include @@ -39,136 +39,141 @@ typedef void* ragephoto_t; typedef int32_t ragephoto_bool_t; /** Opens a \p ragephoto_t instance. */ -LIBRAGEPHOTO_C_EXPORT ragephoto_t ragephoto_open(); +LIBRAGEPHOTO_C_BINDING ragephoto_t ragephoto_open(); /** Resets the \p ragephoto_t instance to default values. * \param instance \p ragephoto_t instance */ -LIBRAGEPHOTO_C_EXPORT void ragephoto_clear(ragephoto_t instance); +LIBRAGEPHOTO_C_BINDING void ragephoto_clear(ragephoto_t instance); /** Loads a Photo from a const char*. * \param instance \p ragephoto_t instance * \param data Photo data * \param size Photo data size */ -LIBRAGEPHOTO_C_EXPORT ragephoto_bool_t ragephoto_load(ragephoto_t instance, const char *data, size_t size); +LIBRAGEPHOTO_C_BINDING ragephoto_bool_t ragephoto_load(ragephoto_t instance, const char *data, size_t size); /** Loads a Photo from a file. * \param instance \p ragephoto_t instance * \param filename File to load */ -LIBRAGEPHOTO_C_EXPORT ragephoto_bool_t ragephoto_loadfile(ragephoto_t instance, const char *filename); +LIBRAGEPHOTO_C_BINDING ragephoto_bool_t ragephoto_loadfile(ragephoto_t instance, const char *filename); /** Returns the last error occurred. * \param instance \p ragephoto_t instance */ -LIBRAGEPHOTO_C_EXPORT uint8_t ragephoto_error(ragephoto_t instance); +LIBRAGEPHOTO_C_BINDING int32_t ragephoto_error(ragephoto_t instance); /** Returns the GTA V default Photo Buffer Size. */ -LIBRAGEPHOTO_C_EXPORT uint32_t ragephoto_defpbuf_gta5(); +LIBRAGEPHOTO_C_BINDING uint32_t ragephoto_defpbuf_gta5(); /** Returns the RDR 2 default Photo Buffer Size. */ -LIBRAGEPHOTO_C_EXPORT uint32_t ragephoto_defpbuf_rdr2(); +LIBRAGEPHOTO_C_BINDING uint32_t ragephoto_defpbuf_rdr2(); /** Returns the GTA V Photo Format. */ -LIBRAGEPHOTO_C_EXPORT uint32_t ragephoto_format_gta5(); +LIBRAGEPHOTO_C_BINDING uint32_t ragephoto_format_gta5(); /** Returns the RDR 2 Photo Format. */ -LIBRAGEPHOTO_C_EXPORT uint32_t ragephoto_format_rdr2(); +LIBRAGEPHOTO_C_BINDING uint32_t ragephoto_format_rdr2(); /** Returns the internal RagePhotoData object. * \param instance \p ragephoto_t instance */ -LIBRAGEPHOTO_C_EXPORT RagePhotoData* ragephoto_getphotodata(ragephoto_t instance); +LIBRAGEPHOTO_C_BINDING RagePhotoData* ragephoto_getphotodata(ragephoto_t instance); /** Returns the Photo description. * \param instance \p ragephoto_t instance */ -LIBRAGEPHOTO_C_EXPORT const char* ragephoto_getphotodesc(ragephoto_t instance); +LIBRAGEPHOTO_C_BINDING const char* ragephoto_getphotodesc(ragephoto_t instance); /** Returns the Photo Format (GTA V or RDR 2). * \param instance \p ragephoto_t instance */ -LIBRAGEPHOTO_C_EXPORT uint32_t ragephoto_getphotoformat(ragephoto_t instance); +LIBRAGEPHOTO_C_BINDING uint32_t ragephoto_getphotoformat(ragephoto_t instance); /** Returns the Photo JPEG data. * \param instance \p ragephoto_t instance */ -LIBRAGEPHOTO_C_EXPORT const char* ragephoto_getphotojpeg(ragephoto_t instance); +LIBRAGEPHOTO_C_BINDING const char* ragephoto_getphotojpeg(ragephoto_t instance); /** Returns the Photo JSON data. * \param instance \p ragephoto_t instance */ -LIBRAGEPHOTO_C_EXPORT const char* ragephoto_getphotojson(ragephoto_t instance); +LIBRAGEPHOTO_C_BINDING const char* ragephoto_getphotojson(ragephoto_t instance); /** Returns the Photo header. * \param instance \p ragephoto_t instance */ -LIBRAGEPHOTO_C_EXPORT const char* ragephoto_getphotoheader(ragephoto_t instance); +LIBRAGEPHOTO_C_BINDING const char* ragephoto_getphotoheader(ragephoto_t instance); /** Returns the Photo JPEG data size. * \param instance \p ragephoto_t instance */ -LIBRAGEPHOTO_C_EXPORT uint32_t ragephoto_getphotosize(ragephoto_t instance); +LIBRAGEPHOTO_C_BINDING uint32_t ragephoto_getphotosize(ragephoto_t instance); /** Returns the Photo title. * \param instance \p ragephoto_t instance */ -LIBRAGEPHOTO_C_EXPORT const char* ragephoto_getphototitle(ragephoto_t instance); +LIBRAGEPHOTO_C_BINDING const char* ragephoto_getphototitle(ragephoto_t instance); /** Returns the Photo save file size. * \param instance \p ragephoto_t instance */ -LIBRAGEPHOTO_C_EXPORT size_t ragephoto_getsavesize(ragephoto_t instance); +LIBRAGEPHOTO_C_BINDING size_t ragephoto_getsavesize(ragephoto_t instance); /** Returns the Photo save file size. * \param instance \p ragephoto_t instance * \param photoFormat Photo Format (GTA V or RDR 2) */ -LIBRAGEPHOTO_C_EXPORT size_t ragephoto_getsavesizef(ragephoto_t instance, uint32_t photoFormat); +LIBRAGEPHOTO_C_BINDING size_t ragephoto_getsavesizef(ragephoto_t instance, uint32_t photoFormat); /** Saves a Photo to a char*. * \param instance \p ragephoto_t instance * \param data Photo data */ -LIBRAGEPHOTO_C_EXPORT ragephoto_bool_t ragephoto_save(ragephoto_t instance, char *data); +LIBRAGEPHOTO_C_BINDING ragephoto_bool_t ragephoto_save(ragephoto_t instance, char *data); /** Saves a Photo to a char*. * \param instance \p ragephoto_t instance * \param data Photo data * \param photoFormat Photo Format (GTA V or RDR 2) */ -LIBRAGEPHOTO_C_EXPORT ragephoto_bool_t ragephoto_savef(ragephoto_t instance, char *data, uint32_t photoFormat); +LIBRAGEPHOTO_C_BINDING ragephoto_bool_t ragephoto_savef(ragephoto_t instance, char *data, uint32_t photoFormat); /** Saves a Photo to a file. * \param instance \p ragephoto_t instance * \param filename File to save */ -LIBRAGEPHOTO_C_EXPORT ragephoto_bool_t ragephoto_savefile(ragephoto_t instance, const char *filename); +LIBRAGEPHOTO_C_BINDING ragephoto_bool_t ragephoto_savefile(ragephoto_t instance, const char *filename); /** Saves a Photo to a file. * \param instance \p ragephoto_t instance * \param filename File to save * \param photoFormat Photo Format (GTA V or RDR 2) */ -LIBRAGEPHOTO_C_EXPORT ragephoto_bool_t ragephoto_savefilef(ragephoto_t instance, const char *filename, uint32_t photoFormat); +LIBRAGEPHOTO_C_BINDING ragephoto_bool_t ragephoto_savefilef(ragephoto_t instance, const char *filename, uint32_t photoFormat); /** Sets all cross-format Buffer to default size. * \param instance \p ragephoto_t instance */ -LIBRAGEPHOTO_C_EXPORT void ragephoto_setbufferdefault(ragephoto_t instance); +LIBRAGEPHOTO_C_BINDING void ragephoto_setbufferdefault(ragephoto_t instance); /** Moves all Buffer offsets to correct position. * \param instance \p ragephoto_t instance */ -LIBRAGEPHOTO_C_EXPORT void ragephoto_setbufferoffsets(ragephoto_t instance); +LIBRAGEPHOTO_C_BINDING void ragephoto_setbufferoffsets(ragephoto_t instance); /** Sets the internal RagePhotoData object. * \param instance \p ragephoto_t instance -* \param ragePhotoData RagePhotoData object -* \param takeOwnership True takes ownership, false copies source object +* \param ragePhotoData RagePhotoData object being set */ -LIBRAGEPHOTO_C_EXPORT void ragephoto_setphotodata(ragephoto_t instance, RagePhotoData *ragePhotoData, ragephoto_bool_t takeOwnership); +LIBRAGEPHOTO_C_BINDING void ragephoto_setphotodata(ragephoto_t *instance, RagePhotoData *ragePhotoData); + +/** Copies RagePhotoData object to internal RagePhotoData object. +* \param instance \p ragephoto_t instance +* \param ragePhotoData RagePhotoData object being copied +*/ +LIBRAGEPHOTO_C_BINDING void ragephoto_setphotodatac(ragephoto_t instance, RagePhotoData *ragePhotoData); /** Sets the Photo description. * \param instance \p ragephoto_t instance @@ -177,13 +182,13 @@ LIBRAGEPHOTO_C_EXPORT void ragephoto_setphotodata(ragephoto_t instance, RagePhot * * Default bufferSize: 256UL */ -LIBRAGEPHOTO_C_EXPORT void ragephoto_setphotodesc(ragephoto_t instance, const char *description, uint32_t bufferSize); +LIBRAGEPHOTO_C_BINDING void ragephoto_setphotodesc(ragephoto_t instance, const char *description, uint32_t bufferSize); /** Sets the Photo Format (GTA V or RDR 2). * \param instance \p ragephoto_t instance * \param photoFormat Photo Format (GTA V or RDR 2) */ -LIBRAGEPHOTO_C_EXPORT void ragephoto_setphotoformat(ragephoto_t instance, uint32_t photoFormat); +LIBRAGEPHOTO_C_BINDING void ragephoto_setphotoformat(ragephoto_t instance, uint32_t photoFormat); /** Sets the Photo JPEG data. * \param instance \p ragephoto_t instance @@ -193,7 +198,7 @@ LIBRAGEPHOTO_C_EXPORT void ragephoto_setphotoformat(ragephoto_t instance, uint32 * * Default bufferSize: ragephoto_defpbuf_gta5() or ragephoto_defpbuf_rdr2() */ -LIBRAGEPHOTO_C_EXPORT ragephoto_bool_t ragephoto_setphotojpeg(ragephoto_t instance, const char *data, uint32_t size, uint32_t bufferSize); +LIBRAGEPHOTO_C_BINDING ragephoto_bool_t ragephoto_setphotojpeg(ragephoto_t instance, const char *data, uint32_t size, uint32_t bufferSize); /** Sets the Photo JSON data. * \param instance \p ragephoto_t instance @@ -202,10 +207,10 @@ LIBRAGEPHOTO_C_EXPORT ragephoto_bool_t ragephoto_setphotojpeg(ragephoto_t instan * * Default bufferSize: 3072UL */ -LIBRAGEPHOTO_C_EXPORT void ragephoto_setphotojson(ragephoto_t instance, const char *json, uint32_t bufferSize); +LIBRAGEPHOTO_C_BINDING void ragephoto_setphotojson(ragephoto_t instance, const char *json, uint32_t bufferSize); /** Sets the Photo header. (EXPERT ONLY) */ -LIBRAGEPHOTO_C_EXPORT void ragephoto_setphotoheader(ragephoto_t instance, const char *header, uint32_t headerSum); +LIBRAGEPHOTO_C_BINDING void ragephoto_setphotoheader(ragephoto_t instance, const char *header, uint32_t headerSum); /** Sets the Photo title. * \param instance \p ragephoto_t instance @@ -214,15 +219,15 @@ LIBRAGEPHOTO_C_EXPORT void ragephoto_setphotoheader(ragephoto_t instance, const * * Default bufferSize: 256UL */ -LIBRAGEPHOTO_C_EXPORT void ragephoto_setphototitle(ragephoto_t instance, const char *title, uint32_t bufferSize); +LIBRAGEPHOTO_C_BINDING void ragephoto_setphototitle(ragephoto_t instance, const char *title, uint32_t bufferSize); /** Closes a \p ragephoto_t instance. * \param instance \p ragephoto_t instance */ -LIBRAGEPHOTO_C_EXPORT void ragephoto_close(ragephoto_t instance); +LIBRAGEPHOTO_C_BINDING void ragephoto_close(ragephoto_t instance); /** Returns the library version. */ -LIBRAGEPHOTO_C_EXPORT const char* ragephoto_version(); +LIBRAGEPHOTO_C_BINDING const char* ragephoto_version(); #ifdef __cplusplus } diff --git a/src/libragephoto_global.h.in b/src/RagePhotoConfig.h.in similarity index 57% rename from src/libragephoto_global.h.in rename to src/RagePhotoConfig.h.in index 3685eba..d93be9d 100644 --- a/src/libragephoto_global.h.in +++ b/src/RagePhotoConfig.h.in @@ -1,6 +1,6 @@ /***************************************************************************** * libragephoto RAGE Photo Parser -* Copyright (C) 2021-2022 Syping +* Copyright (C) 2023 Syping * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: @@ -16,8 +16,8 @@ * responsible for anything with use of the software, you are self responsible. *****************************************************************************/ -#ifndef LIBRAGEPHOTO_GLOBAL_H -#define LIBRAGEPHOTO_GLOBAL_H +#ifndef RAGEPHOTOCONFIG_H +#define RAGEPHOTOCONFIG_H /* CMAKE CONFIG BEGIN */ #define @LIBRAGEPHOTO_API@ @@ -28,30 +28,4 @@ #define RAGEPHOTO_VERSION_PATCH @ragephoto_VERSION_PATCH@ /* CMAKE CONFIG END */ -/* RAGEPHOTO LIBRARY EXPORT BEGIN */ -#ifdef _WIN32 -#ifndef LIBRAGEPHOTO_STATIC -#ifdef LIBRAGEPHOTO_LIBRARY -#define LIBRAGEPHOTO_C_EXPORT __declspec(dllexport) -#define LIBRAGEPHOTO_CXX_EXPORT __declspec(dllexport) -#else -#define LIBRAGEPHOTO_C_EXPORT __declspec(dllimport) -#define LIBRAGEPHOTO_CXX_EXPORT __declspec(dllimport) -#endif // LIBRAGEPHOTO_LIBRARY -#else -#define LIBRAGEPHOTO_C_EXPORT -#define LIBRAGEPHOTO_CXX_EXPORT -#endif // LIBRAGEPHOTO_STATIC -#else -#ifdef __EMSCRIPTEN__ -#include -#define LIBRAGEPHOTO_C_EXPORT EMSCRIPTEN_KEEPALIVE -#define LIBRAGEPHOTO_CXX_EXPORT -#else -#define LIBRAGEPHOTO_C_EXPORT -#define LIBRAGEPHOTO_CXX_EXPORT -#endif // __EMSCRIPTEN__ -#endif // _WIN32 -/* RAGEPHOTO LIBRARY EXPORT END */ - -#endif // LIBRAGEPHOTO_GLOBAL_H +#endif // RAGEPHOTOCONFIG_H diff --git a/src/RagePhotoData.h b/src/RagePhotoData.h deleted file mode 100644 index b4f9c61..0000000 --- a/src/RagePhotoData.h +++ /dev/null @@ -1,54 +0,0 @@ -/***************************************************************************** -* libragephoto RAGE Photo Parser -* Copyright (C) 2021-2023 Syping -* -* Redistribution and use in source and binary forms, with or without modification, -* are permitted provided that the following conditions are met: -* -* 1. Redistributions of source code must retain the above copyright notice, -* this list of conditions and the following disclaimer. -* -* 2. Redistributions in binary form must reproduce the above copyright notice, -* this list of conditions and the following disclaimer in the documentation -* and/or other materials provided with the distribution. -* -* This software is provided as-is, no warranties are given to you, we are not -* responsible for anything with use of the software, you are self responsible. -*****************************************************************************/ - -#ifndef RAGEPHOTODATA_H -#define RAGEPHOTODATA_H - -#include - -#ifdef __cplusplus -extern "C" { -#endif // __cplusplus - -typedef struct RagePhotoData { - char* jpeg; - char* description; - char* json; - char* header; - char* title; - uint8_t error; - uint32_t descBuffer; - uint32_t descOffset; - uint32_t endOfFile; - uint32_t headerSum; - uint32_t jpegSize; - uint32_t jsonBuffer; - uint32_t jsonOffset; - uint32_t photoBuffer; - uint32_t photoFormat; - uint32_t titlBuffer; - uint32_t titlOffset; - uint32_t unnamedSum1; - uint32_t unnamedSum2; -} RagePhotoData; - -#ifdef __cplusplus -} -#endif // __cplusplus - -#endif // RAGEPHOTODATA_H diff --git a/src/RagePhotoLibrary.h b/src/RagePhotoLibrary.h new file mode 100644 index 0000000..adf3b9b --- /dev/null +++ b/src/RagePhotoLibrary.h @@ -0,0 +1,59 @@ +/***************************************************************************** +* libragephoto RAGE Photo Parser +* Copyright (C) 2023 Syping +* +* Redistribution and use in source and binary forms, with or without modification, +* are permitted provided that the following conditions are met: +* +* 1. Redistributions of source code must retain the above copyright notice, +* this list of conditions and the following disclaimer. +* +* 2. Redistributions in binary form must reproduce the above copyright notice, +* this list of conditions and the following disclaimer in the documentation +* and/or other materials provided with the distribution. +* +* This software is provided as-is, no warranties are given to you, we are not +* responsible for anything with use of the software, you are self responsible. +*****************************************************************************/ + +#ifndef RAGEPHOTOLIBRARY_H +#define RAGEPHOTOLIBRARY_H + +#include "RagePhotoConfig.h" + +/* RAGEPHOTO LIBRARY BINDING BEGIN */ +#ifdef _WIN32 +#ifndef LIBRAGEPHOTO_STATIC +#ifdef LIBRAGEPHOTO_LIBRARY +#define LIBRAGEPHOTO_C_BINDING __declspec(dllexport) +#define LIBRAGEPHOTO_CXX_BINDING __declspec(dllexport) +#else +#define LIBRAGEPHOTO_C_BINDING __declspec(dllimport) +#define LIBRAGEPHOTO_CXX_BINDING __declspec(dllimport) +#endif // LIBRAGEPHOTO_LIBRARY +#else +#define LIBRAGEPHOTO_C_BINDING +#define LIBRAGEPHOTO_CXX_BINDING +#endif // LIBRAGEPHOTO_STATIC +#else +#ifdef __EMSCRIPTEN__ +#include +#define LIBRAGEPHOTO_C_BINDING EMSCRIPTEN_KEEPALIVE +#define LIBRAGEPHOTO_CXX_BINDING +#else +#define LIBRAGEPHOTO_C_BINDING +#define LIBRAGEPHOTO_CXX_BINDING +#endif // __EMSCRIPTEN__ +#endif // _WIN32 +/* RAGEPHOTO LIBRARY BINDING END */ + +/* ENABLE C API FOR RAGEPHOTO WASM LIBRARY BEGIN */ +#ifdef LIBRAGEPHOTO_WASM +#ifdef RAGEPHOTO_C_NOAPI +#undef RAGEPHOTO_C_NOAPI +#define RAGEPHOTO_C_API +#endif // RAGEPHOTO_C_NOAPI +#endif // LIBRAGEPHOTO_WASM +/* ENABLE C API FOR RAGEPHOTO WASM LIBRARY END */ + +#endif // RAGEPHOTOLIBRARY_H diff --git a/src/RagePhotoTypedefs.h b/src/RagePhotoTypedefs.h new file mode 100644 index 0000000..a0aca47 --- /dev/null +++ b/src/RagePhotoTypedefs.h @@ -0,0 +1,55 @@ +/***************************************************************************** +* libragephoto RAGE Photo Parser +* Copyright (C) 2021-2023 Syping +* +* Redistribution and use in source and binary forms, with or without modification, +* are permitted provided that the following conditions are met: +* +* 1. Redistributions of source code must retain the above copyright notice, +* this list of conditions and the following disclaimer. +* +* 2. Redistributions in binary form must reproduce the above copyright notice, +* this list of conditions and the following disclaimer in the documentation +* and/or other materials provided with the distribution. +* +* This software is provided as-is, no warranties are given to you, we are not +* responsible for anything with use of the software, you are self responsible. +*****************************************************************************/ + +#ifndef RAGEPHOTOTYPEDEFS_H +#define RAGEPHOTOTYPEDEFS_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif // __cplusplus + +/** RagePhoto data struct for storing internal data. */ +typedef struct RagePhotoData { + char* jpeg; /**< Pointer for internal JPEG buffer */ + char* description; /**< Pointer for internal Description buffer */ + char* json; /**< Pointer for internal JSON buffer */ + char* header; /**< Pointer for internal Header buffer */ + char* title; /**< Pointer for internal Title buffer */ + int32_t error; /**< RagePhoto error code */ + uint32_t descBuffer; /**< Photo Description buffer length */ + uint32_t descOffset; /**< Photo Description buffer offset */ + uint32_t endOfFile; /**< Photo End Of File offset */ + uint32_t headerSum; /**< Photo Checksum of the header */ + uint32_t jpegBuffer; /**< Photo JPEG buffer length */ + uint32_t jpegSize; /**< Internal JPEG buffer length and size of JPEG */ + uint32_t jsonBuffer; /**< Photo JSON buffer length */ + uint32_t jsonOffset; /**< Photo JSON buffer offset */ + uint32_t photoFormat; /**< Photo file format magic */ + uint32_t titlBuffer; /**< Photo Title buffer length */ + uint32_t titlOffset; /**< Photo Title buffer offset */ + uint32_t unnamedSum1; /**< 1st unnamed checksum for Red Dead Redemption 2 */ + uint32_t unnamedSum2; /**< 2nd unnamed checksum for Red Dead Redemption 2 */ +} RagePhotoData; + +#ifdef __cplusplus +} +#endif // __cplusplus + +#endif // RAGEPHOTOTYPEDEFS_H