Use a MediaCodecInfo object to describe a codec rather than a codec name

This commit is contained in:
Cameron Gutman 2016-11-20 17:53:10 -08:00
parent 3d177e97e4
commit cc9b1aeaab

View File

@ -30,8 +30,8 @@ public class MediaCodecDecoderRenderer extends EnhancedDecoderRenderer {
// Used on versions < 5.0 // Used on versions < 5.0
private ByteBuffer[] legacyInputBuffers; private ByteBuffer[] legacyInputBuffers;
private String avcDecoderName; private MediaCodecInfo avcDecoder;
private String hevcDecoderName; private MediaCodecInfo hevcDecoder;
private MediaCodec videoDecoder; private MediaCodec videoDecoder;
private Thread rendererThread; private Thread rendererThread;
@ -94,19 +94,17 @@ public class MediaCodecDecoderRenderer extends EnhancedDecoderRenderer {
public MediaCodecDecoderRenderer(int videoFormat) { public MediaCodecDecoderRenderer(int videoFormat) {
//dumpDecoders(); //dumpDecoders();
MediaCodecInfo avcDecoder = findAvcDecoder(); avcDecoder = findAvcDecoder();
if (avcDecoder != null) { if (avcDecoder != null) {
avcDecoderName = avcDecoder.getName(); LimeLog.info("Selected AVC decoder: "+avcDecoder.getName());
LimeLog.info("Selected AVC decoder: "+avcDecoderName);
} }
else { else {
LimeLog.warning("No AVC decoder found"); LimeLog.warning("No AVC decoder found");
} }
MediaCodecInfo hevcDecoder = findHevcDecoder(videoFormat); hevcDecoder = findHevcDecoder(videoFormat);
if (hevcDecoder != null) { if (hevcDecoder != null) {
hevcDecoderName = hevcDecoder.getName(); LimeLog.info("Selected HEVC decoder: "+hevcDecoder.getName());
LimeLog.info("Selected HEVC decoder: "+hevcDecoderName);
} }
else { else {
LimeLog.info("No HEVC decoder found"); LimeLog.info("No HEVC decoder found");
@ -117,24 +115,24 @@ public class MediaCodecDecoderRenderer extends EnhancedDecoderRenderer {
// library. The limitation of this is that we don't know whether we're using HEVC or AVC, so // library. The limitation of this is that we don't know whether we're using HEVC or AVC, so
// we just assume AVC. This isn't really a problem because the capabilities are usually // we just assume AVC. This isn't really a problem because the capabilities are usually
// shared between AVC and HEVC decoders on the same device. // shared between AVC and HEVC decoders on the same device.
if (avcDecoderName != null) { if (avcDecoder != null) {
directSubmit = MediaCodecHelper.decoderCanDirectSubmit(avcDecoderName); directSubmit = MediaCodecHelper.decoderCanDirectSubmit(avcDecoder.getName());
adaptivePlayback = MediaCodecHelper.decoderSupportsAdaptivePlayback(avcDecoderName); adaptivePlayback = MediaCodecHelper.decoderSupportsAdaptivePlayback(avcDecoder.getName());
if (directSubmit) { if (directSubmit) {
LimeLog.info("Decoder "+avcDecoderName+" will use direct submit"); LimeLog.info("Decoder "+avcDecoder.getName()+" will use direct submit");
} }
} }
} }
@Override @Override
public boolean isHevcSupported() { public boolean isHevcSupported() {
return hevcDecoderName != null; return hevcDecoder != null;
} }
@Override @Override
public boolean isAvcSupported() { public boolean isAvcSupported() {
return avcDecoderName != null; return avcDecoder != null;
} }
@Override @Override
@ -148,9 +146,9 @@ public class MediaCodecDecoderRenderer extends EnhancedDecoderRenderer {
if (videoFormat == VideoFormat.H264) { if (videoFormat == VideoFormat.H264) {
mimeType = "video/avc"; mimeType = "video/avc";
selectedDecoderName = avcDecoderName; selectedDecoderName = avcDecoder.getName();
if (avcDecoderName == null) { if (avcDecoder == null) {
LimeLog.severe("No available AVC decoder!"); LimeLog.severe("No available AVC decoder!");
return false; return false;
} }
@ -175,9 +173,9 @@ public class MediaCodecDecoderRenderer extends EnhancedDecoderRenderer {
} }
else if (videoFormat == VideoFormat.H265) { else if (videoFormat == VideoFormat.H265) {
mimeType = "video/hevc"; mimeType = "video/hevc";
selectedDecoderName = hevcDecoderName; selectedDecoderName = hevcDecoder.getName();
if (hevcDecoderName == null) { if (hevcDecoder == null) {
LimeLog.severe("No available HEVC decoder!"); LimeLog.severe("No available HEVC decoder!");
return false; return false;
} }
@ -854,8 +852,8 @@ public class MediaCodecDecoderRenderer extends EnhancedDecoderRenderer {
String str = ""; String str = "";
str += "Format: "+renderer.videoFormat+"\n"; str += "Format: "+renderer.videoFormat+"\n";
str += "AVC Decoder: "+renderer.avcDecoderName+"\n"; str += "AVC Decoder: "+((renderer.avcDecoder != null) ? renderer.avcDecoder.getName():"(none)")+"\n";
str += "HEVC Decoder: "+renderer.hevcDecoderName+"\n"; str += "HEVC Decoder: "+((renderer.hevcDecoder != null) ? renderer.hevcDecoder.getName():"(none)")+"\n";
str += "Initial video dimensions: "+renderer.initialWidth+"x"+renderer.initialHeight+"\n"; str += "Initial video dimensions: "+renderer.initialWidth+"x"+renderer.initialHeight+"\n";
str += "In stats: "+renderer.numVpsIn+", "+renderer.numSpsIn+", "+renderer.numPpsIn+", "+renderer.numIframeIn+"\n"; str += "In stats: "+renderer.numVpsIn+", "+renderer.numSpsIn+", "+renderer.numPpsIn+", "+renderer.numIframeIn+"\n";
str += "Total frames: "+renderer.totalFrames+"\n"; str += "Total frames: "+renderer.totalFrames+"\n";