Add get_tstamp64 using the new ioctl SNDRV_COMPRESS_TSTAMP64.
unsigned int *avail, struct timespec *tstamp);
int (*get_tstamp)(void *compress_data,
unsigned int *samples, unsigned int *sampling_rate);
+ int (*get_tstamp64)(void *compress_data,
+ unsigned long long *samples, unsigned int *sampling_rate);
int (*write)(void *compress_data, const void *buf, size_t size);
int (*read)(void *compress_data, void *buf, size_t size);
int (*start)(void *compress_data);
int compress_get_tstamp(struct compress *compress,
unsigned int *samples, unsigned int *sampling_rate);
+/*
+ * compress_get_tstamp64: get the raw hw timestamp in 64 bit
+ * return 0 on success, negative on error
+ *
+ * @compress: compress stream on which query is made
+ * @samples: number of decoded samples played
+ * @sampling_rate: sampling rate of decoded samples
+ */
+int compress_get_tstamp64(struct compress *compress,
+ unsigned long long *samples, unsigned int *sampling_rate);
+
/*
* compress_write: write data to the compress stream
* return bytes written on success, negative on error
return compress->ops->get_tstamp(compress->data, samples, sampling_rate);
}
+int compress_get_tstamp64(struct compress *compress,
+ unsigned long long *samples, unsigned int *sampling_rate)
+{
+ return compress->ops->get_tstamp64(compress->data, samples, sampling_rate);
+}
+
int compress_write(struct compress *compress, const void *buf, unsigned int size)
{
return compress->ops->write(compress->data, buf, size);
return 0;
}
+static int compress_hw_get_tstamp64(void *data,
+ unsigned long long *samples, unsigned int *sampling_rate)
+{
+ struct compress_hw_data *compress = (struct compress_hw_data *)data;
+ struct snd_compr_tstamp64 ktstamp;
+
+ if (!is_compress_hw_ready(compress))
+ return oops(compress, ENODEV, "device not ready");
+
+ if (ioctl(compress->fd, SNDRV_COMPRESS_TSTAMP64, &ktstamp))
+ return oops(compress, errno, "cannot get tstamp64");
+
+ *samples = ktstamp.pcm_io_frames;
+ *sampling_rate = ktstamp.sampling_rate;
+ return 0;
+}
+
static int compress_hw_write(void *data, const void *buf, size_t size)
{
struct compress_hw_data *compress = (struct compress_hw_data *)data;
.close = compress_hw_close,
.get_hpointer = compress_hw_get_hpointer,
.get_tstamp = compress_hw_get_tstamp,
+ .get_tstamp64 = compress_hw_get_tstamp64,
.write = compress_hw_write,
.read = compress_hw_read,
.start = compress_hw_start,