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

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


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


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
번호 제목 글쓴이 날짜 조회 수sort
5728 S3C6410 Test Firmware 사용법 [1] jclab 2012-05-01 1759
5727 ActiveSync/USB host 동작 관련 [5] 백상은 2007-12-09 1759
5726 ICS S4210 (type password to decrypt storage?) 문제... file [4] 아명 2012-03-14 1759
5725 ramdisk 제작시 커널의 MTD파티션은 어떻게 해야 하나요? [2] 혜민아빠 2012-03-27 1756
5724 V4L2 device driver의 node ? [1] 테크 2012-04-18 1756
5723 V210에서 usb메모리 마운트 방법에 대한 질문 입니다. [2] Ike 2012-02-22 1755
5722 v4l2 는 camera register 관련된 포트에만 쓰일수 있는건가요? [1] biokk 2014-02-25 1755
5721 busybox 1.14.0 udhcpc 관련 문의드립니다. [7] Tommy 2010-08-18 1754
5720 [V310] request_irq로 등록을 했지만, isr이 불려지지 않습니다.. ... [3] 훌러덩 2011-12-21 1754
5719 u-boot의 mtdpart 환경변수값의 의미가 궁금합니다. [2] Supsupi 2012-04-02 1754
5718 ffmpeg 관련하여 examples 이 컴파일이 되지 않습니다. [1] 사랑해요 2012-07-03 1754
5717 kikat 4.2.2 에서 surfaceflinger 초기화 하는 부분에 대해서 질문 ... [3] 시안 2014-07-08 1754
5716 s3c2440 touch screen 좌표 인식 박용순 2012-01-13 1752
5715 리눅스 질문 : bus 충돌 회피방법 질문 [2] 카보 2013-08-28 1752
5714 Camera ISP Source가 공개된 AP chip 아시는분? [1] 꿈의사람 2014-02-07 1751
» 안녕하세요 사운드 디바이스 관련 질문입니다. [6] 조현호 2013-03-25 1750
5712 ARM 멀티코어와 리눅스에서 병렬처리? [4] Supsupi 2014-03-28 1749
5711 vmware 에 설치된 리눅스에서 공유폴더에 파일을 복사하는 방법 [1] blue0sky 2012-09-06 1748
5710 Android.Gingerbread MTD-utils 추가 포팅 문제점. [3] 서유한 2012-03-23 1748
5709 GPIO 설정 [5] 마대렐라 2014-01-24 1748

사용자 로그인