68 lines
1.5 KiB
C++
68 lines
1.5 KiB
C++
#include "frame.h"
|
|
|
|
|
|
FILE *make_buffer(const uint8_t *data, const size_t data_len)
|
|
{
|
|
FILE *file = fmemopen((void *)data, data_len, "r+");
|
|
|
|
if (file == NULL)
|
|
{
|
|
perror("Error opening file");
|
|
return NULL;
|
|
}
|
|
|
|
// Seek to the beginning of the file
|
|
rewind(file);
|
|
|
|
// Write the data to the file
|
|
fwrite(data, sizeof(uint8_t), data_len, file);
|
|
|
|
return file;
|
|
}
|
|
|
|
int read_buffer(FILE *file, uint8_t **buffer, size_t *length) {
|
|
if (file != NULL) {
|
|
// Get the file size
|
|
fseek(file, 0, SEEK_END);
|
|
(*length) = ftell(file);
|
|
fseek(file, 0, SEEK_SET);
|
|
|
|
// Allocate memory
|
|
*buffer = (uint8_t *) malloc((*length) * sizeof(char));
|
|
if (buffer == NULL) {
|
|
printf("Error: Unable to allocate memory.\n");
|
|
return 1;
|
|
}
|
|
|
|
// Read file
|
|
size_t newLen = fread(*buffer, sizeof(char), *length, file);
|
|
if (newLen == 0) {
|
|
if (feof(file)) {
|
|
printf("Error: End of file reached.\n");
|
|
return 2;
|
|
}
|
|
printf("Error: Reading file.\n");
|
|
return 3;
|
|
}
|
|
return 4;
|
|
}
|
|
return 5;
|
|
}
|
|
|
|
|
|
Frame *new_frame_from_data(const uint8_t *data, const size_t data_len, int w, int h, int depth)
|
|
{
|
|
FILE *buf = make_buffer(data, data_len);
|
|
return new_frame_from_handle(buf, w, h, depth);
|
|
}
|
|
|
|
|
|
Frame *new_frame_from_handle(FILE *stream, int w, int h, int depth)
|
|
{
|
|
Frame *f = (Frame *)malloc(sizeof(Frame));
|
|
f->stream = stream;
|
|
f->w = w;
|
|
f->h = h;
|
|
f->depth = depth;
|
|
return f;
|
|
} |