]> git.alsa-project.org Git - tinycompress.git/commitdiff
compress_ops: remove get_tstamp64 callback
authorJaroslav Kysela <perex@perex.cz>
Wed, 21 Jan 2026 10:53:46 +0000 (11:53 +0100)
committerJaroslav Kysela <perex@perex.cz>
Thu, 28 May 2026 14:34:09 +0000 (16:34 +0200)
It is not required to polute ops with two versions
of similar callbacks when we introduced V2 ops. Handle the
wrapping in the top level (compress_get_tstamp function).

Closes: https://github.com/alsa-project/tinycompress/pull/31
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
include/tinycompress/compress_ops.h
src/lib/compress.c
src/lib/compress_hw.c

index e8166325456568fa69ce3efa52be02969244e558..7eabeb3cb051b0265dde61ac2df2b2682593efc0 100644 (file)
@@ -25,8 +25,6 @@ struct compress_ops {
        int (*get_hpointer)(void *compress_data,
                        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);
index 1ff3dfeb11aa26244c149a208cecd4462779b27c..0c537acfa99a63adbe926fc59eacb49d4ad26bca 100644 (file)
@@ -209,13 +209,19 @@ int compress_get_hpointer(struct compress *compress,
 int compress_get_tstamp(struct compress *compress,
                        unsigned int *samples, unsigned int *sampling_rate)
 {
-       return compress->ops->get_tstamp(compress->data, samples, sampling_rate);
+       unsigned long long _samples;
+       int ret;
+
+       ret = compress->ops->get_tstamp(compress->data, &_samples, sampling_rate);
+       if (ret >= 0)
+               *samples = (unsigned int)_samples;
+       return ret;
 }
 
 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);
+       return compress->ops->get_tstamp(compress->data, samples, sampling_rate);
 }
 
 int compress_write(struct compress *compress, const void *buf, unsigned int size)
index f576d04115beb9d94a347b96bc67009eb081d7aa..6e372c51d1bea2c899ce634f5cbecd64595f16b6 100644 (file)
@@ -271,15 +271,11 @@ static int compress_hw_get_hpointer(void *data,
        return 0;
 }
 
-static int compress_hw_get_tstamp(void *data,
-                       unsigned int *samples, unsigned int *sampling_rate)
+static int compress_hw_get_tstamp_32(struct compress_hw_data *compress,
+                       unsigned long long *samples, unsigned int *sampling_rate)
 {
-       struct compress_hw_data *compress = (struct compress_hw_data *)data;
        struct snd_compr_tstamp ktstamp;
 
-       if (!is_compress_hw_ready(compress))
-               return oops(compress, ENODEV, "device not ready");
-
        if (ioctl(compress->fd, SNDRV_COMPRESS_TSTAMP, &ktstamp))
                return oops(compress, errno, "cannot get tstamp");
 
@@ -288,15 +284,11 @@ static int compress_hw_get_tstamp(void *data,
        return 0;
 }
 
-static int compress_hw_get_tstamp64(void *data,
+static int compress_hw_get_tstamp_64(struct compress_hw_data *compress,
                        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");
 
@@ -305,6 +297,20 @@ static int compress_hw_get_tstamp64(void *data,
        return 0;
 }
 
+static int compress_hw_get_tstamp(void *data,
+                       unsigned long long *samples, unsigned int *sampling_rate)
+{
+       struct compress_hw_data *compress = (struct compress_hw_data *)data;
+
+       if (!is_compress_hw_ready(compress))
+               return oops(compress, ENODEV, "device not ready");
+
+       if (get_compress_hw_version(compress) >= SNDRV_PROTOCOL_VERSION(0, 4, 0))
+               return compress_hw_get_tstamp_64(compress, samples, sampling_rate);
+       else
+               return compress_hw_get_tstamp_32(compress, samples, sampling_rate);
+}
+
 static int compress_hw_write(void *data, const void *buf, size_t size)
 {
        struct compress_hw_data *compress = (struct compress_hw_data *)data;
@@ -646,7 +652,6 @@ struct compress_ops compress_hw_ops = {
        .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,