Syphon-Framework icon indicating copy to clipboard operation
Syphon-Framework copied to clipboard

Servers could send arbitrary metadata with each frame

Open rsodre opened this issue 10 years ago • 6 comments

Information could be shared between applications thru the stablished Syphon connection. Using a NSDictionary would leave the server and client open to share anything. As an example, render time, document name, color correction, name of a complementary Syphon texture.

rsodre avatar Nov 06 '15 12:11 rsodre

We have thought about this.

The main obstacle is that (by design) there is no concept of frames as individual entities, just a single surface with changing content. There is no way to tie metadata to a single frame because the content can change at any time. This might still be useful for less transient information.

bangnoise avatar Nov 06 '15 12:11 bangnoise

to continue the discussion from #82:

This is what spout says about its own implementation: frameBufferSharing

But I understand now it might be tricky to implement it in a water thight manner.

maybites avatar Jan 04 '23 08:01 maybites

@maybites we specifically don't want to block server and client processes in the way Spout does.

bangnoise avatar Jan 04 '23 16:01 bangnoise

To chime in, I think this can be revisited if we decide to tackle internally pooling IOSurfaces, which would allow us to vend unique surfaces per frame (though they would have re-used addresses), and potentially associate user low cost user data dictionary along with it. I dont want to promise anything we can't deliver, but its worth mentioning.

vade avatar Jan 04 '23 17:01 vade

for reference :

/* These calls let you attach property list types to a IOSurface buffer.  These calls are 
   expensive (they essentially must serialize the data into the kernel) and thus should be avoided whenever
   possible.   Note:  These functions can not be used to change the underlying surface properties. */
- (void)setAttachment:(id)anObject forKey:(NSString *)key;
- (nullable id)attachmentForKey:(NSString *)key;
- (void)removeAttachmentForKey:(NSString *)key;
- (void)setAllAttachments:(NSDictionary<NSString *, id> *)dict;
- (nullable NSDictionary<NSString *, id> *)allAttachments;
- (void)removeAllAttachments;

vade avatar Jan 04 '23 17:01 vade

@bangnoise

we specifically don't want to block server and client processes in the way Spout does.

Oh, I get that. I wouldn't advocate it, I just added that link for reference.

But I am glad to hear you considering this feature seriously and see the potential benefit of it. A low cost user data dictionary would be the way to go. Thats what I am doing with spout, serialized to and from a byte buffer.

maybites avatar Jan 05 '23 11:01 maybites