- uint64_t raw_value;
-
- if (clock_raw_value_from_ns_from_origin(clock_class, ns_from_origin, &raw_value) != 0) {
- BT_LIB_LOGW("Could not convert nanoseconds from origin to clock value: ns-from-origin=%" PRId64 ", %![cc-]+K",
- ns_from_origin, clock_class);
- status = BT_FUNC_STATUS_ERROR;
- goto end;
+ /* Initialize to silence maybe-uninitialized warning. */
+ uint64_t raw_value = 0;
+
+ /*
+ * If we haven't seen a message with a clock snapshot, we don't know if our seek time is within
+ * the clock's range, so it wouldn't be safe to try to convert ns_from_origin to a clock value.
+ *
+ * Also, it would be a bit of a lie to generate a stream begin message with the seek time as its
+ * clock snapshot, because we don't really know if the stream existed at that time. If we have
+ * seen a message with a clock snapshot in our seeking, then we are sure that the
+ * seek time is not below the clock range, and we know the stream was active at that
+ * time (and that we cut it short).
+ */
+ if (stream_state->seen_clock_snapshot) {
+ if (clock_raw_value_from_ns_from_origin(clock_class, ns_from_origin, &raw_value) != 0) {
+ BT_LIB_LOGW("Could not convert nanoseconds from origin to clock value: ns-from-origin=%" PRId64 ", %![cc-]+K",
+ ns_from_origin, clock_class);
+ status = BT_FUNC_STATUS_ERROR;
+ goto end;
+ }