1. KERNEL
DM368 관련 Audio 를 비롯하여, 관련설정 부분을 간단히 요약한다.
관련 기초내용들은 전부생략한다.
ALSA Flow 간단히 설명 https://ahyuo79.blogspot.com/2016/02/audio-alsa-3-kernel-playback-and-capture.html
1.1 KERNEL CONFIG
DM368인 경우, 외부 AUDIO CODEC(ADC,DAC)로 변경을 할 경우, McBSP의 Driver가 변경이 된다.
잘못이해한 부분은 VOICE CODEC (ADC와 DAC를 비롯하여 G.711 , AAC 기능까지 전부 한 HW로 합쳐진줄 오해했다, 그럼 그렇지)
현재 TI에서 제공하는 VOICE CODEC은 MIC는 MONO 이므로, 이부분은 추후 수정하도록해야함
$ cd ~/dm368/mt5/Source/dvsdk_ipnctools/ipnc_psp_03_21_00_04/kernel
$ vi ./arch/arm/configs/davinci_dm368_ipnc_ubifs_defconfig
CONFIG_SND_SOC=y
CONFIG_SND_DAVINCI_SOC=y
CONFIG_SND_DAVINCI_SOC_VCIF=y
CONFIG_SND_DAVINCI_SOC_EVM=y
# CONFIG_SND_DM365_AIC3X_CODEC is not set
CONFIG_SND_DM365_VOICE_CODEC=y
CONFIG_SND_SOC_I2C_AND_SPI=y
# CONFIG_SND_SOC_ALL_CODECS is not set
CONFIG_SND_SOC_CQ0093VC=y
// 추가사항 (AIC3100)
CONFIG_SND_DM365_AIC3X_CODEC,
CONFIG_SND_DAVINCI_SOC_I2S,
CONFIG_SND_SOC_TLV320AIC3X
// 제거사항 (VOICE CODEC)
CONFIG_DAVINCI_MCBSP
CONFIG_SND_DAVINCI_SOC_VCIF
CONFIG_SND_DM365_VOICE_CODEC
CONFIG_SND_SOC_CQ0093VC
1.2 AIC3100 driver 수정
DM368에 AIC3x는 Driver는 제공하지만, Register Map 차이가 많이나서 수정함
AIC3100 Driver는 인터넷에
tlv320aic3100.c는 있지만
i2c regmap이 필요
현재 AIC3x에서 수정하고 수정, 추후 시간여유가 있다면, aic3100.c로 수정하고 추가.
$ vi ./arch/arm/mach-davinci/board-dm368-ipnc.c // Kernle 소스 수정, 61 Reset
//I2C Device 등록 AIC3100
$ vi ./arch/arm/mach-davinci/dm365.c
$ vi ./arch/arm/mach-davinci/mcbsp.c MCBSP //CONFIG_DAVINCI_MCBSP
$ vi ./sound/soc/davinci/davinci-i2s.c MCBSP //CONFIG_SND_DAVINCI_SOC_I2S
$ vi ./sound/soc/davinci/davinci-evm.c // I2C driver 등록 수정 AUDIO_FORMAT 변경
$ vi ./sound/soc/codecs/tlv320aic3x.c // AIC3100 변경
2. APP 관련 수정사항
DM368 IPNC에서 Application에서 Kernel의 Device를 Control하는 Main Application은 AV Server라는 프로그램이다.
이 APP은 기본적으로 Audio 및 Video , 및 기타기능를 모두 조절하므로, Driver를 Porting 해서 Driver를 검증을 완료하고 문제가 발생했다면,
그 다음에 봐야 할 부분이, AV Server이므로 Debug를 해야 할 포인트와 관련부분을 기억해야겠다.
관련메뉴얼은 appropho에서 제공을 하고 있다.
2.1 AV SERVER-AUDIO-DEBUG
$ vi ./av_capture/application/ipnc/av_server/inc/avserver_debug.h
//#define AVSERVER_DEBUG_AUDIO_THR 해제
$ vi ./av_capture/framework/alg/inc/alg_audEncDec.h
// Audio Encode Decode Debug을 담당 AAC와 G.711
//#define ALG_AUD_ENC_DEBUG 해제
//#define ALG_AUD_INP_FILE_DUMP_DEBUG audioInp.pcm 파일 생성
//#define ALG_AUD_ENC_FILE_DUMP_DEBUG audioOut.aac 파일 생성
$ vi ./av_capture/framework/drv/usermod/src/drv_audio.c
// Audio ALSA API Interface 부분 Debuging
//#define DRV_AUDIO_DEBUG 해제하면됨
2.2 AV SERVER-AUDIO
각 AV Server Audio 부분을 수정하여 검증 및 테스트를 진행하도록 한다.
$ vi ./av_capture/application/ipnc/av_server/src/audio/audioThr.c
// G.711 and AAC , avserver.h->avserver_debug.h 포함
//#define NUM_CHANNELS (1->2) 수정 ,
// 위와 같이 수정시 RTSP의 SDP부분 수정요구 Channel? or Mono 녹음
$ vi ./av_capture/framework/drv/usermod/src/drv_audio.c
// ALSA Interface API open 및 설정 (parameter)
- 아래와 같이 Serial에서 Capture debug , Encoding 상태시
# cat /proc/asound/card0/pcm0c/sub0/status
# cat /proc/asound/card0/pcm0c/sub0/sw_params
# cat /proc/asound/card0/pcm0c/sub0/hw_params
$ vi ./av_capture/framework/alg/src/alg_audEnc.c
// AAC or G.711 설정 ALG_AUD_CODEC_AAC
DM368에서 제공하는 Motion Detection 기능이며, 관련 세부사항은 생략
$ vi ./av_capture/application/ipnc/av_server/src/video/videoMotionThr.c
$ vi ./av_capture/framework/alg/src/alg_motionDetect.c
$ vi ipnc_app/sys_server/src/proc_alarm.c
//id_motion_sem , Semaphore 1729 initialized.
$ grep -r DRV_gpioSetMode
// GPIO 관련부분 검색
http://e2e.ti.com/support/dsp/davinci_digital_media_processors/f/100/p/252454/888321
https://e2e.ti.com/support/dsp/davinci_digital_media_processors/f/100/t/252454
3. How To TEST
테스트 방법은 ALSA의 Tools을 이용하여 간단하게 테스트를 진행
3.1 ALSA AUDIO TEST
초반에 Audio Driver는 수정완료 한 후, 아래와 같이 ALSA에서 제공하는 프로그램으로 TEST
현재의 문제점은 Mono로 Capture가 진행하고, Playback을 했을때, 진행이 되어야한다.
하지만 진행이 되지 않는다. 이 부분 추후 진행
**아래의 TEST 하기전에 반드시 av_server를 사전에 차단하고 실행해야함.
$ arecord -f S16_LE -r48000 -c 2 -d 10 /root/test.wav // CAPTURE
$ aplay /root/test.wav //PLAYBACK
간단하게 PCM S16_LE format으로 Sample rate를 정해서 저장
3.2 RTSP AUDIO TEST
RTP로 H.264 or MPEG4를 전송을 한다, 이때, Audio 부분을 포함하기에 이부분을 Web에서 설정만 해주면 제대로 동작을 해야한다.
만약 동작하지 않는다면 AV Server Debug 및 Driver TEST를 다시 진행
Web->Audio->Enable Audio 설정 및 AAC-LC로 변경, 모드, Samplerate 및 Bitrate 변경.
Live Video 에서 Audio 체크 후 확인 or VLC에서 rtsp로 확인
4. 문제점
현재 Codec Driver 문제로 인하여, av server의 오 동작이 발생하며, 추후 시간이 있다면,이 부분을 수정한다.
이 부분은 데모수준으로 끝내며, 현재 내일이 아니므로 추후에 다시 보도록하자