1

最近、Linux (実際には、Android TV) 用の alsa ドライバーを開発しようとしています。alsa (alsa は Advanced Linux Sound Architecture を指します) デバイスの処理に関する問題に遭遇しました。

実は、alsa-lib-1.0.27.1とtinyalsa(Android端末用)のソースコードの一部を勉強しました。そしてSamsung Devicesのオーディオドライバーを勉強しました。

ユーザー空間アプリケーションは、/dev/snd/pcmXXXXX を使用してオーディオ データを再生/キャプチャします。ただし、問題があります。オーディオ デバイスが 1 つしかない場合は問題ありません。

/dev/snd/
├── by-path
│   └── pci-0000:02:02.0 -> ../controlC0
├── controlC0
├── midiC0D0
├── pcmC0D0c
├── pcmC0D0p
├── pcmC0D1p
└── timer

ただし、複数のデバイスがある場合 (たとえば、USB オーディオ デバイスを接続した場合)。

/dev/snd/
├── by-path
│   └── pci-0000:02:02.0 -> ../controlC0
├── controlC0    
├── controlC1    //new Control channel
├── midiC0D0
├── pcmC0D0c
├── pcmC0D0p
├── pcmC0D1p
├── pcmC1D0c     //new card,new capture channel
├── pcmC1D0p     //new card,new playback channel
└── timer

ユーザー アプリケーションがこれらのデバイスを正しく処理するにはどうすればよいでしょうか。

私は本当にサムスンのドライバーに混乱しています. ==>linux-3.5.4/device/samsung/crespo/libaudio/AudioHardware.cpp

status_t AudioHardware::AudioStreamInALSA::open_l()
{
//.....
    ALOGV("open pcm_in driver");
    TRACE_DRIVER_IN(DRV_PCM_OPEN)
    mPcm = pcm_open(0, 0, flags, &config); 
          //Why it always uses Card 0 and device 0.
          //does this mean it can not support multi-devices

さらに、詳細についてソースコードを共有していただければ幸いです(たとえば、他のドライバー...)

どうもありがとうございます。

4

1 に答える 1