place SPS/PPS in extradata if GLOBAL_HEADER flag is set
authorMåns Rullgård <mans@mansr.com>
Fri, 20 Jan 2006 21:20:46 +0000 (21:20 +0000)
committerMåns Rullgård <mans@mansr.com>
Fri, 20 Jan 2006 21:20:46 +0000 (21:20 +0000)
Originally committed as revision 4872 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavcodec/x264.c

index 68f1638569011a3bbffc8c0b8dea43cf21c30a1a..31fe5cc65b2e03701ede6d0c4f604b4c7b947e92 100644 (file)
@@ -247,12 +247,30 @@ X264_init(AVCodecContext *avctx)
 
     x4->params.i_threads = avctx->thread_count;
 
+    if(avctx->flags & CODEC_FLAG_GLOBAL_HEADER){
+        x4->params.b_repeat_headers = 0;
+    }
+
     x4->enc = x264_encoder_open(&x4->params);
     if(!x4->enc)
         return -1;
 
     avctx->coded_frame = &x4->out_pic;
 
+    if(avctx->flags & CODEC_FLAG_GLOBAL_HEADER){
+       x264_nal_t *nal;
+       int nnal, i, s = 0;
+
+       x264_encoder_headers(x4->enc, &nal, &nnal);
+
+       /* 5 bytes NAL header + worst case escaping */
+       for(i = 0; i < nnal; i++)
+           s += 5 + nal[i].i_payload * 4 / 3;
+
+        avctx->extradata = av_malloc(s);
+        avctx->extradata_size = encode_nals(avctx->extradata, s, nal, nnal);
+    }
+
     return 0;
 }