aboutsummaryrefslogtreecommitdiffstats
path: root/src/jogl/classes/com/jogamp/opengl/util/av/CodecID.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/jogl/classes/com/jogamp/opengl/util/av/CodecID.java')
-rw-r--r--src/jogl/classes/com/jogamp/opengl/util/av/CodecID.java667
1 files changed, 667 insertions, 0 deletions
diff --git a/src/jogl/classes/com/jogamp/opengl/util/av/CodecID.java b/src/jogl/classes/com/jogamp/opengl/util/av/CodecID.java
new file mode 100644
index 000000000..b0c659649
--- /dev/null
+++ b/src/jogl/classes/com/jogamp/opengl/util/av/CodecID.java
@@ -0,0 +1,667 @@
+/**
+ * Copyright 2024 JogAmp Community. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification, are
+ * permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this list of
+ * conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice, this list
+ * of conditions and the following disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * The views and conclusions contained in the software and documentation are those of the
+ * authors and should not be interpreted as representing official policies, either expressed
+ * or implied, of JogAmp Community.
+ */
+package com.jogamp.opengl.util.av;
+
+/**
+ * FFmpeg/libAV analog {@code AVCodecID}.
+ * <p>
+ * Use {@link CodecID#fromFFmpeg(int)} to convert from FFmpeg's {@code AVCodecID}
+ * and {@link CodecID#toFFmpeg(CodecID) vice versa.
+ * </p>
+ */
+public enum CodecID {
+ NONE,
+
+ //
+ // Video Codecs
+ //
+
+ MPEG1VIDEO,
+ MPEG2VIDEO, ///< preferred ID for MPEG-1/2 video decoding
+ H261,
+ H263,
+ RV10,
+ RV20,
+ MJPEG,
+ MJPEGB,
+ LJPEG,
+ SP5X,
+ JPEGLS,
+ MPEG4,
+ RAWVIDEO,
+ MSMPEG4V1,
+ MSMPEG4V2,
+ MSMPEG4V3,
+ WMV1,
+ WMV2,
+ H263P,
+ H263I,
+ FLV1,
+ SVQ1,
+ SVQ3,
+ DVVIDEO,
+ HUFFYUV,
+ CYUV,
+ H264,
+ INDEO3,
+ VP3,
+ THEORA,
+ ASV1,
+ ASV2,
+ FFV1,
+ ID_4XM,
+ VCR1,
+ CLJR,
+ MDEC,
+ ROQ,
+ INTERPLAY_VIDEO,
+ XAN_WC3,
+ XAN_WC4,
+ RPZA,
+ CINEPAK,
+ WS_VQA,
+ MSRLE,
+ MSVIDEO1,
+ IDCIN,
+ ID_8BPS,
+ SMC,
+ FLIC,
+ TRUEMOTION1,
+ VMDVIDEO,
+ MSZH,
+ ZLIB,
+ QTRLE,
+ TSCC,
+ ULTI,
+ QDRAW,
+ VIXL,
+ QPEG,
+ PNG,
+ PPM,
+ PBM,
+ PGM,
+ PGMYUV,
+ PAM,
+ FFVHUFF,
+ RV30,
+ RV40,
+ VC1,
+ WMV3,
+ LOCO,
+ WNV1,
+ AASC,
+ INDEO2,
+ FRAPS,
+ TRUEMOTION2,
+ BMP,
+ CSCD,
+ MMVIDEO,
+ ZMBV,
+ AVS,
+ SMACKVIDEO,
+ NUV,
+ KMVC,
+ FLASHSV,
+ CAVS,
+ JPEG2000,
+ VMNC,
+ VP5,
+ VP6,
+ VP6F,
+ TARGA,
+ DSICINVIDEO,
+ TIERTEXSEQVIDEO,
+ TIFF,
+ GIF,
+ DXA,
+ DNXHD,
+ THP,
+ SGI,
+ C93,
+ BETHSOFTVID,
+ PTX,
+ TXD,
+ VP6A,
+ AMV,
+ VB,
+ PCX,
+ SUNRAST,
+ INDEO4,
+ INDEO5,
+ MIMIC,
+ RL2,
+ ESCAPE124,
+ DIRAC,
+ BFI,
+ CMV,
+ MOTIONPIXELS,
+ TGV,
+ TGQ,
+ TQI,
+ AURA,
+ AURA2,
+ V210X,
+ TMV,
+ V210,
+ DPX,
+ MAD,
+ FRWU,
+ FLASHSV2,
+ CDGRAPHICS,
+ R210,
+ ANM,
+ BINKVIDEO,
+ /** Also IFF_BYTERUN1 */
+ IFF_ILBM,
+ KGV1,
+ YOP,
+ VP8,
+ PICTOR,
+ ANSI,
+ A64_MULTI,
+ A64_MULTI5,
+ R10K,
+ MXPEG,
+ LAGARITH,
+ PRORES,
+ JV,
+ DFA,
+ WMV3IMAGE,
+ VC1IMAGE,
+ UTVIDEO,
+ BMV_VIDEO,
+ VBLE,
+ DXTORY,
+ V410,
+ XWD,
+ CDXL,
+ XBM,
+ ZEROCODEC,
+ MSS1,
+ MSA1,
+ TSCC2,
+ MTS2,
+ CLLC,
+ MSS2,
+ VP9,
+ AIC,
+ ESCAPE130,
+ G2M,
+ WEBP,
+ HNM4_VIDEO,
+ /** Also H265 */
+ HEVC,
+ FIC,
+ ALIAS_PIX,
+ BRENDER_PIX,
+ PAF_VIDEO,
+ EXR,
+ VP7,
+ SANM,
+ SGIRLE,
+ MVC1,
+ MVC2,
+ HQX,
+ TDSC,
+ HQ_HQA,
+ HAP,
+ DDS,
+ DXV,
+ SCREENPRESSO,
+ RSCC,
+ AVS2,
+ PGX,
+ AVS3,
+ MSP2,
+ /** Also H266 {@value} */
+ VVC,
+
+ Y41P, // = 0x8000,
+ AVRP,
+ ID_012V,
+ AVUI,
+ AYUV,
+ TARGA_Y216,
+ V308,
+ V408,
+ YUV4,
+ AVRN,
+ CPIA,
+ XFACE,
+ SNOW,
+ SMVJPEG,
+ APNG,
+ DAALA,
+ CFHD,
+ TRUEMOTION2RT,
+ M101,
+ MAGICYUV,
+ SHEERVIDEO,
+ YLC,
+ PSD,
+ PIXLET,
+ SPEEDHQ,
+ FMVC,
+ SCPR,
+ CLEARVIDEO,
+ XPM,
+ AV1,
+ BITPACKED,
+ MSCC,
+ SRGC,
+ SVG,
+ GDV,
+ FITS,
+ IMM4,
+ PROSUMER,
+ MWSC,
+ WCMV,
+ RASC,
+ HYMT,
+ ARBC,
+ AGM,
+ LSCR,
+ VP4,
+ IMM5,
+ MVDV,
+ MVHA,
+ CDTOONS,
+ MV30,
+ NOTCHLC,
+ PFM,
+ MOBICLIP,
+ PHOTOCD,
+ IPU,
+ ARGO,
+ CRI,
+ SIMBIOSIS_IMX,
+ SGA_VIDEO,
+ GEM,
+ VBN,
+ JPEGXL,
+ QOI,
+ PHM,
+ RADIANCE_HDR,
+ WBMP,
+ MEDIA100,
+ VQC,
+
+ //
+ // Various PCM "codecs"
+ //
+
+ PCM_S16LE, // = 0x10000,
+ PCM_S16BE,
+ PCM_U16LE,
+ PCM_U16BE,
+ PCM_S8,
+ PCM_U8,
+ PCM_MULAW,
+ PCM_ALAW,
+ PCM_S32LE,
+ PCM_S32BE,
+ PCM_U32LE,
+ PCM_U32BE,
+ PCM_S24LE,
+ PCM_S24BE,
+ PCM_U24LE,
+ PCM_U24BE,
+ PCM_S24DAUD,
+ PCM_ZORK,
+ PCM_S16LE_PLANAR,
+ PCM_DVD,
+ PCM_F32BE,
+ PCM_F32LE,
+ PCM_F64BE,
+ PCM_F64LE,
+ PCM_BLURAY,
+ PCM_LXF,
+ S302M,
+ PCM_S8_PLANAR,
+ PCM_S24LE_PLANAR,
+ PCM_S32LE_PLANAR,
+ PCM_S16BE_PLANAR,
+ PCM_S64LE,
+ PCM_S64BE,
+ PCM_F16LE,
+ PCM_F24LE,
+ PCM_VIDC,
+ PCM_SGA,
+
+ //
+ // Various ADPCM codecs
+ //
+
+ ADPCM_IMA_QT, // = 0x11000,
+ ADPCM_IMA_WAV,
+ ADPCM_IMA_DK3,
+ ADPCM_IMA_DK4,
+ ADPCM_IMA_WS,
+ ADPCM_IMA_SMJPEG,
+ ADPCM_MS,
+ ADPCM_4XM,
+ ADPCM_XA,
+ ADPCM_ADX,
+ ADPCM_EA,
+ ADPCM_G726,
+ ADPCM_CT,
+ ADPCM_SWF,
+ ADPCM_YAMAHA,
+ ADPCM_SBPRO_4,
+ ADPCM_SBPRO_3,
+ ADPCM_SBPRO_2,
+ ADPCM_THP,
+ ADPCM_IMA_AMV,
+ ADPCM_EA_R1,
+ ADPCM_EA_R3,
+ ADPCM_EA_R2,
+ ADPCM_IMA_EA_SEAD,
+ ADPCM_IMA_EA_EACS,
+ ADPCM_EA_XAS,
+ ADPCM_EA_MAXIS_XA,
+ ADPCM_IMA_ISS,
+ ADPCM_G722,
+ ADPCM_IMA_APC,
+ ADPCM_VIMA,
+ ADPCM_AFC,
+ ADPCM_IMA_OKI,
+ ADPCM_DTK,
+ ADPCM_IMA_RAD,
+ ADPCM_G726LE,
+ ADPCM_THP_LE,
+ ADPCM_PSX,
+ ADPCM_AICA,
+ ADPCM_IMA_DAT4,
+ ADPCM_MTAF,
+ ADPCM_AGM,
+ ADPCM_ARGO,
+ ADPCM_IMA_SSI,
+ ADPCM_ZORK,
+ ADPCM_IMA_APM,
+ ADPCM_IMA_ALP,
+ ADPCM_IMA_MTF,
+ ADPCM_IMA_CUNNING,
+ ADPCM_IMA_MOFLEX,
+ ADPCM_IMA_ACORN,
+ ADPCM_XMD,
+
+ /* AMR */
+ AMR_NB, // = 0x12000,
+ AMR_WB,
+
+ /* RealAudio codecs*/
+ RA_144, // = 0x13000,
+ RA_288,
+
+ //
+ // Various DPCM codecs
+ //
+
+ ROQ_DPCM, // = 0x14000,
+ INTERPLAY_DPCM,
+ XAN_DPCM,
+ SOL_DPCM,
+ SDX2_DPCM,
+ GREMLIN_DPCM,
+ DERF_DPCM,
+ WADY_DPCM,
+ CBD2_DPCM,
+
+ //
+ // Audio Codecs
+ //
+
+ MP2, // = 0x15000,
+ MP3, ///< preferred ID for decoding MPEG audio layer 1, 2 or 3
+ AAC,
+ AC3,
+ DTS,
+ VORBIS,
+ DVAUDIO,
+ WMAV1,
+ WMAV2,
+ MACE3,
+ MACE6,
+ VMDAUDIO,
+ FLAC,
+ MP3ADU,
+ MP3ON4,
+ SHORTEN,
+ ALAC,
+ WESTWOOD_SND1,
+ GSM, ///< as in Berlin toast format
+ QDM2,
+ COOK,
+ TRUESPEECH,
+ TTA,
+ SMACKAUDIO,
+ QCELP,
+ WAVPACK,
+ DSICINAUDIO,
+ IMC,
+ MUSEPACK7,
+ MLP,
+ GSM_MS, /* as found in WAV */
+ ATRAC3,
+ APE,
+ NELLYMOSER,
+ MUSEPACK8,
+ SPEEX,
+ WMAVOICE,
+ WMAPRO,
+ WMALOSSLESS,
+ ATRAC3P,
+ EAC3,
+ SIPR,
+ MP1,
+ TWINVQ,
+ TRUEHD,
+ MP4ALS,
+ ATRAC1,
+ BINKAUDIO_RDFT,
+ BINKAUDIO_DCT,
+ AAC_LATM,
+ QDMC,
+ CELT,
+ G723_1,
+ G729,
+ ID_8SVX_EXP,
+ ID_8SVX_FIB,
+ BMV_AUDIO,
+ RALF,
+ IAC,
+ ILBC,
+ OPUS,
+ COMFORT_NOISE,
+ TAK,
+ METASOUND,
+ PAF_AUDIO,
+ ON2AVC,
+ DSS_SP,
+ CODEC2,
+ FFWAVESYNTH,
+ SONIC,
+ SONIC_LS,
+ EVRC,
+ SMV,
+ DSD_LSBF,
+ DSD_MSBF,
+ DSD_LSBF_PLANAR,
+ DSD_MSBF_PLANAR,
+ ID_4GV,
+ INTERPLAY_ACM,
+ XMA1,
+ XMA2,
+ DST,
+ ATRAC3AL,
+ ATRAC3PAL,
+ DOLBY_E,
+ APTX,
+ APTX_HD,
+ SBC,
+ ATRAC9,
+ HCOM,
+ ACELP_KELVIN,
+ MPEGH_3D_AUDIO,
+ SIREN,
+ HCA,
+ FASTAUDIO,
+ MSNSIREN,
+ DFPWM,
+ BONK,
+ MISC4,
+ APAC,
+ FTR,
+ WAVARC,
+ RKA,
+
+ //
+ // Subtitle Codecs
+ //
+ DVD_SUB, // = 0x17000,
+ DVB_SUB,
+ TEXT, ///< raw UTF-8 text
+ XSUB,
+ SSA,
+ MOV_TEXT,
+ HDMV_PGS,
+ DVB_TELETEXT,
+ SRT,
+ MICRODVD,
+ EIA_608,
+ JACOSUB,
+ SAMI,
+ REALTEXT,
+ STL,
+ SUBVIEWER1,
+ SUBVIEWER,
+ SUBRIP,
+ WEBVTT,
+ MPL2,
+ VPLAYER,
+ PJS,
+ ASS,
+ HDMV_TEXT,
+ TTML,
+ ARIB_CAPTION,
+
+ COUNT ///< number of codec IDs in this list
+ ;
+
+ /**
+ * Converts given FFmpeg {@code AVCodecID} to {@link CodecID} or {@code CodecID#NONE} if not matched.
+ */
+ public static CodecID fromFFmpeg(final int ffmpegID) {
+ final int ordinal;
+ if( ffmpegID >= 0x17000 ) {
+ ordinal = ffmpegID - 0x17000 + DVD_SUB.ordinal();
+ } else if( ffmpegID >= 0x15000 ) {
+ ordinal = ffmpegID - 0x15000 + MP2.ordinal();
+ } else if( ffmpegID >= 0x14000 ) {
+ ordinal = ffmpegID - 0x14000 + ROQ_DPCM.ordinal();
+ } else if( ffmpegID >= 0x13000 ) {
+ ordinal = ffmpegID - 0x13000 + RA_144.ordinal();
+ } else if( ffmpegID >= 0x12000 ) {
+ ordinal = ffmpegID - 0x12000 + AMR_NB.ordinal();
+ } else if( ffmpegID >= 0x11000 ) {
+ ordinal = ffmpegID - 0x11000 + ADPCM_IMA_QT.ordinal();
+ } else if( ffmpegID >= 0x10000 ) {
+ ordinal = ffmpegID - 0x10000 + PCM_S16LE.ordinal();
+ } else if( ffmpegID >= 0x8000 ) {
+ ordinal = ffmpegID - 0x8000 + Y41P.ordinal();
+ } else {
+ ordinal = ffmpegID;
+ }
+
+ /**
+ Y41P, // = 0x8000,
+ PCM_S16LE = 0x10000,
+ ADPCM_IMA_QT = 0x11000,
+ AMR_NB = 0x12000,
+ RA_144 = 0x13000,
+ ROQ_DPCM = 0x14000,
+ MP2 = 0x15000,
+ DVD_SUBTITLE = 0x17000,
+ */
+
+ final CodecID[] all = CodecID.values();
+ if( 0 <= ordinal && ordinal < all.length ) {
+ return all[ordinal];
+ }
+ return CodecID.NONE;
+ }
+
+ /** Converts given {@link CodecID} value into FFmpeg {@code AVCodecID} */
+ public static int toFFmpeg(final CodecID id) {
+ final int ordinal = id.ordinal();
+ final int ffmpegID;
+ if( ordinal >= DVD_SUB.ordinal() ) {
+ ffmpegID = ordinal - DVD_SUB.ordinal() + 0x17000;
+ } else if( ordinal >= MP2.ordinal() ) {
+ ffmpegID = ordinal - MP2.ordinal() + 0x15000;
+ } else if( ordinal >= ROQ_DPCM.ordinal() ) {
+ ffmpegID = ordinal - ROQ_DPCM.ordinal() + 0x14000;
+ } else if( ordinal >= RA_144.ordinal() ) {
+ ffmpegID = ordinal - RA_144.ordinal() + 0x13000;
+ } else if( ordinal >= AMR_NB.ordinal() ) {
+ ffmpegID = ordinal - AMR_NB.ordinal() + 0x12000;
+ } else if( ordinal >= ADPCM_IMA_QT.ordinal() ) {
+ ffmpegID = ordinal - ADPCM_IMA_QT.ordinal() + 0x11000;
+ } else if( ordinal >= PCM_S16LE.ordinal() ) {
+ ffmpegID = ordinal - PCM_S16LE.ordinal() + 0x10000;
+ } else if( ordinal >= Y41P.ordinal() ) {
+ ffmpegID = ordinal - Y41P.ordinal() + 0x8000;
+ } else {
+ ffmpegID = ordinal;
+ }
+ return ffmpegID;
+ }
+
+ /** Returns {@code true} if given {@link CodecID} refers to a video codec */
+ public static boolean isVideoCodec(final CodecID id) {
+ return MPEG1VIDEO.ordinal() <= id.ordinal() && id.ordinal() < PCM_S16LE.ordinal();
+ }
+ /** Returns {@code true} if given {@link CodecID} refers to an audio PCM codec */
+ public static boolean isAudioPCMCodec(final CodecID id) {
+ return PCM_S16LE.ordinal() <= id.ordinal() && id.ordinal() < MP2.ordinal();
+ }
+ /**
+ * Returns {@code true} if given {@link CodecID} refers to an audio codec.
+ * @param id the {@link CodecID}
+ * @param includePCM pass {@code true} to include {@link #isAudioPCMCodec(CodecID)}
+ */
+ public static boolean isAudioCodec(final CodecID id, final boolean includePCM) {
+ return includePCM && PCM_S16LE.ordinal() <= id.ordinal() && id.ordinal() < DVD_SUB.ordinal() ||
+ MP2.ordinal() <= id.ordinal() && id.ordinal() < DVD_SUB.ordinal();
+ }
+ /** Returns {@code true} if given {@link CodecID} refers to a subtitle codec */
+ public static boolean isSubtitleCodec(final CodecID id) {
+ return DVD_SUB.ordinal() <= id.ordinal() && id.ordinal() < COUNT.ordinal();
+ }
+}
+