diff --git a/library/core/src/main/java/com/google/android/exoplayer2/Format.java b/library/core/src/main/java/com/google/android/exoplayer2/Format.java index 8628ead4d6..dcb7a83dca 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/Format.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/Format.java @@ -1059,12 +1059,18 @@ public final class Format implements Parcelable { @Nullable String label, @Nullable String sampleMimeType, @Nullable String codecs, + @Nullable Metadata metadata, int bitrate, int width, int height, int channelCount, @C.SelectionFlags int selectionFlags, @Nullable String language) { + + if (this.metadata != null) { + metadata = this.metadata.copyWithAppendedEntriesFrom(metadata); + } + return new Format( id, label, @@ -1127,6 +1133,12 @@ public final class Format implements Parcelable { codecs = codecsOfType; } } + + Metadata metadata = + this.metadata == null + ? manifestFormat.metadata + : this.metadata.copyWithAppendedEntriesFrom(manifestFormat.metadata); + float frameRate = this.frameRate; if (frameRate == NO_VALUE && trackType == C.TRACK_TYPE_VIDEO) { frameRate = manifestFormat.frameRate; diff --git a/library/core/src/main/java/com/google/android/exoplayer2/metadata/Metadata.java b/library/core/src/main/java/com/google/android/exoplayer2/metadata/Metadata.java index dd06e1a2cf..7b4f4c0836 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/metadata/Metadata.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/metadata/Metadata.java @@ -78,6 +78,21 @@ public final class Metadata implements Parcelable { return entries[index]; } + /** + * Returns a copy of this metadata with the entries of the specified metadata appended. Returns + * this instance if {@code other} is null. + * + * @param other The metadata that holds the entries to append. If null, this methods returns this + * instance. + * @return The metadata instance with the appended entries. + */ + public Metadata copyWithAppendedEntriesFrom(@Nullable Metadata other) { + if (other == null) { + return this; + } + return copyWithAppendedEntries(other.entries); + } + /** * Returns a copy of this metadata with the specified entries appended. * diff --git a/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsSampleStreamWrapper.java b/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsSampleStreamWrapper.java index 855b7f6a23..65039b9364 100644 --- a/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsSampleStreamWrapper.java +++ b/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsSampleStreamWrapper.java @@ -1126,6 +1126,7 @@ import java.util.Map; playlistFormat.label, mimeType, codecs, + playlistFormat.metadata, bitrate, playlistFormat.width, playlistFormat.height,