Hi,
Please apply this patch and check again:
diff --git a/multimedia_api/ll_samples/samples/00_video_decode/video_decode_main.cpp b/multimedia_api/ll_samples/samples/00_video_decode/video_decode_main.cpp
index 8bb14a9..f239996 100644
--- a/multimedia_api/ll_samples/samples/00_video_decode/video_decode_main.cpp
+++ b/multimedia_api/ll_samples/samples/00_video_decode/video_decode_main.cpp
@@ -992,6 +992,8 @@ dec_capture_loop_fcn(void *arg)
NvVideoDecoder *dec = ctx->dec;
struct v4l2_event ev;
int ret;
+ NvBufferSession session;
+ session = NvBufferSessionCreate();
cout << "Starting decoder capture loop thread" << endl;
/* Need to wait for the first Resolution change event, so that
@@ -1133,6 +1135,8 @@ dec_capture_loop_fcn(void *arg)
break;
}
#else
+ NvBufferSyncObj syncobj;
+
/* Clip & Stitch can be done by adjusting rectangle. */
NvBufferRect src_rect, dest_rect;
src_rect.top = 0;
@@ -1152,16 +1156,21 @@ dec_capture_loop_fcn(void *arg)
transform_params.transform_filter = NvBufferTransform_Filter_Nearest;
transform_params.src_rect = src_rect;
transform_params.dst_rect = dest_rect;
+ transform_params.session = session;
+
+ memset(&syncobj,0,sizeof(NvBufferSyncObj));
+ syncobj.use_outsyncobj = 1;
if(ctx->capture_plane_mem_type == V4L2_MEMORY_DMABUF)
dec_buffer->planes[0].fd = ctx->dmabuff_fd[v4l2_buf.index];
/* Perform Blocklinear to PitchLinear conversion. */
- ret = NvBufferTransform(dec_buffer->planes[0].fd, ctx->dst_dma_fd, &transform_params);
+ ret = NvBufferTransformAsync(dec_buffer->planes[0].fd, ctx->dst_dma_fd, &transform_params, &syncobj);
if (ret == -1)
{
cerr << "Transform failed" << endl;
break;
}
+ NvBufferSyncObjWait(&syncobj.outsyncobj, NVBUFFER_SYNCPOINT_WAIT_INFINITE);
/* Write raw video frame to file. */
if (!ctx->stats && ctx->out_file)
@@ -1220,6 +1229,7 @@ dec_capture_loop_fcn(void *arg)
}
}
#endif
+ NvBufferSessionDestroy(session);
cout << "Exiting decoder capture loop thread" << endl;
return NULL;
}
@@ -1734,7 +1744,7 @@ static bool decoder_proc_blocking(context_t &ctx, bool eos, uint32_t current_fil
memcpy(&temp_buf,&v4l2_buf,sizeof(v4l2_buffer));
}
}
-
+usleep(40000);
/* enqueue a buffer for output plane. */
ret = ctx.dec->output_plane.qBuffer(v4l2_buf, NULL);
if (ret < 0)
In the patch, it creates NvBufferSession and calls NvBufferTransformAsync(). Please try this method.