summaryrefslogtreecommitdiff
path: root/test/encode/mpeg2enc.c
diff options
context:
space:
mode:
authorXiang, Haihao <haihao.xiang@intel.com>2012-11-27 16:24:07 +0800
committerXiang, Haihao <haihao.xiang@intel.com>2013-05-28 16:46:48 +0800
commit6f4a1d9921c4dd249401dbedff0c53678c6419d8 (patch)
tree569fa38258d849a83d20036268a37564bbb71cbd /test/encode/mpeg2enc.c
parent1103936d73f4c5664e0b5824ff64bdf4059f5607 (diff)
mpeg2enc: update time_code for the new GOP
Signed-off-by: Xiang, Haihao <haihao.xiang@intel.com>
Diffstat (limited to 'test/encode/mpeg2enc.c')
-rw-r--r--test/encode/mpeg2enc.c40
1 files changed, 40 insertions, 0 deletions
diff --git a/test/encode/mpeg2enc.c b/test/encode/mpeg2enc.c
index 3054849..b37095a 100644
--- a/test/encode/mpeg2enc.c
+++ b/test/encode/mpeg2enc.c
@@ -816,6 +816,39 @@ mpeg2enc_init(struct mpeg2enc_context *ctx)
ctx);
}
+static int
+mpeg2enc_time_code(VAEncSequenceParameterBufferMPEG2 *seq_param,
+ int num_frames)
+{
+ int fps = (int)(seq_param->frame_rate + 0.5);
+ int time_code = 0;
+ int time_code_pictures, time_code_seconds, time_code_minutes, time_code_hours;
+ int drop_frame_flag = 0;
+
+ assert(fps <= 60);
+
+ time_code_seconds = num_frames / fps;
+ time_code_pictures = num_frames % fps;
+ time_code |= time_code_pictures;
+
+ time_code_minutes = time_code_minutes / 60;
+ time_code_seconds = time_code_minutes % 60;
+ time_code |= (time_code_seconds << 6);
+
+ time_code_hours = time_code_minutes / 60;
+ time_code_minutes = time_code_minutes % 60;
+
+ time_code |= (1 << 12); /* marker_bit */
+ time_code |= (time_code_minutes << 13);
+
+ time_code_hours = time_code_hours % 24;
+ time_code |= (time_code_hours << 19);
+
+ time_code |= (drop_frame_flag << 24);
+
+ return time_code;
+}
+
/*
* run
*/
@@ -825,6 +858,7 @@ mpeg2enc_update_picture_parameter(struct mpeg2enc_context *ctx,
int coded_order,
int display_order)
{
+ VAEncSequenceParameterBufferMPEG2 *seq_param;
VAEncPictureParameterBufferMPEG2 *pic_param;
VAStatus va_status;
@@ -845,6 +879,12 @@ mpeg2enc_update_picture_parameter(struct mpeg2enc_context *ctx,
pic_param,
&ctx->pic_param_buf_id);
CHECK_VASTATUS(va_status, "vaCreateBuffer");
+
+ seq_param = &ctx->seq_param;
+
+ if (pic_param->temporal_reference == 0) { /* I frame */
+ seq_param->gop_header.bits.time_code = mpeg2enc_time_code(seq_param, display_order); /* bit12: marker_bit */
+ }
}
static void