[FFmpeg-cvslog] r11497 - trunk/libavformat/movenc.c

aurel subversion
Fri Jan 11 02:04:01 CET 2008


Author: aurel
Date: Fri Jan 11 02:04:01 2008
New Revision: 11497

Log:
extract isom_write_avcc into a function


Modified:
   trunk/libavformat/movenc.c

Modified: trunk/libavformat/movenc.c
==============================================================================
--- trunk/libavformat/movenc.c	(original)
+++ trunk/libavformat/movenc.c	Fri Jan 11 02:04:01 2008
@@ -475,24 +475,20 @@ static int avc_parse_nal_units(uint8_t *
     return 0;
 }
 
-static int mov_write_avcc_tag(ByteIOContext *pb, MOVTrack *track)
+static int isom_write_avcc(ByteIOContext *pb, uint8_t *data, int len)
 {
-    offset_t pos = url_ftell(pb);
-
-    put_be32(pb, 0);
-    put_tag(pb, "avcC");
-    if (track->vosLen > 6) {
+    if (len > 6) {
         /* check for h264 start code */
-        if (AV_RB32(track->vosData) == 0x00000001) {
-            uint8_t *buf, *end;
+        if (AV_RB32(data) == 0x00000001) {
+            uint8_t *buf=NULL, *end;
             uint32_t sps_size=0, pps_size=0;
             uint8_t *sps=0, *pps=0;
 
-            int ret = avc_parse_nal_units(track->vosData, &track->vosData, &track->vosLen);
+            int ret = avc_parse_nal_units(data, &buf, &len);
             if (ret < 0)
                 return ret;
-            buf = track->vosData;
-            end = track->vosData + track->vosLen;
+            data = buf;
+            end = buf + len;
 
             /* look for sps and pps */
             while (buf < end) {
@@ -524,10 +520,21 @@ static int mov_write_avcc_tag(ByteIOCont
             put_byte(pb, 1); /* number of pps */
             put_be16(pb, pps_size);
             put_buffer(pb, pps, pps_size);
+            av_free(data);
         } else {
-            put_buffer(pb, track->vosData, track->vosLen);
+            put_buffer(pb, data, len);
         }
     }
+    return 0;
+}
+
+static int mov_write_avcc_tag(ByteIOContext *pb, MOVTrack *track)
+{
+    offset_t pos = url_ftell(pb);
+
+    put_be32(pb, 0);
+    put_tag(pb, "avcC");
+    isom_write_avcc(pb, track->vosData, track->vosLen);
     return updateSize(pb, pos);
 }
 




More information about the ffmpeg-cvslog mailing list