1
0
mirror of https://github.com/mpv-player/mpv synced 2025-02-16 20:27:23 +00:00

ao_null: add emulation for certain broken behavior

I'm not sure how common this behavior possibly is; well whatever. This
option will allow reproducing such behavior, and help debugging it.
This commit is contained in:
wm4 2015-01-30 21:30:54 +01:00
parent a7c43babb7
commit 12d822ce44
2 changed files with 15 additions and 1 deletions

View File

@ -247,6 +247,9 @@ Available audio output drivers are:
Simulate broken audio drivers, which always add the fixed device Simulate broken audio drivers, which always add the fixed device
latency to the reported audio playback position. latency to the reported audio playback position.
``broken-delay``
Simulate broken audio drivers, which don't report latency correctly.
``pcm`` ``pcm``
Raw PCM/WAVE file writer audio output Raw PCM/WAVE file writer audio output

View File

@ -25,6 +25,7 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <math.h>
#include "talloc.h" #include "talloc.h"
@ -50,6 +51,7 @@ struct priv {
float latency_sec; // seconds float latency_sec; // seconds
float latency; // samples float latency; // samples
int broken_eof; int broken_eof;
int broken_delay;
// Minimal unit of audio samples that can be written at once. If play() is // Minimal unit of audio samples that can be written at once. If play() is
// called with sizes not aligned to this, a rounded size will be returned. // called with sizes not aligned to this, a rounded size will be returned.
@ -191,7 +193,15 @@ static double get_delay(struct ao *ao)
if (priv->broken_eof && priv->buffered < priv->latency) if (priv->broken_eof && priv->buffered < priv->latency)
delay = priv->latency; delay = priv->latency;
return delay / (double)ao->samplerate; delay /= ao->samplerate;
if (priv->broken_delay) { // Report only multiples of outburst
double q = priv->outburst / (double)ao->samplerate;
if (delay > 0)
delay = (int)(delay / q) * q;
}
return delay;
} }
#define OPT_BASE_STRUCT struct priv #define OPT_BASE_STRUCT struct priv
@ -221,6 +231,7 @@ const struct ao_driver audio_out_null = {
OPT_FLOATRANGE("speed", speed, 0, 0, 10000), OPT_FLOATRANGE("speed", speed, 0, 0, 10000),
OPT_FLOATRANGE("latency", latency_sec, 0, 0, 100), OPT_FLOATRANGE("latency", latency_sec, 0, 0, 100),
OPT_FLAG("broken-eof", broken_eof, 0), OPT_FLAG("broken-eof", broken_eof, 0),
OPT_FLAG("broken-delay", broken_delay, 0),
{0} {0}
}, },
}; };