record

1. pulseaudio启动

     module-alsa-source.c

• 加载了source

在module加载pa_module_init时,创建pa_source_new。

s->outputs = pa_idxset_new(NULL, NULL);

创建一个outputs的容器(数组)

r = pa_idxset_put(core->sources, s, &s->index);

将创建的source保存在core的sources中。

        • 读取数据,传输到source_output

               从pcm handle中读取数据

                  do_read()

                       snd_pcm_readi()

                将数据路由给关联在source上的各个outputs

                       pa_idxset_foreach(s->outputs, do_post, chunk)

                       pa_source_output_push(o, chunk);

 

source-output.c

         pa_source_output_push()

            做resample处理

             将数据路由给push的回调函数

 

1. source 如何与source_output进行关联的?

   创建source_output,与source进行关联

      source-output.c

           pa_source_output_new

                 o = malloc(sizeof(struct pa_source_output));

                 r = pa_idxset_put(s->outputs, o, NULL);

                 存入到source的outputs的容器(数组),进行了关联

      Protocol-esound.c 

               ○ 获取source

                   source = get_input_source(c->protocol)

                   pa_idxset_get_by_index(p->core->sources, p->sink_index)

                ○ source与outputs进行关联

                     c->source_output = pa_source_output_new(source, name, &ss);

                ○ 接收数据的回调函数

                     c->source_output->push = source_output_push_cb;

       Protocol-native.c 

                ○ 获取source

                   source = pa_idxset_get_by_index(c->protocol->core->sources, source_index);

                ○ source与outputs进行关联

                    s = record_stream_new(c, source, &ss, name, maxlength, fragment_size)

                 source_output = pa_source_output_new(source, name, ss)

                ○ 接收数据的回调函数

                     s->source_output->push = source_output_push_cb;

        Protocol-simple.c 

                ○ 获取source

                   source = pa_idxset_get_by_index(p->core->sources, p->source_index)

                ○ source与outputs进行关联

                    c->source_output = pa_source_output_new(source, c->client->name, &p->sample_spec)

               ○ 接收数据的回调函数

                     c->source_output->push = source_output_push_cb;

 

 

 

 

 

 

            

 

                              parec-simple.c

 

       

posted @ 2020-11-21 04:36  renhl  阅读(243)  评论(0编辑  收藏  举报