| /* |
| * Copyright (C) 2017 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package com.google.android.exoplayer2.metadata; |
| |
| import androidx.annotation.Nullable; |
| import com.google.android.exoplayer2.Format; |
| import com.google.android.exoplayer2.metadata.dvbsi.AppInfoTableDecoder; |
| import com.google.android.exoplayer2.metadata.emsg.EventMessageDecoder; |
| import com.google.android.exoplayer2.metadata.icy.IcyDecoder; |
| import com.google.android.exoplayer2.metadata.id3.Id3Decoder; |
| import com.google.android.exoplayer2.metadata.scte35.SpliceInfoDecoder; |
| import com.google.android.exoplayer2.util.MimeTypes; |
| |
| /** |
| * A factory for {@link MetadataDecoder} instances. |
| */ |
| public interface MetadataDecoderFactory { |
| |
| /** |
| * Returns whether the factory is able to instantiate a {@link MetadataDecoder} for the given |
| * {@link Format}. |
| * |
| * @param format The {@link Format}. |
| * @return Whether the factory can instantiate a suitable {@link MetadataDecoder}. |
| */ |
| boolean supportsFormat(Format format); |
| |
| /** |
| * Creates a {@link MetadataDecoder} for the given {@link Format}. |
| * |
| * @param format The {@link Format}. |
| * @return A new {@link MetadataDecoder}. |
| * @throws IllegalArgumentException If the {@link Format} is not supported. |
| */ |
| MetadataDecoder createDecoder(Format format); |
| |
| /** |
| * Default {@link MetadataDecoder} implementation. |
| * |
| * <p>The formats supported by this factory are: |
| * |
| * <ul> |
| * <li>ID3 ({@link Id3Decoder}) |
| * <li>EMSG ({@link EventMessageDecoder}) |
| * <li>SCTE-35 ({@link SpliceInfoDecoder}) |
| * <li>ICY ({@link IcyDecoder}) |
| * </ul> |
| */ |
| MetadataDecoderFactory DEFAULT = |
| new MetadataDecoderFactory() { |
| |
| @Override |
| public boolean supportsFormat(Format format) { |
| @Nullable String mimeType = format.sampleMimeType; |
| return MimeTypes.APPLICATION_ID3.equals(mimeType) |
| || MimeTypes.APPLICATION_EMSG.equals(mimeType) |
| || MimeTypes.APPLICATION_SCTE35.equals(mimeType) |
| || MimeTypes.APPLICATION_ICY.equals(mimeType) |
| || MimeTypes.APPLICATION_AIT.equals(mimeType); |
| } |
| |
| @Override |
| public MetadataDecoder createDecoder(Format format) { |
| @Nullable String mimeType = format.sampleMimeType; |
| if (mimeType != null) { |
| switch (mimeType) { |
| case MimeTypes.APPLICATION_ID3: |
| return new Id3Decoder(); |
| case MimeTypes.APPLICATION_EMSG: |
| return new EventMessageDecoder(); |
| case MimeTypes.APPLICATION_SCTE35: |
| return new SpliceInfoDecoder(); |
| case MimeTypes.APPLICATION_ICY: |
| return new IcyDecoder(); |
| case MimeTypes.APPLICATION_AIT: |
| return new AppInfoTableDecoder(); |
| default: |
| break; |
| } |
| } |
| throw new IllegalArgumentException( |
| "Attempted to create decoder for unsupported MIME type: " + mimeType); |
| } |
| }; |
| } |