Loading policy_hal/AudioPolicyManager.cpp +29 −5 Original line number Diff line number Diff line Loading @@ -571,11 +571,35 @@ bool AudioPolicyManagerCustom::isOffloadSupported(const audio_offload_info_t& of return false; } if ((((offloadInfo.format & AUDIO_FORMAT_MAIN_MASK) == AUDIO_FORMAT_WMA) && (offloadInfo.bit_rate > MAX_BITRATE_WMA)) || (((offloadInfo.format & AUDIO_FORMAT_MAIN_MASK) == AUDIO_FORMAT_WMA_PRO) && (offloadInfo.bit_rate > MAX_BITRATE_WMA_PRO)) || (((offloadInfo.format & AUDIO_FORMAT_MAIN_MASK) == AUDIO_FORMAT_WMA_PRO) && (offloadInfo.bit_rate > MAX_BITRATE_WMA_LOSSLESS))){ // check against wma std bit rate restriction if ((offloadInfo.format & AUDIO_FORMAT_MAIN_MASK) == AUDIO_FORMAT_WMA) { int32_t sr_id = -1; uint32_t min_bitrate, max_bitrate; for (int i = 0; i < WMA_STD_NUM_FREQ; i++) { if (offloadInfo.sample_rate == wmaStdSampleRateTbl[i]) { sr_id = i; break; } } if ((sr_id < 0) || (popcount(offloadInfo.channel_mask) > 2) || (popcount(offloadInfo.channel_mask) <= 0)) { ALOGE("invalid sample rate or channel count"); return false; } min_bitrate = wmaStdMinAvgByteRateTbl[sr_id][popcount(offloadInfo.channel_mask) - 1]; max_bitrate = wmaStdMaxAvgByteRateTbl[sr_id][popcount(offloadInfo.channel_mask) - 1]; if ((offloadInfo.bit_rate > max_bitrate) || (offloadInfo.bit_rate < min_bitrate)) { ALOGD("offload disabled for WMA clips with unsupported bit rate"); ALOGD("bit_rate %d, max_bitrate %d, min_bitrate %d", offloadInfo.bit_rate, max_bitrate, min_bitrate); return false; } } // Safely choose the min bitrate as threshold and leave the restriction to NT decoder as we can't distinguish wma pro and wma lossless here. ALOGD("offload disabled for WMA/WMA_PRO/WMA_LOSSLESS clips with bit rate over maximum supported value"); if ((((offloadInfo.format & AUDIO_FORMAT_MAIN_MASK) == AUDIO_FORMAT_WMA_PRO) && (offloadInfo.bit_rate > MAX_BITRATE_WMA_PRO)) || (((offloadInfo.format & AUDIO_FORMAT_MAIN_MASK) == AUDIO_FORMAT_WMA_PRO) && (offloadInfo.bit_rate > MAX_BITRATE_WMA_LOSSLESS))) { ALOGD("offload disabled for WMA_PRO/WMA_LOSSLESS clips with bit rate over maximum supported value"); return false; } #endif Loading policy_hal/AudioPolicyManager.h +32 −3 Original line number Diff line number Diff line Loading @@ -32,6 +32,38 @@ namespace android { #define AUDIO_FORMAT_APE 0x1D000000UL #endif #define WMA_STD_NUM_FREQ 7 #define WMA_STD_NUM_CHANNELS 2 static uint32_t wmaStdSampleRateTbl[WMA_STD_NUM_FREQ] = { 8000, 11025, 16000, 22050, 32000, 44100, 48000 }; static uint32_t wmaStdMinAvgByteRateTbl[WMA_STD_NUM_FREQ][WMA_STD_NUM_CHANNELS] = { {128, 12000}, {8016, 8016}, {10000, 16000}, {16016, 20008}, {20000, 24000}, {20008, 31960}, {63000, 63000} }; static uint32_t wmaStdMaxAvgByteRateTbl[WMA_STD_NUM_FREQ][WMA_STD_NUM_CHANNELS] = { {8000, 12000}, {10168, 10168}, {16000, 20000}, {20008, 32048}, {20000, 48000}, {48024, 320032}, {256008, 256008} }; #define MAX_BITRATE_WMA_PRO 1536000 #define MAX_BITRATE_WMA_LOSSLESS 1152000 #ifndef AAC_ADTS_OFFLOAD_ENABLED #define AUDIO_FORMAT_AAC_ADTS 0x1E000000UL #endif Loading @@ -40,9 +72,6 @@ namespace android { #define AUDIO_DEVICE_OUT_PROXY 0x1000000 #endif #define MAX_BITRATE_WMA 384000 #define MAX_BITRATE_WMA_PRO 1536000 #define MAX_BITRATE_WMA_LOSSLESS 1152000 // ---------------------------------------------------------------------------- class AudioPolicyManagerCustom: public AudioPolicyManager Loading Loading
policy_hal/AudioPolicyManager.cpp +29 −5 Original line number Diff line number Diff line Loading @@ -571,11 +571,35 @@ bool AudioPolicyManagerCustom::isOffloadSupported(const audio_offload_info_t& of return false; } if ((((offloadInfo.format & AUDIO_FORMAT_MAIN_MASK) == AUDIO_FORMAT_WMA) && (offloadInfo.bit_rate > MAX_BITRATE_WMA)) || (((offloadInfo.format & AUDIO_FORMAT_MAIN_MASK) == AUDIO_FORMAT_WMA_PRO) && (offloadInfo.bit_rate > MAX_BITRATE_WMA_PRO)) || (((offloadInfo.format & AUDIO_FORMAT_MAIN_MASK) == AUDIO_FORMAT_WMA_PRO) && (offloadInfo.bit_rate > MAX_BITRATE_WMA_LOSSLESS))){ // check against wma std bit rate restriction if ((offloadInfo.format & AUDIO_FORMAT_MAIN_MASK) == AUDIO_FORMAT_WMA) { int32_t sr_id = -1; uint32_t min_bitrate, max_bitrate; for (int i = 0; i < WMA_STD_NUM_FREQ; i++) { if (offloadInfo.sample_rate == wmaStdSampleRateTbl[i]) { sr_id = i; break; } } if ((sr_id < 0) || (popcount(offloadInfo.channel_mask) > 2) || (popcount(offloadInfo.channel_mask) <= 0)) { ALOGE("invalid sample rate or channel count"); return false; } min_bitrate = wmaStdMinAvgByteRateTbl[sr_id][popcount(offloadInfo.channel_mask) - 1]; max_bitrate = wmaStdMaxAvgByteRateTbl[sr_id][popcount(offloadInfo.channel_mask) - 1]; if ((offloadInfo.bit_rate > max_bitrate) || (offloadInfo.bit_rate < min_bitrate)) { ALOGD("offload disabled for WMA clips with unsupported bit rate"); ALOGD("bit_rate %d, max_bitrate %d, min_bitrate %d", offloadInfo.bit_rate, max_bitrate, min_bitrate); return false; } } // Safely choose the min bitrate as threshold and leave the restriction to NT decoder as we can't distinguish wma pro and wma lossless here. ALOGD("offload disabled for WMA/WMA_PRO/WMA_LOSSLESS clips with bit rate over maximum supported value"); if ((((offloadInfo.format & AUDIO_FORMAT_MAIN_MASK) == AUDIO_FORMAT_WMA_PRO) && (offloadInfo.bit_rate > MAX_BITRATE_WMA_PRO)) || (((offloadInfo.format & AUDIO_FORMAT_MAIN_MASK) == AUDIO_FORMAT_WMA_PRO) && (offloadInfo.bit_rate > MAX_BITRATE_WMA_LOSSLESS))) { ALOGD("offload disabled for WMA_PRO/WMA_LOSSLESS clips with bit rate over maximum supported value"); return false; } #endif Loading
policy_hal/AudioPolicyManager.h +32 −3 Original line number Diff line number Diff line Loading @@ -32,6 +32,38 @@ namespace android { #define AUDIO_FORMAT_APE 0x1D000000UL #endif #define WMA_STD_NUM_FREQ 7 #define WMA_STD_NUM_CHANNELS 2 static uint32_t wmaStdSampleRateTbl[WMA_STD_NUM_FREQ] = { 8000, 11025, 16000, 22050, 32000, 44100, 48000 }; static uint32_t wmaStdMinAvgByteRateTbl[WMA_STD_NUM_FREQ][WMA_STD_NUM_CHANNELS] = { {128, 12000}, {8016, 8016}, {10000, 16000}, {16016, 20008}, {20000, 24000}, {20008, 31960}, {63000, 63000} }; static uint32_t wmaStdMaxAvgByteRateTbl[WMA_STD_NUM_FREQ][WMA_STD_NUM_CHANNELS] = { {8000, 12000}, {10168, 10168}, {16000, 20000}, {20008, 32048}, {20000, 48000}, {48024, 320032}, {256008, 256008} }; #define MAX_BITRATE_WMA_PRO 1536000 #define MAX_BITRATE_WMA_LOSSLESS 1152000 #ifndef AAC_ADTS_OFFLOAD_ENABLED #define AUDIO_FORMAT_AAC_ADTS 0x1E000000UL #endif Loading @@ -40,9 +72,6 @@ namespace android { #define AUDIO_DEVICE_OUT_PROXY 0x1000000 #endif #define MAX_BITRATE_WMA 384000 #define MAX_BITRATE_WMA_PRO 1536000 #define MAX_BITRATE_WMA_LOSSLESS 1152000 // ---------------------------------------------------------------------------- class AudioPolicyManagerCustom: public AudioPolicyManager Loading