libragephoto: add ragephoto Python Package
- separate RagePhoto and RagePhoto-Extract sources
This commit is contained in:
parent
9a5bcabf8c
commit
0f1cfe630b
27 changed files with 503 additions and 50 deletions
1
src/core/RagePhoto
Normal file
1
src/core/RagePhoto
Normal file
|
|
@ -0,0 +1 @@
|
|||
#include "RagePhoto.hpp"
|
||||
1281
src/core/RagePhoto.c
Normal file
1281
src/core/RagePhoto.c
Normal file
File diff suppressed because it is too large
Load diff
1554
src/core/RagePhoto.cpp
Normal file
1554
src/core/RagePhoto.cpp
Normal file
File diff suppressed because it is too large
Load diff
315
src/core/RagePhoto.h
Normal file
315
src/core/RagePhoto.h
Normal file
|
|
@ -0,0 +1,315 @@
|
|||
/*****************************************************************************
|
||||
* 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 RAGEPHOTO_H
|
||||
#define RAGEPHOTO_H
|
||||
|
||||
#include "RagePhotoLibrary.h"
|
||||
#include "RagePhotoTypedefs.h"
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif // __cplusplus
|
||||
|
||||
/** C API for RagePhoto.
|
||||
* \file RagePhoto.h
|
||||
*/
|
||||
|
||||
/** RagePhoto C instance/C++ class typedef. */
|
||||
typedef void* ragephoto_t;
|
||||
|
||||
/** Opens a \p ragephoto_t instance. */
|
||||
LIBRAGEPHOTO_C_PUBLIC ragephoto_t ragephoto_open();
|
||||
|
||||
/** Add a custom defined RagePhotoFormatParser.
|
||||
* \param instance \p ragephoto_t instance
|
||||
* \param rp_parser RagePhotoFormatParser parser to add
|
||||
*/
|
||||
LIBRAGEPHOTO_C_PUBLIC void ragephoto_addparser(ragephoto_t instance, RagePhotoFormatParser *rp_parser);
|
||||
|
||||
/** Resets the RagePhotoData object to default values.
|
||||
* \param instance \p ragephoto_t instance
|
||||
*/
|
||||
LIBRAGEPHOTO_C_PUBLIC void ragephoto_clear(ragephoto_t instance);
|
||||
|
||||
/** Resets the RagePhotoData object to default values.
|
||||
* \param rp_data RagePhotoData object
|
||||
*/
|
||||
LIBRAGEPHOTO_C_PUBLIC void ragephotodata_clear(RagePhotoData *rp_data);
|
||||
|
||||
/** Loads a Photo from a const char*.
|
||||
* \param instance \p ragephoto_t instance
|
||||
* \param data Photo data
|
||||
* \param size Photo data size
|
||||
*/
|
||||
LIBRAGEPHOTO_C_PUBLIC bool ragephoto_load(ragephoto_t instance, const char *data, size_t size);
|
||||
|
||||
/** Loads a Photo from a const char*.
|
||||
* \param rp_data RagePhotoData object
|
||||
* \param rp_parser RagePhotoFormatParser parser array
|
||||
* \param data Photo data
|
||||
* \param size Photo data size
|
||||
*/
|
||||
LIBRAGEPHOTO_C_PUBLIC bool ragephotodata_load(RagePhotoData *rp_data, RagePhotoFormatParser *rp_parser, 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_PUBLIC bool ragephoto_loadfile(ragephoto_t instance, const char *filename);
|
||||
|
||||
/** Returns the last error occurred.
|
||||
* \param instance \p ragephoto_t instance
|
||||
*/
|
||||
LIBRAGEPHOTO_C_PUBLIC int32_t ragephoto_error(ragephoto_t instance);
|
||||
|
||||
/** Returns the GTA V default Photo Buffer Size. */
|
||||
LIBRAGEPHOTO_C_PUBLIC uint32_t ragephoto_defpbuf_gta5();
|
||||
|
||||
/** Returns the RDR 2 default Photo Buffer Size. */
|
||||
LIBRAGEPHOTO_C_PUBLIC uint32_t ragephoto_defpbuf_rdr2();
|
||||
|
||||
/** Returns the GTA V Photo Format. */
|
||||
LIBRAGEPHOTO_C_PUBLIC uint32_t ragephoto_format_gta5();
|
||||
|
||||
/** Returns the RDR 2 Photo Format. */
|
||||
LIBRAGEPHOTO_C_PUBLIC uint32_t ragephoto_format_rdr2();
|
||||
|
||||
/** Returns the internal RagePhotoData object.
|
||||
* \param instance \p ragephoto_t instance
|
||||
*/
|
||||
LIBRAGEPHOTO_C_PUBLIC RagePhotoData* ragephoto_getphotodata(ragephoto_t instance);
|
||||
|
||||
/** Returns the Photo description.
|
||||
* \param instance \p ragephoto_t instance
|
||||
*/
|
||||
LIBRAGEPHOTO_C_PUBLIC const char* ragephoto_getphotodesc(ragephoto_t instance);
|
||||
|
||||
/** Returns the Photo Format (GTA V or RDR 2).
|
||||
* \param instance \p ragephoto_t instance
|
||||
*/
|
||||
LIBRAGEPHOTO_C_PUBLIC uint32_t ragephoto_getphotoformat(ragephoto_t instance);
|
||||
|
||||
/** Returns the Photo JPEG data.
|
||||
* \param instance \p ragephoto_t instance
|
||||
*/
|
||||
LIBRAGEPHOTO_C_PUBLIC const char* ragephoto_getphotojpeg(ragephoto_t instance);
|
||||
|
||||
/** Returns the Photo JSON data.
|
||||
* \param instance \p ragephoto_t instance
|
||||
*/
|
||||
LIBRAGEPHOTO_C_PUBLIC const char* ragephoto_getphotojson(ragephoto_t instance);
|
||||
|
||||
/** Returns the Photo header.
|
||||
* \param instance \p ragephoto_t instance
|
||||
*/
|
||||
LIBRAGEPHOTO_C_PUBLIC const char* ragephoto_getphotoheader(ragephoto_t instance);
|
||||
|
||||
/** Returns the Photo JPEG sign.
|
||||
* \param instance \p ragephoto_t instance
|
||||
*/
|
||||
LIBRAGEPHOTO_C_PUBLIC uint64_t ragephoto_getphotosign(ragephoto_t instance);
|
||||
|
||||
/** Returns the Photo JPEG sign.
|
||||
* \param instance \p ragephoto_t instance
|
||||
* \param photoFormat Photo Format (GTA V or RDR 2)
|
||||
*/
|
||||
LIBRAGEPHOTO_C_PUBLIC uint64_t ragephoto_getphotosignf(ragephoto_t instance, uint32_t photoFormat);
|
||||
|
||||
/** Returns the Photo JPEG sign.
|
||||
* \param rp_data RagePhotoData object
|
||||
*/
|
||||
LIBRAGEPHOTO_C_PUBLIC uint64_t ragephotodata_getphotosign(RagePhotoData *rp_data);
|
||||
|
||||
/** Returns the Photo JPEG sign.
|
||||
* \param rp_data RagePhotoData object
|
||||
* \param photoFormat Photo Format (GTA V or RDR 2)
|
||||
*/
|
||||
LIBRAGEPHOTO_C_PUBLIC uint64_t ragephotodata_getphotosignf(RagePhotoData *rp_data, uint32_t photoFormat);
|
||||
|
||||
/** Returns the Photo JPEG data size.
|
||||
* \param instance \p ragephoto_t instance
|
||||
*/
|
||||
LIBRAGEPHOTO_C_PUBLIC uint32_t ragephoto_getphotosize(ragephoto_t instance);
|
||||
|
||||
/** Returns the Photo title.
|
||||
* \param instance \p ragephoto_t instance
|
||||
*/
|
||||
LIBRAGEPHOTO_C_PUBLIC const char* ragephoto_getphototitle(ragephoto_t instance);
|
||||
|
||||
/** Returns the Photo save file size.
|
||||
* \param instance \p ragephoto_t instance
|
||||
*/
|
||||
LIBRAGEPHOTO_C_PUBLIC size_t ragephoto_getsavesize(ragephoto_t instance);
|
||||
|
||||
/** Returns the Photo save file size.
|
||||
* \param rp_data RagePhotoData object
|
||||
* \param rp_parser RagePhotoFormatParser parser array
|
||||
*/
|
||||
LIBRAGEPHOTO_C_PUBLIC size_t ragephotodata_getsavesize(RagePhotoData *rp_data, RagePhotoFormatParser *rp_parser);
|
||||
|
||||
/** Returns the Photo save file size.
|
||||
* \param instance \p ragephoto_t instance
|
||||
* \param photoFormat Photo Format (GTA V or RDR 2)
|
||||
*/
|
||||
LIBRAGEPHOTO_C_PUBLIC size_t ragephoto_getsavesizef(ragephoto_t instance, uint32_t photoFormat);
|
||||
|
||||
/** Returns the Photo save file size.
|
||||
* \param rp_data RagePhotoData object
|
||||
* \param rp_parser RagePhotoFormatParser parser array
|
||||
* \param photoFormat Photo Format (GTA V or RDR 2)
|
||||
*/
|
||||
LIBRAGEPHOTO_C_PUBLIC size_t ragephotodata_getsavesizef(RagePhotoData *rp_data, RagePhotoFormatParser *rp_parser, uint32_t photoFormat);
|
||||
|
||||
/** Saves a Photo to a char*.
|
||||
* \param instance \p ragephoto_t instance
|
||||
* \param data Photo data
|
||||
*/
|
||||
LIBRAGEPHOTO_C_PUBLIC bool ragephoto_save(ragephoto_t instance, char *data);
|
||||
|
||||
/** Saves a Photo to a char*.
|
||||
* \param rp_data RagePhotoData object
|
||||
* \param rp_parser RagePhotoFormatParser parser array
|
||||
* \param data Photo data
|
||||
*/
|
||||
LIBRAGEPHOTO_C_PUBLIC bool ragephotodata_save(RagePhotoData *rp_data, RagePhotoFormatParser *rp_parser, 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_PUBLIC bool ragephoto_savef(ragephoto_t instance, char *data, uint32_t photoFormat);
|
||||
|
||||
/** Saves a Photo to a char*.
|
||||
* \param rp_data RagePhotoData object
|
||||
* \param rp_parser RagePhotoFormatParser parser array
|
||||
* \param data Photo data
|
||||
* \param photoFormat Photo Format (GTA V or RDR 2)
|
||||
*/
|
||||
LIBRAGEPHOTO_C_PUBLIC bool ragephotodata_savef(RagePhotoData *rp_data, RagePhotoFormatParser *rp_parser, char *data, uint32_t photoFormat);
|
||||
|
||||
/** Saves a Photo to a file.
|
||||
* \param instance \p ragephoto_t instance
|
||||
* \param filename File to save
|
||||
*/
|
||||
LIBRAGEPHOTO_C_PUBLIC bool 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_PUBLIC bool 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_PUBLIC void ragephoto_setbufferdefault(ragephoto_t instance);
|
||||
|
||||
/** Sets all cross-format Buffer to default size.
|
||||
* \param rp_data RagePhotoData object
|
||||
*/
|
||||
LIBRAGEPHOTO_C_PUBLIC void ragephotodata_setbufferdefault(RagePhotoData *rp_data);
|
||||
|
||||
/** Moves all Buffer offsets to correct position.
|
||||
* \param instance \p ragephoto_t instance
|
||||
*/
|
||||
LIBRAGEPHOTO_C_PUBLIC void ragephoto_setbufferoffsets(ragephoto_t instance);
|
||||
|
||||
/** Moves all Buffer offsets to correct position.
|
||||
* \param rp_data RagePhotoData object
|
||||
*/
|
||||
LIBRAGEPHOTO_C_PUBLIC void ragephotodata_setbufferoffsets(RagePhotoData *rp_data);
|
||||
|
||||
/** Sets the internal RagePhotoData object.
|
||||
* \param instance \p ragephoto_t instance
|
||||
* \param rp_data RagePhotoData object being set
|
||||
*/
|
||||
LIBRAGEPHOTO_C_PUBLIC bool ragephoto_setphotodata(ragephoto_t instance, RagePhotoData *rp_data);
|
||||
|
||||
/** Copies RagePhotoData object to internal RagePhotoData object.
|
||||
* \param instance \p ragephoto_t instance
|
||||
* \param rp_data RagePhotoData object being copied
|
||||
*/
|
||||
LIBRAGEPHOTO_C_PUBLIC bool ragephoto_setphotodatac(ragephoto_t instance, RagePhotoData *rp_data);
|
||||
|
||||
/** Sets the Photo description.
|
||||
* \param instance \p ragephoto_t instance
|
||||
* \param description Description
|
||||
* \param bufferSize Description buffer size
|
||||
*
|
||||
* Default bufferSize: 256UL
|
||||
*/
|
||||
LIBRAGEPHOTO_C_PUBLIC 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_PUBLIC void ragephoto_setphotoformat(ragephoto_t instance, uint32_t photoFormat);
|
||||
|
||||
/** Sets the Photo JPEG data.
|
||||
* \param instance \p ragephoto_t instance
|
||||
* \param data JPEG data
|
||||
* \param size JPEG data size
|
||||
* \param bufferSize JPEG buffer size
|
||||
*
|
||||
* Default bufferSize: ragephoto_defpbuf_gta5() or ragephoto_defpbuf_rdr2()
|
||||
*/
|
||||
LIBRAGEPHOTO_C_PUBLIC bool 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
|
||||
* \param json JSON data
|
||||
* \param bufferSize JSON data buffer size
|
||||
*
|
||||
* Default bufferSize: 3072UL
|
||||
*/
|
||||
LIBRAGEPHOTO_C_PUBLIC void ragephoto_setphotojson(ragephoto_t instance, const char *json, uint32_t bufferSize);
|
||||
|
||||
/** Sets the Photo header. */
|
||||
LIBRAGEPHOTO_C_PUBLIC void ragephoto_setphotoheader(ragephoto_t instance, const char *header, uint32_t headerSum);
|
||||
|
||||
/** Sets the Photo header. (RDR 2) */
|
||||
LIBRAGEPHOTO_C_PUBLIC void ragephoto_setphotoheader2(ragephoto_t instance, const char *header, uint32_t headerSum, uint32_t headerSum2);
|
||||
|
||||
/** Sets the Photo title.
|
||||
* \param instance \p ragephoto_t instance
|
||||
* \param title Title
|
||||
* \param bufferSize Title buffer size
|
||||
*
|
||||
* Default bufferSize: 256UL
|
||||
*/
|
||||
LIBRAGEPHOTO_C_PUBLIC 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_PUBLIC void ragephoto_close(ragephoto_t instance);
|
||||
|
||||
/** Returns the library version. */
|
||||
LIBRAGEPHOTO_C_PUBLIC const char* ragephoto_version();
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif // __cplusplus
|
||||
|
||||
#endif // RAGEPHOTO_H
|
||||
191
src/core/RagePhoto.hpp
Normal file
191
src/core/RagePhoto.hpp
Normal file
|
|
@ -0,0 +1,191 @@
|
|||
/*****************************************************************************
|
||||
* 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 RAGEPHOTO_HPP
|
||||
#define RAGEPHOTO_HPP
|
||||
|
||||
#ifdef __cplusplus
|
||||
#include "RagePhotoLibrary.h"
|
||||
#include "RagePhotoTypedefs.h"
|
||||
#include <iostream>
|
||||
#include <cstdlib>
|
||||
#include <cstdint>
|
||||
#include <cstdio>
|
||||
|
||||
/**
|
||||
* \brief GTA V and RDR 2 Photo Parser.
|
||||
*/
|
||||
class LIBRAGEPHOTO_CXX_PUBLIC RagePhoto
|
||||
{
|
||||
public:
|
||||
/** Default sizes */
|
||||
enum DefaultSize : uint32_t {
|
||||
DEFAULT_GTA5_PHOTOBUFFER = 524288UL, /**< GTA V default Photo Buffer Size */
|
||||
DEFAULT_RDR2_PHOTOBUFFER = 1048576UL, /**< RDR 2 default Photo Buffer Size */
|
||||
DEFAULT_DESCBUFFER = 256UL, /**< Default Description Buffer Size */
|
||||
DEFAULT_JSONBUFFER = 3072UL, /**< Default JSON Buffer Size */
|
||||
DEFAULT_TITLBUFFER = 256UL, /**< Default Title Buffer Size */
|
||||
GTA5_HEADERSIZE = 264UL, /**< GTA V Header Size */
|
||||
RDR2_HEADERSIZE = 272UL, /**< RDR 2 Header Size */
|
||||
};
|
||||
/** Parsing and set errors */
|
||||
enum Error : int32_t {
|
||||
DescBufferTight = 39L, /**< Description Buffer is too tight */
|
||||
DescMallocError = 31L, /**< Description Buffer can't be allocated */
|
||||
DescReadError = 32L, /**< Description can't be read successfully */
|
||||
HeaderBufferTight = 35L, /**< Header Buffer is too tight */
|
||||
HeaderMallocError = 4L, /**< Header Buffer can't be allocated */
|
||||
IncompatibleFormat = 2L, /**< Format is incompatible */
|
||||
IncompleteChecksum = 7L, /**< Header checksum is incomplete */
|
||||
IncompleteDescBuffer = 30L, /**< Description Buffer Size is incomplete */
|
||||
IncompleteDescMarker = 28L, /**< Description Marker is incomplete */
|
||||
IncompleteDescOffset = 11L, /**< Description Offset is incomplete */
|
||||
IncompleteEOF = 8L, /**< End Of File Offset is incomplete */
|
||||
IncompleteHeader = 3L, /**< Header is incomplete */
|
||||
IncompleteJendMarker = 33L, /**< JEND Marker is incomplete */
|
||||
IncompleteJpegMarker = 12L, /**< JPEG Marker is incomplete */
|
||||
IncompleteJsonBuffer = 20L, /**< JSON Buffer Size is incomplete */
|
||||
IncompleteJsonMarker = 18L, /**< JSON Marker incomplete */
|
||||
IncompleteJsonOffset = 9L, /**< JSON Offset incomplete */
|
||||
IncompletePhotoBuffer = 14L, /**< Photo Buffer Size is incomplete */
|
||||
IncompletePhotoSize = 15L, /**< Photo Size is incomplete */
|
||||
IncompleteTitleBuffer = 25L, /**< Title Buffer Size is incomplete */
|
||||
IncompleteTitleMarker = 23L, /**< Title Marker is incomplete */
|
||||
IncompleteTitleOffset = 10L, /**< Title Offset is incomplete */
|
||||
IncorrectDescMarker = 29L, /**< Description Marker is incorrect */
|
||||
IncorrectJendMarker = 34L, /**< JEND Marker is incorrect */
|
||||
IncorrectJpegMarker = 13L, /**< JPEG Marker is incorrect */
|
||||
IncorrectJsonMarker = 19L, /**< JSON Marker is incorrect */
|
||||
IncorrectTitleMarker = 24L, /**< Title Marker is incorrect */
|
||||
JsonBufferTight = 37L, /**< JSON Buffer is too tight */
|
||||
JsonMallocError = 21L, /**< JSON Buffer can't be allocated */
|
||||
JsonReadError = 22L, /**< JSON can't be read successfully */
|
||||
NoError = 255L, /**< Finished without errors */
|
||||
NoFormatIdentifier = 1L, /**< No format detected, empty file */
|
||||
PhotoBufferTight = 36L, /**< Photo Buffer is too tight */
|
||||
PhotoMallocError = 16L, /**< Photo Buffer can't be allocated */
|
||||
PhotoReadError = 17L, /**< Photo can't be read */
|
||||
TitleBufferTight = 38L, /**< Title Buffer is too tight */
|
||||
TitleMallocError = 26L, /**< Title Buffer can't be allocated */
|
||||
TitleReadError = 27L, /**< Title can't be read */
|
||||
UnicodeInitError = 5L, /**< Failed to initialise Unicode decoder */
|
||||
UnicodeHeaderError = 6L, /**< Header can't be encoded/decoded successfully */
|
||||
Uninitialised = 0L, /**< Uninitialised, file access failed */
|
||||
};
|
||||
/** Photo Formats */
|
||||
enum PhotoFormat : uint32_t {
|
||||
GTA5 = 0x01000000UL, /**< GTA V Photo Format */
|
||||
RDR2 = 0x04000000UL, /**< RDR 2 Photo Format */
|
||||
};
|
||||
/** Sign Initials */
|
||||
enum SignInitials : uint32_t {
|
||||
SIGTA5 = 0xE47AB81CUL, /**< GTA V Sign Initial */
|
||||
SIRDR2 = 0x00FEEB1EUL, /**< RDR 2 Sign Initial */
|
||||
};
|
||||
RagePhoto();
|
||||
~RagePhoto();
|
||||
void addParser(RagePhotoFormatParser *rp_parser); /**< Add a custom defined RagePhotoFormatParser. */
|
||||
static void clear(RagePhotoData *rp_data); /**< Resets the RagePhotoData object to default values. */
|
||||
void clear(); /**< Resets the RagePhotoData object to default values. */
|
||||
RagePhotoData* data(); /**< Returns the internal RagePhotoData object. */
|
||||
static bool load(const char *data, size_t size, RagePhotoData *rp_data, RagePhotoFormatParser *rp_parser); /**< Loads a Photo from a const char*. */
|
||||
/** Loads a Photo from a const char*.
|
||||
* \param data Photo data
|
||||
* \param size Photo data size
|
||||
*/
|
||||
bool load(const char *data, size_t size);
|
||||
/** Loads a Photo from a std::string.
|
||||
* \param data Photo data
|
||||
*/
|
||||
bool load(const std::string &data);
|
||||
/** Loads a Photo from a file.
|
||||
* \param filename File to load
|
||||
*/
|
||||
bool loadFile(const std::string &filename);
|
||||
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 jpeg() const; /**< Returns the Photo JPEG data. */
|
||||
#if (RAGEPHOTO_CXX_STD >= 17) && (__cplusplus >= 201703L)
|
||||
const std::string_view jpeg_view() const; /**< Returns the Photo JPEG data. */
|
||||
#endif
|
||||
const char* jpegData() const; /**< Returns the Photo JPEG data. */
|
||||
static uint64_t jpegSign(uint32_t photoFormat, RagePhotoData *rp_data); /**< Returns the Photo JPEG sign. */
|
||||
static uint64_t jpegSign(RagePhotoData *rp_data); /**< Returns the Photo JPEG sign. */
|
||||
uint64_t jpegSign(uint32_t photoFormat) const; /**< Returns the Photo JPEG sign. */
|
||||
uint64_t jpegSign() const; /**< Returns the Photo JPEG sign. */
|
||||
uint32_t jpegSize() const; /**< Returns the Photo JPEG data size. */
|
||||
const char* description() const; /**< Returns the Photo description. */
|
||||
const char* json() const; /**< Returns the Photo JSON data. */
|
||||
const char* header() const; /**< Returns the Photo header. */
|
||||
const char* title() const; /**< Returns the Photo title. */
|
||||
static const char* version(); /**< Returns the library version. */
|
||||
static bool save(char *data, uint32_t photoFormat, RagePhotoData *rp_data, RagePhotoFormatParser *rp_parser); /**< Saves a Photo to a char*. */
|
||||
static bool save(char *data, RagePhotoData *rp_data, RagePhotoFormatParser *rp_parser); /**< Saves a Photo to a char*. */
|
||||
/** Saves a Photo to a char*.
|
||||
* \param data Photo data
|
||||
* \param photoFormat Photo Format (GTA V or RDR 2)
|
||||
*/
|
||||
bool save(char *data, uint32_t photoFormat);
|
||||
/** Saves a Photo to a char*.
|
||||
* \param data Photo data
|
||||
*/
|
||||
bool save(char *data);
|
||||
/** Saves a Photo to a std::string.
|
||||
* \param photoFormat Photo Format (GTA V or RDR 2)
|
||||
* \param ok \p true when saved successfully
|
||||
*/
|
||||
const std::string save(uint32_t photoFormat, bool *ok = nullptr);
|
||||
/** Saves a Photo to a std::string.
|
||||
* \param ok \p true when saved successfully
|
||||
*/
|
||||
const std::string save(bool *ok = nullptr);
|
||||
bool saveFile(const std::string &filename, uint32_t photoFormat); /**< Saves a Photo to a file. */
|
||||
bool saveFile(const std::string &filename); /**< Saves a Photo to a file. */
|
||||
static size_t saveSize(uint32_t photoFormat, RagePhotoData *rp_data, RagePhotoFormatParser *rp_parser); /**< Returns the Photo save file size. */
|
||||
static size_t saveSize(RagePhotoData *rp_data, RagePhotoFormatParser *rp_parser); /**< Returns the Photo save file size. */
|
||||
size_t saveSize(uint32_t photoFormat); /**< Returns the Photo save file size. */
|
||||
size_t saveSize(); /**< Returns the Photo save file size. */
|
||||
static void setBufferDefault(RagePhotoData *rp_data); /**< Sets all cross-format Buffer to default size. */
|
||||
void setBufferDefault(); /**< Sets all cross-format Buffer to default size. */
|
||||
static void setBufferOffsets(RagePhotoData *rp_data); /**< Moves all Buffer offsets to correct position. */
|
||||
void setBufferOffsets(); /**< Moves all Buffer offsets to correct position. */
|
||||
bool setData(RagePhotoData *rp_data, bool takeCopy = true); /**< Sets the internal RagePhotoData object. */
|
||||
void setDescription(const char *description, uint32_t bufferSize = 0); /**< Sets the Photo description. */
|
||||
void setFormat(uint32_t photoFormat); /**< Sets the Photo Format (GTA V or RDR 2). */
|
||||
/** Sets the Photo JPEG data.
|
||||
* \param data JPEG data
|
||||
* \param size JPEG data size
|
||||
* \param bufferSize JPEG buffer size
|
||||
*/
|
||||
bool setJpeg(const char *data, uint32_t size, uint32_t bufferSize = 0);
|
||||
/** Sets the Photo JPEG data.
|
||||
* \param data JPEG data
|
||||
* \param bufferSize JPEG buffer size
|
||||
*/
|
||||
bool setJpeg(const std::string &data, uint32_t bufferSize = 0);
|
||||
void setJson(const char *json, uint32_t bufferSize = 0); /**< Sets the Photo JSON data. */
|
||||
void setHeader(const char *header, uint32_t headerSum, uint32_t headerSum2 = 0); /**< Sets the Photo header. */
|
||||
void setTitle(const char *title, uint32_t bufferSize = 0); /**< Sets the Photo title. */
|
||||
|
||||
private:
|
||||
RagePhotoData *m_data;
|
||||
RagePhotoFormatParser *m_parser;
|
||||
};
|
||||
#endif // __cplusplus
|
||||
|
||||
#endif // RAGEPHOTO_HPP
|
||||
1
src/core/RagePhotoA
Normal file
1
src/core/RagePhotoA
Normal file
|
|
@ -0,0 +1 @@
|
|||
#include "RagePhotoA.hpp"
|
||||
347
src/core/RagePhotoA.hpp
Normal file
347
src/core/RagePhotoA.hpp
Normal file
|
|
@ -0,0 +1,347 @@
|
|||
/*****************************************************************************
|
||||
* 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 RAGEPHOTOA_HPP
|
||||
#define RAGEPHOTOA_HPP
|
||||
|
||||
#ifdef __cplusplus
|
||||
#include "RagePhoto.h"
|
||||
#include <cstdlib>
|
||||
#include <iostream>
|
||||
|
||||
/**
|
||||
* \brief GTA V and RDR 2 Photo Parser (C API wrapper).
|
||||
*/
|
||||
class RagePhotoA
|
||||
{
|
||||
public:
|
||||
/** Default sizes */
|
||||
enum DefaultSize : uint32_t {
|
||||
DEFAULT_GTA5_PHOTOBUFFER = 524288UL, /**< GTA V default Photo Buffer Size */
|
||||
DEFAULT_RDR2_PHOTOBUFFER = 1048576UL, /**< RDR 2 default Photo Buffer Size */
|
||||
DEFAULT_DESCBUFFER = 256UL, /**< Default Description Buffer Size */
|
||||
DEFAULT_JSONBUFFER = 3072UL, /**< Default JSON Buffer Size */
|
||||
DEFAULT_TITLBUFFER = 256UL, /**< Default Title Buffer Size */
|
||||
GTA5_HEADERSIZE = 264UL, /**< GTA V Header Size */
|
||||
RDR2_HEADERSIZE = 272UL, /**< RDR 2 Header Size */
|
||||
};
|
||||
/** Parsing and set errors */
|
||||
enum Error : int32_t {
|
||||
DescBufferTight = 39L, /**< Description Buffer is too tight */
|
||||
DescMallocError = 31L, /**< Description Buffer can't be allocated */
|
||||
DescReadError = 32L, /**< Description can't be read successfully */
|
||||
HeaderBufferTight = 35L, /**< Header Buffer is too tight */
|
||||
HeaderMallocError = 4L, /**< Header Buffer can't be allocated */
|
||||
IncompatibleFormat = 2L, /**< Format is incompatible */
|
||||
IncompleteChecksum = 7L, /**< Header checksum is incomplete */
|
||||
IncompleteDescBuffer = 30L, /**< Description Buffer Size is incomplete */
|
||||
IncompleteDescMarker = 28L, /**< Description Marker is incomplete */
|
||||
IncompleteDescOffset = 11L, /**< Description Offset is incomplete */
|
||||
IncompleteEOF = 8L, /**< End Of File Offset is incomplete */
|
||||
IncompleteHeader = 3L, /**< Header is incomplete */
|
||||
IncompleteJendMarker = 33L, /**< JEND Marker is incomplete */
|
||||
IncompleteJpegMarker = 12L, /**< JPEG Marker is incomplete */
|
||||
IncompleteJsonBuffer = 20L, /**< JSON Buffer Size is incomplete */
|
||||
IncompleteJsonMarker = 18L, /**< JSON Marker incomplete */
|
||||
IncompleteJsonOffset = 9L, /**< JSON Offset incomplete */
|
||||
IncompletePhotoBuffer = 14L, /**< Photo Buffer Size is incomplete */
|
||||
IncompletePhotoSize = 15L, /**< Photo Size is incomplete */
|
||||
IncompleteTitleBuffer = 25L, /**< Title Buffer Size is incomplete */
|
||||
IncompleteTitleMarker = 23L, /**< Title Marker is incomplete */
|
||||
IncompleteTitleOffset = 10L, /**< Title Offset is incomplete */
|
||||
IncorrectDescMarker = 29L, /**< Description Marker is incorrect */
|
||||
IncorrectJendMarker = 34L, /**< JEND Marker is incorrect */
|
||||
IncorrectJpegMarker = 13L, /**< JPEG Marker is incorrect */
|
||||
IncorrectJsonMarker = 19L, /**< JSON Marker is incorrect */
|
||||
IncorrectTitleMarker = 24L, /**< Title Marker is incorrect */
|
||||
JsonBufferTight = 37L, /**< JSON Buffer is too tight */
|
||||
JsonMallocError = 21L, /**< JSON Buffer can't be allocated */
|
||||
JsonReadError = 22L, /**< JSON can't be read successfully */
|
||||
NoError = 255L, /**< Finished without errors */
|
||||
NoFormatIdentifier = 1L, /**< No format detected, empty file */
|
||||
PhotoBufferTight = 36L, /**< Photo Buffer is too tight */
|
||||
PhotoMallocError = 16L, /**< Photo Buffer can't be allocated */
|
||||
PhotoReadError = 17L, /**< Photo can't be read */
|
||||
TitleBufferTight = 38L, /**< Title Buffer is too tight */
|
||||
TitleMallocError = 26L, /**< Title Buffer can't be allocated */
|
||||
TitleReadError = 27L, /**< Title can't be read */
|
||||
UnicodeInitError = 5L, /**< Failed to initialise Unicode decoder */
|
||||
UnicodeHeaderError = 6L, /**< Header can't be encoded/decoded successfully */
|
||||
Uninitialised = 0L, /**< Uninitialised, file access failed */
|
||||
};
|
||||
/** Photo Formats */
|
||||
enum PhotoFormat : uint32_t {
|
||||
GTA5 = 0x01000000UL, /**< GTA V Photo Format */
|
||||
RDR2 = 0x04000000UL, /**< RDR 2 Photo Format */
|
||||
};
|
||||
/** Sign Initials */
|
||||
enum SignInitials : uint32_t {
|
||||
SIGTA5 = 0xE47AB81CUL, /**< GTA V Sign Initial */
|
||||
SIRDR2 = 0x00FEEB1EUL, /**< RDR 2 Sign Initial */
|
||||
};
|
||||
RagePhotoA() {
|
||||
instance = ragephoto_open();
|
||||
if (!instance)
|
||||
throw std::runtime_error("ragephoto_t instance can't be allocated");
|
||||
}
|
||||
~RagePhotoA() {
|
||||
ragephoto_close(instance);
|
||||
}
|
||||
/** Add a custom defined RagePhotoFormatParser. */
|
||||
void addParser(RagePhotoFormatParser *rp_parser) {
|
||||
ragephoto_addparser(instance, rp_parser);
|
||||
}
|
||||
/** Resets the RagePhotoData object to default values. */
|
||||
static void clear(RagePhotoData *rp_data) {
|
||||
ragephotodata_clear(rp_data);
|
||||
}
|
||||
/** Resets the RagePhotoData object to default values. */
|
||||
void clear() {
|
||||
ragephoto_clear(instance);
|
||||
}
|
||||
/** Returns the internal RagePhotoData object. */
|
||||
RagePhotoData* data() {
|
||||
return ragephoto_getphotodata(instance);
|
||||
}
|
||||
/** Loads a Photo from a const char*. */
|
||||
static bool load(const char *data, size_t size, RagePhotoData *rp_data, RagePhotoFormatParser *rp_parser) {
|
||||
return ragephotodata_load(rp_data, rp_parser, data, size);
|
||||
}
|
||||
/** Loads a Photo from a const char*.
|
||||
* \param data Photo data
|
||||
* \param size Photo data size
|
||||
*/
|
||||
bool load(const char *data, size_t size) {
|
||||
return ragephoto_load(instance, data, size);
|
||||
}
|
||||
/** Loads a Photo from a std::string.
|
||||
* \param data Photo data
|
||||
*/
|
||||
bool load(const std::string &data) {
|
||||
return ragephoto_load(instance, data.data(), data.size());
|
||||
}
|
||||
/** Loads a Photo from a file.
|
||||
* \param filename File to load
|
||||
*/
|
||||
bool loadFile(const char *filename) {
|
||||
return ragephoto_loadfile(instance, filename);
|
||||
}
|
||||
/** Returns the last error occurred. */
|
||||
int32_t error() const {
|
||||
return ragephoto_error(instance);
|
||||
}
|
||||
/** Returns the Photo Format (GTA V or RDR 2). */
|
||||
uint32_t format() const {
|
||||
return ragephoto_getphotoformat(instance);
|
||||
}
|
||||
/** Returns the Photo JPEG data. */
|
||||
const std::string jpeg() const {
|
||||
const char *jpegData = ragephoto_getphotojpeg(instance);
|
||||
if (jpegData)
|
||||
return std::string(jpegData, ragephoto_getphotosize(instance));
|
||||
else
|
||||
return std::string();
|
||||
}
|
||||
#if (__cplusplus >= 201703L)
|
||||
/** Returns the Photo JPEG data. */
|
||||
const std::string_view jpeg_view() const {
|
||||
const char *jpegData = ragephoto_getphotojpeg(instance);
|
||||
if (jpegData)
|
||||
return std::string_view(jpegData, ragephoto_getphotosize(instance));
|
||||
else
|
||||
return std::string_view();
|
||||
}
|
||||
#endif
|
||||
/** Returns the Photo JPEG data. */
|
||||
const char* jpegData() const {
|
||||
return ragephoto_getphotojpeg(instance);
|
||||
}
|
||||
/** Returns the Photo JPEG sign. */
|
||||
static uint64_t jpegSign(uint32_t photoFormat, RagePhotoData *rp_data) {
|
||||
return ragephotodata_getphotosignf(rp_data, photoFormat);
|
||||
}
|
||||
/** Returns the Photo JPEG sign. */
|
||||
static uint64_t jpegSign(RagePhotoData *rp_data) {
|
||||
return ragephotodata_getphotosign(rp_data);
|
||||
}
|
||||
/** Returns the Photo JPEG sign. */
|
||||
uint64_t jpegSign(uint32_t photoFormat) const {
|
||||
return ragephoto_getphotosignf(instance, photoFormat);
|
||||
}
|
||||
/** Returns the Photo JPEG sign. */
|
||||
uint64_t jpegSign() const {
|
||||
return ragephoto_getphotosign(instance);
|
||||
}
|
||||
/** Returns the Photo JPEG data size. */
|
||||
uint32_t jpegSize() const {
|
||||
return ragephoto_getphotosize(instance);
|
||||
}
|
||||
/** Returns the Photo description. */
|
||||
const char* description() const {
|
||||
return ragephoto_getphotodesc(instance);
|
||||
}
|
||||
/** Returns the Photo JSON data. */
|
||||
const char* json() const {
|
||||
return ragephoto_getphotojson(instance);
|
||||
}
|
||||
/** Returns the Photo header. */
|
||||
const char* header() const {
|
||||
return ragephoto_getphotoheader(instance);
|
||||
}
|
||||
/** Returns the Photo title. */
|
||||
const char* title() const {
|
||||
return ragephoto_getphototitle(instance);
|
||||
}
|
||||
/** Returns the library version. */
|
||||
static const char* version() {
|
||||
return ragephoto_version();
|
||||
}
|
||||
/** Saves a Photo to a char*. */
|
||||
static bool save(char *data, uint32_t photoFormat, RagePhotoData *rp_data, RagePhotoFormatParser *rp_parser) {
|
||||
return ragephotodata_savef(rp_data, rp_parser, data, photoFormat);
|
||||
}
|
||||
/** Saves a Photo to a char*. */
|
||||
static bool save(char *data, RagePhotoData *rp_data, RagePhotoFormatParser *rp_parser) {
|
||||
return ragephotodata_save(rp_data, rp_parser, data);
|
||||
}
|
||||
/** Saves a Photo to a char*.
|
||||
* \param data Photo data
|
||||
* \param photoFormat Photo Format (GTA V or RDR 2)
|
||||
*/
|
||||
bool save(char *data, uint32_t photoFormat) {
|
||||
return ragephoto_savef(instance, data, photoFormat);
|
||||
}
|
||||
/** Saves a Photo to a char*.
|
||||
* \param data Photo data
|
||||
*/
|
||||
bool save(char *data) {
|
||||
return ragephoto_save(instance, data);
|
||||
}
|
||||
/** Saves a Photo to a std::string.
|
||||
* \param photoFormat Photo Format (GTA V or RDR 2)
|
||||
* \param ok \p true when saved successfully
|
||||
*/
|
||||
const std::string save(uint32_t photoFormat, bool *ok = nullptr) {
|
||||
std::string sdata;
|
||||
const size_t size = ragephoto_getsavesizef(instance, photoFormat);
|
||||
if (size == 0) {
|
||||
if (ok)
|
||||
*ok = false;
|
||||
return sdata;
|
||||
}
|
||||
sdata.resize(size);
|
||||
const bool saved = ragephoto_savef(instance, &sdata[0], photoFormat);
|
||||
if (ok)
|
||||
*ok = saved;
|
||||
return sdata;
|
||||
}
|
||||
/** Saves a Photo to a std::string.
|
||||
* \param ok \p true when saved successfully
|
||||
*/
|
||||
const std::string save(bool *ok = nullptr) {
|
||||
return save(ragephoto_getphotoformat(instance), ok);
|
||||
}
|
||||
/** Saves a Photo to a file. */
|
||||
bool saveFile(const char *filename, uint32_t photoFormat) {
|
||||
return ragephoto_savefilef(instance, filename, photoFormat);
|
||||
}
|
||||
/** Saves a Photo to a file. */
|
||||
bool saveFile(const char *filename) {
|
||||
return ragephoto_savefile(instance, filename);
|
||||
}
|
||||
/** Returns the Photo save file size. */
|
||||
static size_t saveSize(uint32_t photoFormat, RagePhotoData *rp_data, RagePhotoFormatParser *rp_parser) {
|
||||
return ragephotodata_getsavesizef(rp_data, rp_parser, photoFormat);
|
||||
}
|
||||
/** Returns the Photo save file size. */
|
||||
static size_t saveSize(RagePhotoData *rp_data, RagePhotoFormatParser *rp_parser) {
|
||||
return ragephotodata_getsavesize(rp_data, rp_parser);
|
||||
}
|
||||
/** Returns the Photo save file size. */
|
||||
size_t saveSize(uint32_t photoFormat) {
|
||||
return ragephoto_getsavesizef(instance, photoFormat);
|
||||
}
|
||||
/** Returns the Photo save file size. */
|
||||
size_t saveSize() {
|
||||
return ragephoto_getsavesize(instance);
|
||||
}
|
||||
/** Sets all cross-format Buffer to default size. */
|
||||
static void setBufferDefault(RagePhotoData *rp_data) {
|
||||
ragephotodata_setbufferdefault(rp_data);
|
||||
}
|
||||
/** Sets all cross-format Buffer to default size. */
|
||||
void setBufferDefault() {
|
||||
ragephoto_setbufferdefault(instance);
|
||||
}
|
||||
/** Moves all Buffer offsets to correct position. */
|
||||
static void setBufferOffsets(RagePhotoData *rp_data) {
|
||||
ragephotodata_setbufferoffsets(rp_data);
|
||||
}
|
||||
/** Moves all Buffer offsets to correct position. */
|
||||
void setBufferOffsets() {
|
||||
ragephoto_setbufferoffsets(instance);
|
||||
}
|
||||
/** Sets the internal RagePhotoData object. */
|
||||
bool setData(RagePhotoData *ragePhotoData, bool takeCopy = true) {
|
||||
if (takeCopy)
|
||||
return ragephoto_setphotodatac(instance, ragePhotoData);
|
||||
else
|
||||
return ragephoto_setphotodata(instance, ragePhotoData);
|
||||
}
|
||||
/** Sets the Photo description. */
|
||||
void setDescription(const char *description, uint32_t bufferSize = 0) {
|
||||
ragephoto_setphotodesc(instance, description, bufferSize);
|
||||
}
|
||||
/** Sets the Photo Format (GTA V or RDR 2). */
|
||||
void setFormat(uint32_t photoFormat) {
|
||||
ragephoto_setphotoformat(instance, photoFormat);
|
||||
}
|
||||
/** Sets the Photo JPEG data.
|
||||
* \param data JPEG data
|
||||
* \param size JPEG data size
|
||||
* \param bufferSize JPEG buffer size
|
||||
*/
|
||||
bool setJpeg(const char *data, uint32_t size, uint32_t bufferSize = 0) {
|
||||
return ragephoto_setphotojpeg(instance, data, size, bufferSize);
|
||||
}
|
||||
/** Sets the Photo JPEG data.
|
||||
* \param data JPEG data
|
||||
* \param bufferSize JPEG buffer size
|
||||
*/
|
||||
bool setJpeg(const std::string &data, uint32_t bufferSize = 0) {
|
||||
return ragephoto_setphotojpeg(instance, data.data(), static_cast<uint32_t>(data.size()), bufferSize);
|
||||
}
|
||||
/** Sets the Photo JSON data. */
|
||||
void setJson(const char *json, uint32_t bufferSize = 0) {
|
||||
ragephoto_setphotojson(instance, json, bufferSize);
|
||||
}
|
||||
/** Sets the Photo header. */
|
||||
void setHeader(const char *header, uint32_t headerSum, uint32_t headerSum2 = 0) {
|
||||
ragephoto_setphotoheader2(instance, header, headerSum, headerSum2);
|
||||
}
|
||||
/** Sets the Photo title. */
|
||||
void setTitle(const char *title, uint32_t bufferSize = 0) {
|
||||
ragephoto_setphototitle(instance, title, bufferSize);
|
||||
}
|
||||
|
||||
private:
|
||||
ragephoto_t instance;
|
||||
};
|
||||
#endif // __cplusplus
|
||||
|
||||
#endif // RAGEPHOTOA_HPP
|
||||
1
src/core/RagePhotoB
Normal file
1
src/core/RagePhotoB
Normal file
|
|
@ -0,0 +1 @@
|
|||
#include "RagePhotoB.hpp"
|
||||
43
src/core/RagePhotoB.hpp
Normal file
43
src/core/RagePhotoB.hpp
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
/*****************************************************************************
|
||||
* 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 RAGEPHOTOB_HPP
|
||||
#define RAGEPHOTOB_HPP
|
||||
|
||||
#ifdef __cplusplus
|
||||
#include "RagePhotoLibrary.h"
|
||||
#ifdef LIBRAGEPHOTO_CXX_ONLY
|
||||
#include "RagePhoto.hpp"
|
||||
typedef RagePhoto RagePhotoB;
|
||||
#elif defined LIBRAGEPHOTO_CXX_C
|
||||
#ifdef LIBRAGEPHOTO_STATIC
|
||||
#include "RagePhoto.hpp"
|
||||
typedef RagePhoto RagePhotoB;
|
||||
#else
|
||||
#include "RagePhotoA.hpp"
|
||||
typedef RagePhotoA RagePhotoB;
|
||||
#endif // LIBRAGEPHOTO_STATIC
|
||||
#elif defined LIBRAGEPHOTO_C_ONLY
|
||||
#include "RagePhotoA.hpp"
|
||||
typedef RagePhotoA RagePhotoB;
|
||||
#else
|
||||
#error "Could not determine best RagePhoto implementation, libragephoto installation might be corrupt!"
|
||||
#endif // LIBRAGEPHOTO_CXX_ONLY
|
||||
#endif // __cplusplus
|
||||
|
||||
#endif // RAGEPHOTOB_HPP
|
||||
32
src/core/RagePhotoConfig.h.in
Normal file
32
src/core/RagePhotoConfig.h.in
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
/*****************************************************************************
|
||||
* 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 RAGEPHOTOCONFIG_H
|
||||
#define RAGEPHOTOCONFIG_H
|
||||
|
||||
/* CMAKE CONFIG BEGIN */
|
||||
#define @LIBRAGEPHOTO_API@
|
||||
#define @LIBRAGEPHOTO_LIBTYPE@
|
||||
#define RAGEPHOTO_CXX_STD @CMAKE_CXX_STANDARD@
|
||||
#define RAGEPHOTO_VERSION "@ragephoto_VERSION@"
|
||||
#define RAGEPHOTO_VERSION_MAJOR @ragephoto_VERSION_MAJOR@
|
||||
#define RAGEPHOTO_VERSION_MINOR @ragephoto_VERSION_MINOR@
|
||||
#define RAGEPHOTO_VERSION_PATCH @ragephoto_VERSION_PATCH@
|
||||
/* CMAKE CONFIG END */
|
||||
|
||||
#endif // RAGEPHOTOCONFIG_H
|
||||
69
src/core/RagePhotoLibrary.h
Normal file
69
src/core/RagePhotoLibrary.h
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
/*****************************************************************************
|
||||
* 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_PUBLIC __declspec(dllexport)
|
||||
#define LIBRAGEPHOTO_CXX_PUBLIC __declspec(dllexport)
|
||||
#else
|
||||
#define LIBRAGEPHOTO_C_PUBLIC __declspec(dllimport)
|
||||
#define LIBRAGEPHOTO_CXX_PUBLIC __declspec(dllimport)
|
||||
#endif // LIBRAGEPHOTO_LIBRARY
|
||||
#else
|
||||
#define LIBRAGEPHOTO_C_PUBLIC
|
||||
#define LIBRAGEPHOTO_CXX_PUBLIC
|
||||
#endif // LIBRAGEPHOTO_STATIC
|
||||
#else
|
||||
#ifdef __EMSCRIPTEN__
|
||||
#include <emscripten/emscripten.h>
|
||||
#define LIBRAGEPHOTO_C_PUBLIC EMSCRIPTEN_KEEPALIVE
|
||||
#define LIBRAGEPHOTO_CXX_PUBLIC
|
||||
#else
|
||||
#ifdef __GNUC__
|
||||
#ifndef LIBRAGEPHOTO_STATIC
|
||||
#define LIBRAGEPHOTO_C_PUBLIC __attribute__((visibility("default")))
|
||||
#define LIBRAGEPHOTO_CXX_PUBLIC __attribute__((visibility("default")))
|
||||
#else
|
||||
#define LIBRAGEPHOTO_C_PUBLIC
|
||||
#define LIBRAGEPHOTO_CXX_PUBLIC
|
||||
#endif // LIBRAGEPHOTO_STATIC
|
||||
#else
|
||||
#define LIBRAGEPHOTO_C_PUBLIC
|
||||
#define LIBRAGEPHOTO_CXX_PUBLIC
|
||||
#endif // __GNUC__
|
||||
#endif // __EMSCRIPTEN__
|
||||
#endif // _WIN32
|
||||
/* RAGEPHOTO LIBRARY BINDING END */
|
||||
|
||||
/* ENABLE C API FOR LIBRAGEPHOTO WASM LIBRARY BEGIN */
|
||||
#ifdef LIBRAGEPHOTO_WASM
|
||||
#ifdef LIBRAGEPHOTO_CXX_ONLY
|
||||
#undef LIBRAGEPHOTO_CXX_ONLY
|
||||
#define LIBRAGEPHOTO_CXX_C
|
||||
#endif // LIBRAGEPHOTO_CXX_ONLY
|
||||
#endif // LIBRAGEPHOTO_WASM
|
||||
/* ENABLE C API FOR LIBRAGEPHOTO WASM LIBRARY END */
|
||||
|
||||
#endif // RAGEPHOTOLIBRARY_H
|
||||
143
src/core/RagePhotoTypedefs.h
Normal file
143
src/core/RagePhotoTypedefs.h
Normal file
|
|
@ -0,0 +1,143 @@
|
|||
/*****************************************************************************
|
||||
* 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 <stdbool.h>
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#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; /**< Description buffer length */
|
||||
uint32_t descOffset; /**< Description buffer offset */
|
||||
uint32_t endOfFile; /**< End Of File offset */
|
||||
uint32_t headerSum; /**< Checksum of the header 1 */
|
||||
uint32_t headerSum2; /**< Checksum of the header 2 (RDR 2 only) */
|
||||
uint32_t jpegBuffer; /**< JPEG buffer length */
|
||||
uint32_t jpegSize; /**< Internal JPEG buffer length and size of JPEG */
|
||||
uint32_t jsonBuffer; /**< JSON buffer length */
|
||||
uint32_t jsonOffset; /**< JSON buffer offset */
|
||||
uint32_t photoFormat; /**< Photo file format magic */
|
||||
uint32_t titlBuffer; /**< Title buffer length */
|
||||
uint32_t titlOffset; /**< Title buffer offset */
|
||||
} RagePhotoData;
|
||||
|
||||
/** RagePhoto load function typedef. */
|
||||
typedef bool (*ragephoto_loadfunc_t)(RagePhotoData*, const char*, size_t);
|
||||
|
||||
/** RagePhoto save function typedef (char* allocated by caller). */
|
||||
typedef bool (*ragephoto_savefunc_t)(RagePhotoData*, char*, uint32_t);
|
||||
|
||||
/** RagePhoto save function typedef (char* allocated by function). */
|
||||
typedef bool (*ragephoto_savepfunc_t)(RagePhotoData*, char**, uint32_t);
|
||||
|
||||
/** RagePhoto saveSize function typedef. */
|
||||
typedef size_t (*ragephoto_saveszfunc_t)(RagePhotoData*, uint32_t);
|
||||
|
||||
/** RagePhoto format parser struct for registering custom formats. */
|
||||
typedef struct RagePhotoFormatParser {
|
||||
uint32_t photoFormat; /**< Photo file format magic */
|
||||
ragephoto_loadfunc_t funcLoad; /**< Pointer to load function */
|
||||
ragephoto_savefunc_t funcSave; /**< Pointer to save function */
|
||||
ragephoto_savepfunc_t funcSavep; /**< Pointer to savep function */
|
||||
ragephoto_saveszfunc_t funcSaveSz; /**< Pointer to saveSize function */
|
||||
} RagePhotoFormatParser;
|
||||
|
||||
/** RagePhoto instance struct for storing data and format parser pointer. */
|
||||
typedef struct RagePhotoInstance {
|
||||
RagePhotoData *data; /**< Pointer for data */
|
||||
RagePhotoFormatParser *parser; /**< Pointer for format parser */
|
||||
} RagePhotoInstance;
|
||||
|
||||
/* RagePhoto default sizes */
|
||||
#define RAGEPHOTO_DEFAULT_GTA5_PHOTOBUFFER 524288UL /**< GTA V default Photo Buffer Size */
|
||||
#define RAGEPHOTO_DEFAULT_RDR2_PHOTOBUFFER 1048576UL /**< RDR 2 default Photo Buffer Size */
|
||||
#define RAGEPHOTO_DEFAULT_DESCBUFFER 256UL /**< Default Description Buffer Size */
|
||||
#define RAGEPHOTO_DEFAULT_JSONBUFFER 3072UL /**< Default JSON Buffer Size */
|
||||
#define RAGEPHOTO_DEFAULT_TITLBUFFER 256UL /**< Default Title Buffer Size */
|
||||
#define RAGEPHOTO_GTA5_HEADERSIZE 264UL /**< GTA V Header Size */
|
||||
#define RAGEPHOTO_RDR2_HEADERSIZE 272UL /**< RDR 2 Header Size */
|
||||
|
||||
/* RagePhoto error codes */
|
||||
#define RAGEPHOTO_ERROR_DESCBUFFERTIGHT 39L /**< Description Buffer is too tight */
|
||||
#define RAGEPHOTO_ERROR_DESCMALLOCERROR 31L /**< Description Buffer can't be allocated */
|
||||
#define RAGEPHOTO_ERROR_DESCREADERROR 32L /**< Description can't be read successfully */
|
||||
#define RAGEPHOTO_ERROR_HEADERBUFFERTIGHT 35L /**< Header Buffer is too tight */
|
||||
#define RAGEPHOTO_ERROR_HEADERMALLOCERROR 4L /**< Header Buffer can't be allocated */
|
||||
#define RAGEPHOTO_ERROR_INCOMPATIBLEFORMAT 2L /**< Format is incompatible */
|
||||
#define RAGEPHOTO_ERROR_INCOMPLETECHECKSUM 7L /**< Header checksum is incomplete */
|
||||
#define RAGEPHOTO_ERROR_INCOMPLETEDESCBUFFER 30L /**< Description Buffer Size is incomplete */
|
||||
#define RAGEPHOTO_ERROR_INCOMPLETEDESCMARKER 28L /**< Description Marker is incomplete */
|
||||
#define RAGEPHOTO_ERROR_INCOMPLETEDESCOFFSET 11L /**< Description Offset is incomplete */
|
||||
#define RAGEPHOTO_ERROR_INCOMPLETEEOF 8L /**< End Of File Offset is incomplete */
|
||||
#define RAGEPHOTO_ERROR_INCOMPLETEHEADER 3L /**< Header is incomplete */
|
||||
#define RAGEPHOTO_ERROR_INCOMPLETEJENDMARKER 33L /**< JEND Marker is incomplete */
|
||||
#define RAGEPHOTO_ERROR_INCOMPLETEJPEGMARKER 12L /**< JPEG Marker is incomplete */
|
||||
#define RAGEPHOTO_ERROR_INCOMPLETEJSONBUFFER 20L /**< JSON Buffer Size is incomplete */
|
||||
#define RAGEPHOTO_ERROR_INCOMPLETEJSONMARKER 18L /**< JSON Marker incomplete */
|
||||
#define RAGEPHOTO_ERROR_INCOMPLETEJSONOFFSET 9L /**< JSON Offset incomplete */
|
||||
#define RAGEPHOTO_ERROR_INCOMPLETEPHOTOBUFFER 14L /**< Photo Buffer Size is incomplete */
|
||||
#define RAGEPHOTO_ERROR_INCOMPLETEPHOTOSIZE 15L /**< Photo Size is incomplete */
|
||||
#define RAGEPHOTO_ERROR_INCOMPLETETITLEBUFFER 25L /**< Title Buffer Size is incomplete */
|
||||
#define RAGEPHOTO_ERROR_INCOMPLETETITLEMARKER 23L /**< Title Marker is incomplete */
|
||||
#define RAGEPHOTO_ERROR_INCOMPLETETITLEOFFSET 10L /**< Title Offset is incomplete */
|
||||
#define RAGEPHOTO_ERROR_INCORRECTDESCMARKER 29L /**< Description Marker is incorrect */
|
||||
#define RAGEPHOTO_ERROR_INCORRECTJENDMARKER 34L /**< JEND Marker is incorrect */
|
||||
#define RAGEPHOTO_ERROR_INCORRECTJPEGMARKER 13L /**< JPEG Marker is incorrect */
|
||||
#define RAGEPHOTO_ERROR_INCORRECTJSONMARKER 19L /**< JSON Marker is incorrect */
|
||||
#define RAGEPHOTO_ERROR_INCORRECTTITLEMARKER 24L /**< Title Marker is incorrect */
|
||||
#define RAGEPHOTO_ERROR_JSONBUFFERTIGHT 37L /**< JSON Buffer is too tight */
|
||||
#define RAGEPHOTO_ERROR_JSONMALLOCERROR 21L /**< JSON Buffer can't be allocated */
|
||||
#define RAGEPHOTO_ERROR_JSONREADERROR 22L /**< JSON can't be read successfully */
|
||||
#define RAGEPHOTO_ERROR_NOERROR 255L /**< Finished without errors */
|
||||
#define RAGEPHOTO_ERROR_NOFORMATIDENTIFIER 1L /**< No format detected, empty file */
|
||||
#define RAGEPHOTO_ERROR_PHOTOBUFFERTIGHT 36L /**< Photo Buffer is too tight */
|
||||
#define RAGEPHOTO_ERROR_PHOTOMALLOCERROR 16L /**< Photo Buffer can't be allocated */
|
||||
#define RAGEPHOTO_ERROR_PHOTOREADERROR 17L /**< Photo can't be read */
|
||||
#define RAGEPHOTO_ERROR_TITLEBUFFERTIGHT 38L /**< Title Buffer is too tight */
|
||||
#define RAGEPHOTO_ERROR_TITLEMALLOCERROR 26L /**< Title Buffer can't be allocated */
|
||||
#define RAGEPHOTO_ERROR_TITLEREADERROR 27L /**< Title can't be read */
|
||||
#define RAGEPHOTO_ERROR_UNICODEINITERROR 5L /**< Failed to initialise Unicode decoder */
|
||||
#define RAGEPHOTO_ERROR_UNICODEHEADERERROR 6L /**< Header can't be encoded/decoded successfully */
|
||||
#define RAGEPHOTO_ERROR_UNINITIALISED 0L /**< Uninitialised, file access failed */
|
||||
|
||||
/* RagePhoto formats */
|
||||
#define RAGEPHOTO_FORMAT_GTA5 0x01000000UL /**< GTA V Photo Format */
|
||||
#define RAGEPHOTO_FORMAT_RDR2 0x04000000UL /**< RDR 2 Photo Format */
|
||||
|
||||
/* RagePhoto sign initials */
|
||||
#define RAGEPHOTO_SIGNINITIAL_GTA5 0xE47AB81CUL /**< GTA V Sign Initial */
|
||||
#define RAGEPHOTO_SIGNINITIAL_RDR2 0x00FEEB1EUL /**< RDR 2 Sign Initial */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif // __cplusplus
|
||||
|
||||
#endif // RAGEPHOTOTYPEDEFS_H
|
||||
10
src/core/ragephoto.pc.in
Normal file
10
src/core/ragephoto.pc.in
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
prefix=@CMAKE_INSTALL_PREFIX@
|
||||
exec_prefix=${prefix}
|
||||
libdir=${prefix}/@CMAKE_INSTALL_LIBDIR@
|
||||
includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@/RagePhoto
|
||||
|
||||
Name: libragephoto
|
||||
Description: Open Source RAGE Photo Parser for GTA V and RDR 2
|
||||
Version: @ragephoto_VERSION@
|
||||
Libs: -L${libdir} -lragephoto
|
||||
Cflags: -I${includedir}
|
||||
29
src/core/ragephoto.rc.in
Normal file
29
src/core/ragephoto.rc.in
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
#include <windows.h>
|
||||
VS_VERSION_INFO VERSIONINFO
|
||||
FILEVERSION @ragephoto_VERSION_MAJOR@, @ragephoto_VERSION_MINOR@, @ragephoto_VERSION_PATCH@, 0
|
||||
PRODUCTVERSION @ragephoto_VERSION_MAJOR@, @ragephoto_VERSION_MINOR@, @ragephoto_VERSION_PATCH@, 0
|
||||
FILEFLAGSMASK 0x3fL
|
||||
FILEFLAGS 0
|
||||
FILEOS VOS_NT_WINDOWS32
|
||||
FILETYPE VFT_APP
|
||||
FILESUBTYPE VFT2_UNKNOWN
|
||||
BEGIN
|
||||
BLOCK "VarFileInfo"
|
||||
BEGIN
|
||||
VALUE "Translation", 0x0, 1200
|
||||
END
|
||||
BLOCK "StringFileInfo"
|
||||
BEGIN
|
||||
BLOCK "040904b0"
|
||||
BEGIN
|
||||
VALUE "CompanyName", "Syping"
|
||||
VALUE "FileDescription", "RAGE Photo Parser for GTA V and RDR 2"
|
||||
VALUE "FileVersion", "@ragephoto_VERSION@"
|
||||
VALUE "InternalName", "libragephoto"
|
||||
VALUE "LegalCopyright", "Copyright © @ragephoto_BUILD_YEAR@ Syping"
|
||||
VALUE "OriginalFilename", "libragephoto.dll"
|
||||
VALUE "ProductName", "libragephoto"
|
||||
VALUE "ProductVersion", "@ragephoto_VERSION@"
|
||||
END
|
||||
END
|
||||
END
|
||||
Loading…
Add table
Add a link
Reference in a new issue