| 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 |