gst_plugins_good/gst/qtdemux/qtdemux_types.c
changeset 26 69c7080681bf
parent 24 bc39b352897e
child 28 4ed5253bb6ba
equal deleted inserted replaced
24:bc39b352897e 26:69c7080681bf
     1 /* GStreamer
       
     2  * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
       
     3  *
       
     4  * This library is free software; you can redistribute it and/or
       
     5  * modify it under the terms of the GNU Library General Public
       
     6  * License as published by the Free Software Foundation; either
       
     7  * version 2 of the License, or (at your option) any later version.
       
     8  *
       
     9  * This library is distributed in the hope that it will be useful,
       
    10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
       
    11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
       
    12  * Library General Public License for more details.
       
    13  *
       
    14  * You should have received a copy of the GNU Library General Public
       
    15  * License along with this library; if not, write to the
       
    16  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
       
    17  * Boston, MA 02111-1307, USA.
       
    18  */
       
    19 
       
    20 #include "qtdemux_types.h"
       
    21 #include "qtdemux_dump.h"
       
    22 #include "qtdemux_fourcc.h"
       
    23 
       
    24 static const QtNodeType qt_node_types[] = {
       
    25   {FOURCC_moov, "movie", QT_FLAG_CONTAINER,},
       
    26   {FOURCC_mvhd, "movie header", 0,
       
    27       qtdemux_dump_mvhd},
       
    28   {FOURCC_clip, "clipping", QT_FLAG_CONTAINER,},
       
    29   {FOURCC_trak, "track", QT_FLAG_CONTAINER,},
       
    30   {FOURCC_udta, "user data", QT_FLAG_CONTAINER,},       /* special container */
       
    31   {FOURCC_ctab, "color table", 0,},
       
    32   {FOURCC_tkhd, "track header", 0,
       
    33       qtdemux_dump_tkhd},
       
    34   {FOURCC_crgn, "clipping region", 0,},
       
    35   {FOURCC_matt, "track matte", QT_FLAG_CONTAINER,},
       
    36   {FOURCC_kmat, "compressed matte", 0,},
       
    37   {FOURCC_edts, "edit", QT_FLAG_CONTAINER,},
       
    38   {FOURCC_elst, "edit list", 0,
       
    39       qtdemux_dump_elst},
       
    40   {FOURCC_load, "track load settings", 0,},
       
    41   {FOURCC_tref, "track reference", QT_FLAG_CONTAINER,},
       
    42   {FOURCC_imap, "track input map", QT_FLAG_CONTAINER,},
       
    43   {FOURCC___in, "track input", 0,},     /* special container */
       
    44   {FOURCC___ty, "input type", 0,},
       
    45   {FOURCC_mdia, "media", QT_FLAG_CONTAINER},
       
    46   {FOURCC_mdhd, "media header", 0,
       
    47       qtdemux_dump_mdhd},
       
    48   {FOURCC_hdlr, "handler reference", 0,
       
    49       qtdemux_dump_hdlr},
       
    50   {FOURCC_minf, "media information", QT_FLAG_CONTAINER},
       
    51   {FOURCC_vmhd, "video media information", 0,
       
    52       qtdemux_dump_vmhd},
       
    53   {FOURCC_smhd, "sound media information", 0},
       
    54   {FOURCC_gmhd, "base media information header", 0},
       
    55   {FOURCC_gmin, "base media info", 0},
       
    56   {FOURCC_dinf, "data information", QT_FLAG_CONTAINER},
       
    57   {FOURCC_dref, "data reference", 0,
       
    58       qtdemux_dump_dref},
       
    59   {FOURCC_stbl, "sample table", QT_FLAG_CONTAINER},
       
    60   {FOURCC_stsd, "sample description", 0,
       
    61       qtdemux_dump_stsd},
       
    62   {FOURCC_stts, "time-to-sample", 0,
       
    63       qtdemux_dump_stts},
       
    64   {FOURCC_stps, "partial sync sample", 0,
       
    65       qtdemux_dump_stps},
       
    66   {FOURCC_stss, "sync sample", 0,
       
    67       qtdemux_dump_stss},
       
    68   {FOURCC_stsc, "sample-to-chunk", 0,
       
    69       qtdemux_dump_stsc},
       
    70   {FOURCC_stsz, "sample size", 0,
       
    71       qtdemux_dump_stsz},
       
    72   {FOURCC_stco, "chunk offset", 0,
       
    73       qtdemux_dump_stco},
       
    74   {FOURCC_co64, "64-bit chunk offset", 0,
       
    75       qtdemux_dump_co64},
       
    76   {FOURCC_vide, "video media", 0},
       
    77   {FOURCC_cmov, "compressed movie", QT_FLAG_CONTAINER},
       
    78   {FOURCC_dcom, "compressed data", 0, qtdemux_dump_dcom},
       
    79   {FOURCC_cmvd, "compressed movie data", 0, qtdemux_dump_cmvd},
       
    80   {FOURCC_hint, "hint", 0,},
       
    81   {FOURCC_mp4a, "mp4a", 0,},
       
    82   {FOURCC_mp4v, "mp4v", 0,},
       
    83   {FOURCC_mjp2, "mjp2", 0,},
       
    84   {FOURCC_mhdr, "mhdr", QT_FLAG_CONTAINER,},
       
    85   {FOURCC_jp2h, "jp2h", QT_FLAG_CONTAINER,},
       
    86   {FOURCC_colr, "colr", 0,},
       
    87   {FOURCC_fiel, "fiel", 0,},
       
    88   {FOURCC_jp2x, "jp2x", 0,},
       
    89   {FOURCC_wave, "wave", QT_FLAG_CONTAINER},
       
    90   {FOURCC_appl, "appl", QT_FLAG_CONTAINER},
       
    91   {FOURCC_esds, "esds", 0},
       
    92   {FOURCC_hnti, "hnti", QT_FLAG_CONTAINER},
       
    93   {FOURCC_rtp_, "rtp ", 0, qtdemux_dump_unknown},
       
    94   {FOURCC_sdp_, "sdp ", 0, qtdemux_dump_unknown},
       
    95   {FOURCC_meta, "meta", 0, qtdemux_dump_unknown},
       
    96   {FOURCC_ilst, "ilst", QT_FLAG_CONTAINER,},
       
    97   {FOURCC__nam, "Name", QT_FLAG_CONTAINER,},
       
    98   {FOURCC_titl, "Title", QT_FLAG_CONTAINER,},
       
    99   {FOURCC__ART, "Artist", QT_FLAG_CONTAINER,},
       
   100   {FOURCC_auth, "Author", QT_FLAG_CONTAINER,},
       
   101   {FOURCC_perf, "Performer", QT_FLAG_CONTAINER,},
       
   102   {FOURCC__wrt, "Writer", QT_FLAG_CONTAINER,},
       
   103   {FOURCC__grp, "Group", QT_FLAG_CONTAINER,},
       
   104   {FOURCC__alb, "Album", QT_FLAG_CONTAINER,},
       
   105   {FOURCC_albm, "Album", QT_FLAG_CONTAINER,},
       
   106   {FOURCC__day, "Date", QT_FLAG_CONTAINER,},
       
   107   {FOURCC__cpy, "Copyright", QT_FLAG_CONTAINER,},
       
   108   {FOURCC__cmt, "Comment", QT_FLAG_CONTAINER,},
       
   109   {FOURCC__des, "Description", QT_FLAG_CONTAINER,},
       
   110   {FOURCC_dscp, "Description", QT_FLAG_CONTAINER,},
       
   111   {FOURCC__req, "Requirement", QT_FLAG_CONTAINER,},
       
   112   {FOURCC__enc, "Encoder", QT_FLAG_CONTAINER,},
       
   113   {FOURCC_gnre, "Genre", QT_FLAG_CONTAINER,},
       
   114   {FOURCC_trkn, "Track Number", QT_FLAG_CONTAINER,},
       
   115   {FOURCC_disc, "Disc Number", QT_FLAG_CONTAINER,},
       
   116   {FOURCC_disk, "Disc Number", QT_FLAG_CONTAINER,},
       
   117   {FOURCC_cprt, "Copyright", QT_FLAG_CONTAINER,},
       
   118   {FOURCC_cpil, "cpil", QT_FLAG_CONTAINER,},
       
   119   {FOURCC_tmpo, "Tempo", QT_FLAG_CONTAINER,},
       
   120   {FOURCC_covr, "Cover", QT_FLAG_CONTAINER,},
       
   121   {FOURCC_keyw, "Keywords", QT_FLAG_CONTAINER,},
       
   122   {FOURCC_kywd, "Keywords", QT_FLAG_CONTAINER,},
       
   123   {FOURCC__too, "too", QT_FLAG_CONTAINER,},
       
   124   {FOURCC_____, "----", QT_FLAG_CONTAINER,},
       
   125   {FOURCC_data, "data", 0, qtdemux_dump_unknown},
       
   126   {FOURCC_free, "free", 0,},
       
   127   {FOURCC_SVQ3, "SVQ3", 0,},
       
   128   {FOURCC_rmra, "rmra", QT_FLAG_CONTAINER,},
       
   129   {FOURCC_rmda, "rmda", QT_FLAG_CONTAINER,},
       
   130   {FOURCC_rdrf, "rdrf", 0,},
       
   131   {FOURCC__gen, "Custom Genre", QT_FLAG_CONTAINER,},
       
   132   {FOURCC_ctts, "Composition time to sample", 0, qtdemux_dump_ctts},
       
   133   {FOURCC_XiTh, "XiTh", 0},
       
   134   {FOURCC_XdxT, "XdxT", 0},
       
   135   {FOURCC_loci, "loci", 0},
       
   136   {FOURCC_clsf, "clsf", 0},
       
   137   {0, "unknown", 0,},
       
   138 };
       
   139 
       
   140 static const int n_qt_node_types =
       
   141     sizeof (qt_node_types) / sizeof (qt_node_types[0]);
       
   142 
       
   143 const QtNodeType *
       
   144 qtdemux_type_get (guint32 fourcc)
       
   145 {
       
   146   int i;
       
   147 
       
   148   for (i = 0; i < n_qt_node_types; i++) {
       
   149     if (G_UNLIKELY (qt_node_types[i].fourcc == fourcc))
       
   150       return qt_node_types + i;
       
   151   }
       
   152 
       
   153   GST_WARNING ("unknown QuickTime node type %" GST_FOURCC_FORMAT,
       
   154       GST_FOURCC_ARGS (fourcc));
       
   155 
       
   156   return qt_node_types + n_qt_node_types - 1;
       
   157 }