Hi, On Thu, Dec 01, 2016 at 04:33:36PM +0100, Christophe Fergeau wrote: > On Thu, Dec 01, 2016 at 02:15:49PM +0100, Victor Toso wrote: > > On Thu, Dec 01, 2016 at 11:37:32AM +0100, Christophe Fergeau wrote: > > > On Wed, Nov 30, 2016 at 06:50:39PM +0100, Victor Toso wrote: > > > > From: Victor Toso <me@xxxxxxxxxxxxxx> > > > > > > > > Failing to get playback or record volume async on startup is very > > > > common making this warning too worrisome for users. > > > > > > > > > > Looked quickly at the code, and this seems to be getting the volume info > > > from pulseaudio. What is special at startup that makes this not work? > > > > As mentioned in the commit log below: > > > > > > If the audio back-end does not cache the last volume used or if this > > > > is the first time the application is launched, this message will be > > > > seen. > > > > With pulseaudio back-end, the playback/record volume is cached in user > > file with the application name as reference. The volume info should > > fail: > > > > 1-) For playback, in the first time a spice client is launched > > 2-) For record, always till the first it is used and, furthermore, > > cached. > > It seems obvious to you that in this case retrieving the volume is going > to fail, and that it's normal, but it's not obvious at all to me. > The application is running, so it should be able to retrieve some kind > of volume? Ah, I thought that how to get the volume was understood and the problem was understanding when the warning is showed, sorry. We can retrieve the volume in two ways: from an ongoing stream and from cache, in spice-pulse.c see the following comment on pulse_stream_restore_info_async() /* If Playback/Record stream is created we use pulse API to get volume-info * from those streams directly. If the stream is not created, retrieve last * volume/mute values from Pulse database using the application name; * If we already have retrieved volume-info from Pulse database then it is * safe to return the volume-info we already have in <stream>info */ However, when we call either [playback] pa_context_set_sink_input_volume() or [record] pa_context_set_source_output_volume(), PulseAudio should cache the stream volume in a local cache file, here it is $HOME/.config/pulse/ Now, the volume-sync happens when agent announce its capabilities. It is common that we don't have a playback stream being played at this time, and it is even harder for a record stream. > Or is it trying to retrieve the volume that was set in the previous > session, which I understand can fail? Yes, I think the failure is always when retrieving the volume from cache as it should be super simple when there is an ongoing stream. > But in this case, why are the next calls fine with retrieving the > volume? Is it? I think we will keep seeing the warning unless PulseAudio caches the stream volume. Well, all above was true when I implemented this. I've removed the cache file from PulseAudio and it does not seem to be creating a new one? :( > > Christophe > > > > > For gstreamer back-end, even with pulseaudio src/sink, it might not fail > > but it will be wrong, see: > > https://bugzilla.gnome.org/show_bug.cgi?id=766020 > > > > > > > > > > Signed-off-by: Victor Toso <victortoso@xxxxxxxxxx> > > > > --- > > > > src/channel-main.c | 4 ++-- > > > > 1 file changed, 2 insertions(+), 2 deletions(-) > > > > > > > > diff --git a/src/channel-main.c b/src/channel-main.c > > > > index 72ca712..e632c8e 100644 > > > > --- a/src/channel-main.c > > > > +++ b/src/channel-main.c > > > > @@ -1171,7 +1171,7 @@ static void audio_playback_volume_info_cb(GObject *object, GAsyncResult *res, gp > > > > &volume, &error); > > > > if (ret == FALSE || volume == NULL || nchannels == 0) { > > > > if (error != NULL) { > > > > - g_warning("Failed to get playback async volume info: %s", error->message); > > > > + spice_debug("Failed to get playback async volume info: %s", error->message); > > > > g_error_free(error); > > > > } else { > > > > SPICE_DEBUG("Failed to get playback async volume info"); > > > > @@ -1227,7 +1227,7 @@ static void audio_record_volume_info_cb(GObject *object, GAsyncResult *res, gpoi > > > > ret = spice_audio_get_record_volume_info_finish(audio, res, &mute, &nchannels, &volume, &error); > > > > if (ret == FALSE || volume == NULL || nchannels == 0) { > > > > if (error != NULL) { > > > > - g_warning("Failed to get record async volume info: %s", error->message); > > > > + spice_debug("Failed to get record async volume info: %s", error->message); > > > > g_error_free(error); > > > > } else { > > > > SPICE_DEBUG("Failed to get record async volume info"); > > > > -- > > > > 2.9.3 > > > > > > > > _______________________________________________ > > > > Spice-devel mailing list > > > > Spice-devel@xxxxxxxxxxxxxxxxxxxxx > > > > https://lists.freedesktop.org/mailman/listinfo/spice-devel > > > > > > > > > _______________________________________________ > > Spice-devel mailing list > > Spice-devel@xxxxxxxxxxxxxxxxxxxxx > > https://lists.freedesktop.org/mailman/listinfo/spice-devel >
Attachment:
signature.asc
Description: PGP signature
_______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel