mirror of
https://github.com/androidx/media.git
synced 2025-05-10 09:12:16 +08:00
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:
parent
7df99381c1
commit
7c33e2570a
@ -15,6 +15,7 @@
|
|||||||
*/
|
*/
|
||||||
package com.google.android.exoplayer2.util;
|
package com.google.android.exoplayer2.util;
|
||||||
|
|
||||||
|
import android.net.Uri;
|
||||||
import androidx.annotation.IntDef;
|
import androidx.annotation.IntDef;
|
||||||
import java.lang.annotation.Documented;
|
import java.lang.annotation.Documented;
|
||||||
import java.lang.annotation.Retention;
|
import java.lang.annotation.Retention;
|
||||||
@ -112,11 +113,15 @@ public final class FilenameUtil {
|
|||||||
private 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
|
@FileFormat
|
||||||
public static int getFormatFromExtension(String filename) {
|
public static int getFormatFromExtension(Uri uri) {
|
||||||
if (filename.endsWith(FILE_EXTENSION_AC3) || filename.endsWith(FILE_EXTENSION_EC3)) {
|
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;
|
return FILE_FORMAT_AC3;
|
||||||
} else if (filename.endsWith(FILE_EXTENSION_AC4)) {
|
} else if (filename.endsWith(FILE_EXTENSION_AC4)) {
|
||||||
return FILE_FORMAT_AC4;
|
return FILE_FORMAT_AC4;
|
||||||
|
@ -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.android.exoplayer2.util.FilenameUtil.getFormatFromExtension;
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
|
import android.net.Uri;
|
||||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
@ -31,16 +32,30 @@ public class FilenameUtilTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getFormatFromExtension_withExtension_returnsExpectedFormat() {
|
public void getFormatFromExtension_withExtension_returnsExpectedFormat() {
|
||||||
assertThat(getFormatFromExtension("filename.mp3")).isEqualTo(FILE_FORMAT_MP3);
|
assertThat(getFormatFromExtension(Uri.parse("filename.mp3"))).isEqualTo(FILE_FORMAT_MP3);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getFormatFromExtension_withExtensionPrefix_returnsExpectedFormat() {
|
public void getFormatFromExtension_withExtensionPrefix_returnsExpectedFormat() {
|
||||||
assertThat(getFormatFromExtension("filename.mka")).isEqualTo(FILE_FORMAT_MATROSKA);
|
assertThat(getFormatFromExtension(Uri.parse("filename.mka"))).isEqualTo(FILE_FORMAT_MATROSKA);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getFormatFromExtension_unknownExtension_returnsUnknownFormat() {
|
public void getFormatFromExtension_withUnknownExtension_returnsUnknownFormat() {
|
||||||
assertThat(getFormatFromExtension("filename.unknown")).isEqualTo(FILE_FORMAT_UNKNOWN);
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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_OGG;
|
||||||
import static com.google.android.exoplayer2.util.FilenameUtil.FILE_FORMAT_PS;
|
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_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.FILE_FORMAT_WAV;
|
||||||
import static com.google.android.exoplayer2.util.FilenameUtil.getFormatFromExtension;
|
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) {
|
public synchronized Extractor[] createExtractors(Uri uri) {
|
||||||
List<Extractor> extractors = new ArrayList<>(/* initialCapacity= */ 14);
|
List<Extractor> extractors = new ArrayList<>(/* initialCapacity= */ 14);
|
||||||
|
|
||||||
String filename = uri.getLastPathSegment();
|
@FilenameUtil.FileFormat int extensionFormat = getFormatFromExtension(uri);
|
||||||
@FilenameUtil.FileFormat
|
|
||||||
int extensionFormat = filename == null ? FILE_FORMAT_UNKNOWN : getFormatFromExtension(filename);
|
|
||||||
addExtractorsForFormat(extensionFormat, extractors);
|
addExtractorsForFormat(extensionFormat, extractors);
|
||||||
|
|
||||||
for (int format : DEFAULT_EXTRACTOR_ORDER) {
|
for (int format : DEFAULT_EXTRACTOR_ORDER) {
|
||||||
|
@ -195,11 +195,7 @@ public final class DefaultHlsExtractorFactory implements HlsExtractorFactory {
|
|||||||
if (MimeTypes.TEXT_VTT.equals(format.sampleMimeType)) {
|
if (MimeTypes.TEXT_VTT.equals(format.sampleMimeType)) {
|
||||||
return new WebvttExtractor(format.language, timestampAdjuster);
|
return new WebvttExtractor(format.language, timestampAdjuster);
|
||||||
}
|
}
|
||||||
String filename = uri.getLastPathSegment();
|
@FilenameUtil.FileFormat int fileFormat = getFormatFromExtension(uri);
|
||||||
if (filename == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
@FilenameUtil.FileFormat int fileFormat = getFormatFromExtension(filename);
|
|
||||||
switch (fileFormat) {
|
switch (fileFormat) {
|
||||||
case FILE_FORMAT_WEBVTT:
|
case FILE_FORMAT_WEBVTT:
|
||||||
return new WebvttExtractor(format.language, timestampAdjuster);
|
return new WebvttExtractor(format.language, timestampAdjuster);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user