2015-01-22 3 views
1

Android MediaCodec API로 AC3 오디오를 디코딩하려고합니다. csd-0elementary stream descriptor으로 설정하면 AAC를 성공적으로 디코딩 할 수 있습니다.AC3 용 Android MediaCodec

AC3 디코딩을 시도, 내 구성에서 다음 MediaFormat 사용 AMediaCodec_configure

AMEDIAFORMAT_KEY_MIME: "audio/ac3" 
AMEDIAFORMAT_KEY_CHANNEL_COUNT: 6 
AMEDIAFORMAT_KEY_SAMPLE_RATE: 48000 
AMEDIAFORMAT_KEY_IS_ADTS: 0 

전화에를 다음과 같은 오류 메시지가 얻을 I : 몇 가지 추가 데이터 내가

01-22 12:37:58.760: E/ACodec(10548): [OMX.Nvidia.bypass.decoder] configureCodec returning error -2147483648 
01-22 12:37:58.760: E/ACodec(10548): signalError(omxError 0x80001001, internalError -2147483648) 
01-22 12:37:58.760: E/MediaCodec(10548): Codec reported err 0x80001001, actionCode 0, while in state 3 
01-22 12:37:58.760: E/MediaCodec(10548): configure failed with err 0x80001001, resetting... 

있는가 디코더를 제공해야합니까? 저는 AC3 표준에 익숙하지 않습니다. 어쩌면 csd-0에 제공되어야하는 기본 스트림 설명자와 같은 것이 있습니까?

답변

2

OpenMAX IL (MediaCodec 내부에서 사용되는 표준)에서 AC-3을 처리하는 방법에 대한 공식 사양은 없지만 일부 제조업체는 이러한 디코더를 노출합니다.

이전에 삼성 갤럭시 S3에서 그런 디코딩 작업을 시도했으나 작동하지 않는 것으로 보였습니다. 추가 데이터를 전달할 필요가 없었습니다. 이 실험에 대한 정보는 https://github.com/mstorsjo/vlc/commit/omxil-ac3을 참조하십시오.

이 특정 Nvidia 디코더가 다르게 작동하는지 또는 ACodec/MediaCodec 수준에서 누락 된 것이 있으면 사용할 수 없게됩니다. (위의 예제는 MediaCodec이 사용 가능하기 전의 내부 OMX API를 직접 사용했습니다.) 대답을 완료하려면 Galaxy S3에서 OMX 및 MediaCodec을 통해 실험 한 다음 Nvidia 장치에서 실험을 다시 테스트해야합니다. 이 테스트중인 Nexus 9 또는 다른 것?).

+0

다시 한번 감사드립니다. 어떤 추가 데이터 없이도 효과가 있다는 것을 듣고 격려해주었습니다. ADT를 사용하고 있지만 더 나은 하드웨어를 곧 사용할 수있게 될 것입니다. 모든 코덱을 더 잘 지원해야합니다. – Jack

+0

FWIW, 삼성에서 테스트했습니다. Galaxy S3 (Exynos 칩셋에 있음), AC3 디코더는 MediaCodec을 통해 정상적으로 작동하는 것 같습니다. MediaCodecList에서는 노출되지 않지만 코덱 이름 ('OMX.SEC.ac3.dec')을 알고 있으면 제대로 작동합니다. 또한 Nvidia 기기 (Nexus 7 2012 및 Nexus 9)를 확인했지만 MediaCodecList에 'audio/ac3'과 일치하는 디코더가없는 것으로 보입니다. – mstorsjo

+1

스 니펫에있는 디코더의 이름 인'OMX.Nvidia.bypass.decoder'는 오디오가 실제로 디코딩되지는 않지만 안드로이드 장치 외부의 일부 디코더로 바이 패스된다는 것을 나타냅니다. (IIRC HDMI는 AC3 오디오를 지원하므로 TV "하드웨어"로 화면 그림과 함께 전달할 수 있습니다.) – mstorsjo

관련 문제