aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2006-03-22 11:06:08 +0000
committerMichael Niedermayer <michaelni@gmx.at>2006-03-22 11:06:08 +0000
commit70596d04a84f013eeadc2aa465a8a2be29afded5 (patch)
tree535a07cc0742d9b87819f0d5dfc99e53669fd633
parentf444b977a5435f99583fb7d54267eb2b45dd619c (diff)
downloadffmpeg-70596d04a84f013eeadc2aa465a8a2be29afded5.tar.gz
cleanup codec_id mapping (untested)
Originally committed as revision 5195 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r--libavformat/matroska.c139
1 files changed, 49 insertions, 90 deletions
diff --git a/libavformat/matroska.c b/libavformat/matroska.c
index 2c92431e71..0e5bb005b4 100644
--- a/libavformat/matroska.c
+++ b/libavformat/matroska.c
@@ -182,32 +182,46 @@ typedef enum {
* 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 @@ matroska_read_header (AVFormatContext *s,
/* 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 @@ matroska_read_header (AVFormatContext *s,
(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 @@ matroska_read_header (AVFormatContext *s,
(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 @@ matroska_read_header (AVFormatContext *s,
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,