add photo and saveSize, change setPhotoData to setPhoto

This commit is contained in:
Syping 2021-09-16 05:02:08 +02:00
parent 87d61c1c69
commit 84b5937c95
2 changed files with 45 additions and 26 deletions

View file

@ -363,6 +363,8 @@ bool RagePhoto::load(const char *data, size_t length)
std::cout << "jsonOffset: " << p_jsonOffset << std::endl; std::cout << "jsonOffset: " << p_jsonOffset << std::endl;
std::cout << "titlOffset: " << p_titlOffset << std::endl; std::cout << "titlOffset: " << p_titlOffset << std::endl;
std::cout << "eofOffset: " << p_endOfFile << std::endl; std::cout << "eofOffset: " << p_endOfFile << std::endl;
std::cout << "calc size: " << saveSize() << std::endl;
std::cout << "real size: " << length << std::endl;
#endif #endif
p_error = Error::NoError; // 255 p_error = Error::NoError; // 255
@ -387,6 +389,14 @@ RagePhoto::PhotoFormat RagePhoto::format()
return p_photoFormat; return p_photoFormat;
} }
const std::string RagePhoto::photo()
{
if (p_photoLoaded)
return std::string(p_photoData, p_photoSize);
else
return std::string();
}
const char* RagePhoto::photoData() const char* RagePhoto::photoData()
{ {
if (p_photoLoaded) if (p_photoLoaded)
@ -423,6 +433,21 @@ const std::string RagePhoto::title()
return p_titleString; return p_titleString;
} }
uint32_t RagePhoto::saveSize(PhotoFormat photoFormat)
{
if (photoFormat == PhotoFormat::GTA5)
return (p_photoBuffer + p_jsonBuffer + p_titlBuffer + p_descBuffer + GTA5_HEADERSIZE + 56UL);
else if (photoFormat == PhotoFormat::RDR2)
return (p_photoBuffer + p_jsonBuffer + p_titlBuffer + p_descBuffer + RDR2_HEADERSIZE + 56UL);
else
return 0UL;
}
uint32_t RagePhoto::saveSize()
{
return saveSize(p_photoFormat);
}
void RagePhoto::setBufferDefault() void RagePhoto::setBufferDefault()
{ {
p_descBuffer = DEFAULT_DESCBUFFER; p_descBuffer = DEFAULT_DESCBUFFER;
@ -460,7 +485,7 @@ void RagePhoto::setHeader(const std::string &header, uint32_t headerSum)
p_headerSum = headerSum; p_headerSum = headerSum;
} }
bool RagePhoto::setPhotoData(const char *data, uint32_t size, uint32_t bufferSize) bool RagePhoto::setPhoto(const char *data, uint32_t size, uint32_t bufferSize)
{ {
if (p_photoLoaded) { if (p_photoLoaded) {
if (p_photoSize > size) { if (p_photoSize > size) {
@ -505,9 +530,9 @@ bool RagePhoto::setPhotoData(const char *data, uint32_t size, uint32_t bufferSiz
return true; return true;
} }
bool RagePhoto::setPhotoData(const std::string &data, uint32_t bufferSize) bool RagePhoto::setPhoto(const std::string &data, uint32_t bufferSize)
{ {
return setPhotoData(data.data(), data.size(), bufferSize); return setPhoto(data.data(), data.size(), bufferSize);
} }
void RagePhoto::setTitle(const std::string &title, uint32_t bufferSize) void RagePhoto::setTitle(const std::string &title, uint32_t bufferSize)
@ -540,14 +565,6 @@ size_t RagePhoto::readBuffer(const char *input, char *output, size_t *pos, size_
return readLen; return readLen;
} }
uint32_t RagePhoto::charToUInt32BE(char *x)
{
return (static_cast<unsigned char>(x[0]) << 24 |
static_cast<unsigned char>(x[1]) << 16 |
static_cast<unsigned char>(x[2]) << 8 |
static_cast<unsigned char>(x[3]));
}
uint32_t RagePhoto::charToUInt32LE(char *x) uint32_t RagePhoto::charToUInt32LE(char *x)
{ {
return (static_cast<unsigned char>(x[3]) << 24 | return (static_cast<unsigned char>(x[3]) << 24 |
@ -556,14 +573,6 @@ uint32_t RagePhoto::charToUInt32LE(char *x)
static_cast<unsigned char>(x[0])); static_cast<unsigned char>(x[0]));
} }
void RagePhoto::uInt32ToCharBE(uint32_t x, char *y)
{
y[0] = x >> 24;
y[1] = x >> 16;
y[2] = x >> 8;
y[3] = x;
}
void RagePhoto::uInt32ToCharLE(uint32_t x, char *y) void RagePhoto::uInt32ToCharLE(uint32_t x, char *y)
{ {
y[0] = x; y[0] = x;

View file

@ -24,11 +24,13 @@
#include <cstdint> #include <cstdint>
#include <cstdio> #include <cstdio>
#define DEFAULT_GTAV_PHOTOBUFFER 524288UL /**< GTA V default Photo Buffer Size */ #define DEFAULT_GTA5_PHOTOBUFFER 524288UL /**< GTA V default Photo Buffer Size */
#define DEFAULT_RDR2_PHOTOBUFFER 1048576UL /**< RDR 2 default Photo Buffer Size */ #define DEFAULT_RDR2_PHOTOBUFFER 1048576UL /**< RDR 2 default Photo Buffer Size */
#define DEFAULT_DESCBUFFER 256UL /**< Default Description Buffer Size */ #define DEFAULT_DESCBUFFER 256UL /**< Default Description Buffer Size */
#define DEFAULT_JSONBUFFER 3072UL /**< Default JSON Buffer Size */ #define DEFAULT_JSONBUFFER 3072UL /**< Default JSON Buffer Size */
#define DEFAULT_TITLBUFFER 256UL /**< Default Title Buffer Size */ #define DEFAULT_TITLBUFFER 256UL /**< Default Title Buffer Size */
#define GTA5_HEADERSIZE 264UL /**< GTA V Header Size */
#define RDR2_HEADERSIZE 272UL /**< RDR 2 Header Size */
class LIBRAGEPHOTO_EXPORT RagePhoto class LIBRAGEPHOTO_EXPORT RagePhoto
{ {
@ -80,16 +82,26 @@ public:
RagePhoto(); RagePhoto();
~RagePhoto(); ~RagePhoto();
void clear(); /**< Resets the RagePhoto instance to default values. */ void clear(); /**< Resets the RagePhoto instance to default values. */
bool load(const char *data, size_t length); /**< Loads a Photo stored inside a const char*. */ /** Loads a Photo from a const char*.
bool load(const std::string &data); /**< Loads a Photo stored inside a std::string. */ * \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);
Error error(); /**< Returns the last error occurred. */ Error error(); /**< Returns the last error occurred. */
PhotoFormat format(); /**< Returns the Photo Format (GTA V or RDR 2). */ PhotoFormat format(); /**< Returns the Photo Format (GTA V or RDR 2). */
const std::string photo(); /**< Returns the Photo JPEG data. */
const char *photoData(); /**< Returns the Photo JPEG data. */ const char *photoData(); /**< Returns the Photo JPEG data. */
uint32_t photoSize(); /**< Returns the Photo JPEG data size. */ uint32_t photoSize(); /**< Returns the Photo JPEG data size. */
const std::string description(); /**< Returns the Photo description. */ const std::string description(); /**< Returns the Photo description. */
const std::string json(); /**< Returns the Photo JSON data. */ const std::string json(); /**< Returns the Photo JSON data. */
const std::string header(); /**< Returns the Photo header. */ const std::string header(); /**< Returns the Photo header. */
const std::string title(); /**< Returns the Photo title. */ const std::string title(); /**< Returns the Photo title. */
uint32_t saveSize(PhotoFormat photoFormat); /**< Returns the save file size. */
uint32_t saveSize(); /**< Returns the save file size. */
void setBufferDefault(); /**< Sets all cross-format Buffer to default size. */ void setBufferDefault(); /**< Sets all cross-format Buffer to default size. */
void setDescription(const std::string &description, uint32_t bufferSize = 0); /**< Sets the Photo description. */ void setDescription(const std::string &description, uint32_t bufferSize = 0); /**< Sets the Photo description. */
void setFormat(PhotoFormat photoFormat); /**< Sets the Photo Format (GTA V or RDR 2). */ void setFormat(PhotoFormat photoFormat); /**< Sets the Photo Format (GTA V or RDR 2). */
@ -100,20 +112,18 @@ public:
* \param size JPEG data size * \param size JPEG data size
* \param bufferSize JPEG buffer size * \param bufferSize JPEG buffer size
*/ */
bool setPhotoData(const char *data, uint32_t size, uint32_t bufferSize = 0); bool setPhoto(const char *data, uint32_t size, uint32_t bufferSize = 0);
/** Sets the Photo JPEG data. /** Sets the Photo JPEG data.
* \param data JPEG data * \param data JPEG data
* \param bufferSize JPEG buffer size * \param bufferSize JPEG buffer size
*/ */
bool setPhotoData(const std::string &data, uint32_t bufferSize = 0); bool setPhoto(const std::string &data, uint32_t bufferSize = 0);
void setTitle(const std::string &title, uint32_t bufferSize = 0); /**< Sets the Photo title. */ void setTitle(const std::string &title, uint32_t bufferSize = 0); /**< Sets the Photo title. */
protected: protected:
inline void moveOffsets(); inline void moveOffsets();
inline size_t readBuffer(const char *input, char *output, size_t *pos, size_t len, size_t inputLen); inline size_t readBuffer(const char *input, char *output, size_t *pos, size_t len, size_t inputLen);
inline uint32_t charToUInt32BE(char *x);
inline uint32_t charToUInt32LE(char *x); inline uint32_t charToUInt32LE(char *x);
inline void uInt32ToCharBE(uint32_t x, char *y);
inline void uInt32ToCharLE(uint32_t x, char *y); inline void uInt32ToCharLE(uint32_t x, char *y);
bool p_photoLoaded; bool p_photoLoaded;
char* p_photoData; char* p_photoData;