int MotionCells::initDataFile (char *p_datafile, gint64 starttime) //p_date is increased with difference between current and previous buffer ts { MotionCellData mcd; if (strncmp (p_datafile, " ", 1)) { mc_savefile = fopen (p_datafile, "w"); if (mc_savefile == NULL) { //fprintf(stderr, "%s %d:initDataFile:fopen:%d (%s)\n", __FILE__, __LINE__, errno, //strerror(errno)); strncpy (m_initdatafilefailed, strerror (errno), BUSMSGLEN - 1); m_initerrorcode = errno; return 1; } else { m_saveInDatafile = true; } } else mc_savefile = NULL; memset (&m_header, 0, sizeof (MotionCellHeader)); m_header.headersize = GINT32_TO_BE (MC_HEADER); m_header.type = GINT32_TO_BE (MC_TYPE); m_header.version = GINT32_TO_BE (MC_VERSION); //it needs these bytes m_header.itemsize = GINT32_TO_BE ((int) ceil (ceil (m_gridx * m_gridy / 8.0) / 4.0) * 4 + sizeof (mcd.timestamp)); m_header.gridx = GINT32_TO_BE (m_gridx); m_header.gridy = GINT32_TO_BE (m_gridy); m_header.starttime = GINT64_TO_BE (starttime); snprintf (m_header.name, sizeof (m_header.name), "%s %dx%d", MC_VERSIONTEXT, GINT32_FROM_BE (m_header.gridx), GINT32_FROM_BE (m_header.gridy)); m_changed_datafile = false; return 0; }
static GString * append_int64 (GString *s, gint64 val) { union { gint64 as_int; char as_bytes[8]; } u; u.as_int = GINT64_TO_BE (val); g_string_append_len (s, u.as_bytes, 8); return s; }
/** * qmi_utils_write_gint64_to_buffer: * @buffer: a buffer. * @buffer_size: size of @buffer. * @endian: endianness of firmware value; swapped from host byte order if necessary * @in: location of the variable to be written. * * Writes a signed 64-bit integer into the buffer. The number to be written * is expected to be given in host endianness, and this method takes care of * converting the value written to the byte order specified by @endian. * * The user needs to make sure that the buffer is at least 8 bytes long. * * Also note that both @buffer and @buffer_size get updated after the 8 bytes * write. */ void qmi_utils_write_gint64_to_buffer (guint8 **buffer, guint16 *buffer_size, QmiEndian endian, gint64 *in) { gint64 tmp; g_assert (in != NULL); g_assert (buffer != NULL); g_assert (buffer_size != NULL); g_assert (*buffer_size >= 8); if (endian == QMI_ENDIAN_BIG) tmp = GINT64_TO_BE (*in); else tmp = GINT64_TO_LE (*in); memcpy (&(*buffer)[0], &tmp, sizeof (tmp)); *buffer = &((*buffer)[8]); *buffer_size = (*buffer_size) - 8; }
static void gst_file_index_add_association (GstIndex * index, GstIndexEntry * entry) { GstFileIndex *fileindex = GST_FILE_INDEX (index); GstFileIndexId *id_index; gint mx; GstIndexAssociation sample; gboolean exact; id_index = g_hash_table_lookup (fileindex->id_index, &entry->id); if (!id_index) return; if (!id_index->nformats) { gint fx; id_index->nformats = GST_INDEX_NASSOCS (entry); GST_LOG_OBJECT (fileindex, "creating %d formats for %d", id_index->nformats, entry->id); id_index->format = g_new (GstFormat, id_index->nformats); for (fx = 0; fx < id_index->nformats; fx++) id_index->format[fx] = GST_INDEX_ASSOC_FORMAT (entry, fx); _fc_alloc_array (id_index); } else { /* only sanity checking */ if (id_index->nformats != GST_INDEX_NASSOCS (entry)) GST_WARNING_OBJECT (fileindex, "arity change %d -> %d", id_index->nformats, GST_INDEX_NASSOCS (entry)); else { gint fx; for (fx = 0; fx < id_index->nformats; fx++) if (id_index->format[fx] != GST_INDEX_ASSOC_FORMAT (entry, fx)) GST_WARNING_OBJECT (fileindex, "format[%d] changed %d -> %d", fx, id_index->format[fx], GST_INDEX_ASSOC_FORMAT (entry, fx)); } } /* this is a hack, we should use a private structure instead */ sample.format = 0; sample.value = GST_INDEX_ASSOC_VALUE (entry, 0); exact = _fc_bsearch (id_index->array, ARRAY_ROW_SIZE (id_index), &mx, file_index_compare, &sample, id_index); if (exact) { /* maybe overwrite instead? */ GST_DEBUG_OBJECT (index, "Ignoring duplicate index association at %" G_GINT64_FORMAT, GST_INDEX_ASSOC_VALUE (entry, 0)); return; } { gchar *row_data = (gchar *) g_malloc (ARRAY_ROW_SIZE (id_index)); gint fx; gint32 flags_host = GST_INDEX_ASSOC_FLAGS (entry); ARRAY_ROW_FLAGS (row_data) = GINT32_TO_BE (flags_host); for (fx = 0; fx < id_index->nformats; fx++) { gint64 val_host = GST_INDEX_ASSOC_VALUE (entry, fx); ARRAY_ROW_VALUE (row_data, fx) = GINT64_TO_BE (val_host); } g_array_insert_vals (id_index->array, mx, row_data, 1); g_free (row_data); } }