diff options
| author | 2025-08-12 17:47:45 -0400 | |
|---|---|---|
| committer | 2025-08-12 17:47:45 -0400 | |
| commit | 7e796649557bfeae6eccba751d4a1ffae75de45c (patch) | |
| tree | d58251d50b5db4ecf34b5ef99ff3edf8b86735d2 /src/cache/handlers | |
| parent | 2cc385b71e161eae39915bf24de53d5b704e7ea0 (diff) | |
| download | camu-7e796649557bfeae6eccba751d4a1ffae75de45c.tar.gz camu-7e796649557bfeae6eccba751d4a1ffae75de45c.tar.bz2 camu-7e796649557bfeae6eccba751d4a1ffae75de45c.zip | |
Runtime codec selection, Vulkan deconstruction
Signed-off-by: Andrew Opalach <andrew@akon.city>
Diffstat (limited to 'src/cache/handlers')
| -rw-r--r-- | src/cache/handlers/cdio.c | 4 | ||||
| -rw-r--r-- | src/cache/handlers/file.c | 22 | ||||
| -rw-r--r-- | src/cache/handlers/file.h | 2 | ||||
| -rw-r--r-- | src/cache/handlers/http.c | 4 |
4 files changed, 24 insertions, 8 deletions
diff --git a/src/cache/handlers/cdio.c b/src/cache/handlers/cdio.c index 7c83523..abebeb0 100644 --- a/src/cache/handlers/cdio.c +++ b/src/cache/handlers/cdio.c @@ -119,7 +119,7 @@ static void handler_cdio_free(struct cch_handler **handler) cdio_cddap_close(cdio->drive); } cch_threaded_waits_close(&cdio->waits); - al_str_free(&cdio->handler.liana); + al_str_free(&cdio->handler.handler); al_free(cdio); *handler = NULL; } @@ -198,7 +198,7 @@ struct cch_entry *cch_handler_cdio_create(void) entry->handler->wait_for_range = handler_cdio_wait_for_range; entry->handler->free = handler_cdio_free; entry->handler->entry = entry; - al_str_from(&entry->handler->liana, "cdio"); + al_str_from(&entry->handler->handler, "cdio"); if (!open_cd_drive(cdio)) { return NULL; } diff --git a/src/cache/handlers/file.c b/src/cache/handlers/file.c index 345cdca..dba5649 100644 --- a/src/cache/handlers/file.c +++ b/src/cache/handlers/file.c @@ -1,3 +1,5 @@ +#include "../../codec/codec.h" + #include "../backings/file.h" #include "file.h" @@ -22,15 +24,28 @@ static bool handler_file_wait_for_range(struct cch_handler *handler, struct cch_ return true; } +static s32 handler_file_guess_format(struct cch_handler *handler) +{ + struct cch_handler_file *file = (struct cch_handler_file *)handler; + struct cch_backing_file *backing = (struct cch_backing_file *)file->backing; + str *path = &backing->file.path; + u32 dot = al_str_rfind(path, '.'); + if (dot != AL_STR_NPOS) { + str ext = al_str_substr(path, dot, path->length); + return camu_guess_format(NULL, &ext, NULL); + } + return -1; +} + static void handler_file_free(struct cch_handler **handler) { struct cch_handler_file *file = (struct cch_handler_file *)*handler; - al_str_free(&file->handler.liana); + al_str_free(&file->handler.handler); al_free(file); *handler = NULL; } -struct cch_entry *cch_handler_file_create(str *path, str *liana) +struct cch_entry *cch_handler_file_create(str *path, str *handler) { struct cch_backing *backing = cch_backing_file_create(path, 0); if (!backing) return NULL; @@ -42,8 +57,9 @@ struct cch_entry *cch_handler_file_create(str *path, str *liana) entry->handler->can_seek = handler_file_can_seek; entry->handler->maybe_spawn_worker = handler_file_maybe_spawn_worker; entry->handler->wait_for_range = handler_file_wait_for_range; + entry->handler->guess_format = handler_file_guess_format; entry->handler->free = handler_file_free; entry->handler->entry = entry; - al_str_clone(&entry->handler->liana, liana); + al_str_clone(&entry->handler->handler, handler); return entry; } diff --git a/src/cache/handlers/file.h b/src/cache/handlers/file.h index 4704387..f883498 100644 --- a/src/cache/handlers/file.h +++ b/src/cache/handlers/file.h @@ -10,4 +10,4 @@ struct cch_handler_file { struct cch_backing *backing; }; -struct cch_entry *cch_handler_file_create(str *path, str *liana); +struct cch_entry *cch_handler_file_create(str *path, str *handler); diff --git a/src/cache/handlers/http.c b/src/cache/handlers/http.c index e48490b..1691ea9 100644 --- a/src/cache/handlers/http.c +++ b/src/cache/handlers/http.c @@ -102,7 +102,7 @@ static void handler_http_free(struct cch_handler **handler) cch_threaded_waits_close(&http->waits); al_array_free(http->requests); al_str_free(&http->url); - al_str_free(&http->handler.liana); + al_str_free(&http->handler.handler); al_free(http); *handler = NULL; } @@ -121,7 +121,7 @@ struct cch_entry *cch_handler_http_create(str *url, struct nn_event_loop *loop) entry->handler->wait_for_range = handler_http_wait_for_range; entry->handler->free = handler_http_free; entry->handler->entry = entry; - al_str_from(&entry->handler->liana, "codec"); + al_str_from(&entry->handler->handler, "codec"); http->loop = loop; al_str_clone(&http->url, url); http->pointer = 0; |