Update getFormatFromExtension to take a URI

This allows to handle the last segment retrieval and process the case
where the filename is null in the method.

PiperOrigin-RevId: 314512974
This commit is contained in:
kimvde 2020-06-03 13:28:51 +01:00 committed by Oliver Woodman
parent 7df99381c1
commit 7c33e2570a
4 changed files with 29 additions and 16 deletions

View File

@ -15,6 +15,7 @@
*/
package com.google.android.exoplayer2.util;
import android.net.Uri;
import androidx.annotation.IntDef;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
@ -112,11 +113,15 @@ public final class FilenameUtil {
private FilenameUtil() {}
/**
* Returns the {@link FileFormat} corresponding to the extension of the provided {@code filename}.
* Returns the {@link FileFormat} corresponding to the filename extension of the provided {@link
* Uri}. The filename is considered to be the last segment of the {@link Uri} path.
*/
@FileFormat
public static int getFormatFromExtension(String filename) {
if (filename.endsWith(FILE_EXTENSION_AC3) || filename.endsWith(FILE_EXTENSION_EC3)) {
public static int getFormatFromExtension(Uri uri) {
String filename = uri.getLastPathSegment();
if (filename == null) {
return FILE_FORMAT_UNKNOWN;
} else if (filename.endsWith(FILE_EXTENSION_AC3) || filename.endsWith(FILE_EXTENSION_EC3)) {
return FILE_FORMAT_AC3;
} else if (filename.endsWith(FILE_EXTENSION_AC4)) {
return FILE_FORMAT_AC4;

View File

@ -21,6 +21,7 @@ import static com.google.android.exoplayer2.util.FilenameUtil.FILE_FORMAT_UNKNOW
import static com.google.android.exoplayer2.util.FilenameUtil.getFormatFromExtension;
import static com.google.common.truth.Truth.assertThat;
import android.net.Uri;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
@ -31,16 +32,30 @@ public class FilenameUtilTest {
@Test
public void getFormatFromExtension_withExtension_returnsExpectedFormat() {
assertThat(getFormatFromExtension("filename.mp3")).isEqualTo(FILE_FORMAT_MP3);
assertThat(getFormatFromExtension(Uri.parse("filename.mp3"))).isEqualTo(FILE_FORMAT_MP3);
}
@Test
public void getFormatFromExtension_withExtensionPrefix_returnsExpectedFormat() {
assertThat(getFormatFromExtension("filename.mka")).isEqualTo(FILE_FORMAT_MATROSKA);
assertThat(getFormatFromExtension(Uri.parse("filename.mka"))).isEqualTo(FILE_FORMAT_MATROSKA);
}
@Test
public void getFormatFromExtension_unknownExtension_returnsUnknownFormat() {
assertThat(getFormatFromExtension("filename.unknown")).isEqualTo(FILE_FORMAT_UNKNOWN);
public void getFormatFromExtension_withUnknownExtension_returnsUnknownFormat() {
assertThat(getFormatFromExtension(Uri.parse("filename.unknown")))
.isEqualTo(FILE_FORMAT_UNKNOWN);
}
@Test
public void getFormatFromExtension_withUriNotEndingWithFilename_returnsExpectedFormat() {
assertThat(
getFormatFromExtension(
Uri.parse("http://www.example.com/filename.mp3?query=myquery#fragment")))
.isEqualTo(FILE_FORMAT_MP3);
}
@Test
public void getFormatFromExtension_withNullFilename_returnsUnknownFormat() {
assertThat(getFormatFromExtension(Uri.EMPTY)).isEqualTo(FILE_FORMAT_UNKNOWN);
}
}

View File

@ -27,7 +27,6 @@ import static com.google.android.exoplayer2.util.FilenameUtil.FILE_FORMAT_MP4;
import static com.google.android.exoplayer2.util.FilenameUtil.FILE_FORMAT_OGG;
import static com.google.android.exoplayer2.util.FilenameUtil.FILE_FORMAT_PS;
import static com.google.android.exoplayer2.util.FilenameUtil.FILE_FORMAT_TS;
import static com.google.android.exoplayer2.util.FilenameUtil.FILE_FORMAT_UNKNOWN;
import static com.google.android.exoplayer2.util.FilenameUtil.FILE_FORMAT_WAV;
import static com.google.android.exoplayer2.util.FilenameUtil.getFormatFromExtension;
@ -286,9 +285,7 @@ public final class DefaultExtractorsFactory implements ExtractorsFactory {
public synchronized Extractor[] createExtractors(Uri uri) {
List<Extractor> extractors = new ArrayList<>(/* initialCapacity= */ 14);
String filename = uri.getLastPathSegment();
@FilenameUtil.FileFormat
int extensionFormat = filename == null ? FILE_FORMAT_UNKNOWN : getFormatFromExtension(filename);
@FilenameUtil.FileFormat int extensionFormat = getFormatFromExtension(uri);
addExtractorsForFormat(extensionFormat, extractors);
for (int format : DEFAULT_EXTRACTOR_ORDER) {

View File

@ -195,11 +195,7 @@ public final class DefaultHlsExtractorFactory implements HlsExtractorFactory {
if (MimeTypes.TEXT_VTT.equals(format.sampleMimeType)) {
return new WebvttExtractor(format.language, timestampAdjuster);
}
String filename = uri.getLastPathSegment();
if (filename == null) {
return null;
}
@FilenameUtil.FileFormat int fileFormat = getFormatFromExtension(filename);
@FilenameUtil.FileFormat int fileFormat = getFormatFromExtension(uri);
switch (fileFormat) {
case FILE_FORMAT_WEBVTT:
return new WebvttExtractor(format.language, timestampAdjuster);