@@ -1434,45 +1434,42 @@ class GeneratorPlayer : FullScreenPlayer() {
14341434
14351435 val audioArrayAdapter = ArrayAdapter <String >(ctx, R .layout.sort_bottom_single_choice)
14361436
1437- audioArrayAdapter.addAll(currentAudioTracks.mapIndexed { index, track ->
1438- val language = track.language?.let { fromTagToLanguageName(it) ? : it }
1439- ? : track.label
1440- ? : " Audio"
1441-
1442- val codec = track.sampleMimeType?.let { mimeType ->
1443- when {
1444- mimeType.contains(" mp4a" ) || mimeType.contains(" aac" ) -> " aac"
1445- mimeType.contains(" ac-3" ) || mimeType.contains(" ac3" ) -> " ac3"
1446- mimeType.contains(" eac3-joc" ) -> " Dolby Atmos"
1447- mimeType.contains(" eac3" ) -> " eac3"
1448- mimeType.contains(" opus" ) -> " opus"
1449- mimeType.contains(" vorbis" ) -> " vorbis"
1450- mimeType.contains(" mp3" ) || mimeType.contains(" mpeg" ) -> " mp3"
1451- mimeType.contains(" flac" ) -> " flac"
1452- mimeType.contains(" dts" ) -> " dts"
1453- else -> mimeType.substringAfter(" /" )
1437+ audioArrayAdapter.addAll(
1438+ currentAudioTracks.mapIndexed { _, track ->
1439+
1440+ val language = (
1441+ track.language?.trim()?.let { raw ->
1442+ fromTagToLanguageName(raw)
1443+ ? : fromTagToLanguageName(raw.replace(' _' ,' -' ).substringBefore(' -' ).lowercase())
1444+ ? : raw
1445+ }
1446+ ? : track.label
1447+ ? : " Audio"
1448+ ).replaceFirstChar { it.uppercaseChar() }
1449+
1450+ val codec = audioCodecName(track.sampleMimeType)
1451+
1452+ val channelCount = track.channelCount
1453+
1454+ val channels = when {
1455+ // May be below 1 or null when unknown
1456+ channelCount == null || channelCount <= 0 -> " "
1457+ channelCount == 1 -> " Mono"
1458+ channelCount == 2 -> " Stereo"
1459+ channelCount == 6 -> " 5.1"
1460+ channelCount == 8 -> " 7.1"
1461+ else -> " ${channelCount} ch"
14541462 }
1455- } ? : " codec?"
1456-
1457-
1458- val channels: Int = track.channelCount ? : 0
1459- val channelConfig = when (channels) {
1460- 1 -> " mono"
1461- 2 -> " stereo"
1462- 6 -> " 5.1"
1463- 8 -> " 7.1"
1464- else -> " ${channels} Ch"
1465- }
14661463
1467- listOfNotNull(
1468- " [ $index ] " ,
1469- language.replaceFirstChar { it.uppercaseChar () },
1470- codec.uppercase(),
1471- channelConfig.replaceFirstChar { it.uppercaseChar() }
1472- ).joinToString( " • " )
1473-
1474- " [ $index ] $language $codec $channelConfig "
1475- } )
1464+ listOfNotNull(
1465+ language. takeIf { it.isNotBlank() }?.replaceFirstChar { it.uppercaseChar() } ,
1466+ channels. takeIf { it.isNotBlank () },
1467+ codec.takeIf { it.isNotBlank() }?. uppercase()
1468+ ).joinToString( " • " )
1469+
1470+
1471+ }
1472+ )
14761473
14771474 audioList.adapter = audioArrayAdapter
14781475 audioList.choiceMode = AbsListView .CHOICE_MODE_SINGLE
@@ -1830,6 +1827,42 @@ class GeneratorPlayer : FullScreenPlayer() {
18301827 }
18311828 }
18321829
1830+
1831+ private fun videoCodecName (mime : String? ): String? {
1832+ val m = mime?.lowercase() ? : return null
1833+ return when {
1834+ m.contains(" avc" ) || m.contains(" h264" ) -> " AVC"
1835+ m.contains(" hevc" ) || m.contains(" h265" ) -> " HEVC"
1836+ m.contains(" av1" ) -> " AV1"
1837+ m.contains(" vp9" ) -> " VP9"
1838+ m.contains(" vp8" ) -> " VP8"
1839+ " /" in m -> m.substringAfter(" /" ).uppercase()
1840+ else -> m.uppercase()
1841+ }
1842+ }
1843+
1844+ private fun audioCodecName (mime : String? ): String {
1845+ val m = mime?.lowercase()?.trim().orEmpty()
1846+ if (m.isBlank()) return " "
1847+ return when {
1848+ m.contains(" eac3-joc" ) -> " Dolby Atmos"
1849+ m.contains(" truehd" ) -> " TrueHD"
1850+ m.contains(" eac3" ) -> " E-AC3"
1851+ m.contains(" ac-3" ) || m.contains(" ac3" ) -> " AC3"
1852+ m.contains(" aac" ) || m.contains(" mp4a" ) -> " AAC"
1853+ m.contains(" opus" ) -> " Opus"
1854+ m.contains(" vorbis" ) -> " Vorbis"
1855+ m.contains(" mp3" ) -> " MP3"
1856+ m.contains(" flac" ) -> " FLAC"
1857+ m.contains(" dts" ) -> " DTS"
1858+ m.contains(" pcm" ) -> " PCM"
1859+ m.contains(" alac" ) -> " ALAC"
1860+ m.contains(" amr" ) -> " AMR"
1861+ m.contains(" /" ) -> m.substringAfter(" /" ).uppercase().takeIf { it.isNotBlank() } ? : " "
1862+ else -> " "
1863+ }
1864+ }
1865+
18331866 private fun updatePlayerInfo () {
18341867 val tracks = player.getVideoTracks()
18351868
@@ -1840,14 +1873,35 @@ class GeneratorPlayer : FullScreenPlayer() {
18401873 val prefs = PreferenceManager .getDefaultSharedPreferences(ctx)
18411874 showMediaInfo = prefs.getBoolean(ctx.getString(R .string.show_media_info_key), false )
18421875
1843- val videoCodec = videoTrack?.sampleMimeType?.substringAfterLast(' /' )?.uppercase()
1844- val audioCodec = audioTrack?.sampleMimeType?.substringAfterLast(' /' )?.uppercase()
1845- val language = listOfNotNull(
1846- audioTrack?.label,
1847- fromTagToLanguageName(audioTrack?.language)?.let { " [$it ]" }
1848- ).joinToString(" " )
1876+ val videoCodec = videoCodecName(videoTrack?.sampleMimeType)
1877+ val audioCodec = audioCodecName(audioTrack?.sampleMimeType)
1878+ val languageName = fromTagToLanguageName(audioTrack?.language)
1879+ val label = audioTrack?.label
1880+
1881+ val channelCount = audioTrack?.channelCount
1882+
1883+ val channels = when {
1884+ // May be below 1 or null when unknown
1885+ channelCount == null || channelCount <= 0 -> " "
1886+ channelCount == 1 -> " Mono"
1887+ channelCount == 2 -> " Stereo"
1888+ channelCount == 6 -> " 5.1"
1889+ channelCount == 8 -> " 7.1"
1890+ else -> " ${channelCount} ch"
1891+ }
18491892
1850- val stats = arrayOf(videoCodec, audioCodec, language).filter { ! it.isNullOrBlank() }.joinToString(" • " )
1893+ val language = languageName?.takeIf { it.isNotBlank() }?.let { lang ->
1894+ label?.takeIf { it.isNotBlank() && ! it.equals(lang, true ) }
1895+ ?.let { lang }
1896+ ? : lang
1897+ } ? : label?.takeIf { it.isNotBlank() }
1898+
1899+ val stats = arrayOf(
1900+ videoCodec,
1901+ language,
1902+ channels,
1903+ audioCodec
1904+ ).filter { ! it.isNullOrBlank() }.joinToString(" • " )
18511905
18521906 playerBinding?.playerVideoInfo?.apply {
18531907 text = stats
0 commit comments