struct bt_message *create_packet_message(
struct bt_self_component_port_input_message_iterator *msg_iter,
struct bt_packet *packet, struct bt_object_pool *pool,
- bool with_cs, uint64_t raw_value)
+ bool with_cs, bool is_beginning, uint64_t raw_value)
{
struct bt_message_packet *message = NULL;
struct bt_stream *stream;
struct bt_stream_class *stream_class;
+ bool packet_has_default_clock_snapshot;
BT_ASSERT(msg_iter);
BT_ASSERT_PRE_NON_NULL(packet, "Packet");
BT_ASSERT(stream);
stream_class = bt_stream_borrow_class(stream);
BT_ASSERT(stream_class);
- BT_ASSERT_PRE((with_cs && stream_class->default_clock_class) ||
- (!with_cs && !stream_class->default_clock_class),
+
+ if (is_beginning) {
+ packet_has_default_clock_snapshot =
+ stream_class->packets_have_default_beginning_clock_snapshot;
+ } else {
+ packet_has_default_clock_snapshot =
+ stream_class->packets_have_default_end_clock_snapshot;
+ }
+
+ /*
+ * `packet_has_default_clock_snapshot` implies that the stream
+ * class has a default clock class (precondition).
+ */
+ BT_ASSERT_PRE((with_cs && packet_has_default_clock_snapshot) ||
+ (!with_cs && !packet_has_default_clock_snapshot),
"Creating a packet message with a default clock snapshot, but without "
"a default clock class, or without a default clock snapshot, "
"but with a default clock class: ",
BT_ASSERT_PRE_NON_NULL(msg_iter, "Message iterator");
return create_packet_message(msg_iter, (void *) packet,
- &msg_iter->graph->packet_begin_msg_pool, false, 0);
+ &msg_iter->graph->packet_begin_msg_pool, false, true, 0);
}
struct bt_message *bt_message_packet_beginning_create_with_default_clock_snapshot(
BT_ASSERT_PRE_NON_NULL(msg_iter, "Message iterator");
return create_packet_message(msg_iter, (void *) packet,
- &msg_iter->graph->packet_begin_msg_pool, true, raw_value);
+ &msg_iter->graph->packet_begin_msg_pool, true, true, raw_value);
}
struct bt_message *bt_message_packet_end_create(
BT_ASSERT_PRE_NON_NULL(msg_iter, "Message iterator");
return create_packet_message(msg_iter, (void *) packet,
- &msg_iter->graph->packet_end_msg_pool, false, 0);
+ &msg_iter->graph->packet_end_msg_pool, false, false, 0);
}
struct bt_message *bt_message_packet_end_create_with_default_clock_snapshot(
BT_ASSERT_PRE_NON_NULL(msg_iter, "Message iterator");
return create_packet_message(msg_iter, (void *) packet,
- &msg_iter->graph->packet_end_msg_pool, true, raw_value);
+ &msg_iter->graph->packet_end_msg_pool, true, false, raw_value);
}
BT_HIDDEN