CrackMe.apk
Download file
package com.google.android.exoplayer2.extractor.avi;
import com.google.android.exoplayer2.Format;
import com.google.android.exoplayer2.util.Log;
import com.google.android.exoplayer2.util.MimeTypes;
import com.google.android.exoplayer2.util.ParsableByteArray;
import com.google.android.exoplayer2.util.Util;
import com.google.common.collect.ImmutableList;
final class StreamFormatChunk implements AviChunk {
private static final String TAG = "StreamFormatChunk";
public final Format format;
private static String getMimeTypeFromCompression(int i) {
switch (i) {
case 808802372:
case 877677894:
case 1145656883:
case 1145656920:
case 1482049860:
case 1684633208:
case 2021026148:
return MimeTypes.VIDEO_MP4V;
case 826496577:
case 828601953:
case 875967048:
return MimeTypes.VIDEO_H264;
case 842289229:
return MimeTypes.VIDEO_MP42;
case 859066445:
return MimeTypes.VIDEO_MP43;
case 1196444237:
case 1735420525:
return MimeTypes.VIDEO_MJPEG;
default:
return null;
}
}
private static String getMimeTypeFromTag(int i) {
if (i == 1) {
return MimeTypes.AUDIO_RAW;
}
if (i == 85) {
return MimeTypes.AUDIO_MPEG;
}
if (i == 255) {
return MimeTypes.AUDIO_AAC;
}
if (i == 8192) {
return MimeTypes.AUDIO_AC3;
}
if (i != 8193) {
return null;
}
return MimeTypes.AUDIO_DTS;
}
public int getType() {
return AviExtractor.FOURCC_strf;
}
public static AviChunk parseFrom(int i, ParsableByteArray parsableByteArray) {
if (i == 2) {
return parseBitmapInfoHeader(parsableByteArray);
}
if (i == 1) {
return parseWaveFormatEx(parsableByteArray);
}
Log.w(TAG, "Ignoring strf box for unsupported track type: " + Util.getTrackTypeString(i));
return null;
}
public StreamFormatChunk(Format format2) {
this.format = format2;
}
private static AviChunk parseBitmapInfoHeader(ParsableByteArray parsableByteArray) {
parsableByteArray.skipBytes(4);
int readLittleEndianInt = parsableByteArray.readLittleEndianInt();
int readLittleEndianInt2 = parsableByteArray.readLittleEndianInt();
parsableByteArray.skipBytes(4);
int readLittleEndianInt3 = parsableByteArray.readLittleEndianInt();
String mimeTypeFromCompression = getMimeTypeFromCompression(readLittleEndianInt3);
if (mimeTypeFromCompression == null) {
Log.w(TAG, "Ignoring track with unsupported compression " + readLittleEndianInt3);
return null;
}
Format.Builder builder = new Format.Builder();
builder.setWidth(readLittleEndianInt).setHeight(readLittleEndianInt2).setSampleMimeType(mimeTypeFromCompression);
return new StreamFormatChunk(builder.build());
}
private static AviChunk parseWaveFormatEx(ParsableByteArray parsableByteArray) {
int readLittleEndianUnsignedShort = parsableByteArray.readLittleEndianUnsignedShort();
String mimeTypeFromTag = getMimeTypeFromTag(readLittleEndianUnsignedShort);
if (mimeTypeFromTag == null) {
Log.w(TAG, "Ignoring track with unsupported format tag " + readLittleEndianUnsignedShort);
return null;
}
int readLittleEndianUnsignedShort2 = parsableByteArray.readLittleEndianUnsignedShort();
int readLittleEndianInt = parsableByteArray.readLittleEndianInt();
parsableByteArray.skipBytes(6);
int pcmEncoding = Util.getPcmEncoding(parsableByteArray.readUnsignedShort());
int readLittleEndianUnsignedShort3 = parsableByteArray.readLittleEndianUnsignedShort();
byte[] bArr = new byte[readLittleEndianUnsignedShort3];
parsableByteArray.readBytes(bArr, 0, readLittleEndianUnsignedShort3);
Format.Builder builder = new Format.Builder();
builder.setSampleMimeType(mimeTypeFromTag).setChannelCount(readLittleEndianUnsignedShort2).setSampleRate(readLittleEndianInt);
if (MimeTypes.AUDIO_RAW.equals(mimeTypeFromTag) && pcmEncoding != 0) {
builder.setPcmEncoding(pcmEncoding);
}
if (MimeTypes.AUDIO_AAC.equals(mimeTypeFromTag) && readLittleEndianUnsignedShort3 > 0) {
builder.setInitializationData(ImmutableList.of(bArr));
}
return new StreamFormatChunk(builder.build());
}
}
Download file