diff movenc.c @ 710:020ebcb662d5 libavformat

trying to fix a few minor values in the mp4/mov muxer
author michael
date Wed, 23 Mar 2005 00:26:43 +0000
parents 095009fc2f35
children 03157dc4ac6f
line wrap: on
line diff
--- a/movenc.c	Thu Mar 17 21:38:29 2005 +0000
+++ b/movenc.c	Wed Mar 23 00:26:43 2005 +0000
@@ -72,6 +72,26 @@
 
 static int mov_write_esds_tag(ByteIOContext *pb, MOVTrack* track);
 
+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      , 241 },
+    { 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 int updateSize (ByteIOContext *pb, int pos)
 {
@@ -430,28 +450,28 @@
     // ES descriptor
     putDescr(pb, 0x03, 3 + descrLength(13 + decoderSpecificInfoLen) +
              descrLength(1));
-    put_be16(pb, 0x0001);          // ID (= 1)
+    put_be16(pb, track->trackID);
     put_byte(pb, 0x00);            // flags (= no flags)
 
     // DecoderConfig descriptor
     putDescr(pb, 0x04, 13 + decoderSpecificInfoLen);
 
-    if(track->enc->codec_id == CODEC_ID_AAC)
-        put_byte(pb, 0x40);        // Object type indication
-    else if(track->enc->codec_id == CODEC_ID_MPEG4)
-        put_byte(pb, 0x20);        // Object type indication (Visual 14496-2)
+    // Object type indication
+    put_byte(pb, codec_get_tag(ff_mov_obj_type, track->enc->codec_id));
 
     if(track->enc->codec_type == CODEC_TYPE_AUDIO)
         put_byte(pb, 0x15);            // flags (= Audiostream)
     else
         put_byte(pb, 0x11);            // flags (= Visualstream)
 
-    put_byte(pb, 0x0);             // Buffersize DB (24 bits)
-    put_be16(pb, 0x0dd2);          // Buffersize DB
+    put_byte(pb,  track->enc->rc_buffer_size>>(3+16));             // Buffersize DB (24 bits)
+    put_be16(pb, (track->enc->rc_buffer_size>>3)&0xFFFF);          // Buffersize DB
 
-    // TODO: find real values for these
-    put_be32(pb, track->enc->bit_rate);     // maxbitrate
-    put_be32(pb, track->enc->bit_rate);     // avg bitrate
+    put_be32(pb, FFMAX(track->enc->bit_rate, track->enc->rc_max_rate));     // maxbitrate  (FIXME should be max rate in any 1 sec window)
+    if(track->enc->rc_max_rate != track->enc->rc_min_rate || track->enc->rc_min_rate==0)
+        put_be32(pb, 0);     // vbr
+    else
+        put_be32(pb, track->enc->rc_max_rate);     // avg bitrate
 
     if (track->vosLen)
     {