cleanup codec_id mapping (untested)

Originally committed as revision 5195 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
Michael Niedermayer 2006-03-22 11:06:08 +00:00
parent f444b977a5
commit 70596d04a8
1 changed files with 49 additions and 90 deletions

View File

@ -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,