summaryrefslogtreecommitdiff
path: root/src/format
diff options
context:
space:
mode:
authorTazyFoundSoup <gardendistrict0x0@outlook.com>2026-02-17 15:43:04 +1100
committerTazyFoundSoup <gardendistrict0x0@outlook.com>2026-02-17 15:43:04 +1100
commit1e91f1d335e0d25b84f0b93aceff91f2f7fb9760 (patch)
tree2adc58de3f4d47f97f0dea6a48bbf5f219b984f1 /src/format
parentb8de9285970775d539f09f7bc81d3eae24e410e9 (diff)
feat(bmp): Implement ff_open_bmp function for BMP context initialization
Diffstat (limited to 'src/format')
-rw-r--r--src/format/image/bmp.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/format/image/bmp.c b/src/format/image/bmp.c
index d947a83..d1d343c 100644
--- a/src/format/image/bmp.c
+++ b/src/format/image/bmp.c
@@ -24,4 +24,42 @@ ff_result ff_bmp_isvalid(ff_stream* stream)
ff_dprintf("bmp: signature valid\n");
return FF_RESULT_OK;
+}
+
+ff_result ff_open_bmp(ff_stream *stream, ff_bmp_ctx **out_ctx)
+{
+
+ ff_bmp_ctx *ctx = malloc(sizeof(ff_bmp_ctx));
+ if (!ctx) return FF_RESULT_ERROR_MEMORY_ALLOCATION;
+
+ // Init
+ memset(ctx, 0, sizeof(*ctx));
+ ctx->raw = stream;
+ ctx->last_error = FF_RESULT_OK;
+
+
+ if (ctx->raw->read == NULL) {
+ ff_dprintf("bmp: stream failed to read\n");
+ free(ctx);
+ ctx->last_error = FF_RESULT_ERROR_READ_FILE_FAILURE;
+ return FF_RESULT_ERROR_READ_FILE_FAILURE;
+ }
+
+ ff_dprintf("bmp: stream read successfully\n");
+
+ ff_result res = ff_bmp_isvalid(ctx->raw);
+ if (res != FF_RESULT_OK) {
+ ff_dprintf("bmp: validation failed (%d)\n", res);
+ free(ctx);
+ ctx->last_error = res;
+ return res;
+ }
+
+ ff_dprintf("bmp: validation passed\n");
+ ctx->valid = true;
+
+ *out_ctx = ctx;
+ ff_dprintf("bmp: open_bmp reached WIP end\n");
+
+ return FF_RESULT_WARN_NO_IMPL;
} \ No newline at end of file