/* * myLib - https://github.com/taktod/myLib * Copyright (c) 2014 ttProject. All rights reserved. * * Licensed under The MIT license. */ package com.ttProject.container.mkv; import com.ttProject.frame.CodecType; /** * mkvCodecType * @author taktod */ public enum MkvCodecType { V_MPEG4_ISO_AVC("V_MPEG4/ISO/AVC", CodecType.H264), V_MPEG_ISO_HEVC("V_MPEG/ISO/HEVC", CodecType.H265), V_VP8("V_VP8", CodecType.VP8), V_VP9("V_VP9", CodecType.VP9), V_MJPEG("V_MJPEG", CodecType.MJPEG), // V_MS("V_MS/VFW/FOURCC"), // microsoft mpeg4 v2? same as A_MS/ACM? V_THEORA("V_THEORA", CodecType.THEORA), // theora A_AAC("A_AAC", CodecType.AAC), A_MPEG_L3("A_MPEG/L3", CodecType.MP3), A_VORBIS("A_VORBIS", CodecType.VORBIS), A_OPUS("A_OPUS", CodecType.OPUS), A_MS_ACM("A_MS/ACM", CodecType.UNKNOWN_AUDIO), // could have FMT for riff, FMT will decide the codecs. // S_TEXT_UTF8("S_TEXT/UTF8"), // subtitle /* D_WEBVTT_SUBTITLES("D_WEBVTT/SUBTITLES"), // webVtt D_WEBVTT_CAPTIONS("D_WEBVTT/CAPTIONS"), D_WEBVTT_DESCRIPTIONS("D_WEBVTT/DESCRIPTIONS"), D_WEBVTT_METADATA("D_WEBVTT/METADATA"),*/ ; private final String name; private final CodecType codecType; private MkvCodecType(String name, CodecType codecType) { this.name = name; this.codecType = codecType; } public CodecType getCodecType() { return codecType; } @Override public String toString() { return name; } /** * get mkvCodecType from CodecType * @param codecType * @return * @throws Exception */ public static MkvCodecType getCodecType(CodecType codecType) throws Exception { for(MkvCodecType type : values()) { if(type.getCodecType() == codecType) { return type; } } throw new RuntimeException("mkvCodecType is not decided.:" + codecType); } /** * get MkvCodecType from CodecID string. * @param data * @return * @throws Exception */ public static MkvCodecType getMkvCodecType(String data) throws Exception { if(data.startsWith("V_MPEG")) { if(data.contains("AVC")) { return V_MPEG4_ISO_AVC; } if(data.contains("HEVC")) { return V_MPEG_ISO_HEVC; } } else if(data.startsWith("V_VP8")) { return V_VP8; } else if(data.startsWith("V_VP9")) { return V_VP9; } else if(data.startsWith("A_AAC")) { return A_AAC; } else if(data.startsWith("A_MPEG")) { if(data.contains("L3")) { return A_MPEG_L3; } } else if(data.startsWith("A_VORBIS")) { return A_VORBIS; } else if(data.startsWith("V_MJPEG")) { return V_MJPEG; } else if(data.startsWith("A_MS")) { if(data.contains("ACM")) { return A_MS_ACM; } } /* else if(data.startsWith("V_MS")) { return V_MS; }*/ else if(data.startsWith("V_THEORA")) { return V_THEORA; } /* else if(data.startsWith("S_TEXT")) { return S_TEXT; }*/ throw new Exception("unexpected codec type string. I need a sample.:" + data); } }