mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-30 05:31:15 +00:00
92 lines
3.4 KiB
Text
92 lines
3.4 KiB
Text
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
|