From d0508b2bdef002c8c8c0ad400b7204a7d1eade21 Mon Sep 17 00:00:00 2001 From: kimvde Date: Fri, 6 Dec 2019 14:07:28 +0000 Subject: [PATCH] Make metadata field nullable in FlacStreamMetadata This makes the format metadata null (instead of an empty Metadata object) when it is not provided, and is therefore consistent with the other extractors behavior. PiperOrigin-RevId: 284171148 --- .../src/androidTest/assets/bear.flac.0.dump | 2 +- .../src/androidTest/assets/bear.flac.1.dump | 2 +- .../src/androidTest/assets/bear.flac.2.dump | 2 +- .../src/androidTest/assets/bear.flac.3.dump | 2 +- .../exoplayer2/ext/flac/FlacExtractor.java | 1 + .../extractor/FlacMetadataReader.java | 3 ++- .../exoplayer2/util/FlacStreamMetadata.java | 25 +++++++++++-------- .../src/test/assets/flac/bear.flac.0.dump | 2 +- .../bear_no_min_max_frame_size.flac.0.dump | 2 +- .../flac/bear_no_num_samples.flac.0.dump | 2 +- .../flac/bear_one_metadata_block.flac.0.dump | 2 +- .../bear_uncommon_sample_rate.flac.0.dump | 2 +- .../flac/bear_with_id3_disabled.flac.0.dump | 2 +- .../src/test/assets/ogg/bear_flac.ogg.0.dump | 2 +- .../src/test/assets/ogg/bear_flac.ogg.1.dump | 2 +- .../src/test/assets/ogg/bear_flac.ogg.2.dump | 2 +- .../src/test/assets/ogg/bear_flac.ogg.3.dump | 2 +- .../test/assets/ogg/bear_flac.ogg.unklen.dump | 2 +- .../ogg/bear_flac_noseektable.ogg.0.dump | 2 +- .../ogg/bear_flac_noseektable.ogg.1.dump | 2 +- .../ogg/bear_flac_noseektable.ogg.2.dump | 2 +- .../ogg/bear_flac_noseektable.ogg.3.dump | 2 +- .../ogg/bear_flac_noseektable.ogg.unklen.dump | 2 +- .../util/FlacStreamMetadataTest.java | 2 +- 24 files changed, 39 insertions(+), 32 deletions(-) diff --git a/extensions/flac/src/androidTest/assets/bear.flac.0.dump b/extensions/flac/src/androidTest/assets/bear.flac.0.dump index 816356a1e6..d562052a4f 100644 --- a/extensions/flac/src/androidTest/assets/bear.flac.0.dump +++ b/extensions/flac/src/androidTest/assets/bear.flac.0.dump @@ -24,7 +24,7 @@ track 0: selectionFlags = 0 language = null drmInitData = - - metadata = entries=[] + metadata = null initializationData: total output bytes = 526272 sample count = 33 diff --git a/extensions/flac/src/androidTest/assets/bear.flac.1.dump b/extensions/flac/src/androidTest/assets/bear.flac.1.dump index 4a6b06725f..93f38227b8 100644 --- a/extensions/flac/src/androidTest/assets/bear.flac.1.dump +++ b/extensions/flac/src/androidTest/assets/bear.flac.1.dump @@ -24,7 +24,7 @@ track 0: selectionFlags = 0 language = null drmInitData = - - metadata = entries=[] + metadata = null initializationData: total output bytes = 362432 sample count = 23 diff --git a/extensions/flac/src/androidTest/assets/bear.flac.2.dump b/extensions/flac/src/androidTest/assets/bear.flac.2.dump index dddb6dc264..9c53a95b06 100644 --- a/extensions/flac/src/androidTest/assets/bear.flac.2.dump +++ b/extensions/flac/src/androidTest/assets/bear.flac.2.dump @@ -24,7 +24,7 @@ track 0: selectionFlags = 0 language = null drmInitData = - - metadata = entries=[] + metadata = null initializationData: total output bytes = 182208 sample count = 12 diff --git a/extensions/flac/src/androidTest/assets/bear.flac.3.dump b/extensions/flac/src/androidTest/assets/bear.flac.3.dump index 0dbe575ecf..82e23a21c1 100644 --- a/extensions/flac/src/androidTest/assets/bear.flac.3.dump +++ b/extensions/flac/src/androidTest/assets/bear.flac.3.dump @@ -24,7 +24,7 @@ track 0: selectionFlags = 0 language = null drmInitData = - - metadata = entries=[] + metadata = null initializationData: total output bytes = 18368 sample count = 2 diff --git a/extensions/flac/src/main/java/com/google/android/exoplayer2/ext/flac/FlacExtractor.java b/extensions/flac/src/main/java/com/google/android/exoplayer2/ext/flac/FlacExtractor.java index 7c69a93fc9..2c6f51da02 100644 --- a/extensions/flac/src/main/java/com/google/android/exoplayer2/ext/flac/FlacExtractor.java +++ b/extensions/flac/src/main/java/com/google/android/exoplayer2/ext/flac/FlacExtractor.java @@ -212,6 +212,7 @@ public final class FlacExtractor implements Extractor { input.getLength(), extractorOutput, outputFrameHolder); + @Nullable Metadata metadata = streamMetadata.getMetadataCopyWithAppendedEntriesFrom(id3Metadata); outputFormat(streamMetadata, metadata, trackOutput); } diff --git a/library/core/src/main/java/com/google/android/exoplayer2/extractor/FlacMetadataReader.java b/library/core/src/main/java/com/google/android/exoplayer2/extractor/FlacMetadataReader.java index e86c9b0129..e66f39de8c 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/extractor/FlacMetadataReader.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/extractor/FlacMetadataReader.java @@ -81,7 +81,8 @@ public final class FlacMetadataReader { throws IOException, InterruptedException { @Nullable Id3Decoder.FramePredicate id3FramePredicate = parseData ? null : Id3Decoder.NO_FRAMES_PREDICATE; - return new Id3Peeker().peekId3Data(input, id3FramePredicate); + @Nullable Metadata id3Metadata = new Id3Peeker().peekId3Data(input, id3FramePredicate); + return id3Metadata == null || id3Metadata.length() == 0 ? null : id3Metadata; } /** diff --git a/library/core/src/main/java/com/google/android/exoplayer2/util/FlacStreamMetadata.java b/library/core/src/main/java/com/google/android/exoplayer2/util/FlacStreamMetadata.java index 2772f7e0c6..db1de183ac 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/util/FlacStreamMetadata.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/util/FlacStreamMetadata.java @@ -80,8 +80,8 @@ public final class FlacStreamMetadata { /** Total number of samples, or 0 if the value is unknown. */ public final long totalSamples; - /** Content metadata. */ - private final Metadata metadata; + /** Content metadata, or {@code null} if it is not provided. */ + @Nullable private final Metadata metadata; /** * Parses binary FLAC stream info metadata. @@ -102,7 +102,7 @@ public final class FlacStreamMetadata { bitsPerSample = scratch.readBits(5) + 1; bitsPerSampleLookupKey = getBitsPerSampleLookupKey(bitsPerSample); totalSamples = scratch.readBitsToLong(36); - metadata = new Metadata(); + metadata = null; } // Used in native code. @@ -138,7 +138,7 @@ public final class FlacStreamMetadata { int channels, int bitsPerSample, long totalSamples, - Metadata metadata) { + @Nullable Metadata metadata) { this.minBlockSizeSamples = minBlockSizeSamples; this.maxBlockSizeSamples = maxBlockSizeSamples; this.minFrameSize = minFrameSize; @@ -213,7 +213,7 @@ public final class FlacStreamMetadata { // Set the last metadata block flag, ignore the other blocks. streamMarkerAndInfoBlock[4] = (byte) 0x80; int maxInputSize = maxFrameSize > 0 ? maxFrameSize : Format.NO_VALUE; - Metadata metadataWithId3 = metadata.copyWithAppendedEntriesFrom(id3Metadata); + @Nullable Metadata metadataWithId3 = getMetadataCopyWithAppendedEntriesFrom(id3Metadata); return Format.createAudioSampleFormat( /* id= */ null, @@ -234,14 +234,16 @@ public final class FlacStreamMetadata { } /** Returns a copy of the content metadata with entries from {@code other} appended. */ + @Nullable public Metadata getMetadataCopyWithAppendedEntriesFrom(@Nullable Metadata other) { - return metadata.copyWithAppendedEntriesFrom(other); + return metadata == null ? other : metadata.copyWithAppendedEntriesFrom(other); } /** Returns a copy of {@code this} with the given Vorbis comments added to the metadata. */ public FlacStreamMetadata copyWithVorbisComments(List vorbisComments) { + @Nullable Metadata appendedMetadata = - metadata.copyWithAppendedEntriesFrom( + getMetadataCopyWithAppendedEntriesFrom( buildMetadata(vorbisComments, Collections.emptyList())); return new FlacStreamMetadata( minBlockSizeSamples, @@ -257,8 +259,10 @@ public final class FlacStreamMetadata { /** Returns a copy of {@code this} with the given picture frames added to the metadata. */ public FlacStreamMetadata copyWithPictureFrames(List pictureFrames) { + @Nullable Metadata appendedMetadata = - metadata.copyWithAppendedEntriesFrom(buildMetadata(Collections.emptyList(), pictureFrames)); + getMetadataCopyWithAppendedEntriesFrom( + buildMetadata(Collections.emptyList(), pictureFrames)); return new FlacStreamMetadata( minBlockSizeSamples, maxBlockSizeSamples, @@ -317,10 +321,11 @@ public final class FlacStreamMetadata { } } + @Nullable private static Metadata buildMetadata( List vorbisComments, List pictureFrames) { if (vorbisComments.isEmpty() && pictureFrames.isEmpty()) { - return new Metadata(); + return null; } ArrayList metadataEntries = new ArrayList<>(); @@ -336,6 +341,6 @@ public final class FlacStreamMetadata { } metadataEntries.addAll(pictureFrames); - return metadataEntries.isEmpty() ? new Metadata() : new Metadata(metadataEntries); + return metadataEntries.isEmpty() ? null : new Metadata(metadataEntries); } } diff --git a/library/core/src/test/assets/flac/bear.flac.0.dump b/library/core/src/test/assets/flac/bear.flac.0.dump index 109cc49ebb..bd8f1827e4 100644 --- a/library/core/src/test/assets/flac/bear.flac.0.dump +++ b/library/core/src/test/assets/flac/bear.flac.0.dump @@ -24,7 +24,7 @@ track 0: selectionFlags = 0 language = null drmInitData = - - metadata = entries=[] + metadata = null initializationData: data = length 42, hash 83F6895 total output bytes = 164431 diff --git a/library/core/src/test/assets/flac/bear_no_min_max_frame_size.flac.0.dump b/library/core/src/test/assets/flac/bear_no_min_max_frame_size.flac.0.dump index a7c8b628ba..4ef7138487 100644 --- a/library/core/src/test/assets/flac/bear_no_min_max_frame_size.flac.0.dump +++ b/library/core/src/test/assets/flac/bear_no_min_max_frame_size.flac.0.dump @@ -24,7 +24,7 @@ track 0: selectionFlags = 0 language = null drmInitData = - - metadata = entries=[] + metadata = null initializationData: data = length 42, hash 9218FDB7 total output bytes = 164431 diff --git a/library/core/src/test/assets/flac/bear_no_num_samples.flac.0.dump b/library/core/src/test/assets/flac/bear_no_num_samples.flac.0.dump index 7606154ddd..45b75392b3 100644 --- a/library/core/src/test/assets/flac/bear_no_num_samples.flac.0.dump +++ b/library/core/src/test/assets/flac/bear_no_num_samples.flac.0.dump @@ -24,7 +24,7 @@ track 0: selectionFlags = 0 language = null drmInitData = - - metadata = entries=[] + metadata = null initializationData: data = length 42, hash 49FA2C21 total output bytes = 164431 diff --git a/library/core/src/test/assets/flac/bear_one_metadata_block.flac.0.dump b/library/core/src/test/assets/flac/bear_one_metadata_block.flac.0.dump index 109cc49ebb..bd8f1827e4 100644 --- a/library/core/src/test/assets/flac/bear_one_metadata_block.flac.0.dump +++ b/library/core/src/test/assets/flac/bear_one_metadata_block.flac.0.dump @@ -24,7 +24,7 @@ track 0: selectionFlags = 0 language = null drmInitData = - - metadata = entries=[] + metadata = null initializationData: data = length 42, hash 83F6895 total output bytes = 164431 diff --git a/library/core/src/test/assets/flac/bear_uncommon_sample_rate.flac.0.dump b/library/core/src/test/assets/flac/bear_uncommon_sample_rate.flac.0.dump index 488517947c..e6caad8e84 100644 --- a/library/core/src/test/assets/flac/bear_uncommon_sample_rate.flac.0.dump +++ b/library/core/src/test/assets/flac/bear_uncommon_sample_rate.flac.0.dump @@ -24,7 +24,7 @@ track 0: selectionFlags = 0 language = null drmInitData = - - metadata = entries=[] + metadata = null initializationData: data = length 42, hash 7249A1B8 total output bytes = 144086 diff --git a/library/core/src/test/assets/flac/bear_with_id3_disabled.flac.0.dump b/library/core/src/test/assets/flac/bear_with_id3_disabled.flac.0.dump index 109cc49ebb..bd8f1827e4 100644 --- a/library/core/src/test/assets/flac/bear_with_id3_disabled.flac.0.dump +++ b/library/core/src/test/assets/flac/bear_with_id3_disabled.flac.0.dump @@ -24,7 +24,7 @@ track 0: selectionFlags = 0 language = null drmInitData = - - metadata = entries=[] + metadata = null initializationData: data = length 42, hash 83F6895 total output bytes = 164431 diff --git a/library/core/src/test/assets/ogg/bear_flac.ogg.0.dump b/library/core/src/test/assets/ogg/bear_flac.ogg.0.dump index 896c8ad6c5..d32342619c 100644 --- a/library/core/src/test/assets/ogg/bear_flac.ogg.0.dump +++ b/library/core/src/test/assets/ogg/bear_flac.ogg.0.dump @@ -24,7 +24,7 @@ track 0: selectionFlags = 0 language = null drmInitData = - - metadata = entries=[] + metadata = null initializationData: data = length 42, hash 83F6895 total output bytes = 164431 diff --git a/library/core/src/test/assets/ogg/bear_flac.ogg.1.dump b/library/core/src/test/assets/ogg/bear_flac.ogg.1.dump index e85b504a39..17e6c6d862 100644 --- a/library/core/src/test/assets/ogg/bear_flac.ogg.1.dump +++ b/library/core/src/test/assets/ogg/bear_flac.ogg.1.dump @@ -24,7 +24,7 @@ track 0: selectionFlags = 0 language = null drmInitData = - - metadata = entries=[] + metadata = null initializationData: data = length 42, hash 83F6895 total output bytes = 113666 diff --git a/library/core/src/test/assets/ogg/bear_flac.ogg.2.dump b/library/core/src/test/assets/ogg/bear_flac.ogg.2.dump index 63bc130424..e52b8897c8 100644 --- a/library/core/src/test/assets/ogg/bear_flac.ogg.2.dump +++ b/library/core/src/test/assets/ogg/bear_flac.ogg.2.dump @@ -24,7 +24,7 @@ track 0: selectionFlags = 0 language = null drmInitData = - - metadata = entries=[] + metadata = null initializationData: data = length 42, hash 83F6895 total output bytes = 55652 diff --git a/library/core/src/test/assets/ogg/bear_flac.ogg.3.dump b/library/core/src/test/assets/ogg/bear_flac.ogg.3.dump index fdebce7743..dabf5552da 100644 --- a/library/core/src/test/assets/ogg/bear_flac.ogg.3.dump +++ b/library/core/src/test/assets/ogg/bear_flac.ogg.3.dump @@ -24,7 +24,7 @@ track 0: selectionFlags = 0 language = null drmInitData = - - metadata = entries=[] + metadata = null initializationData: data = length 42, hash 83F6895 total output bytes = 445 diff --git a/library/core/src/test/assets/ogg/bear_flac.ogg.unklen.dump b/library/core/src/test/assets/ogg/bear_flac.ogg.unklen.dump index 896c8ad6c5..d32342619c 100644 --- a/library/core/src/test/assets/ogg/bear_flac.ogg.unklen.dump +++ b/library/core/src/test/assets/ogg/bear_flac.ogg.unklen.dump @@ -24,7 +24,7 @@ track 0: selectionFlags = 0 language = null drmInitData = - - metadata = entries=[] + metadata = null initializationData: data = length 42, hash 83F6895 total output bytes = 164431 diff --git a/library/core/src/test/assets/ogg/bear_flac_noseektable.ogg.0.dump b/library/core/src/test/assets/ogg/bear_flac_noseektable.ogg.0.dump index b09453f208..efbf8a3609 100644 --- a/library/core/src/test/assets/ogg/bear_flac_noseektable.ogg.0.dump +++ b/library/core/src/test/assets/ogg/bear_flac_noseektable.ogg.0.dump @@ -24,7 +24,7 @@ track 0: selectionFlags = 0 language = null drmInitData = - - metadata = entries=[] + metadata = null initializationData: data = length 42, hash 83F6895 total output bytes = 164431 diff --git a/library/core/src/test/assets/ogg/bear_flac_noseektable.ogg.1.dump b/library/core/src/test/assets/ogg/bear_flac_noseektable.ogg.1.dump index 4ab08524ae..80ad2045ce 100644 --- a/library/core/src/test/assets/ogg/bear_flac_noseektable.ogg.1.dump +++ b/library/core/src/test/assets/ogg/bear_flac_noseektable.ogg.1.dump @@ -24,7 +24,7 @@ track 0: selectionFlags = 0 language = null drmInitData = - - metadata = entries=[] + metadata = null initializationData: data = length 42, hash 83F6895 total output bytes = 113666 diff --git a/library/core/src/test/assets/ogg/bear_flac_noseektable.ogg.2.dump b/library/core/src/test/assets/ogg/bear_flac_noseektable.ogg.2.dump index 3a846736d2..c2efd50a33 100644 --- a/library/core/src/test/assets/ogg/bear_flac_noseektable.ogg.2.dump +++ b/library/core/src/test/assets/ogg/bear_flac_noseektable.ogg.2.dump @@ -24,7 +24,7 @@ track 0: selectionFlags = 0 language = null drmInitData = - - metadata = entries=[] + metadata = null initializationData: data = length 42, hash 83F6895 total output bytes = 55652 diff --git a/library/core/src/test/assets/ogg/bear_flac_noseektable.ogg.3.dump b/library/core/src/test/assets/ogg/bear_flac_noseektable.ogg.3.dump index 5bf1a92472..26601231a6 100644 --- a/library/core/src/test/assets/ogg/bear_flac_noseektable.ogg.3.dump +++ b/library/core/src/test/assets/ogg/bear_flac_noseektable.ogg.3.dump @@ -24,7 +24,7 @@ track 0: selectionFlags = 0 language = null drmInitData = - - metadata = entries=[] + metadata = null initializationData: data = length 42, hash 83F6895 total output bytes = 445 diff --git a/library/core/src/test/assets/ogg/bear_flac_noseektable.ogg.unklen.dump b/library/core/src/test/assets/ogg/bear_flac_noseektable.ogg.unklen.dump index 1a0686c5fd..67a1fecee4 100644 --- a/library/core/src/test/assets/ogg/bear_flac_noseektable.ogg.unklen.dump +++ b/library/core/src/test/assets/ogg/bear_flac_noseektable.ogg.unklen.dump @@ -24,7 +24,7 @@ track 0: selectionFlags = 0 language = null drmInitData = - - metadata = entries=[] + metadata = null initializationData: data = length 42, hash 83F6895 total output bytes = 164431 diff --git a/library/core/src/test/java/com/google/android/exoplayer2/util/FlacStreamMetadataTest.java b/library/core/src/test/java/com/google/android/exoplayer2/util/FlacStreamMetadataTest.java index d3d3e53458..ddaa550b7f 100644 --- a/library/core/src/test/java/com/google/android/exoplayer2/util/FlacStreamMetadataTest.java +++ b/library/core/src/test/java/com/google/android/exoplayer2/util/FlacStreamMetadataTest.java @@ -75,7 +75,7 @@ public final class FlacStreamMetadataTest { /* pictureFrames= */ new ArrayList<>()) .getMetadataCopyWithAppendedEntriesFrom(/* other= */ null); - assertThat(metadata.length()).isEqualTo(0); + assertThat(metadata).isNull(); } @Test