projects
/
profile
/
ivi
/
gstreamer-vaapi.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
b95daf0
)
support B frames
author
Wind Yuan
<feng.yuan@intel.com>
Mon, 28 Nov 2011 06:17:52 +0000
(
01:17
-0500)
committer
Zhong Cong
<congx.zhong@intel.com>
Tue, 5 Feb 2013 07:37:11 +0000
(15:37 +0800)
gst/vaapiencode/gstvaapih264encoder.c
patch
|
blob
|
history
diff --git
a/gst/vaapiencode/gstvaapih264encoder.c
b/gst/vaapiencode/gstvaapih264encoder.c
index
4d7a039
..
c49d40a
100644
(file)
--- a/
gst/vaapiencode/gstvaapih264encoder.c
+++ b/
gst/vaapiencode/gstvaapih264encoder.c
@@
-680,8
+680,7
@@
gst_h264_encoder_prepare_next_buffer(GstVaapiBaseEncoder* encoder,
GstH264EncoderPrivate *h264_prv = GST_H264_ENCODER_GET_PRIVATE(h264_encoder);
GstVaapiVideoBuffer *return_buf = NULL;
GstVaapiVideoBuffer *tmp_next_buf = NULL;
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;
if (NULL == display_buf && g_queue_is_empty(h264_prv->queued_buffers)) {
ret = ENCODER_BUFFER_EMPTY;
@@
-736,6
+735,7
@@
gst_h264_encoder_prepare_next_buffer(GstVaapiBaseEncoder* encoder,
end:
*out_buf = return_buf;
/* calculate cts/pts/dts */
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);
if (return_buf) {
pts = GST_BUFFER_TIMESTAMP(return_buf);
tmp_next_buf = (GstVaapiVideoBuffer*)g_queue_peek_head(h264_prv->queued_buffers);
@@
-744,13
+744,17
@@
end:
} else if (SLICE_TYPE_B == h264_prv->cur_slice_type) {
GST_BUFFER_TIMESTAMP(return_buf) = h264_prv->last_decode_time;
}
} 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 > 0x8000000
0) {
-
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;
}
return ret;
}
@@
-1048,6
+1052,14
@@
h264_recreate_pic_param(GstH264Encoder *h264_encoder,
pic_h264.pic_fields.bits.transform_8x8_mode_flag = 1;
pic_h264.pic_fields.bits.deblocking_filter_control_present_flag = 1;
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;
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;