Hi, I have a really old application that uses oss interfaces, and noticed that when attempting to run via padsp it would fail ( as opposed to with aoss ). After talking with Ford_Prefect in #pulseaudio, we narrowed down the problem to protocol-native.c Attached is a patch which allows padsp's get_sink_info call to success on the server side ( drop-invalid-check ). He mentioned that name is allowed to be null; which makes me think it might be less confusing to just do a *name check and then no others.
Additionally, I noticed that in padsp.c it was recieving two callbacks in both sink and source_info_cb. As this appears to be the desired behavior in introspect.c, I modified the _cb functions to only notify if success was not already set. -drew
diff -udPr --exclude=orig pulseaudio-0.9.21/orig/src/pulsecore/protocol-native.c pulseaudio-0.9.21/src/pulsecore/protocol-native.c --- pulseaudio-0.9.21/orig/src/pulsecore/protocol-native.c 2009-11-22 22:57:07.000000000 -0500 +++ pulseaudio-0.9.21/src/pulsecore/protocol-native.c 2011-04-07 16:28:09.000000000 -0400 @@ -3125,7 +3125,6 @@ (command == PA_COMMAND_GET_SOURCE_INFO && pa_namereg_is_valid_name_or_wildcard(name, PA_NAMEREG_SOURCE)) || pa_namereg_is_valid_name(name), tag, PA_ERR_INVALID); - CHECK_VALIDITY(c->pstream, idx != PA_INVALID_INDEX || name, tag, PA_ERR_INVALID); CHECK_VALIDITY(c->pstream, idx == PA_INVALID_INDEX || !name, tag, PA_ERR_INVALID); CHECK_VALIDITY(c->pstream, !name || idx == PA_INVALID_INDEX, tag, PA_ERR_INVALID);
diff -udPr --exclude=orig pulseaudio-0.9.21/orig/src/utils/padsp.c pulseaudio-0.9.21/src/utils/padsp.c --- pulseaudio-0.9.21/orig/src/utils/padsp.c 2009-09-18 16:21:44.000000000 -0400 +++ pulseaudio-0.9.21/src/utils/padsp.c 2011-04-07 17:14:26.000000000 -0400 @@ -1205,8 +1205,8 @@ fd_info *i = userdata; if (!si || eol < 0) { - i->operation_success = 0; - pa_threaded_mainloop_signal(i->mainloop, 0); + if( ! i->operation_success ) + pa_threaded_mainloop_signal(i->mainloop, 0); return; } @@ -1227,8 +1227,8 @@ fd_info *i = userdata; if (!si || eol < 0) { - i->operation_success = 0; - pa_threaded_mainloop_signal(i->mainloop, 0); + if( ! i->operation_success ) + pa_threaded_mainloop_signal(i->mainloop, 0); return; }
_______________________________________________ pulseaudio-discuss mailing list pulseaudio-discuss@mail.0pointer.de https://tango.0pointer.de/mailman/listinfo/pulseaudio-discuss