info packet
authorMichael Niedermayer <michaelni@gmx.at>
Fri, 10 Aug 2007 11:52:28 +0000 (11:52 +0000)
committerMichael Niedermayer <michaelni@gmx.at>
Fri, 10 Aug 2007 11:52:28 +0000 (11:52 +0000)
Originally committed as revision 10050 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavformat/nutenc.c

index 9248ef5..42d861f 100644 (file)
@@ -313,6 +313,39 @@ static int write_streamheader(NUTContext *nut, ByteIOContext *bc, AVCodecContext
     return 0;
 }
 
+static int add_info(ByteIOContext *bc, char *type, char *value){
+    put_str(bc, type);
+    put_s(bc, -1);
+    put_str(bc, value);
+    return 1;
+}
+
+static void write_globalinfo(NUTContext *nut, ByteIOContext *bc){
+    AVFormatContext *s= nut->avf;
+    ByteIOContext dyn_bc;
+    uint8_t *dyn_buf=NULL;
+    int count=0, dyn_size;
+
+    url_open_dyn_buf(&dyn_bc);
+
+    if(s->title    [0]) count+= add_info(&dyn_bc, "Title"    , s->title);
+    if(s->author   [0]) count+= add_info(&dyn_bc, "Author"   , s->author);
+    if(s->copyright[0]) count+= add_info(&dyn_bc, "Copyright", s->copyright);
+    if(!(s->streams[0]->codec->flags & CODEC_FLAG_BITEXACT))
+                        count+= add_info(&dyn_bc, "Encoder"  , LIBAVFORMAT_IDENT);
+
+    put_v(bc, 0); //stream_if_plus1
+    put_v(bc, 0); //chapter_id
+    put_v(bc, 0); //timestamp_start
+    put_v(bc, 0); //length
+
+    put_v(bc, count);
+
+    dyn_size= url_close_dyn_buf(&dyn_bc, &dyn_buf);
+    put_buffer(bc, dyn_buf, dyn_size);
+    av_free(dyn_buf);
+}
+
 static void write_headers(NUTContext *nut, ByteIOContext *bc){
     ByteIOContext dyn_bc;
     int i;
@@ -328,6 +361,10 @@ static void write_headers(NUTContext *nut, ByteIOContext *bc){
         write_streamheader(nut, &dyn_bc, codec, i);
         put_packet(nut, bc, &dyn_bc, 1, STREAM_STARTCODE);
     }
+
+    url_open_dyn_buf(&dyn_bc);
+    write_globalinfo(nut, &dyn_bc);
+    put_packet(nut, bc, &dyn_bc, 1, INFO_STARTCODE);
 }
 
 static int write_header(AVFormatContext *s){
@@ -379,7 +416,7 @@ static int write_header(AVFormatContext *s){
 
     put_flush_packet(bc);
 
-    //FIXME info header, header repeation, index
+    //FIXME header repeation, index
 
     return 0;
 }