mpeg2enc: update temporal_reference
authorXiang, Haihao <haihao.xiang@intel.com>
Mon, 26 Nov 2012 08:16:00 +0000 (16:16 +0800)
committerXiang, Haihao <haihao.xiang@intel.com>
Fri, 7 Dec 2012 08:05:34 +0000 (16:05 +0800)
Insert a GOP header once temporal_reference is 0

Signed-off-by: Xiang, Haihao <haihao.xiang@intel.com>
test/encode/mpeg2enc.c

index 5a29786..c214e67 100644 (file)
@@ -274,13 +274,6 @@ sps_rbsp(const VAEncSequenceParameterBufferMPEG2 *seq_param,
     bitstream_put_ui(bs, seq_param->sequence_extension.bits.frame_rate_extension_d, 5);
 
     bitstream_byte_aligning(bs, 0);
-
-    bitstream_put_ui(bs, START_CODE_GOP, 32);
-    bitstream_put_ui(bs, seq_param->gop_header.bits.time_code, 25);
-    bitstream_put_ui(bs, seq_param->gop_header.bits.closed_gop, 1);
-    bitstream_put_ui(bs, seq_param->gop_header.bits.broken_link, 1);
-
-    bitstream_byte_aligning(bs, 0);
 }
 
 static void 
@@ -291,6 +284,15 @@ pps_rbsp(const VAEncSequenceParameterBufferMPEG2 *seq_param,
     int i;
     int chroma_420_type;
 
+    if (pic_param->temporal_reference == 0) {
+        bitstream_put_ui(bs, START_CODE_GOP, 32);
+        bitstream_put_ui(bs, seq_param->gop_header.bits.time_code, 25);
+        bitstream_put_ui(bs, seq_param->gop_header.bits.closed_gop, 1);
+        bitstream_put_ui(bs, seq_param->gop_header.bits.broken_link, 1);
+
+        bitstream_byte_aligning(bs, 0);
+    }
+
     if (seq_param->sequence_extension.bits.chroma_format == CHROMA_FORMAT_420)
         chroma_420_type = pic_param->picture_coding_extension.bits.progressive_frame;
     else
@@ -831,7 +833,7 @@ mpeg2enc_update_picture_parameter(struct mpeg2enc_context *ctx,
     // Picture level
     pic_param = &ctx->pic_param;
     pic_param->picture_type = picture_type;
-    pic_param->temporal_reference = display_order;
+    pic_param->temporal_reference = display_order % ctx->intra_period;
     pic_param->reconstructed_picture = surface_ids[SID_RECON_PICTURE];
     pic_param->forward_reference_picture = surface_ids[SID_REFERENCE_PICTURE_L0];
     pic_param->backward_reference_picture = surface_ids[SID_REFERENCE_PICTURE_L1];