Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dolby EAC3 audio won't play on HTC 10, HTC M9 #2940

Closed
cspencer404 opened this issue Jun 12, 2017 · 10 comments
Closed

Dolby EAC3 audio won't play on HTC 10, HTC M9 #2940

cspencer404 opened this issue Jun 12, 2017 · 10 comments

Comments

@cspencer404
Copy link

Issue description

On HTC 10 and HTC M9, Dolby Digital EAC3 tracks are disabled. When checking audio capabilities, audioCapabilities.getMaxInputChannelCount() returns 1 and log messages indicate the media has 6 channels: 18:26.824 32201-32300/com.google.android.exoplayer2.demo D/MediaCodecInfo: NoSupport [channelCount.support, 6, MAX: 1] [OMX.dolby.eac3.decoder, audio/eac3] [htc_pmewl, HTC6545LVW, HTC, 23]

Reproduction steps

Play the test content link below in the demo app. Try changing audio track, and the EAC3 tracks are shown as disabled.

Link to test content

https://content.uplynk.com/438edd39f70a4c169cab2660e001e362.m3u8?ddp=1&hlsver=6

Version of ExoPlayer being used

dev-v2 branch after version 2.4.1

Device(s) and version(s) of Android being used

HTC 10, Android 6.0.1
HTC m9, Android 7.0

A full bug report captured from the device

Will email the full report. Here is a relevant snippet from logcat:

06-09 15:18:26.824 32201-32300/com.google.android.exoplayer2.demo D/MediaCodecInfo: NoSupport [channelCount.support, 6, MAX: 1] [OMX.dolby.eac3.decoder, audio/eac3] [htc_pmewl, HTC6545LVW, HTC, 23]
06-09 15:18:26.824 32201-32300/com.google.android.exoplayer2.demo D/MediaCodecInfo: NoSupport [channelCount.support, 6, MAX: 1] [OMX.dolby.eac3.decoder, audio/eac3] [htc_pmewl, HTC6545LVW, HTC, 23]
06-09 15:18:26.824 32201-32300/com.google.android.exoplayer2.demo D/MediaCodecInfo: NoSupport [channelCount.support, 6, MAX: 1] [OMX.dolby.eac3.decoder, audio/eac3] [htc_pmewl, HTC6545LVW, HTC, 23]
06-09 15:18:26.825 32201-32300/com.google.android.exoplayer2.demo D/MediaCodecInfo: NoSupport [channelCount.support, 6, MAX: 1] [OMX.dolby.eac3.decoder, audio/eac3] [htc_pmewl, HTC6545LVW, HTC, 23]
06-09 15:18:26.829 32201-32201/com.google.android.exoplayer2.demo D/EventLogger: Tracks [
06-09 15:18:26.829 32201-32201/com.google.android.exoplayer2.demo D/EventLogger:   Renderer:0 [
06-09 15:18:26.829 32201-32201/com.google.android.exoplayer2.demo D/EventLogger:     Group:0, adaptive_supported=YES [
06-09 15:18:26.830 32201-32201/com.google.android.exoplayer2.demo D/EventLogger:       [X] Track:0, id=0, mimeType=video/avc, bitrate=400761, res=408x170, supported=YES
06-09 15:18:26.830 32201-32201/com.google.android.exoplayer2.demo D/EventLogger:       [X] Track:1, id=1, mimeType=video/avc, bitrate=700682, res=696x290, supported=YES
06-09 15:18:26.830 32201-32201/com.google.android.exoplayer2.demo D/EventLogger:       [X] Track:2, id=2, mimeType=video/avc, bitrate=1207283, res=888x370, supported=YES
06-09 15:18:26.830 32201-32201/com.google.android.exoplayer2.demo D/EventLogger:       [X] Track:3, id=3, mimeType=video/avc, bitrate=2508997, res=1272x530, supported=YES
06-09 15:18:26.830 32201-32201/com.google.android.exoplayer2.demo D/EventLogger:       [X] Track:4, id=4, mimeType=video/avc, bitrate=5535488, res=1920x800, supported=YES
06-09 15:18:26.830 32201-32201/com.google.android.exoplayer2.demo D/EventLogger:       [X] Track:5, id=5, mimeType=video/avc, bitrate=117921, res=192x80, supported=YES
06-09 15:18:26.830 32201-32201/com.google.android.exoplayer2.demo D/EventLogger:       [X] Track:6, id=6, mimeType=video/avc, bitrate=228211, res=240x100, supported=YES
06-09 15:18:26.830 32201-32201/com.google.android.exoplayer2.demo D/EventLogger:       [X] Track:7, id=7, mimeType=video/avc, bitrate=400761, res=408x170, supported=YES
06-09 15:18:26.830 32201-32201/com.google.android.exoplayer2.demo D/EventLogger:       [X] Track:8, id=8, mimeType=video/avc, bitrate=700682, res=696x290, supported=YES
06-09 15:18:26.830 32201-32201/com.google.android.exoplayer2.demo D/EventLogger:       [X] Track:9, id=9, mimeType=video/avc, bitrate=1207283, res=888x370, supported=YES
06-09 15:18:26.830 32201-32201/com.google.android.exoplayer2.demo D/EventLogger:       [X] Track:10, id=10, mimeType=video/avc, bitrate=2508997, res=1272x530, supported=YES
06-09 15:18:26.830 32201-32201/com.google.android.exoplayer2.demo D/EventLogger:       [X] Track:11, id=11, mimeType=video/avc, bitrate=5535488, res=1920x800, supported=YES
06-09 15:18:26.830 32201-32201/com.google.android.exoplayer2.demo D/EventLogger:       [X] Track:12, id=12, mimeType=video/avc, bitrate=117921, res=192x80, supported=YES
06-09 15:18:26.830 32201-32201/com.google.android.exoplayer2.demo D/EventLogger:       [X] Track:13, id=13, mimeType=video/avc, bitrate=228211, res=240x100, supported=YES
06-09 15:18:26.830 32201-32201/com.google.android.exoplayer2.demo D/EventLogger:     ]
06-09 15:18:26.830 32201-32201/com.google.android.exoplayer2.demo D/EventLogger:   ]
06-09 15:18:26.830 32201-32201/com.google.android.exoplayer2.demo D/EventLogger:   Renderer:1 [
06-09 15:18:26.830 32201-32201/com.google.android.exoplayer2.demo D/EventLogger:     Group:0, adaptive_supported=N/A [
06-09 15:18:26.830 32201-32201/com.google.android.exoplayer2.demo D/EventLogger:       [X] Track:0, id=English, mimeType=audio/mp4a-latm, channels=2, sample_rate=24000, language=en, supported=YES
06-09 15:18:26.830 32201-32201/com.google.android.exoplayer2.demo D/EventLogger:     ]
06-09 15:18:26.830 32201-32201/com.google.android.exoplayer2.demo D/EventLogger:     Group:1, adaptive_supported=N/A [
06-09 15:18:26.830 32201-32201/com.google.android.exoplayer2.demo D/EventLogger:       [ ] Track:0, id=DVD Stereo Mix, mimeType=audio/mp4a-latm, channels=2, sample_rate=24000, language=en, supported=YES
06-09 15:18:26.830 32201-32201/com.google.android.exoplayer2.demo D/EventLogger:     ]
06-09 15:18:26.830 32201-32201/com.google.android.exoplayer2.demo D/EventLogger:     Group:2, adaptive_supported=N/A [
06-09 15:18:26.830 32201-32201/com.google.android.exoplayer2.demo D/EventLogger:       [ ] Track:0, id=No Dialogue, mimeType=audio/mp4a-latm, channels=2, sample_rate=24000, language=fx, supported=YES
06-09 15:18:26.830 32201-32201/com.google.android.exoplayer2.demo D/EventLogger:     ]
06-09 15:18:26.830 32201-32201/com.google.android.exoplayer2.demo D/EventLogger:     Group:3, adaptive_supported=N/A [
06-09 15:18:26.830 32201-32201/com.google.android.exoplayer2.demo D/EventLogger:       [ ] Track:0, id=DD1, mimeType=audio/mp4a-latm, channels=2, sample_rate=24000, language=d1, supported=YES
06-09 15:18:26.830 32201-32201/com.google.android.exoplayer2.demo D/EventLogger:     ]
06-09 15:18:26.830 32201-32201/com.google.android.exoplayer2.demo D/EventLogger:     Group:4, adaptive_supported=N/A [
06-09 15:18:26.830 32201-32201/com.google.android.exoplayer2.demo D/EventLogger:       [ ] Track:0, id=DD1, mimeType=audio/eac3, channels=6, sample_rate=48000, language=d1, supported=NO_EXCEEDS_CAPABILITIES
06-09 15:18:26.830 32201-32201/com.google.android.exoplayer2.demo D/EventLogger:     ]
06-09 15:18:26.830 32201-32201/com.google.android.exoplayer2.demo D/EventLogger:     Group:5, adaptive_supported=N/A [
06-09 15:18:26.830 32201-32201/com.google.android.exoplayer2.demo D/EventLogger:       [ ] Track:0, id=DD2, mimeType=audio/mp4a-latm, channels=2, sample_rate=24000, language=d2, supported=YES
06-09 15:18:26.830 32201-32201/com.google.android.exoplayer2.demo D/EventLogger:     ]
06-09 15:18:26.830 32201-32201/com.google.android.exoplayer2.demo D/EventLogger:     Group:6, adaptive_supported=N/A [
06-09 15:18:26.830 32201-32201/com.google.android.exoplayer2.demo D/EventLogger:       [ ] Track:0, id=DD2, mimeType=audio/eac3, channels=6, sample_rate=48000, language=d2, supported=NO_EXCEEDS_CAPABILITIES
06-09 15:18:26.830 32201-32201/com.google.android.exoplayer2.demo D/EventLogger:     ]
06-09 15:18:26.830 32201-32201/com.google.android.exoplayer2.demo D/EventLogger:   ]
06-09 15:18:26.830 32201-32201/com.google.android.exoplayer2.demo D/EventLogger:   Renderer:2 [
06-09 15:18:26.830 32201-32201/com.google.android.exoplayer2.demo D/EventLogger:     Group:0, adaptive_supported=N/A [
06-09 15:18:26.830 32201-32201/com.google.android.exoplayer2.demo D/EventLogger:       [ ] Track:0, id=1/8219, mimeType=application/cea-608, supported=YES
06-09 15:18:26.830 32201-32201/com.google.android.exoplayer2.demo D/EventLogger:     ]
06-09 15:18:26.830 32201-32201/com.google.android.exoplayer2.demo D/EventLogger:   ]
06-09 15:18:26.830 32201-32201/com.google.android.exoplayer2.demo D/EventLogger:   Renderer:3 [
06-09 15:18:26.830 32201-32201/com.google.android.exoplayer2.demo D/EventLogger:     Group:0, adaptive_supported=N/A [
06-09 15:18:26.830 32201-32201/com.google.android.exoplayer2.demo D/EventLogger:       [X] Track:0, id=1/21, mimeType=application/id3, supported=YES
06-09 15:18:26.830 32201-32201/com.google.android.exoplayer2.demo D/EventLogger:     ]
06-09 15:18:26.830 32201-32201/com.google.android.exoplayer2.demo D/EventLogger:     Group:1, adaptive_supported=N/A [
06-09 15:18:26.830 32201-32201/com.google.android.exoplayer2.demo D/EventLogger:       [ ] Track:0, id=1, mimeType=application/id3, supported=YES
06-09 15:18:26.830 32201-32201/com.google.android.exoplayer2.demo D/EventLogger:     ]
06-09 15:18:26.830 32201-32201/com.google.android.exoplayer2.demo D/EventLogger:     Group:2, adaptive_supported=N/A [
06-09 15:18:26.830 32201-32201/com.google.android.exoplayer2.demo D/EventLogger:       [ ] Track:0, id=1, mimeType=application/id3, supported=YES
06-09 15:18:26.830 32201-32201/com.google.android.exoplayer2.demo D/EventLogger:     ]
06-09 15:18:26.830 32201-32201/com.google.android.exoplayer2.demo D/EventLogger:     Group:3, adaptive_supported=N/A [
06-09 15:18:26.830 32201-32201/com.google.android.exoplayer2.demo D/EventLogger:       [ ] Track:0, id=1, mimeType=application/id3, supported=YES
06-09 15:18:26.830 32201-32201/com.google.android.exoplayer2.demo D/EventLogger:     ]
06-09 15:18:26.830 32201-32201/com.google.android.exoplayer2.demo D/EventLogger:     Group:4, adaptive_supported=N/A [
06-09 15:18:26.830 32201-32201/com.google.android.exoplayer2.demo D/EventLogger:       [ ] Track:0, id=1, mimeType=application/id3, supported=YES
06-09 15:18:26.830 32201-32201/com.google.android.exoplayer2.demo D/EventLogger:     ]
06-09 15:18:26.830 32201-32201/com.google.android.exoplayer2.demo D/EventLogger:   ]
06-09 15:18:26.830 32201-32201/com.google.android.exoplayer2.demo D/EventLogger: ]

@ojw28
Copy link
Contributor

ojw28 commented Jun 13, 2017

Proposed fix here: #2941

@ojw28
Copy link
Contributor

ojw28 commented Jun 13, 2017

I think getMaxInputChannelCount actually returns 1 for all non-standard decoders, on all devices, prior to the O release of Android. This is due to applyLevelLimits being implemented incorrectly. This is definitely the case on N. We'd have to check back through the source code to see if earlier releases were also affected. There's a fix in O, although it didn't make it into the preview.

So I wonder whether we need to come up with a more general solution to this? It's pretty easy to work out if a decoder is non-standard; the mimeType doesn't have a corresponding block in applyLevelLimits. A more open question is what max channel counts to assume in each case. It doesn't seem ideal just to assume support for unlimited channels?

@ojw28
Copy link
Contributor

ojw28 commented Jun 13, 2017

We should probably just work out what the correct max channel counts are for OMX.dolby.ac3.decoder and OMX.dolby.ec3.decoder, and override to those values prior to O for those decoders (regardless of what device they're on)?

@cspencer404
Copy link
Author

From the spec ATSC Standard: Digital Audio Compression (AC-3, E-AC-3), Doc. A/52:2015 24 November 2012

For AC3, section 5.4.2.3 indicates a max of 5 channels, but this does not include the LFE which is the lfeon flag defined in 5.4.2.7. So, 6 channels total.

For EAC3, section E.3.8.2: "The maximum number of channels rendered for a single program is 16". This seems to include the LFE channel.

I can update my pull request to check for these channel counts.

@ojw28
Copy link
Contributor

ojw28 commented Jun 13, 2017

If we set to the max according to the spec then that's probably the same as assuming support for unlimited channels, because it's likely impossible to make streams with more channels than the spec allows. We're more interested in what the actual decoder implementations support, which may well be less than the maximums according to the spec (e.g. I'm not convinced OMX.dolby.ec3.decoder can actually support 16 channel input). We can try and do some digging also, to figure out what the correct values should be.

@cspencer404
Copy link
Author

But where do you get those values from, and how are they verified? If you go digging into some proprietary source code, find the channel count and use that magic number, there's no way to know if that applies to a single version of the decoder/software, or if that value is later changed, or even if another EAC3 decoder uses the same value.

To me, the 2 solutions are:

  1. the original behavior -- ask the android system for the channel count (which returns the wrong value in this case);
  2. Fall back to the spec. Because the decoder should follow the spec.

@cspencer404
Copy link
Author

#2941 is updated with the spec values.

@ojw28
Copy link
Contributor

ojw28 commented Jun 13, 2017

Ask Dolby, probably. We will do some digging.

ojw28 added a commit that referenced this issue Jun 15, 2017
Issue: #2940

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=159099602
@ojw28
Copy link
Contributor

ojw28 commented Jun 15, 2017

We've merged a slightly more general fix for this issue. Please give it a try and verify. Thanks!

@ojw28 ojw28 closed this as completed Jun 15, 2017
@cspencer404
Copy link
Author

Verified its working. Thanks for fixing.

ojw28 added a commit that referenced this issue Jun 30, 2017
Issue: #2940

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=159099602
@google google locked and limited conversation to collaborators Oct 14, 2017
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

2 participants