diff options
Diffstat (limited to 'src/format/image')
| -rw-r--r-- | src/format/image/bmp.c | 38 |
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 |
