제목대로 alsa 어플 (aplay같은)에서 play하라고 명령을 내려주면
alsa 드라이버(코덱칩 등)에서 받아서 play 처리하라고 명령주는 부분이 어딘지 혹시 아시는분 계신가요?..
저는 그게 snd_pcm_ops 구조체내부의 멤버인 open 함수 포인터가 아닐까 하고 생각했는데
아닌것 같습니다. 이건 그냥 pcm 스트림을 열라는 내용인거 같고,
어플이 play처리하라고 명령을 줬다면 드라이버 단에서 받아서 최초 1차적으로 명령내리는 부분이 분명히 있을텐데
도저히 못찾겠네요 ^^;
도와주세요~
제가 좀 도움이 될까해서 답변 남깁니다.
좀 질문이 모호한것 같아 대충에 부분에 대해서 설명드리겠습니다.
aplay에서 play하라고 명령을 줬다는게 환경 설정( samplerate, channel, format) 부터에 에 관한것인가요?아님 실제로 오디오 데이터를 쓰기 시작한 시점부터인가요?
오디오 데이터를 플레이하기 위해서 alsa-lib단은 배제하고 kernel단 만 보게 되면 첨에 언급하신 snd_soc_ops쪽의 operation 펑션등이 불리게 됩니다. (*startup),(*hw_params),(*prepare)(*trigger)등이 불려 각각 그 보드에 엮인 코덱칩의 설정, DAI(I2S)등의 설정, pcm전송하기위한 DMA설정등을 하게 됩니다.이후 실제 pcm data가 write되는것은 alsa core단에서는 snd_pcm_lib_write등의 함수가 불려 실제 write가 이뤄지게 됩니다. OSS처럼 write함수가 드라이버의 write로 가는 이전 방식하고 다릅니다.
조금이나마 도움이 됐길 바랍니다.이상입니다.