Skip to content

Commit 8af77ac

Browse files
committed
Adjust incorrect looking max-channel counts
Issue: #2940 ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=159099602
1 parent 2a353a8 commit 8af77ac

File tree

3 files changed

+41
-4
lines changed

3 files changed

+41
-4
lines changed

library/core/src/main/java/com/google/android/exoplayer2/extractor/flv/AudioTagPayloadReader.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ protected boolean parseHeader(ParsableByteArray data) throws UnsupportedFormatEx
6767
hasOutputFormat = true;
6868
} else if (audioFormat == AUDIO_FORMAT_ALAW || audioFormat == AUDIO_FORMAT_ULAW) {
6969
String type = audioFormat == AUDIO_FORMAT_ALAW ? MimeTypes.AUDIO_ALAW
70-
: MimeTypes.AUDIO_ULAW;
70+
: MimeTypes.AUDIO_MLAW;
7171
int pcmEncoding = (header & 0x01) == 1 ? C.ENCODING_PCM_16BIT : C.ENCODING_PCM_8BIT;
7272
Format format = Format.createAudioSampleFormat(null, type, null, Format.NO_VALUE,
7373
Format.NO_VALUE, 1, 8000, pcmEncoding, null, null, 0, null);

library/core/src/main/java/com/google/android/exoplayer2/mediacodec/MediaCodecInfo.java

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -274,7 +274,9 @@ public boolean isAudioChannelCountSupportedV21(int channelCount) {
274274
logNoSupport("channelCount.aCaps");
275275
return false;
276276
}
277-
if (audioCapabilities.getMaxInputChannelCount() < channelCount) {
277+
int maxInputChannelCount = adjustMaxInputChannelCount(name, mimeType,
278+
audioCapabilities.getMaxInputChannelCount());
279+
if (maxInputChannelCount < channelCount) {
278280
logNoSupport("channelCount.support, " + channelCount);
279281
return false;
280282
}
@@ -291,6 +293,40 @@ private void logAssumedSupport(String message) {
291293
+ Util.DEVICE_DEBUG_INFO + "]");
292294
}
293295

296+
private static int adjustMaxInputChannelCount(String name, String mimeType, int maxChannelCount) {
297+
if (maxChannelCount > 1 || (Util.SDK_INT >= 26 && maxChannelCount > 0)) {
298+
// The maximum channel count looks like it's been set correctly.
299+
return maxChannelCount;
300+
}
301+
if (MimeTypes.AUDIO_MPEG.equals(mimeType)
302+
|| MimeTypes.AUDIO_AMR_NB.equals(mimeType)
303+
|| MimeTypes.AUDIO_AMR_WB.equals(mimeType)
304+
|| MimeTypes.AUDIO_AAC.equals(mimeType)
305+
|| MimeTypes.AUDIO_VORBIS.equals(mimeType)
306+
|| MimeTypes.AUDIO_OPUS.equals(mimeType)
307+
|| MimeTypes.AUDIO_RAW.equals(mimeType)
308+
|| MimeTypes.AUDIO_FLAC.equals(mimeType)
309+
|| MimeTypes.AUDIO_ALAW.equals(mimeType)
310+
|| MimeTypes.AUDIO_MLAW.equals(mimeType)
311+
|| MimeTypes.AUDIO_MSGSM.equals(mimeType)) {
312+
// Platform code should have set a default.
313+
return maxChannelCount;
314+
}
315+
// The maximum channel count looks incorrect. Adjust it to an assumed default.
316+
int assumedMaxChannelCount;
317+
if (MimeTypes.AUDIO_AC3.equals(mimeType)) {
318+
assumedMaxChannelCount = 6;
319+
} else if (MimeTypes.AUDIO_E_AC3.equals(mimeType)) {
320+
assumedMaxChannelCount = 16;
321+
} else {
322+
// Default to the platform limit, which is 30.
323+
assumedMaxChannelCount = 30;
324+
}
325+
Log.w(TAG, "AssumedMaxChannelAdjustment: " + name + ", [" + maxChannelCount + " to "
326+
+ assumedMaxChannelCount + "]");
327+
return assumedMaxChannelCount;
328+
}
329+
294330
private static boolean isAdaptive(CodecCapabilities capabilities) {
295331
return Util.SDK_INT >= 19 && isAdaptiveV19(capabilities);
296332
}

library/core/src/main/java/com/google/android/exoplayer2/util/MimeTypes.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ public final class MimeTypes {
4848
public static final String AUDIO_MPEG_L2 = BASE_TYPE_AUDIO + "/mpeg-L2";
4949
public static final String AUDIO_RAW = BASE_TYPE_AUDIO + "/raw";
5050
public static final String AUDIO_ALAW = BASE_TYPE_AUDIO + "/g711-alaw";
51-
public static final String AUDIO_ULAW = BASE_TYPE_AUDIO + "/g711-mlaw";
51+
public static final String AUDIO_MLAW = BASE_TYPE_AUDIO + "/g711-mlaw";
5252
public static final String AUDIO_AC3 = BASE_TYPE_AUDIO + "/ac3";
5353
public static final String AUDIO_E_AC3 = BASE_TYPE_AUDIO + "/eac3";
5454
public static final String AUDIO_TRUEHD = BASE_TYPE_AUDIO + "/true-hd";
@@ -59,8 +59,9 @@ public final class MimeTypes {
5959
public static final String AUDIO_OPUS = BASE_TYPE_AUDIO + "/opus";
6060
public static final String AUDIO_AMR_NB = BASE_TYPE_AUDIO + "/3gpp";
6161
public static final String AUDIO_AMR_WB = BASE_TYPE_AUDIO + "/amr-wb";
62-
public static final String AUDIO_FLAC = BASE_TYPE_AUDIO + "/x-flac";
62+
public static final String AUDIO_FLAC = BASE_TYPE_AUDIO + "/flac";
6363
public static final String AUDIO_ALAC = BASE_TYPE_AUDIO + "/alac";
64+
public static final String AUDIO_MSGSM = BASE_TYPE_AUDIO + "/gsm";
6465
public static final String AUDIO_UNKNOWN = BASE_TYPE_AUDIO + "/x-unknown";
6566

6667
public static final String TEXT_VTT = BASE_TYPE_TEXT + "/vtt";

0 commit comments

Comments
 (0)