libragephoto/src/RagePhoto.h

113 lines
3.5 KiB
C
Raw Normal View History

2021-08-25 00:30:10 +02:00
/*****************************************************************************
* libragephoto RAGE Photo Parser
* Copyright (C) 2021 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 "libragephoto_global.h"
#include <iostream>
#include <cstdint>
#include <cstdio>
class LIBRAGEPHOTO_EXPORT RagePhoto
{
public:
2021-08-26 00:22:11 +02:00
enum class Error : uint8_t {
DescMallocError = 30,
DescReadError = 31,
IncompatibleFormat = 2,
IncompleteChecksum = 6,
IncompleteDescBuffer = 29,
IncompleteDescMarker = 27,
IncompleteDescOffset = 10,
IncompleteEOF = 7,
IncompleteHeader = 3,
IncompleteJendMarker = 32,
IncompleteJpegMarker = 11,
IncompleteJsonBuffer = 19,
IncompleteJsonMarker = 17,
IncompleteJsonOffset = 8,
IncompletePhotoBuffer = 13,
IncompletePhotoSize = 14,
IncompleteTitleBuffer = 24,
IncompleteTitleMarker = 22,
IncompleteTitleOffset = 9,
IncorrectDescMarker = 28,
IncorrectJendMarker = 33,
IncorrectJpegMarker = 12,
IncorrectJsonMarker = 18,
IncorrectTitleMarker = 23,
JsonMallocError = 20,
JsonReadError = 21,
NoError = 255,
NoFormatIdentifier = 1,
PhotoMallocError = 15,
PhotoReadError = 16,
TitleMallocError = 25,
TitleReadError = 26,
UnicodeHeaderError = 5,
UnicodeInitError = 4,
Uninitialised = 0,
};
2021-08-25 00:30:10 +02:00
enum class PhotoFormat : uint32_t {
GTA5 = 0x01000000U,
RDR2 = 0x04000000U,
2021-09-03 18:36:00 +02:00
Undefined = 0,
2021-08-25 00:30:10 +02:00
};
RagePhoto();
~RagePhoto();
2021-08-26 00:22:11 +02:00
void clear();
2021-08-25 00:30:10 +02:00
bool load(const char *data, size_t length);
bool load(const std::string &data);
2021-08-26 00:22:11 +02:00
Error error();
2021-09-03 18:36:00 +02:00
PhotoFormat format();
2021-08-25 00:30:10 +02:00
const char *photoData();
const uint32_t photoSize();
const std::string description();
const std::string json();
const std::string header();
const std::string title();
protected:
2021-08-26 00:22:11 +02:00
inline size_t readBuffer(const char *input, char *output, size_t *pos, size_t len, size_t inputLen);
2021-08-25 00:30:10 +02:00
inline uint32_t charToUInt32BE(char *x);
inline uint32_t charToUInt32LE(char *x);
inline void uInt32ToCharBE(uint32_t x, char *y);
inline void uInt32ToCharLE(uint32_t x, char *y);
2021-08-26 00:22:11 +02:00
bool p_photoLoaded;
2021-08-25 00:30:10 +02:00
char* p_photoData;
2021-08-26 00:22:11 +02:00
Error p_error;
2021-09-03 18:36:00 +02:00
PhotoFormat p_photoFormat;
2021-08-25 00:30:10 +02:00
std::string p_descriptionString;
std::string p_jsonString;
std::string p_photoString;
std::string p_titleString;
uint32_t p_descBuffer;
uint32_t p_descOffset;
uint32_t p_endOfFile;
uint32_t p_headerSum;
uint32_t p_jsonBuffer;
uint32_t p_jsonOffset;
uint32_t p_photoBuffer;
uint32_t p_photoSize;
uint32_t p_titlBuffer;
uint32_t p_titlOffset;
};
#endif // RAGEPHOTO_H