changeset 2347:5c32dd0eafc6 libavformat

fix header_checksum
author michael
date Thu, 09 Aug 2007 21:20:17 +0000
parents cbcd840cf971
children b995891375b2
files nutenc.c
diffstat 1 files changed, 6 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/nutenc.c	Thu Aug 09 21:14:00 2007 +0000
+++ b/nutenc.c	Thu Aug 09 21:20:17 2007 +0000
@@ -191,13 +191,14 @@
 #endif
 
 //FIXME remove calculate_checksum
-static void put_packet(NUTContext *nut, ByteIOContext *bc, ByteIOContext *dyn_bc, int calculate_checksum){
+static void put_packet(NUTContext *nut, ByteIOContext *bc, ByteIOContext *dyn_bc, int calculate_checksum, uint64_t startcode){
     uint8_t *dyn_buf=NULL;
     int dyn_size= url_close_dyn_buf(dyn_bc, &dyn_buf);
     int forw_ptr= dyn_size + 4*calculate_checksum;
 
     if(forw_ptr > 4096)
-        init_checksum(bc, av_crc04C11DB7_update, 0); //FIXME this is supposed to include the start code
+        init_checksum(bc, av_crc04C11DB7_update, 0);
+    put_be64(bc, startcode);
     put_v(bc, forw_ptr);
     if(forw_ptr > 4096)
         put_le32(bc, get_checksum(bc));
@@ -315,18 +316,16 @@
     ByteIOContext dyn_bc;
     int i;
 
-    put_be64(bc, MAIN_STARTCODE);
     url_open_dyn_buf(&dyn_bc);
     write_mainheader(nut, &dyn_bc);
-    put_packet(nut, bc, &dyn_bc, 1);
+    put_packet(nut, bc, &dyn_bc, 1, MAIN_STARTCODE);
 
     for (i=0; i < nut->avf->nb_streams; i++){
         AVCodecContext *codec = nut->avf->streams[i]->codec;
 
-        put_be64(bc, STREAM_STARTCODE);
         url_open_dyn_buf(&dyn_bc);
         write_streamheader(nut, &dyn_bc, codec, i);
-        put_packet(nut, bc, &dyn_bc, 1);
+        put_packet(nut, bc, &dyn_bc, 1, STREAM_STARTCODE);
     }
 }
 
@@ -416,11 +415,10 @@
         ff_nut_reset_ts(nut, *nus->time_base, pkt->dts);
 
         nut->last_syncpoint_pos= url_ftell(bc);
-        put_be64(bc, SYNCPOINT_STARTCODE);
         url_open_dyn_buf(&dyn_bc);
         put_t(nut, nus, &dyn_bc, pkt->dts);
         put_v(&dyn_bc, 0); //FIXME back_ptr_div16
-        put_packet(nut, bc, &dyn_bc, 1);
+        put_packet(nut, bc, &dyn_bc, 1, SYNCPOINT_STARTCODE);
     }
     assert(nus->last_pts != AV_NOPTS_VALUE);