alsa lib原始碼分析

2021-06-17 20:54:10 字數 1118 閱讀 2318

我們感興趣的是,alsa lib是如何解析這些配置的。首先我們可以從使用alsa lib時,最先的入口函式snd_pcm_open處開始說起:

int snd_pcm_open(snd_pcm_t **pcmp, const char *name,

snd_pcm_stream_t stream, int mode)

其中呼叫了函式snd_config_update(),這個函式就是載入alsa的配置檔案中配置資訊的。這個函式直接呼叫了 snd_config_update_r,並以snd_config,snd_config_global_update為引數。這兩 個引數都是全域性變數(snd_config_global_update 為靜態),定義在conf.c中。初始值為0:

2616: snd_config_t *snd_config = null;

2632:static snd_config_update_t *snd_config_global_update = null;

snd_config_update_r還有第三個引數cfgs,是包含配置檔名的字串,snd_config_update呼叫它時沒有傳遞該引數,所以為空。

snd_config_udpate_r首先分析第三個引數cfgs,如果為空,就獲取系統環境變數alsa_config_path_var值,如果還是為空,就取alsa_config_path_default.

然後提取cfgs裡的檔名。注意cfgs可以包含多個檔名,以:或空格分開。並把每個檔案的檔案資訊儲存在

snd_config_update_t變數local中,其成員count記錄了有多少個檔案,finfo則是對應的檔案資訊鍊錶。

接下來分析第二個引數update,如果該引數值為空(前面提到過,最開始是為空),就重新去讀配置檔案,否則與local變數比較,如果發現不一樣(配置檔案被修改過),也會跳轉到重讀配置檔案的**。

重新讀取配置檔案的**主要做三件事,第一,以第乙個引數snd_config_t * top為引數呼叫snd_config_top(top);第二,開啟local中儲存的每乙個配置檔案,並呼叫 snd_config_load(top,in),其中in是snd_input_t型別,是alsa內部定義的結構,代表輸入流; 第三,snd_config_hooks(top,null);

spring原始碼分析 spring原始碼分析

1.spring 執行原理 spring 啟動時讀取應用程式提供的 bean 配置資訊,並在 spring 容器中生成乙份相應的 bean 配置登錄檔,然後根據這張登錄檔例項化 bean,裝配好 bean 之間的依賴關係,為上 層應用提供準備就緒的執行環境。二 spring 原始碼分析 1.1spr...

思科VPP原始碼分析(dpo機制原始碼分析)

vpp的dpo機制跟路由緊密結合在一起。路由表查詢 ip4 lookup 的最後結果是乙個load balance t結構。該結構可以看做是乙個hash表,裡面包含了很多dpo,指向為下一步處理動作。每個dpo都是新增路由時的乙個path的結果。dpo標準型別有 dpo drop,dpo ip nu...

redux原始碼分析(三) 原始碼部分

下面是每個部分的一些解讀 createstore apicreatestore reducer,initialstate enhancer 曾經非常好奇這個函式的第二個引數到底是initialstate還是enhancer,因為見過兩種寫法都有的,以為是版本問題。看了原始碼才發現,都可以的。如果你不...