+/* FIXME: this was copied from sndfilesource.cc, at some point these should be merged */
+int64_t
+SndFileImportableSource::get_timecode_info (SNDFILE* sf, SF_BROADCAST_INFO* binfo, bool& exists)
+{
+ if (sf_command (sf, SFC_GET_BROADCAST_INFO, binfo, sizeof (*binfo)) != SF_TRUE) {
+ exists = false;
+ return 0;
+ }
+
+ /* see http://tracker.ardour.org/view.php?id=6208
+ * 0xffffffff 0xfffc5680
+ * seems to be a bug in Presonus Capture (which generated the file)
+ *
+ * still since framepos_t is a signed int, ignore files that could
+ * lead to negative timestamps for now.
+ */
+
+ if (binfo->time_reference_high & 0x80000000) {
+ char tmp[64];
+ snprintf(tmp, sizeof(tmp), "%x%08x", binfo->time_reference_high, binfo->time_reference_low);
+ PBD::warning << "Invalid Timestamp " << tmp << endmsg;
+ exists = false;
+ return 0;
+ }
+
+ exists = true;
+ /* libsndfile reads eactly 4 bytes for high and low, but
+ * uses "unsigned int" which may or may not be 32 bit little
+ * endian.
+ */
+ int64_t ret = (uint32_t) (binfo->time_reference_high & 0x7fffffff);
+ ret <<= 32;
+ ret |= (uint32_t) (binfo->time_reference_low & 0xffffffff);
+
+ assert(ret >= 0);
+ return ret;
+}
+