diff --git a/libarmbox/audio.cpp b/libarmbox/audio.cpp index d6af373..809b594 100644 --- a/libarmbox/audio.cpp +++ b/libarmbox/audio.cpp @@ -150,36 +150,41 @@ void cAudio::SetSyncMode(AVSYNC_TYPE Mode) ioctl(fd, AUDIO_SET_AV_SYNC, Mode); } +#define AUDIO_STREAMTYPE_AC3 0 +#define AUDIO_STREAMTYPE_MPEG 1 +#define AUDIO_STREAMTYPE_DTS 2 +#define AUDIO_STREAMTYPE_AAC 8 +#define AUDIO_STREAMTYPE_AACHE 9 + void cAudio::SetStreamType(AUDIO_FORMAT type) { - const char *AF[] = { - "AUDIO_STREAMTYPE_AC3", - "AUDIO_STREAMTYPE_MPEG", - "AUDIO_STREAMTYPE_DTS", - "AUDIO_STREAMTYPE_LPCM", - "AUDIO_STREAMTYPE_AAC", - "AUDIO_STREAMTYPE_AAC_HE", - "AUDIO_STREAMTYPE_MP3", - "AUDIO_STREAMTYPE_AAC_PLUS", - "AUDIO_STREAMTYPE_DTS_HD", - "AUDIO_STREAMTYPE_WMA", - "AUDIO_STREAMTYPE_WMA_PRO", - "AUDIO_STREAMTYPE_AC3_PLUS", - "AUDIO_STREAMTYPE_AMR", - "AUDIO_STREAMTYPE_RAW" - }; - - lt_info("%s - type=%s\n", __FUNCTION__, AF[type]); - - if (ioctl(fd, AUDIO_SET_BYPASS_MODE, type) < 0) - { - perror("AUDIO_SET_BYPASS_MODE"); - return; - } - + int bypass = AUDIO_STREAMTYPE_MPEG; + lt_debug("%s %d\n", __FUNCTION__, type); StreamType = type; - return; + switch (type) + { + case AUDIO_FMT_DD_PLUS: + case AUDIO_FMT_DOLBY_DIGITAL: + bypass = AUDIO_STREAMTYPE_AC3; + break; + case AUDIO_FMT_AAC: + bypass = AUDIO_STREAMTYPE_AAC; + break; + case AUDIO_FMT_AAC_PLUS: + bypass = AUDIO_STREAMTYPE_AACHE; + break; + case AUDIO_FMT_DTS: + bypass = AUDIO_STREAMTYPE_DTS; + break; + default: + break; + } + + // Normaly the encoding should be set using AUDIO_SET_ENCODING + // But as we implemented the behavior to bypass (cause of e2) this is correct here + if (ioctl(fd, AUDIO_SET_BYPASS_MODE, bypass) < 0) + lt_info("%s: AUDIO_SET_BYPASS_MODE failed (%m)\n", __func__); } int cAudio::setChannel(int channel) diff --git a/libarmbox/audio_lib.h b/libarmbox/audio_lib.h index 2bcd073..1fb896f 100644 --- a/libarmbox/audio_lib.h +++ b/libarmbox/audio_lib.h @@ -20,21 +20,20 @@ typedef enum { typedef enum { - AUDIO_FMT_UNKNOWN = -1, - AUDIO_FMT_DOLBY_DIGITAL = 0, - AUDIO_FMT_MPEG = 1, - AUDIO_FMT_DTS = 2, - AUDIO_FMT_LPCM = 6, - AUDIO_FMT_AAC = 8, - AUDIO_FMT_AAC_HE = 9, - AUDIO_FMT_MP3 = 0xa, - AUDIO_FMT_AAC_PLUS = 0xb, - AUDIO_FMT_DTS_HD = 0x10, - AUDIO_FMT_WMA = 0x20, - AUDIO_FMT_WMA_PRO = 0x21, - AUDIO_FMT_DD_PLUS = 0x22, - AUDIO_FMT_AMR = 0x23, - AUDIO_FMT_RAW = 0xf + AUDIO_FMT_AUTO = 0, + AUDIO_FMT_MPEG, + AUDIO_FMT_MP3, + AUDIO_FMT_DOLBY_DIGITAL, + AUDIO_FMT_BASIC = AUDIO_FMT_DOLBY_DIGITAL, + AUDIO_FMT_AAC, + AUDIO_FMT_AAC_PLUS, + AUDIO_FMT_DD_PLUS, + AUDIO_FMT_DTS, + AUDIO_FMT_AVS, + AUDIO_FMT_MLP, + AUDIO_FMT_WMA, + AUDIO_FMT_MPG1, // TD only. For Movieplayer / cPlayback + AUDIO_FMT_ADVANCED = AUDIO_FMT_MLP } AUDIO_FORMAT; class mixerVolume;