Jump to content

Forced 48 khz Android resample and DEEP_BUFFER enforced flag on Hi-Res output log


wyup

Recommended Posts

 
Poweramp build number: 15:33:10.023 build-911-arm64-play
Device: Xiaomi Xiaomi MI 8 dipper sdm845 "qcom" dipper RQ3A.210905.001 [arm64-v8a, armeabi-v7a, armeabi]
Android 11, PixelExperience custom rom
 
Steps to reproduce: When I set up Hi-Res output active for Wired-Headphones, selecting 44.1 KHz sampling frequency, No DVD, No Gain, No Eq, No Attenuation, and I play a 44.1 mp3 file, Audio Info shows Without Resample,
DSP shows Float64/32 bit, 44.1 khz, but Output shows Hi-Res Output Direct HD 10 24 bit 48 khz.
On Wired-Headphones settings, Hi-Res On, Sampling Freq, Selected: 44.1 Using: 48 khz.
"The sampling frequency is being defined by the device"
Bit Depth: 24 bit.
 
This is consistent with a dumpsys media.audio_flinger which indicates MIXER OUT and DEEP_BUFFER at 48 Khz instead of DIRECT or DIRECT_PCM at 44.1 Khz.
 
Output > Advanced > Detected Audio Output Log shows:
 
sdm845 is_snapdragon
reading=/vendor/etc/audio_output_policy.conf
has direct_pcm_24, sampling_rates=44100|48000|88200|96000|176400|192000|352800|384000
AUDIO_OUTPUT_FLAG_DIRECT direct_pcm_24
has direct_pcm_24 formats=AUDIO_FORMAT_PCM_24_BIT_PACKED|AUDIO_FORMAT_PCM_8_24_BIT|AUDIO_FORMAT_PCM_32_BIT
FLAG_VARIANT_DIRECT_HD via direct_pcm_24
forcing FLAG_DLFCN FLAG_NEEDS_DEEP_BUFFER FLAG_NEEDS_EXTRA_SLEEPS
=> FLAG_VARIANT_DIRECT_HD_10_STREAM
USB can handle Hi-Res - sdk=30
OK flags=0xe74616600008000
FLAG_VARIANT_DIRECT_HD_10_STREAM
FLAG_SUPPORTS_PCM_8_24
FLAG_SUPPORTS_PCM_24
FLAG_SUPPORTS_PCM_32
FLAG_SUPPORTS_UNITY_GAIN_STREAM
FLAG_SUPPORTS_USB
FLAG_NEEDS_EXTRA_SLEEPS
FLAG_SUPPORTS_LDAC
FLAG_DLFCN
FLAG_NEEDS_DEEP_BUFFER
FLAG_ALLOW_DVC_EFFECT
FLAG_BT_DVC_EFFECT
PA_OUTPUT_CAP_NEEDS_VOL_UI
INTERNAL_OUTPUT_FLAG_SR_384K
INTERNAL_OUTPUT_FLAG_SR_352K
INTERNAL_OUTPUT_FLAG_SR_192K
INTERNAL_OUTPUT_FLAG_SR_176K
INTERNAL_OUTPUT_FLAG_SR_96K
INTERNAL_OUTPUT_FLAG_SR_88K
INTERNAL_OUTPUT_FLAG_SR_48K
INTERNAL_OUTPUT_FLAG_SR_44K
I have several questions:
 
1) Why is it required reading=/vendor/etc/audio_output_policy.conf when .conf files are deprecated since Android 7 and not /vendor/etc/audio_policy_configuration.xml instead?
If I delete /vendor/etc/audio_output_policy.conf the log complains about this file and Settings loses Hi-Res output option.
 
2) Why is it enforcing deep_buffer: forcing FLAG_DLFCN FLAG_NEEDS_DEEP_BUFFER ?
 
Even if I set:
 
audio.deep_buffer.media=false
media.stagefright.audio.deep=false
vendor.audio.feature.deepbuffer_as_primary.enable=false
 
in my build.prop, audioflinger dumpsys reports MIXER out and DEEP_BUFFER resample at 48 KHz, as configured in both audio_output_policy.conf and audio_policy_configuration.xml.
However, it should choose DIRECT_PCM flag by Hi-Res output device. (Or even COMPRESSED_OFFLOAD that supports 44.1 unsampled out by the DSP).
 
Is there any way to set or force DIRECT_PCM flag?
If I delete DEEP_BUFFER in audio_output_policy.conf or in audio_policy_configuration.xml it will chose PRIMARY flag and output to Android MIXER anyway, resampling at 48 Khz.
 
P.D. I must say that on previous MIUI stock rom on Android 10 direct_pcm worked right since my phone has a Qualcomm Aqstic double 44.1/48 DSP chip.
 
 

Screenshot_20211007-122613.png

Screenshot_20211007-123504.png

Screenshot_20211007-174420.png

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...