[pulseaudio-discuss] Pulseaudio --> Loading a module using a C program..

sathishkumar sivagurunathan sathish1000 at gmail.com
Wed Dec 4 03:10:05 PST 2013


On Dec 4, 2013 4:39 PM, "sathishkumar sivagurunathan" <sathish1000 at gmail.com>
wrote:
>
> On Dec 4, 2013 4:38 PM, sathish1000 at gmail.com wrote:
>>
>>
>> >
>> > Hi,
>> >
>> >
>> >
>> > I wrote a small c program to try to load a module.. But the module is
not getting loaded.
>>
>> > Can anybody help me with this ? I have pasted the code below.
>> >
>> >
>> >
>>
>> >
>> >
>> >
>> > #include <stdio.h>
>> >
>> > #include <string.h>
>> >
>> > #include <pulse/pulseaudio.h>
>> >
>> >
>> >
>> > #define CLEAR_LINE "\n"
>> >
>> > #define _(x) x
>> >
>> >
>> >
>> > /*
>> >
>> > // From pulsecore/macro.h
>> >
>> > #define pa_memzero(x,l) (memset((x), 0, (l)))
>> >
>> > #define pa_zero(x) (pa_memzero(&(x), sizeof(x)))
>> >
>> > */
>> >
>> >
>> >
>> > int ret;
>> >
>> > pa_context *context;
>> >
>> > int clientindex;
>> >
>> > int sink_num_channels;
>> >
>> > int sink_input_index;
>> >
>> >
>> >
>> > void show_error(char *s) {
>> >
>> >     /* stub */
>> >
>> > }
>> >
>> >
>> >
>> > void load_module_cb(pa_context *context, int32_t index, void *userdata)
>> >
>> > {
>> >
>> >    printf ("Going out \n");
>> >
>> >    int * return_value_pointer = (int *) userdata;
>> >
>> >    if (return_value_pointer)
>> >
>> >    {
>> >
>> >       *return_value_pointer = index;
>> >
>> >    }
>> >
>> > }
>> >
>> >
>> >
>> > // This callback gets called when our context changes state.  We
really only
>> >
>> > // care about when it's ready or if it has failed
>> >
>> > void pa_state_cb(pa_context *c, void *userdata) {
>> >
>> >                 pa_context_state_t state;
>> >
>> >                 int *pa_ready = userdata;
>> >
>> >
>> >
>> >                 state = pa_context_get_state(c);
>> >
>> >                 switch  (state) {
>> >
>> >                                 // There are just here for reference
>> >
>> >                                 case PA_CONTEXT_UNCONNECTED:
>> >
>> >                                 case PA_CONTEXT_CONNECTING:
>> >
>> >                                 case PA_CONTEXT_AUTHORIZING:
>> >
>> >                                 case PA_CONTEXT_SETTING_NAME:
>> >
>> >                                 default:
>> >
>> >                                                 break;
>> >
>> >                                 case PA_CONTEXT_FAILED:
>> >
>> >                                 case PA_CONTEXT_TERMINATED:
>> >
>> >                                                 *pa_ready = 2;
>> >
>> >                                                 break;
>> >
>> >                                 case PA_CONTEXT_READY:
>> >
>> >                                                 *pa_ready = 1;
>> >
>> >                                                 break;
>> >
>> >                 }
>> >
>> > }
>> >
>> >
>> >
>> > int pa_get_devicelist() {
>> >
>> >     // Define our pulse audio loop and connection variables
>> >
>> >     pa_mainloop *pa_ml;
>> >
>> >     pa_mainloop_api *pa_mlapi;
>> >
>> >     pa_operation *pa_op;
>> >
>> >     pa_context *pa_ctx;
>> >
>> >
>> >
>> >     // We'll need these state variables to keep track of our requests
>> >
>> >     int state = 0;
>> >
>> >     int pa_ready = 0;
>> >
>> >
>> >
>> >
>> >
>> >     // Create a mainloop API and connection to the default server
>> >
>> >     pa_ml = pa_mainloop_new();
>> >
>> >     pa_mlapi = pa_mainloop_get_api(pa_ml);
>> >
>> >     pa_ctx = pa_context_new(pa_mlapi, "test");
>> >
>> >
>> >
>> >     // This function connects to the pulse server
>> >
>> >     pa_context_connect(pa_ctx, NULL, 0, NULL);
>> >
>> >
>> >
>> >     // This function defines a callback so the server will tell us
it's state.
>> >
>> >     // Our callback will wait for the state to be ready.  The callback
will
>> >
>> >     // modify the variable to 1 so we know when we have a connection
and it's
>> >
>> >     // ready.
>> >
>> >     // If there's an error, the callback will set pa_ready to 2
>> >
>> >     pa_context_set_state_callback(pa_ctx, pa_state_cb, &pa_ready);
>> >
>> >
>> >
>> >     // Now we'll enter into an infinite loop until we get the data we
receive
>> >
>> >     // or if there's an error
>> >
>> >     //for (;;) {
>> >
>> >                 // We can't do anything until PA is ready, so just
iterate the mainloop
>> >
>> >                 // and continue
>> >
>> >                 if (pa_ready == 0) {
>> >
>> >             printf ("Going in \n");
>> >
>> >             pa_op=pa_context_load_module(pa_ctx, "module-role-cork",
NULL, NULL, NULL);
>> >
>> >             printf ("Going in1 \n");
>> >
>> >             if(pa_op) pa_operation_unref(pa_op);
>> >
>> >                     //continue;
>> >
>> >                 }
>> >
>> >                 // We couldn't get a connection to the server, so exit
out
>> >
>> >                 if (pa_ready == 2) {
>> >
>> >                     pa_context_disconnect(pa_ctx);
>> >
>> >                     pa_context_unref(pa_ctx);
>> >
>> >                     pa_mainloop_free(pa_ml);
>> >
>> >                     return -1;
>> >
>> >                 }
>> >
>> >
>> >
>> >                 pa_context_disconnect(pa_ctx);
>> >
>> >                 pa_context_unref(pa_ctx);
>> >
>> >                 pa_mainloop_free(pa_ml);
>> >
>> >                 return 0;
>> >
>> > }
>> >
>> >
>> >
>> > int main(int argc, char *argv[]) {
>> >
>> >
>> >
>> >     if (pa_get_devicelist() < 0) {
>> >
>> >                 fprintf(stderr, "failed to get device list\n");
>> >
>> >                 return 1;
>> >
>> >     }
>> >
>> >
>> >
>> >     return 0;
>> >
>> > }
>> >
>> >
>> >
>> > Thanks,
>> >
>> > Sathish
>> >
>> >
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/pulseaudio-discuss/attachments/20131204/9b934262/attachment.html>


More information about the pulseaudio-discuss mailing list