This documents the protocol used to pass data over fds between ipcpipelinesrc and ipcpipelinesink. The protocol is used in both directions. However, some combinations do not make sense (eg, a buffer going from ipcpipelinesrc to ipcpipelinesink). The protocol consists of an arbitrary number of variable sized chunks with a type. Each chunk has a request ID which can be used to match a request with its reply (ack / query result). Each chunk consists of: - a type (byte): 1: ack 2: query result 3: buffer 4: event 5: sink message event 6: query 7: state change 8: state lost 9: message 10: error/warning/info message - a request ID, 4 bytes, little endian - the payload size, 4 bytes, little endian - N bytes payload Depending on the type, the payload can contain: - 1: ack result: 4 bytes, little endian interpreted as GstFlowReturn for buffers, boolean for events and GstStateChangeReturn for state changes - 2: query result result boolean: 1 byte query type: 4 bytes, little endian returned query string representation, NUL terminated - 3: buffer: pts: 8 bytes, little endian dts: 8 bytes, little endian duration: 8 bytes, little endian offset: 8 bytes, little endian offset end: 8 bytes, little endian flags: 8 bytes, little endian buffer size: 4 bytes, little endian data: contents of the buffer data, size specified in "buffer size" number of GstMeta: 4 bytes, little endian For each GstMeta: bytes: 4 bytes, little endian this is the number of bytes before the string representation at the end of this block, including the 4 bytes of itself flags: 4 bytes, little endian length of the GstMetaInfo::api name: 4 bytes, little endian GstMetaInfo::api name: string, NUL terminated GstMetaInfo::size: 8 bytes, little endian length of the string representation: 4 bytes, little endian string representation, NUL terminated - 4: event event type: 4 bytes, little endian sequence number: 4 bytes, little endian direction: 1 byte whether the event is going upstream (1) or downstream (0) string representation, NUL terminated - 5: sink message event message type: 4 bytes, little endian event sequence number: 4 bytes, little endian message sequence number: 4 bytes, little endian length: 4 bytes, little endian event structure name: length bytes, NUL terminated message structure string representation: remaining bytes, NUL terminated - 6: query query type: 4 bytes, little endian direction: 1 byte whether the query is going upstream (1) or downstream (0) string representation, NUL terminated - 7: state change GstStateChange: 4 bytes, little endian - 8: state lost no payload - 9: message message type: 4 bytes, little endian string representation, NUL terminated - 10: error/warning/info message message type (2 = error, 1 = warning, 0 = info): 1 byte error domain string length: 4 bytes, little endian string representation of the error domain, NUL terminated error code: 4 bytes, little endian length: 4 bytes, little endian if zero: no error message if non zero: As many bytes as this length: the error message, NUL terminated length: 4 bytes, little endian if zero: no extra message if non zero: As many bytes as this length: the error extra debug message, NUL terminated