mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-03-30 12:49:40 +00:00
msdkdec: expand retry times to 1s
One-frame sleep time is not enough to wait until there is a surface unlocked from downstream. Now expand it to 1s and add a return when fail. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4088>
This commit is contained in:
parent
123c8d14c1
commit
8105d2044d
1 changed files with 6 additions and 5 deletions
|
@ -197,9 +197,7 @@ allocate_output_surface (GstMsdkDec * thiz)
|
|||
GstMemory *mem = NULL;
|
||||
mfxFrameSurface1 *mfx_surface = NULL;
|
||||
gint n = 0;
|
||||
guint retry_times = gst_util_uint64_scale_ceil (GST_USECOND,
|
||||
thiz->param.mfx.FrameInfo.FrameRateExtD,
|
||||
thiz->param.mfx.FrameInfo.FrameRateExtN);
|
||||
guint retry_times = 1000;
|
||||
#ifdef _WIN32
|
||||
GstMapInfo map_info;
|
||||
#endif
|
||||
|
@ -207,7 +205,7 @@ allocate_output_surface (GstMsdkDec * thiz)
|
|||
/* Free un-unsed msdk surfaces firstly, hence the associated mfx
|
||||
* surfaces will be moved from used list to available list */
|
||||
if (!gst_msdkdec_free_unlocked_msdk_surfaces (thiz, FALSE)) {
|
||||
while (n < retry_times) {
|
||||
for (n = 0; n < retry_times; n++) {
|
||||
/* It is MediaSDK/oneVPL's requirement that only the pre-allocated
|
||||
* surfaces can be used during the whole decoding process.
|
||||
* In the case of decoder plus multi-encoders, it is possible
|
||||
|
@ -215,11 +213,14 @@ allocate_output_surface (GstMsdkDec * thiz)
|
|||
* available for decoder. So here we need to wait until there is at
|
||||
* least one surface is free for decoder.
|
||||
*/
|
||||
n++;
|
||||
g_usleep (1000);
|
||||
if (gst_msdkdec_free_unlocked_msdk_surfaces (thiz, TRUE))
|
||||
break;
|
||||
}
|
||||
if (n == retry_times) {
|
||||
GST_WARNING ("No available unlocked msdk surfaces");
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
if ((gst_buffer_pool_acquire_buffer (thiz->alloc_pool, &out_buffer, NULL))
|
||||
|
|
Loading…
Reference in a new issue