ra8-firmware 0.1.0
Bare-metal firmware for the Renesas RA8 family (RA8D2 / RA8P1)
Loading...
Searching...
No Matches
media_download_format.c
Go to the documentation of this file.
1
12
13#include <stddef.h>
14#include <stdint.h>
15#include <string.h>
16
18#include "ra8_attributes.h"
19
21 uint64_t offset,
22 const uint8_t* source,
23 uint32_t requested,
24 uint32_t* written)
25{
26 if (written == nullptr) {
27 return k_ra8_err_null_ptr;
28 }
29 *written = 0U;
30 if (memory == nullptr) {
31 return k_ra8_err_null_ptr;
32 }
33 if (source == nullptr) {
34 return k_ra8_err_null_ptr;
35 }
36 if (offset > memory->capacity) {
38 }
39 if (requested > ((uint64_t)memory->capacity - offset)) {
41 }
42 if (requested != 0U) {
43 (void)memcpy(&memory->bytes[(size_t)offset], source, requested);
44 }
45 const uint32_t end = (uint32_t)offset + requested;
46 if (end > memory->length) {
47 memory->length = end;
48 }
49 *written = requested;
50 return k_ra8_ok;
51}
52
54 uint32_t offset,
55 uint8_t* destination,
56 uint32_t requested,
57 uint32_t* out_read)
58{
59 if (out_read == nullptr) {
60 return k_ra8_err_null_ptr;
61 }
62 *out_read = 0U;
63 if (context == nullptr) {
64 return k_ra8_err_null_ptr;
65 }
66 if (destination == nullptr) {
67 return k_ra8_err_null_ptr;
68 }
69 const media_download_memory_t* memory = context;
70 if (offset > memory->length) {
72 }
73 if (requested > (memory->length - offset)) {
75 }
76 if (requested != 0U) {
77 (void)memcpy(destination, &memory->bytes[offset], requested);
78 }
79 *out_read = requested;
80 return k_ra8_ok;
81}
82
102 uint32_t offset,
103 const uint8_t* source,
104 uint32_t requested,
105 uint32_t* out_written)
106{
107 return priv_media_download_memory_write_at(context, offset, source, requested, out_written);
108}
109
128 const uint8_t* source,
129 uint32_t requested,
130 uint32_t* out_written)
131{
132 if (context == nullptr) {
133 return k_ra8_err_null_ptr;
134 }
135 media_download_memory_t* memory = context;
137 memory->length,
138 source,
139 requested,
140 out_written);
141}
142
162 uint64_t offset,
163 const uint8_t* source,
164 uint32_t requested,
165 uint32_t* out_written)
166{
167 return priv_media_download_memory_write_at(context, offset, source, requested, out_written);
168}
169
192 size_t source_size,
193 const media_download_format_config_t* config,
194 const media_download_format_workspace_t* workspace,
195 uint64_t* packed_size)
196{
197 if (packed_size == nullptr) {
198 return k_ra8_err_null_ptr;
199 }
200 *packed_size = 0U;
201 if (source == nullptr) {
202 return k_ra8_err_null_ptr;
203 }
204 if (config == nullptr) {
205 return k_ra8_err_null_ptr;
206 }
207 if (workspace == nullptr) {
208 return k_ra8_err_null_ptr;
209 }
210 if (workspace->image == nullptr) {
211 return k_ra8_err_null_ptr;
212 }
213 if (workspace->flat == nullptr) {
214 return k_ra8_err_null_ptr;
215 }
216 if (workspace->packed == nullptr) {
217 return k_ra8_err_null_ptr;
218 }
219 if (source_size == 0U) {
221 }
222 if (workspace->image_cap == 0U) {
224 }
225 if (workspace->flat_cap == 0U) {
227 }
228 if (workspace->packed_cap == 0U) {
230 }
231 return k_ra8_ok;
232}
233
235 size_t source_size,
236 const media_download_format_config_t* config,
238 uint64_t* packed_size)
239{
240 ra8_err_t result =
241 internal_validate_format_request(source, source_size, config, workspace, packed_size);
242 if (result != k_ra8_ok) {
243 return result;
244 }
245 media_download_memory_t image = {.bytes = workspace->image, .capacity = workspace->image_cap};
246 media_download_memory_t flat = {.bytes = workspace->flat, .capacity = workspace->flat_cap};
247 media_download_memory_t packed = {.bytes = workspace->packed, .capacity = workspace->packed_cap};
248 ra8_rabook_comic_t comic = {};
249 result = ra8_rabook_comic_init(&comic,
250 &workspace->comic,
253 &image,
254 config->max_image_edge,
255 config->pixel_format);
256 if (result == k_ra8_ok) {
257 result = ra8_rabook_comic_add_page(&comic, config->page_id, source, source_size);
258 }
259 uint32_t flat_size = 0U;
260 if (result == k_ra8_ok) {
261 result =
262 ra8_rabook_comic_finish(&comic, &config->metadata, internal_flat_append, &flat, &flat_size);
263 }
264 if (result == k_ra8_ok) {
265 if (flat_size != flat.length) {
267 }
268 }
269 if (result == k_ra8_ok) {
271 &flat,
272 flat.length,
273 config->chunk_bytes,
275 &packed,
276 &workspace->container,
277 packed_size);
278 }
279 if (result == k_ra8_ok) {
280 if (*packed_size != packed.length) {
281 *packed_size = 0U;
283 }
284 }
285 return result;
286}
static ra8_err_t internal_packed_write(void *context, uint64_t offset, const uint8_t *source, uint32_t requested, uint32_t *out_written)
Adapt the RBKC random writer to bounded packed memory.
static ra8_err_t internal_image_write(void *context, uint32_t offset, const uint8_t *source, uint32_t requested, uint32_t *out_written)
Adapt the comic image-spool random writer to bounded memory.
static ra8_err_t internal_validate_format_request(const uint8_t *source, size_t source_size, const media_download_format_config_t *config, const media_download_format_workspace_t *workspace, uint64_t *packed_size)
Validate one source-image formatting request.
static ra8_err_t internal_flat_append(void *context, const uint8_t *source, uint32_t requested, uint32_t *out_written)
Append one flat RABOOK1 fragment to bounded memory.
ra8_err_t priv_media_download_memory_write_at(media_download_memory_t *memory, uint64_t offset, const uint8_t *source, uint32_t requested, uint32_t *written)
Write one exact span at an absolute private-spool offset.
ra8_err_t priv_media_download_memory_read(void *context, uint32_t offset, uint8_t *destination, uint32_t requested, uint32_t *out_read)
Read one exact initialized range from a private spool.
ra8_err_t priv_media_download_format_rabook(const uint8_t *source, size_t source_size, const media_download_format_config_t *config, media_download_format_workspace_t *workspace, uint64_t *packed_size)
Format one encoded source image as a reader-native .rabook.
Private source-image to RBKC formatter for the media app.
ra8_err_t priv_media_download_memory_read(void *context, uint32_t offset, uint8_t *destination, uint32_t requested, uint32_t *out_read)
Read one exact initialized range from a private spool.
Annotation-attribute framework macros for ra8-firmware.
#define RA8_PRIV
Module-private helper: shared across TUs but only inside one library.
#define RA8_INTERNAL
Marker that a function is intended to be static (file-local).
@ k_ra8_err_validation_failed
Validation rule failed (caller-supplied invariant not satisfied).
Definition ra8_err.h:459
@ k_ra8_ok
Success – operation completed with all postconditions satisfied.
Definition ra8_err.h:119
@ k_ra8_err_null_ptr
Pointer was NULL where a valid pointer was required.
Definition ra8_err.h:478
@ k_ra8_err_invalid_size
Invalid size parameter (too large, too small, or misaligned).
Definition ra8_err.h:167
ra8_err_codes_t ra8_err_t
Canonical error-return type used by every ra8-firmware API.
Definition ra8_err.h:546
void * memcpy(void *dst, const void *src, size_t n)
Copy memory area between non-overlapping regions.
ra8_err_t ra8_rabook_comic_init(ra8_rabook_comic_t *comic, const ra8_rabook_comic_workspace_t *workspace, ra8_rabook_image_read_fn image_read, ra8_rabook_comic_write_at_fn image_write, void *image_ctx, uint16_t max_image_edge, uint8_t pixel_format)
Initialize one bounded streaming comic builder.
ra8_err_t ra8_rabook_comic_add_page(ra8_rabook_comic_t *comic, const char *page_id, const uint8_t *source, size_t source_size)
Normalize and append one source image as one comic chapter.
ra8_err_t ra8_rabook_comic_finish(ra8_rabook_comic_t *comic, const ra8_rabook_comic_metadata_t *metadata, ra8_rabook_write_fn write, void *write_ctx, uint32_t *out_len)
Finalize the completed comic as one canonical flat RABOOK1 stream.
ra8_err_t ra8_rabook_container_write(ra8_rabook_flat_read_fn read, void *read_ctx, uint32_t flat_len, uint32_t chunk_bytes, ra8_rabook_write_at_fn write_at, void *write_ctx, ra8_rabook_container_workspace_t *ws, uint64_t *out_len)
Stream one flat RABOOK1 blob into a chunked RBKC staging object.
Immutable policy for one fetched-image conversion.
const char * page_id
Stable page identifier.
ra8_rabook_comic_metadata_t metadata
Book header metadata.
uint8_t pixel_format
Gray4 or gray8 output.
Complete caller-owned storage for image-to-RBKC conversion.
ra8_rabook_comic_workspace_t comic
Builder and raster arenas.
ra8_rabook_container_workspace_t container
Chunk-compressor workspace.
Mutable bounds for one formatter-owned in-memory spool.
uint8_t * bytes
Writable backing bytes.
uint32_t length
Highest initialized byte plus one.
uint32_t capacity
Maximum accessible byte extent.
Mutable state for one image-sequence-to-RABOOK build.