tiny.gif.animationFromBytes
Defined in tiny.gif.
Source
Source: lib/gif/src/decode/read.zig:12
zig
pub fn animationFromBytes(storage: *Storage, bytes: []const u8) Error!Animation { const regions = try storage.acquire(bytes); errdefer storage.reset(); var reader = stream.Reader{ .bytes = bytes }; const header = try stream.readHeader(&reader); var control = model.Control{}; var loop_count: ?u16 = null; var frame_index: usize = 0; var trailer = false; while (!trailer) { switch (try reader.byte()) { 0x21 => { const label = try reader.byte(); switch (label) { 0xf9 => control = try stream.readControl(&reader), 0xff => { const size = try reader.byte(); const app = try reader.take(size); if (size == 11 and (std.mem.eql(u8, app, "NETSCAPE2.0") or std.mem.eql(u8, app, "ANIMEXTS1.0"))) { loop_count = try readLoopCount(&reader) orelse loop_count; } else { try stream.skipSubBlocks(&reader); } }, else => try stream.skipSubBlocks(&reader), } }, 0x2c => { if (frame_index >= regions.frames.len) return error.FrameCapacityExceeded; const snapshot = regions.retained_rgba8[frame_index * regions.canvas.len ..][0..regions.canvas.len]; regions.frames[frame_index] = try decodeFrame( &reader, header, control, regions.canvas, regions.previous_canvas, regions.indices, regions.compressed, snapshot, ); frame_index += 1; control = .{}; }, 0x3b => trailer = true, else => return error.InvalidDescriptor, } } if (frame_index == 0) return error.NoFrames; if (frame_index != regions.frames.len) return error.DecodeInputMismatch; return .{ .width = header.width, .height = header.height, .frames = regions.frames[0..frame_index], .loop_count = loop_count, };}Source: lib/gif/src/root.zig:24
zig
pub const animationFromBytes = decode.animationFromBytes;Audit
| Definitions | 1 |
|---|---|
| Public names | 1 |
| Members | 0 |
| Version | 26.7.0 |
| Revision | daab053ee433 |