diff movenc.c @ 1150:c8edab114cc3 libavformat

vbr requires version=1 and samplesize=0 per QT spec untested, but if this doesnt work the issue is likely somewhere else, as iam just chaning the random nonsense we do to what the spec says should be done
author michael
date Thu, 06 Jul 2006 12:17:01 +0000
parents 5cac4246a84a
children bf808f3f7f46
line wrap: on
line diff
--- a/movenc.c	Wed Jul 05 22:01:49 2006 +0000
+++ b/movenc.c	Thu Jul 06 12:17:01 2006 +0000
@@ -353,9 +353,11 @@
 static int mov_write_audio_tag(ByteIOContext *pb, MOVTrack* track)
 {
     offset_t pos = url_ftell(pb);
+    int vbr=  track->enc->codec_id == CODEC_ID_AAC ||
+              track->enc->codec_id == CODEC_ID_MP3 ||
+              track->enc->codec_id == CODEC_ID_AMR_NB;
     int version = track->mode == MODE_MOV &&
-        (track->enc->codec_id == CODEC_ID_AAC ||
-         track->enc->codec_id == CODEC_ID_MP3 ||
+        (vbr ||
          track->enc->codec_id == CODEC_ID_PCM_S32LE ||
          track->enc->codec_id == CODEC_ID_PCM_S24LE);
 
@@ -375,9 +377,7 @@
                  to be a good way to get number of bits of audio */
     put_be16(pb, 0x10); /* Reserved */
 
-    if(track->enc->codec_id == CODEC_ID_AAC ||
-       track->enc->codec_id == CODEC_ID_MP3 ||
-       track->enc->codec_id == CODEC_ID_AMR_NB) {
+    if(vbr) {
         put_be16(pb, 0xfffe); /* compression ID (vbr)*/
     } else {
         put_be16(pb, 0); /* compression ID (= 0) */
@@ -387,13 +387,10 @@
     put_be16(pb, 0); /* Reserved */
 
     if(version == 1) { /* SoundDescription V1 extended info */
-        /* Parameters tested on quicktime 6.5, 7 */
-        if (track->enc->codec_id == CODEC_ID_MP3)
-            track->sampleSize = 666;
-        if (track->enc->codec_id == CODEC_ID_AAC)
-            track->sampleSize = 2;
+        if (vbr)
+            track->sampleSize = 0;
         put_be32(pb, track->enc->frame_size); /* Samples per packet */
-        put_be32(pb, track->sampleSize / 2); /* Bytes per packet */
+        put_be32(pb, track->sampleSize / track->enc->channels); /* Bytes per packet */
         put_be32(pb, track->sampleSize); /* Bytes per frame */
         put_be32(pb, 2); /* Bytes per sample */
     }