From 1e91f1d335e0d25b84f0b93aceff91f2f7fb9760 Mon Sep 17 00:00:00 2001 From: TazyFoundSoup Date: Tue, 17 Feb 2026 15:43:04 +1100 Subject: feat(bmp): Implement ff_open_bmp function for BMP context initialization --- src/format/image/bmp.c | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) (limited to 'src') 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 -- cgit v1.2.3