From 3de0ad13c5a706ecefcc14663e8f04b85ee1a431 Mon Sep 17 00:00:00 2001 From: Kasper Sauramo Date: Tue, 14 Oct 2025 00:42:30 +0300 Subject: [PATCH] add stream discovery and receiving --- src/receiver.zig | 31 ++++++++++++++++++++++++++----- src/sender.zig | 17 ++++++++++++++++- 2 files changed, 42 insertions(+), 6 deletions(-) diff --git a/src/receiver.zig b/src/receiver.zig index 0f5d34f..9e51519 100644 --- a/src/receiver.zig +++ b/src/receiver.zig @@ -1,6 +1,27 @@ const std = @import("std"); const omt = @cImport(@cInclude("libomt.h")); +fn discoverStream() ?[*c]u8 { + var discovery_count: i32 = 0; + + while (discovery_count == 0) { + const discovered = omt.omt_discovery_getaddresses(&discovery_count); + std.log.info("Found {} streams:", .{discovery_count}); + + const count: usize = @intCast(discovery_count); + for (0..count) |i| { + const name = discovered[i]; + std.log.info(" {s}", .{name}); + } + + if (discovery_count > 0) { + return discovered[0]; + } + std.Thread.sleep(1000 * 1000 * 1000); + } + return null; +} + pub fn main() !void { // var gpa = std.heap.GeneralPurposeAllocator(.{}){}; // const allocator = gpa.allocator(); @@ -8,16 +29,16 @@ pub fn main() !void { std.log.info("Receiving...", .{}); omt.omt_setloggingfilename("omtrecvtest.log"); - var found_address_count: i32 = 0; - _ = omt.omt_discovery_getaddresses(&found_address_count); + const stream = discoverStream() orelse undefined; - std.log.info("Found {d} omt addresses\n", .{found_address_count}); + // TODO: How to coerce C string array into something printable again? + // std.log.info("Listening to {s}", @as([*:0]u8, stream)); const receiver_flags = omt.OMTFrameType_Video | omt.OMTFrameType_Audio | omt.OMTFrameType_Metadata; const receiver = omt.omt_receive_create( - "pop-os (Omtoy Sender)", + stream, receiver_flags, - omt.OMTPreferredVideoFormat_UYVYorUYVAorP216orPA16, + omt.OMTPreferredVideoFormat_UYVYorBGRA, 0, ); defer omt.omt_receive_destroy(receiver); diff --git a/src/sender.zig b/src/sender.zig index 84c9036..43800b1 100644 --- a/src/sender.zig +++ b/src/sender.zig @@ -1,6 +1,18 @@ const std = @import("std"); const omt = @cImport(@cInclude("libomt.h")); +fn printDiscovery() void { + var discovery_count: i32 = 0; + const discovered = omt.omt_discovery_getaddresses(&discovery_count); + std.log.info("Found {} streams:", .{discovery_count}); + + const count: usize = @intCast(discovery_count); + for (0..count) |i| { + const name = discovered[i]; + std.log.info(" {s}", .{name}); + } +} + pub fn main() !void { var gpa = std.heap.GeneralPurposeAllocator(.{}){}; const allocator = gpa.allocator(); @@ -11,7 +23,9 @@ pub fn main() !void { const sender = omt.omt_send_create("Omtoy Sender", omt.OMTQuality_Default) orelse undefined; defer omt.omt_send_destroy(sender); - std.log.info("Sender created", .{}); + printDiscovery(); + + std.log.info("Sender created: Omtoy Sender", .{}); { var sender_info = std.mem.zeroes(omt.OMTSenderInfo); @@ -93,6 +107,7 @@ pub fn main() !void { // send 10000 frames while (frame_count < 10000) : (frame_count += 1) { @memcpy(frame_buffer, content); + // TODO: copy the white line over here line_position += stride * 2; if (line_position >= video_frame.DataLength) {