diff options
Diffstat (limited to '')
-rw-r--r-- | src/brr.zig | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/src/brr.zig b/src/brr.zig index cfd6f1f..7bca832 100644 --- a/src/brr.zig +++ b/src/brr.zig @@ -4,10 +4,8 @@ const c = @cImport({ @cInclude("alsa/asoundlib.h"); }); -pub const snd_pcm_info_t = extern struct {}; -pub extern fn snd_pcm_info_malloc(pcm_info: *snd_pcm_info_t) void; -pub extern fn snd_pcm_info(pcm: *c.snd_pcm_t, pcm_info: *snd_pcm_info_t) c_int; -pub extern fn snd_pcm_info_free(pcm_info: *snd_pcm_info_t) void; +const _op_snd_pcm_info_t = opaque {}; +const snd_pcm_info_t = ?*_op_snd_pcm_info_t; pub fn brr(file: []const u8) !void { _ = c.mpg123_init(); @@ -72,13 +70,16 @@ pub fn brr(file: []const u8) !void { const frames_sent = c.snd_pcm_writei(pcm, &buffer[0], done / 4); if (frames_sent < 0) { std.log.err("Failed to write to ALSA device", .{}); - // TODO: figure out how to deal with opaque status - var pcm_info: snd_pcm_info_t = snd_pcm_info_t{}; - snd_pcm_info_malloc(&pcm_info); - _ = snd_pcm_info(pcm, &pcm_info); + var pcm_info: snd_pcm_info_t = undefined; + const alloc_result = c.snd_pcm_info_malloc(@ptrCast(&pcm_info)); + if (alloc_result == 0) { + std.log.err("Failed to allocate pcm info", .{}); + return; + } + _ = c.snd_pcm_info(pcm, @ptrCast(&pcm_info)); - defer snd_pcm_info_free(&pcm_info); - std.log.debug("pcm status is {any}", .{pcm_info}); + std.log.debug("pcm_info {?}", .{pcm_info}); + defer c.snd_pcm_info_free(@ptrCast(&pcm_info)); return; } else { std.log.info("Frames sent: {d}", .{frames_sent}); |