[Motorola One Vision Questions & Answers] westwallpoma:
logcat shows up something interesting:

10-20 11:23:49.086 20164 20164 D DevSettingsDashboard: mBluetoothA2dpReceiver.onReceive intent=Intent { act=android.bluetooth.a2dp.profile.action.CODEC_CONFIG_CHANGED flg=0x5000010 (has extras) }
10-20 11:23:49.087 7278 7278 E AndroidRuntime: FATAL EXCEPTION: main
10-20 11:23:49.087 7278 7278 E AndroidRuntime: Process: com.android.bluetooth, PID: 7278
10-20 11:23:49.087 7278 7278 E AndroidRuntime: java.lang.RuntimeException: Error receiving broadcast Intent { act=android.bluetooth.a2dp.profile.action.CONNECTION_STATE_CHANGED flg=0x5000010 (has extras) } in com.android.bluetooth.a2dp.A2dpService$ConnectionStateChangedReceiver@a219d53
10-20 11:23:49.087 7278 7278 E AndroidRuntime: at android.app.LoadedApk$ReceiverDispatcher$Args.lambda$getRunnable$0(LoadedApk.java:1410)
10-20 11:23:49.087 7278 7278 E AndroidRuntime: at android.app.-$$Lambda$LoadedApk$ReceiverDispatcher$Args$_BumDX2UKsnxLVrE6UJsJZkotuA.run(Unknown Source:2)
10-20 11:23:49.087 7278 7278 E AndroidRuntime: at android.os.Handler.handleCallback(Handler.java:873)
10-20 11:23:49.087 7278 7278 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:99)
10-20 11:23:49.087 7278 7278 E AndroidRuntime: at android.os.Looper.loop(Looper.java:220)
10-20 11:23:49.087 7278 7278 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:6929)
10-20 11:23:49.087 7278 7278 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
10-20 11:23:49.087 7278 7278 E AndroidRuntime: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
10-20 11:23:49.087 7278 7278 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:870)
10-20 11:23:49.087 7278 7278 E AndroidRuntime: Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.bluetooth.BluetoothCodecConfig.isMandatoryCodec()' on a null object reference
10-20 11:23:49.087 7278 7278 E AndroidRuntime: at com.android.bluetooth.a2dp.A2dpCodecConfig.enableOptionalCodecs(A2dpCodecConfig.java:70)
10-20 11:23:49.087 7278 7278 E AndroidRuntime: at com.android.bluetooth.a2dp.A2dpService.enableOptionalCodecs(A2dpService.java:702)
10-20 11:23:49.087 7278 7278 E AndroidRuntime: at com.android.bluetooth.a2dp.A2dpService.updateOptionalCodecsSupport(A2dpService.java:953)
10-20 11:23:49.087 7278 7278 E AndroidRuntime: at com.android.bluetooth.a2dp.A2dpService.connectionStateChanged(A2dpService.java:969)
10-20 11:23:49.087 7278 7278 E AndroidRuntime: at com.android.bluetooth.a2dp.A2dpService.access$200(A2dpService.java:57)
10-20 11:23:49.087 7278 7278 E AndroidRuntime: at com.android.bluetooth.a2dp.A2dpService$ConnectionStateChangedReceiver.onReceive(A2dpService.java:1007)
10-20 11:23:49.087 7278 7278 E AndroidRuntime: at android.app.LoadedApk$ReceiverDispatcher$Args.lambda$getRunnable$0(LoadedApk.java:1400)
10-20 11:23:49.087 7278 7278 E AndroidRuntime: ... 8 more
10-20 11:23:49.088 20164 20164 D DevSettingsDashboard: Received BluetoothCodecStatus={mCodecConfig:{codecName:AAC,mCodecType:1,mCodecPriority:2001,mSampleRate:0x1(44100),mBitsPerSample:0x1(16),mChannelMode:0x2(STEREO),mCodecSpecific1:0,mCodecSpecific2:0,mCodecSpecific3:0,mCodecSpecific4:0},mCodecsLocalCapabilities:[{codecName:LDAC,mCodecType:4,mCodecPriority:5001,mSampleRate:0xf(44100|48000|88200|96000),mBitsPerSample:0x7(16|24|32),mChannelMode:0x2(STEREO),mCodecSpecific1:0,mCodecSpecific2:0,mCodecSpecific3:0,mCodecSpecific4:0}, {codecName:AAC,mCodecType:1,mCodecPriority:2001,mSampleRate:0x1(44100),mBitsPerSample:0x1(16),mChannelMode:0x2(STEREO),mCodecSpecific1:0,mCodecSpecific2:0,mCodecSpecific3:0,mCodecSpecific4:0}, {codecName:SBC,mCodecType:0,mCodecPriority:1001,mSampleRate:0x1(44100),mBitsPerSample:0x1(16),mChannelMode:0x3(MONO|STEREO),mCodecSpecific1:0,mCodecSpecific2:0,mCodecSpecific3:0,mCodecSpecific4:0}],mCodecsSelectableCapabilities:[{codecName:AAC,mCodecType:1,mCodecPriority:2001,mSampleRate:0x1(44100),mBitsPerSample:0x1(16),mChannelMode:0x2(STEREO),mCodecSpecific1:0,mCodecSpecific2:0,mCodecSpecific3:0,mCodecSpecific4:0}, {codecName:SBC,mCodecType:0,mCodecPriority:1001,mSampleRate:0x1(44100),mBitsPerSample:0x1(16),mChannelMode:0x3(MONO|STEREO),mCodecSpecific1:0,mCodecSpecific2:0,mCodecSpecific3:0,mCodecSpecific4:0}]}

Specifically: "Attempt to invoke virtual method 'boolean android.bluetooth.BluetoothCodecConfig.isMandatoryCodec()' on a null object reference"

Gut feeling is this is related to me fiddling with Bluetooth Developer options. I'll dig further.

Regarding AptX and AptX HD codecs missing - I would expect this to be the case ; the device is Exynos-based rather than Qualcomm ; Samsung's favoured Bluetooth encoder is AAC. It might be possible to add the missing modules via Magisk. I think it's also possible that "enabling additional codecs" in developer mode may have invoked this issue I'm having with the earbuds. A re-flash of the phone, reset of the earbuds and pairing again without errors would probably confirm this.

---------- Post added at 12:47 PM ---------- Previous post was at 11:51 AM ----------

Factory reset complete. Paired the problematic earbuds ; no disconnections ; no bluetooth crashing.

Enabled developer mode ; was able to reconnect to the earbuds ; no disconnections or crashing.

Disabled HD Audio on the device ... disconnected, then reconnected ... bluetooth starts crashing.

So ... it's possibly something to do with the user having the ability to force whether an HD codec is used or not?

Now - what I find interesting is that AAC was terrible quality on the previous firmware ; and I used to disable it all the time without disconnected. With this version - 160-50 - AAC is chosen by default and has no issues.