summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBaptiste Coudurier <baptiste.coudurier@smartjog.com>2006-02-11 18:27:57 +0000
committerMichael Niedermayer <michaelni@gmx.at>2006-02-11 18:27:57 +0000
commite60b4ced1fe43a270ef425ed4966cb1a77162322 (patch)
treea675aeb2ebb6e479752f1795c01c1c0b994d44a3
parentf29f3b5d9ff5cc3b70dac295c9589577ce1a41c7 (diff)
mp4 codecs objecttype handling patch by (Baptiste COUDURIER <baptiste.coudurier smartjog com)
Originally committed as revision 4982 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r--libavformat/mov.c31
-rw-r--r--libavformat/mov.h7
-rw-r--r--libavformat/movenc.c21
3 files changed, 39 insertions, 20 deletions
diff --git a/libavformat/mov.c b/libavformat/mov.c
index 073547f7d3..eeb0ebbd2f 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -21,6 +21,7 @@
#include "avformat.h"
#include "avi.h"
+#include "mov.h"
#ifdef CONFIG_ZLIB
#include <zlib.h>
@@ -82,6 +83,35 @@
/* getting rid of these */
#define CODEC_TYPE_MOV_OTHER (enum CodecType) 2
+/* http://gpac.sourceforge.net/tutorial/mediatypes.htm */
+const CodecTag ff_mov_obj_type[] = {
+ { CODEC_ID_MPEG4 , 32 },
+ { CODEC_ID_H264 , 33 },
+ { CODEC_ID_AAC , 64 },
+ { CODEC_ID_MPEG2VIDEO, 96 }, /* MPEG2 Simple */
+ { CODEC_ID_MPEG2VIDEO, 97 }, /* MPEG2 Main */
+ { CODEC_ID_MPEG2VIDEO, 98 }, /* MPEG2 SNR */
+ { CODEC_ID_MPEG2VIDEO, 99 }, /* MPEG2 Spatial */
+ { CODEC_ID_MPEG2VIDEO, 100 }, /* MPEG2 High */
+ { CODEC_ID_MPEG2VIDEO, 101 }, /* MPEG2 422 */
+ { CODEC_ID_AAC , 102 }, /* MPEG2 AAC Main */
+ { CODEC_ID_AAC , 103 }, /* MPEG2 AAC Low */
+ { CODEC_ID_AAC , 104 }, /* MPEG2 AAC SSR */
+ { CODEC_ID_MP3 , 105 },
+ { CODEC_ID_MPEG1VIDEO, 106 },
+ { CODEC_ID_MP2 , 107 },
+ { CODEC_ID_MJPEG , 108 },
+ { CODEC_ID_PCM_S16LE , 224 },
+ { CODEC_ID_VORBIS , 225 },
+ { CODEC_ID_AC3 , 226 },
+ { CODEC_ID_PCM_ALAW , 227 },
+ { CODEC_ID_PCM_MULAW , 228 },
+ { CODEC_ID_PCM_S16BE , 230 },
+ { CODEC_ID_H263 , 242 },
+ { CODEC_ID_H261 , 243 },
+ { 0, 0 },
+};
+
static const CodecTag mov_video_tags[] = {
/* { CODEC_ID_, MKTAG('c', 'v', 'i', 'd') }, *//* Cinepak */
/* { CODEC_ID_H263, MKTAG('r', 'a', 'w', ' ') }, *//* Uncompressed RGB */
@@ -656,6 +686,7 @@ static int mov_read_esds(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom)
sc->esds.max_bitrate = get_be32(pb);
sc->esds.avg_bitrate = get_be32(pb);
+ st->codec->codec_id= codec_get_id(ff_mov_obj_type, sc->esds.object_type_id);
len = mov_mp4_read_descr(pb, &tag);
//av_log(NULL, AV_LOG_DEBUG, "LEN %d TAG %d m:%d a:%d\n", len, tag, sc->esds.max_bitrate, sc->esds.avg_bitrate);
if (tag == MP4DecSpecificDescrTag) {
diff --git a/libavformat/mov.h b/libavformat/mov.h
new file mode 100644
index 0000000000..d42368210c
--- /dev/null
+++ b/libavformat/mov.h
@@ -0,0 +1,7 @@
+#ifndef FFMPEG_MOV_H
+#define FFMPEG_MOV_H
+
+/* mov.c */
+extern const CodecTag ff_mov_obj_type[];
+
+#endif /* FFMPEG_MOV_H */
diff --git a/libavformat/movenc.c b/libavformat/movenc.c
index 8aed24857e..99ce8bcb98 100644
--- a/libavformat/movenc.c
+++ b/libavformat/movenc.c
@@ -20,6 +20,7 @@
#include "avformat.h"
#include "avi.h"
#include "avio.h"
+#include "mov.h"
#undef NDEBUG
#include <assert.h>
@@ -77,26 +78,6 @@ static int mov_write_esds_tag(ByteIOContext *pb, MOVTrack* track);
/* output language code from iso639 language name */
extern int ff_mov_iso639_to_lang(const char *lang, int mp4);
-const CodecTag ff_mov_obj_type[] = {
- { CODEC_ID_MPEG4 , 32 },
- { CODEC_ID_AAC , 64 },
- { CODEC_ID_MPEG1VIDEO, 106 },
- { CODEC_ID_MPEG2VIDEO, 96 },//mpeg2 profiles
- { CODEC_ID_MP2 , 107 },//FIXME mpeg2 mpeg audio -> 105
- { CODEC_ID_MP3 , 107 },//FIXME mpeg2 mpeg audio -> 105
- { CODEC_ID_H264 , 33 },
- { CODEC_ID_H263 , 242 },
- { CODEC_ID_H261 , 243 },
- { CODEC_ID_MJPEG , 108 },
- { CODEC_ID_PCM_S16LE , 224 },
- { CODEC_ID_VORBIS , 225 },
- { CODEC_ID_AC3 , 226 },
- { CODEC_ID_PCM_ALAW , 227 },
- { CODEC_ID_PCM_MULAW , 228 },
- { CODEC_ID_PCM_S16BE , 230 },
- { 0,0 },
-};
-
//FIXME supprt 64bit varaint with wide placeholders
static offset_t updateSize (ByteIOContext *pb, offset_t pos)
{