changeset 4225:0231b1d5cd15 libavformat

move actual writing before so new size can be taken into account
author bcoudurier
date Fri, 16 Jan 2009 01:12:32 +0000
parents bb346dbc0958
children f1974ed2589a
files movenc.c
diffstat 1 files changed, 9 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/movenc.c	Fri Jan 16 01:11:34 2009 +0000
+++ b/movenc.c	Fri Jan 16 01:12:32 2009 +0000
@@ -1732,6 +1732,14 @@
         memcpy(trk->vosData, enc->extradata, trk->vosLen);
     }
 
+    if (enc->codec_id == CODEC_ID_H264 && trk->vosLen > 0 && *(uint8_t *)trk->vosData != 1) {
+        /* from x264 or from bytestream h264 */
+        /* nal reformating needed */
+        size = ff_avc_parse_nal_units(pb, pkt->data, pkt->size);
+    } else {
+        put_buffer(pb, pkt->data, size);
+    }
+
     if ((enc->codec_id == CODEC_ID_DNXHD ||
                 enc->codec_id == CODEC_ID_AC3) && !trk->vosLen) {
         /* copy frame to create needed atoms */
@@ -1748,7 +1756,7 @@
             return -1;
     }
 
-    trk->cluster[trk->entry].pos = url_ftell(pb);
+    trk->cluster[trk->entry].pos = url_ftell(pb) - size;
     trk->cluster[trk->entry].samplesInChunk = samplesInChunk;
     trk->cluster[trk->entry].size = size;
     trk->cluster[trk->entry].entries = samplesInChunk;
@@ -1769,14 +1777,6 @@
     trk->sampleCount += samplesInChunk;
     mov->mdat_size += size;
 
-    if (enc->codec_id == CODEC_ID_H264 && trk->vosLen > 0 && *(uint8_t *)trk->vosData != 1) {
-        /* from x264 or from bytestream h264 */
-        /* nal reformating needed */
-        ff_avc_parse_nal_units(pb, pkt->data, pkt->size);
-    } else {
-        put_buffer(pb, pkt->data, size);
-    }
-
     put_flush_packet(pb);
     return 0;
 }