* [FFmpeg-devel] [PATCH 2/3] avdevice/pulse_audio_dec: reduce default fragment size
2022-06-11 18:16 [FFmpeg-devel] [PATCH 1/3] Revert "avdevice/pulse_audio_dec: only set adjust latency flag if fragment_size is not set" Marton Balint
@ 2022-06-11 18:16 ` Marton Balint
2022-06-11 18:16 ` [FFmpeg-devel] [PATCH 3/3] avdevice/pulse_audio_dec: deprecate frame_size option Marton Balint
2022-06-16 19:37 ` [FFmpeg-devel] [PATCH 1/3] Revert "avdevice/pulse_audio_dec: only set adjust latency flag if fragment_size is not set" Marton Balint
2 siblings, 0 replies; 4+ messages in thread
From: Marton Balint @ 2022-06-11 18:16 UTC (permalink / raw)
To: ffmpeg-devel; +Cc: Marton Balint
Reduces default fragment size from the pulse audio default of 2 sec to 50 ms.
This also has an effect on the size of the returned frames, which will be
around 50 ms as well, making timestamps more accurate.
This should fix the regression in ticket #9776.
Pulseaudio timestamps for monitor sources are still pretty inaccurate for me,
but I don't see how else should we query latencies from the library.
Signed-off-by: Marton Balint <cus@passwd.hu>
---
doc/indevs.texi | 4 ++--
libavdevice/pulse_audio_dec.c | 7 ++++++-
2 files changed, 8 insertions(+), 3 deletions(-)
diff --git a/doc/indevs.texi b/doc/indevs.texi
index 9d8020311a..1141da26d1 100644
--- a/doc/indevs.texi
+++ b/doc/indevs.texi
@@ -1292,8 +1292,8 @@ Specify the channels in use, by default 2 (stereo) is set.
Specify the number of bytes per frame, by default it is set to 1024.
@item fragment_size
-Specify the minimal buffering fragment in PulseAudio, it will affect the
-audio latency. By default it is unset.
+Specify the size in bytes of the minimal buffering fragment in PulseAudio, it
+will affect the audio latency. By default it is set to 50 ms amount of data.
@item wallclock
Set the initial PTS using the current time. Default is 1.
diff --git a/libavdevice/pulse_audio_dec.c b/libavdevice/pulse_audio_dec.c
index ed094fd250..c780d607a0 100644
--- a/libavdevice/pulse_audio_dec.c
+++ b/libavdevice/pulse_audio_dec.c
@@ -162,7 +162,12 @@ static av_cold int pulse_read_header(AVFormatContext *s)
return AVERROR(ENOMEM);
}
- attr.fragsize = pd->fragment_size;
+ if (pd->fragment_size == -1) {
+ // 50 ms fragments/latency by default seem good enough
+ attr.fragsize = av_rescale(pa_frame_size(&ss), pd->sample_rate, 20);
+ } else {
+ attr.fragsize = pd->fragment_size;
+ }
if (s->url[0] != '\0' && strcmp(s->url, "default"))
device = s->url;
--
2.34.1
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
^ permalink raw reply [flat|nested] 4+ messages in thread
* [FFmpeg-devel] [PATCH 3/3] avdevice/pulse_audio_dec: deprecate frame_size option
2022-06-11 18:16 [FFmpeg-devel] [PATCH 1/3] Revert "avdevice/pulse_audio_dec: only set adjust latency flag if fragment_size is not set" Marton Balint
2022-06-11 18:16 ` [FFmpeg-devel] [PATCH 2/3] avdevice/pulse_audio_dec: reduce default fragment size Marton Balint
@ 2022-06-11 18:16 ` Marton Balint
2022-06-16 19:37 ` [FFmpeg-devel] [PATCH 1/3] Revert "avdevice/pulse_audio_dec: only set adjust latency flag if fragment_size is not set" Marton Balint
2 siblings, 0 replies; 4+ messages in thread
From: Marton Balint @ 2022-06-11 18:16 UTC (permalink / raw)
To: ffmpeg-devel; +Cc: Marton Balint
It does not do anything. Frame sizes can be controlled by using fragment_size.
Signed-off-by: Marton Balint <cus@passwd.hu>
---
doc/indevs.texi | 2 +-
libavdevice/pulse_audio_dec.c | 3 ++-
2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/doc/indevs.texi b/doc/indevs.texi
index 1141da26d1..8a198c4b44 100644
--- a/doc/indevs.texi
+++ b/doc/indevs.texi
@@ -1289,7 +1289,7 @@ Specify the samplerate in Hz, by default 48kHz is used.
Specify the channels in use, by default 2 (stereo) is set.
@item frame_size
-Specify the number of bytes per frame, by default it is set to 1024.
+This option does nothing and is deprecated.
@item fragment_size
Specify the size in bytes of the minimal buffering fragment in PulseAudio, it
diff --git a/libavdevice/pulse_audio_dec.c b/libavdevice/pulse_audio_dec.c
index c780d607a0..8d440c5621 100644
--- a/libavdevice/pulse_audio_dec.c
+++ b/libavdevice/pulse_audio_dec.c
@@ -371,6 +371,7 @@ static int pulse_get_device_list(AVFormatContext *h, AVDeviceInfoList *device_li
#define OFFSET(a) offsetof(PulseData, a)
#define D AV_OPT_FLAG_DECODING_PARAM
+#define DEPR AV_OPT_FLAG_DEPRECATED
static const AVOption options[] = {
{ "server", "set PulseAudio server", OFFSET(server), AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, D },
@@ -378,7 +379,7 @@ static const AVOption options[] = {
{ "stream_name", "set stream description", OFFSET(stream_name), AV_OPT_TYPE_STRING, {.str = "record"}, 0, 0, D },
{ "sample_rate", "set sample rate in Hz", OFFSET(sample_rate), AV_OPT_TYPE_INT, {.i64 = 48000}, 1, INT_MAX, D },
{ "channels", "set number of audio channels", OFFSET(channels), AV_OPT_TYPE_INT, {.i64 = 2}, 1, INT_MAX, D },
- { "frame_size", "set number of bytes per frame", OFFSET(frame_size), AV_OPT_TYPE_INT, {.i64 = 1024}, 1, INT_MAX, D },
+ { "frame_size", "set number of bytes per frame", OFFSET(frame_size), AV_OPT_TYPE_INT, {.i64 = 1024}, 1, INT_MAX, D | DEPR },
{ "fragment_size", "set buffering size, affects latency and cpu usage", OFFSET(fragment_size), AV_OPT_TYPE_INT, {.i64 = -1}, -1, INT_MAX, D },
{ "wallclock", "set the initial pts using the current time", OFFSET(wallclock), AV_OPT_TYPE_INT, {.i64 = 1}, -1, 1, D },
{ NULL },
--
2.34.1
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
^ permalink raw reply [flat|nested] 4+ messages in thread