summaryrefslogtreecommitdiff
path: root/src/format/image/bmp.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/format/image/bmp.c')
-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