GstH264EncoderPrivate *h264_prv = GST_H264_ENCODER_GET_PRIVATE(h264_encoder);
GstVaapiVideoBuffer *return_buf = NULL;
GstVaapiVideoBuffer *tmp_next_buf = NULL;
- guint64 pts = 0;
- guint32 cts = 0;
+ //guint64 pts = 0;
if (NULL == display_buf && g_queue_is_empty(h264_prv->queued_buffers)) {
ret = ENCODER_BUFFER_EMPTY;
end:
*out_buf = return_buf;
/* calculate cts/pts/dts */
+#if 0
if (return_buf) {
pts = GST_BUFFER_TIMESTAMP(return_buf);
tmp_next_buf = (GstVaapiVideoBuffer*)g_queue_peek_head(h264_prv->queued_buffers);
} else if (SLICE_TYPE_B == h264_prv->cur_slice_type) {
GST_BUFFER_TIMESTAMP(return_buf) = h264_prv->last_decode_time;
}
- cts = (pts + h264_prv->default_cts_offset - GST_BUFFER_TIMESTAMP(return_buf));
- ENCODER_ASSERT(cts < 0x80000000);
- if (cts > 0x80000000) {
- cts = 0;
+
+ pts += h264_prv->default_cts_offset;
+ if ((gint64)(pts - GST_BUFFER_TIMESTAMP(return_buf)) < 0) {
+ pts = GST_BUFFER_TIMESTAMP(return_buf);
}
- GST_BUFFER_OFFSET_END(return_buf) = cts;
+
+ GST_BUFFER_OFFSET_END(return_buf) = pts;
+ GST_BUFFER_TIMESTAMP(return_buf) = pts;
}
+#endif
+
return ret;
}
pic_h264.pic_fields.bits.transform_8x8_mode_flag = 1;
pic_h264.pic_fields.bits.deblocking_filter_control_present_flag = 1;
+ char *frame_type = "I";
+ if (h264_prv->cur_slice_type == SLICE_TYPE_P)
+ frame_type = "P";
+ if (h264_prv->cur_slice_type == SLICE_TYPE_B)
+ frame_type = "B";
+ ENCODER_LOG_INFO("type:%s, frame_num:%d, display_num:%d\n",
+ frame_type, pic_h264.frame_num, pic_h264.CurrPic.TopFieldOrderCnt);
+
if (VA_INVALID_ID != h264_prv->pic_parameter) { /* share the same pic_parameter*/
vaDestroyBuffer(va_dpy, h264_prv->pic_parameter);
h264_prv->pic_parameter = VA_INVALID_ID;