기존 이솝 임베디드 포럼의 지식인 서비스가 게시판 형태로 변경되었습니다.

현재 타사 보드로 스터디 중입니다.


지금 사운드 디바이스 드라이버가 로딩되어져 있는 상태입니다.


aplay 라는 툴을 사용해 로딩해본 결과입니다.


# aplay -l                                                     

**** List of PLAYBACK Hardware Devices ****                                     

card 0: EVM [EVM], device 0: AIC3X tlv320aic3x-hifi-0 []                 

  Subdevices: 1/1                                                               

  Subdevice #0: subdevice #0                                                    

card 0: EVM [EVM], device 1: hdmi HDMI-DAI-CODEC-1 []                    

  Subdevices: 1/1                                                               

  Subdevice #0: subdevice #0 


이 상태에서 


# aplay -Dhw:0,0 test.wav  


라는 명령어를 하게 되면 HP-out 쪽으로 출력이 됩니다.


다음으로


# aplay -Dhw:0,1 test.wqv 


라는 명령어를 하게 되면 HDMI-audio 쪽에서 출력이 됩니다.


여기까지는 현재 상황이고요 제가 하고 싶은거는 오디오 출력을 바꾸고 싶습니다.


gst-launch filesrc location="fan_4.mp4" ! qtdemux name=demux demux.audio_00 ! queue ! faad ! alsasink demux.video_00 ! queue ! h264parse ! omx_h264dec ! omx_scaler ! omx_ctrl display-mode=OMX_DC_MODE_1080P_60 ! omx_videosink 


gstreamer 를 사용하여 영상을 재생하는데 영상 출력은 HDMI 쪽으로 사운드는 HP-out 쪽으로 출력됩니다.


이 상황에서 영상 오디오를 HDMI 쪽으로 출력하고 싶습니다.


질문입니다.


1. 현재 device 1 로 되어 있는 HDMI-audio 를 device 0 로 바꾸는 방법이나 팁을 알려 주시면 감사하겠습니다.


혹은


2. gstreamer pipeline 을 조정하여 default 값(HP-out) 출력이 아닌 HDMI audio 출력으로 바꾸고 싶습니다.

이에 따라 gstreamer pipeline 조절 팁을 알려주시면 감사하겠습니다. 


감사합니다.


좋은 하루 되십시오.


쾌도난마

2013.03.25 22:50:20
*.50.20.11

추천
1
비추천
0

안녕하세요.

/dev/snd/pcmC0D0p <- HPOUT 고정

/dev/snd/pcmC0D1p <- HDMI OUT 고정

kernel alsa 에서 이미 고정시켜 놓았을 겁니다.


1. 커널 alsa 를 수정

davinci-evm.c 에 보시면 snd_soc_dai_link 구조체를 선언한 부분을 보시면 알 수 있습니다.

[0] 과 [1] 배열을 바꾸는 방법 이 있을 수 있겠습니다 ^^ (비추천) ( 커널도 컴파일 해야됨 )

질문하신 device 1 을 0으로 device 0을 1로 바꾸는 방법입니다.

(코덱 이름이랑 evm 보고 davinci-evm.c 라고 말씀 드렸는데.. 

아니라면 사용하시는 alsa asoc 의 machine 드라이버의 snd_soc_dai_link 구조체 입니다. )


2. amixer 를 통하여 path 를 변경

amixer 를 치면 path 설정을 할 수 있는데 경로를 HDMI 로 바꾸는 방법

(오디오 코덱에 대해서 잘 알고 있어야 함. 비추천)


3. gstreamer 에서 /dev/snd/pcmC0D1p 를 open 하도록 변경 ( 추천 )

제가 gstreamer 에 대해 경험이 없습니다만, 분명 configure 나 환경설정 파일을 통하여

/dev/snd/pcmC0D1p 를 open 하여 PCM write 를 하는 방법이 있을 듯 합니다.

지금은 /dev/snd/pcmC0D0p 를 open 하여 write 때문에 HPOUT 으로 나가고 있을겁니다.


조현호

2013.03.25 23:44:12
*.151.23.186

답변 감사합니다.


일단 디바이스 노드를 바꿔서 진행하였습니다.


무조건 pcmc0d0p 를 읽기에 1p -> 0p 로 0p -> 1p 로... 


실력의 한계네요 ㅠ


맨처음 1번을 진행했었는데 계속 커널 패닉이 나서...


먼가 다른 부분도 연관되서 바꿔줘야되는거 같아서 일단 포기 했습니다... ㅠ 


앞으로 이게 잘 될지 모르겠지만


하다가 안되면 나중에 1번을 선택해서 수정해야겠습니다.

쾌도난마

2013.03.26 00:11:38
*.50.20.11

아하...그게 패닉이 나면 안될텐데... 

원래 잘 처리 되는 것이 ALSA 인데.. 아무래도.

기존에 [0] 에 있던 .init 을 [1]으로 옮기셨을 테니

기존에 [0]에 있던 .init 만 그대로 남겨 두고... [0] 과 [1]을 바꿔 보세요..


static struct snd_soc_dai_link xxxxxx[] = {

{

                /* HPOUT_LINK */

.init = xxx_init,

                ......

},

{

                /* HDMI_OUT */

......

},

};



static struct snd_soc_dai_link xxxxxx[] = {

{

                /* HDMI_OUT */  

.init = xxx_init,

                ......

},

{

              /* HPOUT_LINK */

......

},

};


요렇게.... 안되면.... 
쩝 어쩔수가 없네요 ㅋ
건투를 빕니다 ㅎㅎ!

조현호

2013.03.26 01:34:14
*.151.23.186

아 역시 안되네요 ㅠ


.init

.ops


이 두개를 맨위에 놓고 나머지 사항만 바꿨는데 여전히 안되네요 ㅠ 


아니면 alsa 쪽 소스에서 /dev/snd/pcmc0p0 를 생성할때 부분을 찾아서 


수정해주는건 더 어렵나요? 


HDMI 쪽 mknod 할때 /dev/snd/pcmc0p0 로 바꾸고


HPOUT 쪽 mknod 할때 /dev/snd/pcmc0p1 으로 바꾸고..


이런식으로 접근은 어렵나요?


디바이스 생성 노드 부분을 못찾겠네요 ㅠ 

쾌도난마

2013.03.26 17:58:30
*.50.20.11

ops 는 바꾸면 안되는데..
근데 근본적으로 그 방법은 사용하지 마시고
위에 제가 말한 것 중에 3번으로 하셔야 합니다
(아무래도 그게 가장 깔끔한 해결책입니다.)

디바이스는 ueventd 나 busybox mdev 를 통해 자동으로 생성 되는 겁니다.
그거 강제로 바꾸지 마세요;;;;

user 영역에서 dev file 까지 open 하는 소스가 다 열려 있다면(볼 수 있다면)
device file open 하는 곳을 쭈욱 따라 가셔서 어디서 바꿀 여지가 없는지 한번 살펴 보세요..

char *pcm_name = "default";
err = snd_pcm_open(&handle, pcm_name, stream, open_mode);
위소스는 aplay.c 에 있는 소스인데
gstream 역시 snd_pcm_open 함수를 호출 할 겁니다.
저기 두번째 매개변수에서 pcm_name "default" 를 호출 하면
alsa.conf 에서 default 값으로 열겁니다.
defaults.ctl.card 0
defaults.pcm.card 0
defaults.pcm.device 0
이렇게 되어 있는데
defaults.pcm.device 1
이렇게만 하셔도 소기에 목적을 달성하지 않을까 싶은데요..

이걸 근거로 alsa.conf 에서 HDMI 에 대한 디스크립션을 작성? 및 살펴보고
err = snd_pcm_open(&handle, "?????", stream, open_mode);
이런식으로... 하셔야 되지 않을까 싶습니다.. ㅎㅎ

저도 아직 alsa.conf 에 대한걸 자세히 몰라서;;;;;;

조현호

2013.03.27 00:54:37
*.151.23.186

아 답변 감사합니다.


alsa.conf 참조해서 


.asoundrc 로 설정할수 있는 거였네요 ㅠ


ALSA device 의 default 값을 조정하는 방식이네요 ㅠ


검색 끝에 찾았습니다.


http://alsa.opensrc.org/FAQ026


혹시 몰라 링크 걸어 놓습니다.


저렇게 하니까 이제 HDMI 쪽에서 영상 오디오 제대로 잘 나오네요


감사했었습니다.

List of Articles
번호 제목 글쓴이 날짜 조회 수
5768 arndale보드 jb로 컴파일하고 부팅시 이 부분에서 멈춥니다. file [2] 김영준 2013-03-25 1601
» 안녕하세요 사운드 디바이스 관련 질문입니다. [6] 조현호 2013-03-25 1746
5766 arndale 보드 리눅스 지원 계획? [3] 김장균 2013-03-24 1743
5765 arndale 보드 부팅 관련 질문입니다. file [6] 김영준 2013-03-24 1440
5764 arndale 보드 wifi 작동 관련 질문 드립니다. [3] nvers 2013-03-23 1470
5763 [v4l 드라이버에대해서 몇가지 질문드릴께요] 밥줘잉 2013-03-23 1073
5762 안드로이드 launcher 질문 wizard14 2013-03-22 1694
5761 arndale 4.1.1 소스 배터리 관련 문의 [1] nsys 2013-03-22 1401
5760 RAM이 매우 적은 상황에서 initramfs, squashfs 에 관련된 질문.. [8] 박수민 2013-03-22 1566
5759 arndale mkimage link 에러 [2] 폐인x2 2013-03-22 1402
5758 [Android] play 스토어 설치 관련 [2] wizard14 2013-03-21 5272
5757 Linux 커널 포팅 관련 기초 질문 [1] 갱고 2013-03-21 1551
5756 s3c6410 칩에서 u-boot 상에서 사운드 출력이 가능한가요? [6] 라디오 2013-03-20 1478
5755 arndale board에서 리눅스 touch 드라이브 소스 찾아요. [1] 폐인x2 2013-03-19 1367
5754 포팅시 주의점에 대해서 문의드립니다. [5] 테크 2013-03-17 1463
5753 안녕하세요 ffmpeg 질문있어서 문의드립니다.. [1] 이호석 2013-03-15 1486
5752 AwesomePlayer 기능을 확장하려고 하는데 질문이 있습니다. [2] 김바람 2013-03-14 1629
5751 gain과 volume [1] 열심히 2013-03-14 1410
5750 alsa audio 프로세스별 capture방법문의.. 박진우 2013-03-14 1283
5749 [android]cosole 질문 wizard14 2013-03-13 860

사용자 로그인