diff --git a/ChangeLog b/ChangeLog index 2b9c467ee0..e5ecdbc692 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2004-06-09 Thomas Vander Stichele + + * docs/random/gdp: + * libs/gst/dataprotocol/dataprotocol-test.c: (buffer_test): + * libs/gst/dataprotocol/dataprotocol.c: + (gst_dp_header_from_buffer), (gst_dp_packet_from_caps), + (gst_dp_buffer_from_header): + * libs/gst/dataprotocol/dataprotocol.h: + * libs/gst/dataprotocol/dp-private.h: + rev version to 0.1, add buffer flags and copy them + 2004-06-09 Johan Dahlin * gst/gstbuffer.c (gst_buffer_default_copy): Don't forget to merge diff --git a/docs/random/gdp b/docs/random/gdp index 1c6beb416f..dd16ea2ed8 100644 --- a/docs/random/gdp +++ b/docs/random/gdp @@ -15,8 +15,8 @@ IDEAS PROTOCOL -------- -* 1 byte GDP major version -* 1 byte GDP minor version +* 1 byte GDP major version (0) +* 1 byte GDP minor version (1) * 1 byte GDP flags * 1 byte GDP data type 1 for buffer, 2 caps, 65+ for events @@ -25,11 +25,16 @@ PROTOCOL * 8 byte duration of buffer * 8 byte offset * 8 byte offset_end -* 16 byte future extension (ABI padding) +* 2 byte buffer data flags +* 14 byte future extension (ABI padding) * 2 byte optional header crc * 2 byte optional payload crc * (length) payload header: 60 bytes +PROTOCOL CHANGELOG +------------------ +0.1: added two bytes for buffer flags + all numbers use network byte ordering. diff --git a/libs/gst/dataprotocol/dataprotocol-test.c b/libs/gst/dataprotocol/dataprotocol-test.c index 4737f38fb0..227dc77cbf 100644 --- a/libs/gst/dataprotocol/dataprotocol-test.c +++ b/libs/gst/dataprotocol/dataprotocol-test.c @@ -116,6 +116,8 @@ buffer_test () GST_BUFFER_DURATION (buffer) = (GstClockTime) GST_SECOND; GST_BUFFER_OFFSET (buffer) = (guint64) 10; GST_BUFFER_OFFSET_END (buffer) = (guint64) 19; + GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_IN_CAPS); + GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_SUBBUFFER); memmove (GST_BUFFER_DATA (buffer), "a buffer", 8); /* create a buffer with CRC checking */ @@ -158,6 +160,12 @@ buffer_test () if (GST_BUFFER_OFFSET_END (newbuffer) != GST_BUFFER_OFFSET_END (buffer)) { g_error ("Offset ends don't match !"); } + if (GST_BUFFER_FLAG_IS_SET (newbuffer, GST_BUFFER_SUBBUFFER)) { + g_error ("GST_BUFFER_SUBBUFFER flag should not have been copied !"); + } + if (!GST_BUFFER_FLAG_IS_SET (newbuffer, GST_BUFFER_IN_CAPS)) { + g_error ("GST_BUFFER_IN_CAPS flag should have been copied !"); + } g_free (header); return 0; diff --git a/libs/gst/dataprotocol/dataprotocol.c b/libs/gst/dataprotocol/dataprotocol.c index 85c798e929..2fdbc5fc74 100644 --- a/libs/gst/dataprotocol/dataprotocol.c +++ b/libs/gst/dataprotocol/dataprotocol.c @@ -163,6 +163,7 @@ gst_dp_header_from_buffer (const GstBuffer * buffer, GstDPHeaderFlag flags, { guint8 *h; guint16 crc; + guint16 flags_mask; g_return_val_if_fail (GST_IS_BUFFER (buffer), FALSE); g_return_val_if_fail (GST_BUFFER_REFCOUNT_VALUE (buffer) > 0, FALSE); @@ -184,8 +185,16 @@ gst_dp_header_from_buffer (const GstBuffer * buffer, GstDPHeaderFlag flags, GST_WRITE_UINT64_BE (h + 24, GST_BUFFER_OFFSET (buffer)); GST_WRITE_UINT64_BE (h + 32, GST_BUFFER_OFFSET_END (buffer)); + /* data flags */ + /* we only copy KEY_UNIT and IN_CAPS flags */ + flags_mask = GST_DATA_FLAG_SHIFT (GST_BUFFER_KEY_UNIT) | + GST_DATA_FLAG_SHIFT (GST_BUFFER_IN_CAPS); + + GST_WRITE_UINT16_BE (h + 40, GST_BUFFER_FLAGS (buffer) & flags_mask); + /* ABI padding */ - GST_WRITE_UINT64_BE (h + 40, (guint64) 0); + GST_WRITE_UINT16_BE (h + 42, (guint64) 0); + GST_WRITE_UINT32_BE (h + 44, (guint64) 0); GST_WRITE_UINT64_BE (h + 48, (guint64) 0); /* CRC */ @@ -419,6 +428,7 @@ gst_dp_buffer_from_header (guint header_length, const guint8 * header) GST_BUFFER_DURATION (buffer) = GST_DP_HEADER_DURATION (header); GST_BUFFER_OFFSET (buffer) = GST_DP_HEADER_OFFSET (header); GST_BUFFER_OFFSET_END (buffer) = GST_DP_HEADER_OFFSET_END (header); + GST_BUFFER_FLAGS (buffer) = GST_DP_HEADER_BUFFER_FLAGS (header); return buffer; } diff --git a/libs/gst/dataprotocol/dataprotocol.h b/libs/gst/dataprotocol/dataprotocol.h index 41e7feeb4f..ca394ccf9a 100644 --- a/libs/gst/dataprotocol/dataprotocol.h +++ b/libs/gst/dataprotocol/dataprotocol.h @@ -33,7 +33,7 @@ G_BEGIN_DECLS /* GStreamer Data Protocol Version */ #define GST_DP_VERSION_MAJOR 0 -#define GST_DP_VERSION_MINOR 0 +#define GST_DP_VERSION_MINOR 1 #define GST_DP_HEADER_LENGTH 60 /* header size in bytes */ diff --git a/libs/gst/dataprotocol/dp-private.h b/libs/gst/dataprotocol/dp-private.h index 0780a12559..befd501b0a 100644 --- a/libs/gst/dataprotocol/dp-private.h +++ b/libs/gst/dataprotocol/dp-private.h @@ -40,6 +40,7 @@ G_BEGIN_DECLS #define GST_DP_HEADER_DURATION(x) GST_READ_UINT64_BE (x + 16) #define GST_DP_HEADER_OFFSET(x) GST_READ_UINT64_BE (x + 24) #define GST_DP_HEADER_OFFSET_END(x) GST_READ_UINT64_BE (x + 32) +#define GST_DP_HEADER_BUFFER_FLAGS(x) GST_READ_UINT16_BE (x + 40) #define GST_DP_HEADER_CRC_HEADER(x) GST_READ_UINT16_BE (x + 56) #define GST_DP_HEADER_CRC_PAYLOAD(x) GST_READ_UINT16_BE (x + 58)