zoukankan      html  css  js  c++  java
  • 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

           

  • 相关阅读:
    蒲公英
    大神-YY
    iOS开发精选知识点讲解 - 视频等 iOSStrongDemo是由@李刚维护,总结一些iOS开发精选知识点。每一个知识点都有相应的测试代码,非常适合iOS初学者。
    iOS开发UI篇—懒加载
    iOS开发UI篇—UITableviewcell的性能优化和缓存机制
    iOS开发UI篇—UITableview控件基本使用
    iOS开发UI篇—UITableview控件简单介绍
    iOS — Autolayout之Masonry解读
    iOS开发UI篇—多控制器和导航控制器简单介绍
    iOS开发网络篇—数据缓存
  • 原文地址:https://www.cnblogs.com/renhl/p/14014096.html
Copyright © 2011-2022 走看看