pbutils: add some more flags and file extensions to internal media type descriptions...
authorTim-Philipp Müller <tim@centricular.net>
Fri, 14 Dec 2012 20:27:53 +0000 (20:27 +0000)
committerTim-Philipp Müller <tim@centricular.net>
Sat, 15 Dec 2012 14:08:26 +0000 (14:08 +0000)
For later use.

https://bugzilla.gnome.org/show_bug.cgi?id=636753
https://bugzilla.gnome.org/show_bug.cgi?id=549111

gst-libs/gst/pbutils/descriptions.c

index bc2b2f3..009c6e2 100644 (file)
 
 typedef enum
 {
-  FLAG_CONTAINER = (1 << 0),    /* format is a container format (muxed)             */
-  FLAG_SYSTEMSTREAM = (1 << 1)  /* match record only if caps have systemstream=true */
+  FLAG_SYSTEMSTREAM = (1 << 0), /* match record only if caps have systemstream=true   */
+  FLAG_CONTAINER = (1 << 1),    /* format is a container format (muxed)               */
+  FLAG_AUDIO = (1 << 2),        /* format is an audio format, or audio container/tag  */
+  FLAG_VIDEO = (1 << 3),        /* format is a video format, or video container/tag   */
+  FLAG_IMAGE = (1 << 4),        /* format is an image format, or image container/tag  */
+  FLAG_SUB = (1 << 5),          /* format is a subtitle format, or subtitle container */
+  FLAG_TAG = (1 << 6),          /* format is a tag/container                          */
+  FLAG_GENERIC = (1 << 7)       /* format is a generic container (e.g. multipart)     */
 } FormatFlags;
 
 typedef struct
 {
   const gchar *type;
   const gchar *desc;
-  FormatFlags flags;
+  FormatFlags flags:24;
+  gchar ext[5];                 /* file extension */
 } FormatInfo;
 
+#define AV_CONTAINER    (FLAG_CONTAINER | FLAG_AUDIO | FLAG_VIDEO)
+#define AVS_CONTAINER   (AV_CONTAINER | FLAG_SUB)
+#define AVI_CONTAINER   (AV_CONTAINER | FLAG_IMAGE)
+#define AVIS_CONTAINER  (AV_CONTAINER | FLAG_IMAGE | FLAG_SUB)
+#define AUDIO_CONTAINER (FLAG_CONTAINER | FLAG_AUDIO)
+#define VIDEO_CONTAINER (FLAG_CONTAINER | FLAG_VIDEO)
+#define AUDIO_TAG       (AUDIO_CONTAINER | FLAG_TAG)
+
 static const FormatInfo formats[] = {
   /* container/tag formats with static descriptions */
-  {"audio/ogg", "Ogg", FLAG_CONTAINER},
-  {"audio/webm", "WebM", FLAG_CONTAINER},
-  {"audio/x-matroska", "Matroska", FLAG_CONTAINER},
-  {"application/gxf", "General Exchange Format (GXF)", FLAG_CONTAINER},
-  {"application/ogg", "Ogg", FLAG_CONTAINER},
-  {"application/kate", "Ogg", FLAG_CONTAINER},
-  {"application/mxf", "Material eXchange Format (MXF)", FLAG_CONTAINER},
-  {"application/vnd.rn-realmedia", "Realmedia", FLAG_CONTAINER},
-  {"application/x-id3", N_("ID3 tag"), FLAG_CONTAINER},
-  {"application/x-ape", N_("APE tag"), FLAG_CONTAINER},
-  {"application/x-apetag", N_("APE tag"), FLAG_CONTAINER},
-  {"application/x-icy", N_("ICY internet radio"), FLAG_CONTAINER},
-  {"application/x-3gp", "3GP", FLAG_CONTAINER},
-  {"application/x-pn-realaudio", "RealAudio", FLAG_CONTAINER},
-  {"application/x-yuv4mpeg", "Y4M", FLAG_CONTAINER},
-  {"multipart/x-mixed-replace", "Multipart", FLAG_CONTAINER},
-  {"video/ogg", "Ogg", FLAG_CONTAINER},
-  {"video/x-fli", "FLI/FLC/FLX Animation", FLAG_CONTAINER},
-  {"video/x-flv", "Flash", FLAG_CONTAINER},
-  {"video/x-matroska", "Matroska", FLAG_CONTAINER},
-  {"video/x-matroska-3d", "Matroska", FLAG_CONTAINER},
-  {"video/webm", "WebM", FLAG_CONTAINER},
-  {"video/x-ms-asf", "Advanced Streaming Format (ASF)", FLAG_CONTAINER},
-  {"video/x-msvideo", "Audio Video Interleave (AVI)", FLAG_CONTAINER},
-  {"video/x-quicktime", "Quicktime", FLAG_CONTAINER},
-  {"video/quicktime", "Quicktime", FLAG_CONTAINER},
-  {"video/mj2", "Motion JPEG 2000", FLAG_CONTAINER},
+  /* FIXME: does anyone use oga in practice? */
+  {"audio/ogg", "Ogg", AUDIO_CONTAINER, "ogg"},
+  {"audio/webm", "WebM", AUDIO_CONTAINER, "webm"},
+  {"audio/x-matroska", "Matroska", AUDIO_CONTAINER, "mka"},
+  {"application/gxf", "General Exchange Format (GXF)", AVI_CONTAINER, "gxf"},
+  {"application/ogg", "Ogg", AVIS_CONTAINER, "ogg"},
+  {"application/kate", "Ogg", FLAG_CONTAINER | FLAG_SUB, "ogg"},
+  {"application/mxf", "Material eXchange Format (MXF)", AVIS_CONTAINER, "mxf"},
+  {"application/vnd.rn-realmedia", "Realmedia", AV_CONTAINER, "rm"},
+  {"application/x-id3", N_("ID3 tag"), AUDIO_TAG, ""},
+  {"application/x-ape", N_("APE tag"), AUDIO_TAG, ""},
+  {"application/x-apetag", N_("APE tag"), AUDIO_TAG, ""},
+  {"application/x-icy", N_("ICY internet radio"), AUDIO_TAG, ""},
+  {"application/x-3gp", "3GP", AV_CONTAINER, "3gp"},
+  {"application/x-pn-realaudio", "RealAudio", AUDIO_CONTAINER, "ra"},
+  {"application/x-yuv4mpeg", "Y4M", VIDEO_CONTAINER, "y4m"},
+  {"multipart/x-mixed-replace", "Multipart", FLAG_CONTAINER | FLAG_GENERIC, ""},
+  {"video/ogg", "Ogg", AVIS_CONTAINER, "ogv"},
+  {"video/x-fli", "FLI/FLC/FLX Animation", VIDEO_CONTAINER, "fli"},
+  {"video/x-flv", "Flash", AV_CONTAINER, "flv"},
+  {"video/x-matroska", "Matroska", AVIS_CONTAINER, "mkv"},
+  /* FIXME: does anyone use .mk3d in practice, rather than .mkv? */
+  {"video/x-matroska-3d", "Matroska", AVIS_CONTAINER, "mk3d"},
+  {"video/webm", "WebM", AVS_CONTAINER, "webm"},
+  {"video/x-ms-asf", "Advanced Streaming Format (ASF)", AVIS_CONTAINER, "asf"},
+  {"video/x-msvideo", "Audio Video Interleave (AVI)", AVIS_CONTAINER, "avi"},
+  {"video/x-quicktime", "Quicktime", AVIS_CONTAINER, "mov"},
+  {"video/quicktime", "Quicktime", AVIS_CONTAINER, "mov"},
+  {"video/mj2", "Motion JPEG 2000", AVIS_CONTAINER, "mj2"},
 
   /* audio formats with static descriptions */
-  {"audio/x-ac3", "AC-3 (ATSC A/52)", 0},
-  {"audio/ac3", "AC-3 (ATSC A/52)", 0},
-  {"audio/x-private-ac3", "DVD AC-3 (ATSC A/52)", 0},
-  {"audio/x-private1-ac3", "DVD AC-3 (ATSC A/52)", 0},
-  {"audio/x-alaw", "A-Law", 0},
-  {"audio/amr", "Adaptive Multi Rate (AMR)", 0},
-  {"audio/AMR", "Adaptive Multi Rate (AMR)", 0},
-  {"audio/AMR-WB", "Adaptive Multi Rate WideBand (AMR-WB)", 0},
-  {"audio/iLBC-sh", "Internet Low Bitrate Codec (iLBC)", 0},
-  {"audio/ms-gsm", "MS GSM", 0},
-  {"audio/qcelp", "QCELP", 0},
-  {"audio/aiff", "Audio Interchange File Format (AIFF)", 0},
-  {"audio/x-aiff", "Audio Interchange File Format (AIFF)", 0},
-  {"audio/x-alac", N_("Apple Lossless Audio (ALAC)"), 0},
-  {"audio/x-amr-nb-sh", "Adaptive Multi Rate NarrowBand (AMR-NB)", 0},
-  {"audio/x-amr-wb-sh", "Adaptive Multi Rate WideBand (AMR-WB)", 0},
-  {"audio/x-au", "Sun .au", 0},
-  {"audio/x-celt", "Constrained Energy Lapped Transform (CELT)", 0},
-  {"audio/x-cinepak", "Cinepak Audio", 0},
-  {"audio/x-dpcm", "DPCM", 0},
-  {"audio/x-dts", "DTS", 0},
-  {"audio/x-private1-dts", "DTS", 0},
-  {"audio/x-dv", "DV Audio", 0},
-  {"audio/x-eac3", "E-AC-3 (ATSC A/52B)", 0},
-  {"audio/x-flac", N_("Free Lossless Audio Codec (FLAC)"), 0},
-  {"audio/x-gsm", "GSM", 0},
-  {"audio/x-iec958", "S/PDIF IEC958", 0},       /* TODO: check description */
-  {"audio/x-iLBC", "Internet Low Bitrate Codec (iLBC)", 0},
-  {"audio/x-ircam", "Berkeley/IRCAM/CARL", 0},
-  {"audio/x-lpcm", "LPCM", 0},
-  {"audio/x-private1-lpcm", "DVD LPCM", 0},
-  {"audio/x-m4a", "MPEG-4 AAC", FLAG_CONTAINER},
-  {"audio/x-mod", "Module Music Format (MOD)", 0},
-  {"audio/x-mulaw", "Mu-Law", 0},
-  {"audio/x-musepack", "Musepack (MPC)", 0},
-  {"audio/x-nellymoser", "Nellymoser Asao", 0},
-  {"audio/x-nist", "Sphere NIST", 0},
-  {"audio/x-nsf", "Nintendo NSF", 0},
-  {"audio/x-opus", "Opus", 0},
-  {"audio/x-paris", "Ensoniq PARIS", 0},
-  {"audio/x-qdm", "QDesign Music (QDM)", 0},
-  {"audio/x-qdm2", "QDesign Music (QDM) 2", 0},
-  {"audio/x-ralf-mpeg4-generic", "Real Audio Lossless (RALF)", 0},
-  {"audio/x-sds", "SDS", 0},
-  {"audio/x-shorten", "Shorten Lossless", 0},
-  {"audio/x-sid", "Sid", 0},
-  {"audio/x-sipro", "Sipro/ACELP.NET Voice", 0},
-  {"audio/x-siren", "Siren", 0},
-  {"audio/x-spc", "SNES-SPC700 Sound File Data", 0},
-  {"audio/x-speex", "Speex", 0},
-  {"audio/x-svx", "Amiga IFF / SVX8 / SV16", 0},
-  {"audio/x-tta", N_("Lossless True Audio (TTA)"), 0},
-  {"audio/x-ttafile", N_("Lossless True Audio (TTA)"), 0},
-  {"audio/x-vnd.sony.atrac3", "Sony ATRAC3", 0},
-  {"audio/x-vorbis", "Vorbis", 0},
-  {"audio/x-voc", "SoundBlaster VOC", 0},
-  {"audio/x-w64", "Sonic Foundry Wave64", 0},
-  {"audio/x-wav", "WAV", 0},
-  {"audio/x-wavpack", "Wavpack", 0},
-  {"audio/x-wavpack-correction", "Wavpack", 0},
-  {"audio/x-wms", N_("Windows Media Speech"), 0},
-  {"audio/x-voxware", "Voxware", 0},
+  {"audio/x-ac3", "AC-3 (ATSC A/52)", FLAG_AUDIO, "ac3"},
+  {"audio/ac3", "AC-3 (ATSC A/52)", FLAG_AUDIO, "ac3"},
+  {"audio/x-private-ac3", "DVD AC-3 (ATSC A/52)", FLAG_AUDIO, "ac3"},
+  {"audio/x-private1-ac3", "DVD AC-3 (ATSC A/52)", FLAG_AUDIO, "ac3"},
+  {"audio/x-alaw", "A-Law", FLAG_AUDIO, ""},
+  {"audio/amr", "Adaptive Multi Rate (AMR)", FLAG_AUDIO, "amr"},
+  {"audio/AMR", "Adaptive Multi Rate (AMR)", FLAG_AUDIO, "amr"},
+  {"audio/AMR-WB", "Adaptive Multi Rate WideBand (AMR-WB)", FLAG_AUDIO, "amr"},
+  {"audio/iLBC-sh", "Internet Low Bitrate Codec (iLBC)", AUDIO_CONTAINER,
+      "ilbc"},
+  {"audio/ms-gsm", "MS GSM", FLAG_AUDIO, "gsm"},
+  {"audio/qcelp", "QCELP", FLAG_AUDIO, ""},
+  {"audio/aiff", "Audio Interchange File Format (AIFF)", AUDIO_CONTAINER,
+      "aiff"},
+  {"audio/x-aiff", "Audio Interchange File Format (AIFF)", AUDIO_CONTAINER,
+      "aiff"},
+  {"audio/x-alac", N_("Apple Lossless Audio (ALAC)"), FLAG_AUDIO, ""},
+  {"audio/x-amr-nb-sh", "Adaptive Multi Rate NarrowBand (AMR-NB)",
+      AUDIO_CONTAINER, "amr"},
+  {"audio/x-amr-wb-sh", "Adaptive Multi Rate WideBand (AMR-WB)",
+      AUDIO_CONTAINER, "amr"},
+  {"audio/x-au", "Sun .au", AUDIO_CONTAINER, "au"},
+  {"audio/x-celt", "Constrained Energy Lapped Transform (CELT)", FLAG_AUDIO,
+      ""},
+  {"audio/x-cinepak", "Cinepak Audio", FLAG_AUDIO, ""},
+  {"audio/x-dpcm", "DPCM", FLAG_AUDIO, ""},
+  {"audio/x-dts", "DTS", FLAG_AUDIO, "dts"},
+  {"audio/x-private1-dts", "DTS", FLAG_AUDIO, "dts"},
+  {"audio/x-dv", "DV Audio", FLAG_AUDIO, ""},
+  {"audio/x-eac3", "E-AC-3 (ATSC A/52B)", FLAG_AUDIO, "eac3"},
+  {"audio/x-flac", N_("Free Lossless Audio Codec (FLAC)"), FLAG_AUDIO, "flac"},
+  {"audio/x-gsm", "GSM", FLAG_AUDIO, "gsm"},
+  {"audio/x-iec958", "S/PDIF IEC958", 0, ""},   /* TODO: check description */
+  {"audio/x-iLBC", "Internet Low Bitrate Codec (iLBC)", FLAG_AUDIO, "ilbc"},
+  {"audio/x-ircam", "Berkeley/IRCAM/CARL", FLAG_AUDIO, ""},
+  {"audio/x-lpcm", "LPCM", FLAG_AUDIO, ""},
+  {"audio/x-private1-lpcm", "DVD LPCM", FLAG_AUDIO, ""},
+  {"audio/x-m4a", "MPEG-4 AAC", FLAG_CONTAINER, "m4a"},
+  {"audio/x-mod", "Module Music Format (MOD)", FLAG_AUDIO, "mod"},
+  {"audio/x-mulaw", "Mu-Law", FLAG_AUDIO, ""},
+  {"audio/x-musepack", "Musepack (MPC)", FLAG_AUDIO, "mpc"},
+  {"audio/x-nellymoser", "Nellymoser Asao", FLAG_AUDIO, ""},
+  {"audio/x-nist", "Sphere NIST", FLAG_AUDIO, ""},
+  {"audio/x-nsf", "Nintendo NSF", FLAG_AUDIO, ""},
+  {"audio/x-opus", "Opus", FLAG_AUDIO, ""},
+  {"audio/x-paris", "Ensoniq PARIS", FLAG_AUDIO, ""},
+  {"audio/x-qdm", "QDesign Music (QDM)", FLAG_AUDIO, ""},
+  {"audio/x-qdm2", "QDesign Music (QDM) 2", FLAG_AUDIO, ""},
+  {"audio/x-ralf-mpeg4-generic", "Real Audio Lossless (RALF)", FLAG_AUDIO, ""},
+  {"audio/x-sds", "SDS", FLAG_AUDIO, ""},
+  {"audio/x-shorten", "Shorten Lossless", FLAG_AUDIO, "shn"},
+  {"audio/x-sid", "Sid", FLAG_AUDIO, "sid"},
+  {"audio/x-sipro", "Sipro/ACELP.NET Voice", FLAG_AUDIO, ""},
+  {"audio/x-siren", "Siren", FLAG_AUDIO, ""},
+  {"audio/x-spc", "SNES-SPC700 Sound File Data", FLAG_AUDIO, "spc"},
+  {"audio/x-speex", "Speex", FLAG_AUDIO, ""},
+  {"audio/x-svx", "Amiga IFF / SVX8 / SV16", FLAG_AUDIO, ""},
+  {"audio/x-tta", N_("Lossless True Audio (TTA)"), FLAG_AUDIO, "tta"},
+  {"audio/x-ttafile", N_("Lossless True Audio (TTA)"), FLAG_AUDIO, "tta"},
+  {"audio/x-vnd.sony.atrac3", "Sony ATRAC3", FLAG_AUDIO, ""},
+  {"audio/x-vorbis", "Vorbis", FLAG_AUDIO, ""},
+  {"audio/x-voc", "SoundBlaster VOC", FLAG_AUDIO, ""},
+  {"audio/x-w64", "Sonic Foundry Wave64", AUDIO_CONTAINER, "w64"},
+  {"audio/x-wav", "WAV", AUDIO_CONTAINER, "wav"},
+  {"audio/x-wavpack", "Wavpack", FLAG_AUDIO, "wp"},
+  {"audio/x-wavpack-correction", "Wavpack", 0, "wpc"},
+  {"audio/x-wms", N_("Windows Media Speech"), FLAG_AUDIO, ""},
+  {"audio/x-voxware", "Voxware", FLAG_AUDIO, ""},
 
 
   /* video formats with static descriptions */
-  {"video/sp5x", "Sunplus JPEG 5.x", 0},
-  {"video/vivo", "Vivo", 0},
-  {"video/x-4xm", "4X Technologies Video", 0},
-  {"video/x-apple-video", "Apple video", 0},
-  {"video/x-aasc", "Autodesk Animator", 0},
-  {"video/x-camtasia", "TechSmith Camtasia", 0},
-  {"video/x-cdxa", "RIFF/CDXA (VCD)", 0},
-  {"video/x-cinepak", "Cinepak Video", 0},
-  {"video/x-cirrus-logic-accupak", "Cirrus Logipak AccuPak", 0},
-  {"video/x-compressed-yuv", N_("CYUV Lossless"), 0},
-  {"video/x-dirac", "Dirac", 0},
-  {"video/x-dnxhd", "Digital Nonlinear Extensible High Definition (DNxHD)", 0},
-  {"subpicture/x-dvd", "DVD subpicture", 0},
-  {"video/x-ffv", N_("FFMpeg v1"), 0},
-  {"video/x-flash-screen", "Flash Screen Video", 0},
-  {"video/x-flash-video", "Sorenson Spark Video", 0},
-  {"video/x-h261", "H.261", 0},
-  {"video/x-huffyuv", "Huffyuv", 0},
-  {"video/x-intel-h263", "Intel H.263", 0},
-  {"video/x-jpeg", "Motion JPEG", 0},
+  {"video/sp5x", "Sunplus JPEG 5.x", FLAG_VIDEO, ""},
+  {"video/vivo", "Vivo", FLAG_VIDEO, ""},
+  {"video/x-4xm", "4X Technologies Video", FLAG_VIDEO, ""},
+  {"video/x-apple-video", "Apple video", FLAG_VIDEO, ""},
+  {"video/x-aasc", "Autodesk Animator", FLAG_VIDEO, ""},
+  {"video/x-camtasia", "TechSmith Camtasia", FLAG_VIDEO, ""},
+  {"video/x-cdxa", "RIFF/CDXA (VCD)", AV_CONTAINER, ""},
+  {"video/x-cinepak", "Cinepak Video", FLAG_VIDEO, ""},
+  {"video/x-cirrus-logic-accupak", "Cirrus Logipak AccuPak", FLAG_VIDEO, ""},
+  {"video/x-compressed-yuv", N_("CYUV Lossless"), FLAG_VIDEO, ""},
+  {"video/x-dirac", "Dirac", FLAG_VIDEO, ""},
+  {"video/x-dnxhd", "Digital Nonlinear Extensible High Definition (DNxHD)",
+      FLAG_VIDEO, ""},
+  {"subpicture/x-dvd", "DVD subpicture", FLAG_VIDEO, ""},
+  {"video/x-ffv", N_("FFMpeg v1"), FLAG_VIDEO, ""},
+  {"video/x-flash-screen", "Flash Screen Video", FLAG_VIDEO, ""},
+  {"video/x-flash-video", "Sorenson Spark Video", FLAG_VIDEO, ""},
+  {"video/x-h261", "H.261", FLAG_VIDEO, ""},
+  {"video/x-huffyuv", "Huffyuv", FLAG_VIDEO, ""},
+  {"video/x-intel-h263", "Intel H.263", FLAG_VIDEO, ""},
+  {"video/x-jpeg", "Motion JPEG", FLAG_VIDEO, ""},
   /* { "video/x-jpeg-b", "", 0 }, does this actually exist? */
-  {"video/x-loco", "LOCO Lossless", 0},
-  {"video/x-mimic", "MIMIC", 0},
-  {"video/x-mjpeg", "Motion-JPEG", 0},
-  {"video/x-mjpeg-b", "Motion-JPEG format B", 0},
-  {"video/mpegts", "MPEG-2 Transport Stream", FLAG_CONTAINER},
-  {"video/x-mng", "Multiple Image Network Graphics (MNG)", 0},
-  {"video/x-mszh", N_("Lossless MSZH"), 0},
-  {"video/x-msvideocodec", "Microsoft Video 1", 0},
-  {"video/x-mve", "Interplay MVE", FLAG_CONTAINER},
-  {"video/x-nut", "NUT", FLAG_CONTAINER},
-  {"video/x-nuv", "MythTV NuppelVideo (NUV)", FLAG_CONTAINER},
-  {"video/x-prores", "Apple ProRes", 0},
-  {"video/x-qdrw", "Apple QuickDraw", 0},
-  {"video/x-smc", "Apple SMC", 0},
-  {"video/x-smoke", "Smoke", 0},
-  {"video/x-tarkin", "Tarkin", 0},
-  {"video/x-theora", "Theora", 0},
-  {"video/x-rle", N_("Run-length encoding"), 0},
-  {"video/x-ultimotion", "IBM UltiMotion", 0},
+  {"video/x-loco", "LOCO Lossless", FLAG_VIDEO, ""},
+  {"video/x-mimic", "MIMIC", FLAG_VIDEO, ""},
+  {"video/x-mjpeg", "Motion-JPEG", FLAG_VIDEO, ""},
+  {"video/x-mjpeg-b", "Motion-JPEG format B", FLAG_VIDEO, ""},
+  {"video/mpegts", "MPEG-2 Transport Stream", AVS_CONTAINER, "ts"},
+  {"video/x-mng", "Multiple Image Network Graphics (MNG)", FLAG_VIDEO, ""},
+  {"video/x-mszh", N_("Lossless MSZH"), FLAG_VIDEO, ""},
+  {"video/x-msvideocodec", "Microsoft Video 1", FLAG_VIDEO, ""},
+  {"video/x-mve", "Interplay MVE", AV_CONTAINER, "mve"},
+  {"video/x-nut", "NUT", AV_CONTAINER, "nut"},
+  {"video/x-nuv", "MythTV NuppelVideo (NUV)", AV_CONTAINER, "nuv"},
+  {"video/x-prores", "Apple ProRes", FLAG_VIDEO, ""},
+  {"video/x-qdrw", "Apple QuickDraw", FLAG_VIDEO, ""},
+  {"video/x-smc", "Apple SMC", FLAG_VIDEO, ""},
+  {"video/x-smoke", "Smoke", FLAG_VIDEO, ""},
+  {"video/x-tarkin", "Tarkin", FLAG_VIDEO, ""},
+  {"video/x-theora", "Theora", FLAG_VIDEO, ""},
+  {"video/x-rle", N_("Run-length encoding"), FLAG_VIDEO, ""},
+  {"video/x-ultimotion", "IBM UltiMotion", FLAG_VIDEO, ""},
   {"video/x-vcd", "VideoCD (VCD)", 0},
-  {"video/x-vmnc", "VMWare NC", 0},
-  {"video/x-vp3", "On2 VP3", 0},
-  {"video/x-vp5", "On2 VP5", 0},
-  {"video/x-vp6", "On2 VP6", 0},
-  {"video/x-vp6-flash", "On2 VP6/Flash", 0},
-  {"video/x-vp6-alpha", "On2 VP6 with alpha", 0},
-  {"video/x-vp7", "On2 VP7", 0},
-  {"video/x-vp8", "VP8", 0},
-  {"video/x-zlib", "Lossless zlib video", 0},
-  {"video/x-zmbv", "Zip Motion Block video", 0},
+  {"video/x-vmnc", "VMWare NC", FLAG_VIDEO, ""},
+  {"video/x-vp3", "On2 VP3", FLAG_VIDEO, ""},
+  {"video/x-vp5", "On2 VP5", FLAG_VIDEO, ""},
+  {"video/x-vp6", "On2 VP6", FLAG_VIDEO, ""},
+  {"video/x-vp6-flash", "On2 VP6/Flash", FLAG_VIDEO, ""},
+  {"video/x-vp6-alpha", "On2 VP6 with alpha", FLAG_VIDEO, ""},
+  {"video/x-vp7", "On2 VP7", FLAG_VIDEO, ""},
+  {"video/x-vp8", "VP8", FLAG_VIDEO, ""},
+  {"video/x-zlib", "Lossless zlib video", FLAG_VIDEO, ""},
+  {"video/x-zmbv", "Zip Motion Block video", FLAG_VIDEO, ""},
 
   /* image formats with static descriptions */
-  {"image/bmp", "BMP", 0},
-  {"image/x-bmp", "BMP", 0},
-  {"image/x-MS-bmp", "BMP", 0},
-  {"image/gif", "GIF", 0},
-  {"image/jpeg", "JPEG", 0},
-  {"image/jng", "JPEG Network Graphics (JNG)", 0},
-  {"image/png", "PNG", 0},
-  {"image/pbm", "Portable BitMap (PBM)", 0},
-  {"image/ppm", "Portable PixMap (PPM)", 0},
-  {"image/svg+xml", "Scalable Vector Graphics (SVG)", 0},
-  {"image/tiff", "TIFF", 0},
-  {"image/x-cmu-raster", "CMU Raster Format", 0},
-  {"image/x-degas", "DEGAS", 0},
-  {"image/x-icon", "ICO", 0},
-  {"image/x-j2c", "JPEG 2000", 0},
-  {"image/x-jpc", "JPEG 2000", 0},
-  {"image/jp2", "JPEG 2000", 0},
-  {"image/x-pcx", "PCX", 0},
-  {"image/x-xcf", "XFC", 0},
-  {"image/x-pixmap", "XPM", 0},
-  {"image/x-portable-anymap", "Portable AnyMap (PAM)", 0},
-  {"image/x-portable-graymap", "Portable GrayMap (PGM)", 0},
-  {"image/x-xpixmap", "XPM", 0},
-  {"image/x-quicktime", "QuickTime Image Format (QTIF)", 0},
-  {"image/x-sun-raster", "Sun Raster Format (RAS)", 0},
-  {"image/x-tga", "TGA", 0},
-  {"image/vnd.wap.wbmp", "Wireless Bitmap", 0},
+  {"image/bmp", "BMP", FLAG_IMAGE, "bmp"},
+  {"image/x-bmp", "BMP", FLAG_IMAGE, "bmp"},
+  {"image/x-MS-bmp", "BMP", FLAG_IMAGE, "bmp"},
+  {"image/gif", "GIF", FLAG_IMAGE, "gif"},
+  {"image/jpeg", "JPEG", FLAG_IMAGE | FLAG_VIDEO, "jpg"},
+  {"image/jng", "JPEG Network Graphics (JNG)", FLAG_IMAGE, ""},
+  {"image/png", "PNG", FLAG_VIDEO | FLAG_IMAGE, "png"},
+  {"image/pbm", "Portable BitMap (PBM)", FLAG_IMAGE, "pbm"},
+  {"image/ppm", "Portable PixMap (PPM)", FLAG_IMAGE, "ppm"},
+  {"image/svg+xml", "Scalable Vector Graphics (SVG)", FLAG_IMAGE, "svg"},
+  {"image/tiff", "TIFF", FLAG_IMAGE, "tiff"},
+  {"image/x-cmu-raster", "CMU Raster Format", FLAG_IMAGE, ""},
+  {"image/x-degas", "DEGAS", FLAG_IMAGE, ""},
+  {"image/x-icon", "ICO", FLAG_IMAGE, "ico"},
+  {"image/x-j2c", "JPEG 2000", FLAG_VIDEO | FLAG_IMAGE, ""},
+  {"image/x-jpc", "JPEG 2000", FLAG_VIDEO | FLAG_IMAGE, ""},
+  {"image/jp2", "JPEG 2000", FLAG_VIDEO | FLAG_IMAGE, ""},
+  {"image/x-pcx", "PCX", FLAG_IMAGE, ""},
+  {"image/x-xcf", "XFC", FLAG_IMAGE, ""},
+  {"image/x-pixmap", "XPM", FLAG_IMAGE, "xpm"},
+  {"image/x-portable-anymap", "Portable AnyMap (PNM)", FLAG_IMAGE, "pnm"},
+  {"image/x-portable-graymap", "Portable GrayMap (PGM)", FLAG_IMAGE, "pgm"},
+  {"image/x-xpixmap", "XPM", FLAG_IMAGE, "xpm"},
+  {"image/x-quicktime", "QuickTime Image Format (QTIF)",
+      FLAG_IMAGE | FLAG_CONTAINER, ".mov"},
+  {"image/x-sun-raster", "Sun Raster Format (RAS)", FLAG_IMAGE, ""},
+  {"image/x-tga", "TGA", FLAG_IMAGE, "tga"},
+  {"image/vnd.wap.wbmp", "Wireless Bitmap", FLAG_IMAGE, "wbmp"},
 
   /* subtitle formats with static descriptions */
-  {"application/x-ssa", "SubStation Alpha", 0},
-  {"application/x-ass", "Advanced SubStation Alpha", 0},
+  {"application/x-ssa", "SubStation Alpha", FLAG_SUB, ""},
+  {"application/x-ass", "Advanced SubStation Alpha", FLAG_SUB, ""},
   /* FIXME: add variant field to typefinder? */
-  {"application/x-subtitle", N_("Subtitle"), 0},
-  {"application/x-subtitle-mpl2", N_("MPL2 subtitle format"), 0},
-  {"application/x-subtitle-dks", N_("DKS subtitle format"), 0},
-  {"application/x-subtitle-qttext", N_("QTtext subtitle format"), 0},
-  {"application/x-subtitle-sami", N_("Sami subtitle format"), 0},
-  {"application/x-subtitle-tmplayer", N_("TMPlayer subtitle format"), 0},
-  {"application/x-kate", "Kate", 0},
-  {"subtitle/x-kate", N_("Kate subtitle format"), 0},
-  {"subpicture/x-dvb", "DVB subtitles", 0},
-  {"subpicture/x-pgs", "PGS subtitles", 0},
+  {"application/x-subtitle", N_("Subtitle"), FLAG_SUB, ""},
+  {"application/x-subtitle-mpl2", N_("MPL2 subtitle format"), FLAG_SUB, ""},
+  {"application/x-subtitle-dks", N_("DKS subtitle format"), FLAG_SUB, ""},
+  {"application/x-subtitle-qttext", N_("QTtext subtitle format"), FLAG_SUB, ""},
+  {"application/x-subtitle-sami", N_("Sami subtitle format"), FLAG_SUB, ""},
+  {"application/x-subtitle-tmplayer", N_("TMPlayer subtitle format"), FLAG_SUB,
+      ""},
+  {"application/x-kate", "Kate", 0, ""},
+  {"subtitle/x-kate", N_("Kate subtitle format"), FLAG_SUB, ""},
+  {"subpicture/x-dvb", "DVB subtitles", FLAG_SUB, ""},
+  {"subpicture/x-pgs", "PGS subtitles", FLAG_SUB, ""},
 
   /* non-audio/video/container formats */
-  {"hdv/aux-v", "HDV AUX-V", 0},
-  {"hdv/aux-a", "HDV AUX-A", 0},
+  {"hdv/aux-v", "HDV AUX-V", 0, ""},
+  {"hdv/aux-a", "HDV AUX-A", 0, ""},
 
   /* formats with dynamic descriptions */
-  {"audio/mpeg", NULL, 0},
-  {"audio/x-adpcm", NULL, 0},
-  {"audio/x-mace", NULL, 0},
-  {"audio/x-pn-realaudio", NULL, 0},
-  {"audio/x-raw", NULL, 0},
-  {"audio/x-wma", NULL, 0},
-  {"video/mpeg", NULL, FLAG_CONTAINER | FLAG_SYSTEMSTREAM},
-  {"video/mpeg", NULL, 0},
-  {"video/x-asus", NULL, 0},
-  {"video/x-ati-vcr", NULL, 0},
-  {"video/x-divx", NULL, 0},
+  {"audio/mpeg", NULL, FLAG_AUDIO, ""},
+  {"audio/x-adpcm", NULL, FLAG_AUDIO, ""},
+  {"audio/x-mace", NULL, FLAG_AUDIO, ""},
+  {"audio/x-pn-realaudio", NULL, FLAG_AUDIO, ""},
+  {"audio/x-raw", NULL, FLAG_AUDIO, ""},
+  {"audio/x-wma", NULL, FLAG_AUDIO, ""},
+  {"video/mpeg", NULL, AVS_CONTAINER | FLAG_SYSTEMSTREAM, "mpg"},
+  {"video/mpeg", NULL, FLAG_VIDEO, ""},
+  {"video/x-asus", NULL, FLAG_VIDEO, ""},
+  {"video/x-ati-vcr", NULL, FLAG_VIDEO, ""},
+  {"video/x-divx", NULL, FLAG_VIDEO, ""},
   {"video/x-dv", "Digital Video (DV) System Stream",
-      FLAG_CONTAINER | FLAG_SYSTEMSTREAM},
-  {"video/x-dv", "Digital Video (DV)", 0},
-  {"video/x-h263", NULL, 0},
-  {"video/x-h264", NULL, 0},
-  {"video/x-indeo", NULL, 0},
-  {"video/x-msmpeg", NULL, 0},
-  {"video/x-pn-realvideo", NULL, 0},
+      FLAG_CONTAINER | FLAG_SYSTEMSTREAM, "dv"},
+  {"video/x-dv", "Digital Video (DV)", FLAG_VIDEO, ""},
+  {"video/x-h263", NULL, FLAG_VIDEO, ""},
+  {"video/x-h264", NULL, FLAG_VIDEO, "h264"},
+  {"video/x-indeo", NULL, FLAG_VIDEO, ""},
+  {"video/x-msmpeg", NULL, FLAG_VIDEO, ""},
+  {"video/x-pn-realvideo", NULL, FLAG_VIDEO, ""},
 #if 0
   /* do these exist? are they used anywhere? */
   {"video/x-pn-multirate-realvideo", NULL, 0},
   {"audio/x-pn-multirate-realaudio", NULL, 0},
   {"audio/x-pn-multirate-realaudio-live", NULL, 0},
 #endif
-  {"video/x-truemotion", NULL, 0},
-  {"video/x-raw", NULL, 0},
-  {"video/x-svq", NULL, 0},
-  {"video/x-wmv", NULL, 0},
-  {"video/x-xan", NULL, 0}
+  {"video/x-truemotion", NULL, FLAG_VIDEO, ""},
+  {"video/x-raw", NULL, FLAG_VIDEO, ""},
+  {"video/x-svq", NULL, FLAG_VIDEO, ""},
+  {"video/x-wmv", NULL, FLAG_VIDEO, ""},
+  {"video/x-xan", NULL, FLAG_VIDEO, ""}
 };
 
 /* returns static descriptions and dynamic ones (such as video/x-raw),