[Ffmpeg-cvslog] CVS: ffmpeg/libavformat matroska.c,1.22,1.23

Michael Niedermayer CVS michael
Wed Mar 22 12:06:11 CET 2006


Update of /cvsroot/ffmpeg/ffmpeg/libavformat
In directory mail:/var2/tmp/cvs-serv30276

Modified Files:
	matroska.c 
Log Message:
cleanup codec_id mapping (untested)


Index: matroska.c
===================================================================
RCS file: /cvsroot/ffmpeg/ffmpeg/libavformat/matroska.c,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -d -r1.22 -r1.23
--- matroska.c	22 Mar 2006 10:33:21 -0000	1.22
+++ matroska.c	22 Mar 2006 11:06:08 -0000	1.23
@@ -182,32 +182,46 @@
  * Matroska Codec IDs. Strings.
  */
 
+typedef struct CodecTags{
+    char *str;
+    enum CodecID id;
+}CodecTags;
+
 #define MATROSKA_CODEC_ID_VIDEO_VFW_FOURCC   "V_MS/VFW/FOURCC"
-#define MATROSKA_CODEC_ID_VIDEO_UNCOMPRESSED "V_UNCOMPRESSED"
-#define MATROSKA_CODEC_ID_VIDEO_MPEG4_SP     "V_MPEG4/ISO/SP"
-#define MATROSKA_CODEC_ID_VIDEO_MPEG4_ASP    "V_MPEG4/ISO/ASP"
-#define MATROSKA_CODEC_ID_VIDEO_MPEG4_AP     "V_MPEG4/ISO/AP"
-#define MATROSKA_CODEC_ID_VIDEO_MPEG4_AVC    "V_MPEG4/ISO/AVC"
-#define MATROSKA_CODEC_ID_VIDEO_MSMPEG4V3    "V_MPEG4/MS/V3"
-#define MATROSKA_CODEC_ID_VIDEO_MPEG1        "V_MPEG1"
-#define MATROSKA_CODEC_ID_VIDEO_MPEG2        "V_MPEG2"
-#define MATROSKA_CODEC_ID_VIDEO_MJPEG        "V_MJPEG"
+#define MATROSKA_CODEC_ID_AUDIO_ACM          "A_MS/ACM"
+
+CodecTags codec_tags[]={
+//    {"V_MS/VFW/FOURCC"  , CODEC_ID_NONE},
+    {"V_UNCOMPRESSED"   , CODEC_ID_RAWVIDEO},
+    {"V_MPEG4/ISO/SP"   , CODEC_ID_MPEG4},
+    {"V_MPEG4/ISO/ASP"  , CODEC_ID_MPEG4},
+    {"V_MPEG4/ISO/AP"   , CODEC_ID_MPEG4},
+    {"V_MPEG4/ISO/AVC"  , CODEC_ID_H264},
+    {"V_MPEG4/MS/V3"    , CODEC_ID_MSMPEG4V3},
+    {"V_MPEG1"          , CODEC_ID_MPEG1VIDEO},
+    {"V_MPEG2"          , CODEC_ID_MPEG2VIDEO},
+    {"V_MJPEG"          , CODEC_ID_MJPEG},
+    {"V_REAL/RV10"      , CODEC_ID_RV10},
+    {"V_REAL/RV20"      , CODEC_ID_RV20},
+    {"V_REAL/RV30"      , CODEC_ID_RV30},
+    {"V_REAL/RV40"      , CODEC_ID_RV40},
 /* TODO: Real/Quicktime */
 
-#define MATROSKA_CODEC_ID_AUDIO_ACM          "A_MS/ACM"
-#define MATROSKA_CODEC_ID_AUDIO_MPEG1_L1     "A_MPEG/L1"
-#define MATROSKA_CODEC_ID_AUDIO_MPEG1_L2     "A_MPEG/L2"
-#define MATROSKA_CODEC_ID_AUDIO_MPEG1_L3     "A_MPEG/L3"
-#define MATROSKA_CODEC_ID_AUDIO_PCM_INT_BE   "A_PCM/INT/BIG"
-#define MATROSKA_CODEC_ID_AUDIO_PCM_INT_LE   "A_PCM/INT/LIT"
-#define MATROSKA_CODEC_ID_AUDIO_PCM_FLOAT    "A_PCM/FLOAT/IEEE"
-#define MATROSKA_CODEC_ID_AUDIO_AC3          "A_AC3"
-#define MATROSKA_CODEC_ID_AUDIO_DTS          "A_DTS"
-#define MATROSKA_CODEC_ID_AUDIO_VORBIS       "A_VORBIS"
-#define MATROSKA_CODEC_ID_AUDIO_ACM          "A_MS/ACM"
-#define MATROSKA_CODEC_ID_AUDIO_MPEG2        "A_AAC/MPEG2/"
-#define MATROSKA_CODEC_ID_AUDIO_MPEG4        "A_AAC/MPEG4/"
+//    {"A_MS/ACM"         , CODEC_ID_NONE},
+    {"A_MPEG/L1"        , CODEC_ID_MP3},
+    {"A_MPEG/L2"        , CODEC_ID_MP3},
+    {"A_MPEG/L3"        , CODEC_ID_MP3},
+    {"A_PCM/INT/BIG"    , CODEC_ID_PCM_U16BE},
+    {"A_PCM/INT/LIT"    , CODEC_ID_PCM_U16LE},
+//    {"A_PCM/FLOAT/IEEE" , CODEC_ID_NONE},
+    {"A_AC3"            , CODEC_ID_AC3},
+    {"A_DTS"            , CODEC_ID_DTS},
+    {"A_VORBIS"         , CODEC_ID_VORBIS},
+    {"A_AAC/MPEG2/"     , CODEC_ID_AAC},
+    {"A_AAC/MPEG4/"     , CODEC_ID_AAC},
+    {NULL               , CODEC_ID_NONE}
 /* TODO: AC3-9/10 (?), Real, Musepack, Quicktime */
+};
 
 /* max. depth in the EBML tree structure */
 #define EBML_MAX_DEPTH 16
@@ -2125,14 +2139,14 @@
 
     /* Have we found a cluster? */
     if (res == 1) {
-        int i;
-        enum CodecID codec_id;
+        int i, j;
+        enum CodecID codec_id= CODEC_ID_NONE;
         MatroskaTrack *track;
         AVStream *st;
-        void *extradata = NULL;
-        int extradata_size = 0;
 
         for (i = 0; i < matroska->num_tracks; i++) {
+            void *extradata = NULL;
+            int extradata_size = 0;
             track = matroska->tracks[i];
 
             /* libavformat does not really support subtitles.
@@ -2141,6 +2155,13 @@
                 (track->codec_id == NULL))
                 continue;
 
+            for(j=0; codec_tags[j].str; j++){
+                if(!strcmp(codec_tags[j].str, track->codec_id)){
+                    codec_id= codec_tags[j].id;
+                    break;
+                }
+            }
+
             /* Set the FourCC from the CodecID. */
             /* This is the MS compatibility mode which stores a
              * BITMAPINFOHEADER in the CodecPrivate. */
@@ -2156,27 +2177,7 @@
                                  (p[2] << 16) | (p[1] << 8) | p[0];
                 codec_id = codec_get_bmp_id(((MatroskaVideoTrack *)track)->fourcc);
 
-            } else if (!strcmp(track->codec_id,
-                               MATROSKA_CODEC_ID_VIDEO_MPEG4_SP) ||
-                       !strcmp(track->codec_id,
-                               MATROSKA_CODEC_ID_VIDEO_MPEG4_ASP) ||
-                       !strcmp(track->codec_id,
-                               MATROSKA_CODEC_ID_VIDEO_MPEG4_AP))
-                codec_id = CODEC_ID_MPEG4;
-            else if (!strcmp(track->codec_id,
-                             MATROSKA_CODEC_ID_VIDEO_MPEG4_AVC))
-                codec_id = CODEC_ID_H264;
-/*             else if (!strcmp(track->codec_id, */
-/*                              MATROSKA_CODEC_ID_VIDEO_UNCOMPRESSED)) */
-/*                 codec_id = CODEC_ID_???; */
-            else if (!strcmp(track->codec_id,
-                             MATROSKA_CODEC_ID_VIDEO_MSMPEG4V3))
-                codec_id = CODEC_ID_MSMPEG4V3;
-            else if (!strcmp(track->codec_id,
-                             MATROSKA_CODEC_ID_VIDEO_MPEG1) ||
-                     !strcmp(track->codec_id,
-                             MATROSKA_CODEC_ID_VIDEO_MPEG2))
-                codec_id = CODEC_ID_MPEG2VIDEO;
+            }
 
             /* This is the MS compatibility mode which stores a
              * WAVEFORMATEX in the CodecPrivate. */
@@ -2192,49 +2193,7 @@
                 tag = (p[1] << 8) | p[0];
                 codec_id = codec_get_wav_id(tag);
 
-            } else if (!strcmp(track->codec_id,
-                               MATROSKA_CODEC_ID_AUDIO_MPEG1_L1) ||
-                       !strcmp(track->codec_id,
-                               MATROSKA_CODEC_ID_AUDIO_MPEG1_L2) ||
-                       !strcmp(track->codec_id,
-                               MATROSKA_CODEC_ID_AUDIO_MPEG1_L3))
-                codec_id = CODEC_ID_MP3;
-            else if (!strcmp(track->codec_id,
-                             MATROSKA_CODEC_ID_AUDIO_PCM_INT_BE))
-                codec_id = CODEC_ID_PCM_U16BE;
-            else if (!strcmp(track->codec_id,
-                             MATROSKA_CODEC_ID_AUDIO_PCM_INT_LE))
-                codec_id = CODEC_ID_PCM_U16LE;
-/*             else if (!strcmp(track->codec_id, */
-/*                              MATROSKA_CODEC_ID_AUDIO_PCM_FLOAT)) */
-/*                 codec_id = CODEC_ID_PCM_???; */
-            else if (!strcmp(track->codec_id,
-                             MATROSKA_CODEC_ID_AUDIO_AC3))
-                codec_id = CODEC_ID_AC3;
-            else if (!strcmp(track->codec_id,
-                             MATROSKA_CODEC_ID_AUDIO_DTS))
-                codec_id = CODEC_ID_DTS;
-            /* No such codec id so far. */
-/*             else if (!strcmp(track->codec_id, */
-/*                              MATROSKA_CODEC_ID_AUDIO_DTS)) */
-/*                 codec_id = CODEC_ID_DTS; */
-            else if (!strcmp(track->codec_id,
-                             MATROSKA_CODEC_ID_AUDIO_VORBIS)) {
-                extradata_size = track->codec_priv_size;
-                if(extradata_size) {
-                    extradata = av_malloc(extradata_size);
-                    if(extradata == NULL)
-                        return AVERROR_NOMEM;
-                    memcpy(extradata, track->codec_priv, extradata_size);
-                }
-                codec_id = CODEC_ID_VORBIS;
-            } else if (!strcmp(track->codec_id,
-                               MATROSKA_CODEC_ID_AUDIO_MPEG2) ||
-                       !strcmp(track->codec_id,
-                               MATROSKA_CODEC_ID_AUDIO_MPEG4))
-                codec_id = CODEC_ID_AAC;
-            else
-                codec_id = CODEC_ID_NONE;
+            }
 
             if (codec_id == CODEC_ID_NONE) {
                 av_log(matroska->ctx, AV_LOG_INFO,





More information about the ffmpeg-cvslog mailing list