Commit 45a46c3e by aquilescanta Committed by Oliver Woodman

Add getTrackType to allow track selection

In order to apply track type specific policies in
the track selection, we need to know the type of
the track renderer, this method returns one of the
constants defined in C.java of the form TRACK_TYPE_*
to allow renderer classification.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=121369021
parent 6b9c43e5
......@@ -15,6 +15,7 @@
*/
package com.google.android.exoplayer.ext.vp9;
import com.google.android.exoplayer.C;
import com.google.android.exoplayer.CodecCounters;
import com.google.android.exoplayer.DecoderInputBuffer;
import com.google.android.exoplayer.ExoPlaybackException;
......@@ -185,6 +186,11 @@ public final class LibvpxVideoTrackRenderer extends TrackRenderer {
}
@Override
protected int getTrackType() {
return C.TRACK_TYPE_VIDEO;
}
@Override
protected int supportsFormat(Format format) {
return isLibvpxAvailable() && MimeTypes.VIDEO_VP9.equalsIgnoreCase(format.sampleMimeType)
? FORMAT_HANDLED : FORMAT_UNSUPPORTED_TYPE;
......
......@@ -145,8 +145,13 @@ public final class C {
public static final int TRACK_TYPE_TEXT = 3;
/**
* A default size in bytes for an individual allocation that forms part of a larger buffer.
* A type constant for metadata tracks.
*/
public static final int TRACK_TYPE_METADATA = 4;
/**
* A default size in bytes for an individual allocation that forms part of a larger buffer.
*/
public static final int DEFAULT_BUFFER_SEGMENT_SIZE = 64 * 1024;
/**
......
/*
* Copyright (C) 2014 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.exoplayer;
/**
* A {@link TrackRenderer} that does nothing.
*/
public final class DummyTrackRenderer extends TrackRenderer {
@Override
protected int supportsFormat(Format format) throws ExoPlaybackException {
return TrackRenderer.FORMAT_UNSUPPORTED_TYPE;
}
@Override
protected boolean isEnded() {
throw new IllegalStateException();
}
@Override
protected boolean isReady() {
throw new IllegalStateException();
}
@Override
protected void render(long positionUs, long elapsedRealtimeUs) throws ExoPlaybackException {
throw new IllegalStateException();
}
@Override
protected void reset(long positionUs) throws ExoPlaybackException {
throw new IllegalStateException();
}
}
......@@ -182,6 +182,11 @@ public class MediaCodecAudioTrackRenderer extends MediaCodecTrackRenderer implem
}
@Override
protected int getTrackType() {
return C.TRACK_TYPE_AUDIO;
}
@Override
protected int supportsFormat(MediaCodecSelector mediaCodecSelector, Format format)
throws DecoderQueryException {
String mimeType = format.sampleMimeType;
......
......@@ -221,6 +221,11 @@ public class MediaCodecVideoTrackRenderer extends MediaCodecTrackRenderer {
}
@Override
protected int getTrackType() {
return C.TRACK_TYPE_VIDEO;
}
@Override
protected int supportsFormat(MediaCodecSelector mediaCodecSelector, Format format)
throws DecoderQueryException {
String mimeType = format.sampleMimeType;
......
......@@ -295,6 +295,15 @@ public abstract class TrackRenderer implements ExoPlayerComponent {
// Abstract methods.
/**
* Returns the track type that the renderer handles. For example, a video renderer will return
* {@link C#TRACK_TYPE_VIDEO}, an audio renderer will return {@link C#TRACK_TYPE_AUDIO}, a text
* renderer will return {@link C#TRACK_TYPE_TEXT}, and so on.
*
* @return One of the TRACK_TYPE_* constants defined in {@link C}.
*/
protected abstract int getTrackType();
/**
* Returns the extent to which the renderer supports a given format.
* <p>
* The returned value is the bitwise OR of two properties:
......
......@@ -15,6 +15,7 @@
*/
package com.google.android.exoplayer.metadata;
import com.google.android.exoplayer.C;
import com.google.android.exoplayer.DecoderInputBuffer;
import com.google.android.exoplayer.ExoPlaybackException;
import com.google.android.exoplayer.Format;
......@@ -85,6 +86,11 @@ public final class MetadataTrackRenderer<T> extends TrackRenderer implements Cal
}
@Override
protected int getTrackType() {
return C.TRACK_TYPE_METADATA;
}
@Override
protected int supportsFormat(Format format) {
return metadataParser.canParse(format.sampleMimeType) ? TrackRenderer.FORMAT_HANDLED
: TrackRenderer.FORMAT_UNSUPPORTED_TYPE;
......
......@@ -92,6 +92,11 @@ public final class TextTrackRenderer extends TrackRenderer implements Callback {
}
@Override
protected int getTrackType() {
return C.TRACK_TYPE_TEXT;
}
@Override
protected int supportsFormat(Format format) {
return parserFactory.supportsFormat(format) ? TrackRenderer.FORMAT_HANDLED
: (MimeTypes.isText(format.sampleMimeType) ? FORMAT_UNSUPPORTED_SUBTYPE
......
......@@ -15,6 +15,7 @@
*/
package com.google.android.exoplayer.util.extensions;
import com.google.android.exoplayer.C;
import com.google.android.exoplayer.CodecCounters;
import com.google.android.exoplayer.DecoderInputBuffer;
import com.google.android.exoplayer.ExoPlaybackException;
......@@ -152,6 +153,11 @@ public abstract class AudioDecoderTrackRenderer extends TrackRenderer implements
codecCounters.ensureUpdated();
}
@Override
protected int getTrackType() {
return C.TRACK_TYPE_AUDIO;
}
protected abstract SimpleDecoder<DecoderInputBuffer, ? extends SimpleOutputBuffer,
? extends AudioDecoderException> createDecoder(List<byte[]> initializationData)
throws AudioDecoderException;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment