summaryrefslogtreecommitdiffstats
path: root/libao2
diff options
context:
space:
mode:
Diffstat (limited to 'libao2')
-rw-r--r--libao2/audio_out.c6
-rw-r--r--libao2/audio_out.h4
2 files changed, 10 insertions, 0 deletions
diff --git a/libao2/audio_out.c b/libao2/audio_out.c
index 14cab9b285..bd06c8fd5f 100644
--- a/libao2/audio_out.c
+++ b/libao2/audio_out.c
@@ -221,8 +221,12 @@ void ao_init(struct ao *ao, char **ao_list)
void ao_uninit(struct ao *ao, bool cut_audio)
{
+ assert(ao->buffer.len >= ao->buffer_playable_size);
+ ao->buffer.len = ao->buffer_playable_size;
if (ao->initialized)
ao->driver->uninit(ao, cut_audio);
+ if (!cut_audio && ao->buffer.len)
+ mp_msg(MSGT_AO, MSGL_WARN, "Audio output truncated at end.\n");
talloc_free(ao);
}
@@ -254,6 +258,8 @@ int ao_get_space(struct ao *ao)
void ao_reset(struct ao *ao)
{
+ ao->buffer.len = 0;
+ ao->buffer_playable_size = 0;
if (ao->driver->reset)
ao->driver->reset(ao);
}
diff --git a/libao2/audio_out.h b/libao2/audio_out.h
index fb62923297..628b9c3ae7 100644
--- a/libao2/audio_out.h
+++ b/libao2/audio_out.h
@@ -21,6 +21,8 @@
#include <stdbool.h>
+#include "bstr.h"
+
typedef struct ao_info {
/* driver name ("Matrox Millennium G200/G400" */
const char *name;
@@ -71,6 +73,8 @@ struct ao {
int outburst;
int buffersize;
int pts;
+ struct bstr buffer;
+ int buffer_playable_size;
bool initialized;
bool untimed;
const struct ao_driver *driver;