#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; }