ENCODER_RELEASE_DISPLAY_LOCK(display);
while (buf_list != NULL) {
+ GstBuffer *new_data = NULL;
if (priv->frame_notify_flag && base_class->notify_frame) {
base_class->notify_frame(base_encoder,
buf_list->buf,
}
if (base_class->copy_coded_frame) {
- ret_buffer = base_class->copy_coded_frame(
+ new_data = base_class->copy_coded_frame(
base_encoder,
buf_list->buf,
buf_list->size,
coded_buf);
} else {
- ret_buffer = gst_vaapi_base_encoder_copy_buffer_default(
+ new_data = gst_vaapi_base_encoder_copy_buffer_default(
base_encoder,
buf_list->buf,
buf_list->size,
coded_buf);
}
+
+ if (!ret_buffer)
+ ret_buffer = new_data;
+ else if (new_data)
+ ret_buffer = gst_buffer_join(ret_buffer, new_data);
+ buf_list = (VACodedBufferSegment*)buf_list->next;
+ has_coded_data = TRUE;
+ }
+
+ if (ret_buffer) {
GST_BUFFER_TIMESTAMP(ret_buffer) = GST_BUFFER_TIMESTAMP(surface_buffer);
GST_BUFFER_DURATION(ret_buffer) = GST_BUFFER_DURATION(surface_buffer);
if (!is_key) {
GST_BUFFER_OFFSET_END(ret_buffer) =
GST_BUFFER_OFFSET_END(surface_buffer);
*coded_pics = g_list_append(*coded_pics, ret_buffer);
- buf_list = (VACodedBufferSegment*)buf_list->next;
- ENCODER_ASSERT(NULL == buf_list);
- has_coded_data = TRUE;
- FPS_CALCULATION(vaapiencode);
}
+ FPS_CALCULATION(vaapiencode);
#if SHARE_CODED_BUF
if (!has_coded_data)