mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-10-02 08:42:32 +00:00
msdkvpp: refact, put input and output surface in diffrent list
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1490>
This commit is contained in:
parent
5886138c13
commit
ea0aac4c19
2 changed files with 32 additions and 12 deletions
|
@ -188,12 +188,11 @@ free_msdk_surface (gpointer p)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
release_msdk_surface (GstMsdkVPP * thiz, MsdkSurface * surface)
|
release_msdk_surface (GstMsdkVPP * thiz, MsdkSurface * surface, GList ** list)
|
||||||
{
|
{
|
||||||
if (surface->surface) {
|
if (surface->surface) {
|
||||||
if (surface->surface->Data.Locked) {
|
if (surface->surface->Data.Locked) {
|
||||||
thiz->locked_msdk_surfaces =
|
*list = g_list_append (*list, surface);
|
||||||
g_list_append (thiz->locked_msdk_surfaces, surface);
|
|
||||||
} else {
|
} else {
|
||||||
free_msdk_surface (surface);
|
free_msdk_surface (surface);
|
||||||
}
|
}
|
||||||
|
@ -201,28 +200,48 @@ release_msdk_surface (GstMsdkVPP * thiz, MsdkSurface * surface)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
free_unlocked_msdk_surfaces (GstMsdkVPP * thiz)
|
release_in_surface (GstMsdkVPP * thiz, MsdkSurface * surface)
|
||||||
|
{
|
||||||
|
release_msdk_surface (thiz, surface, &thiz->locked_in_surfaces);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
release_out_surface (GstMsdkVPP * thiz, MsdkSurface * surface)
|
||||||
|
{
|
||||||
|
release_msdk_surface (thiz, surface, &thiz->locked_out_surfaces);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
free_unlocked_msdk_surfaces_from_list (GstMsdkVPP * thiz, GList ** list)
|
||||||
{
|
{
|
||||||
GList *l;
|
GList *l;
|
||||||
MsdkSurface *surface;
|
MsdkSurface *surface;
|
||||||
|
|
||||||
for (l = thiz->locked_msdk_surfaces; l;) {
|
for (l = *list; l;) {
|
||||||
GList *next = l->next;
|
GList *next = l->next;
|
||||||
surface = l->data;
|
surface = l->data;
|
||||||
if (surface->surface->Data.Locked == 0) {
|
if (surface->surface->Data.Locked == 0) {
|
||||||
free_msdk_surface (surface);
|
free_msdk_surface (surface);
|
||||||
thiz->locked_msdk_surfaces =
|
*list = g_list_delete_link (*list, l);
|
||||||
g_list_delete_link (thiz->locked_msdk_surfaces, l);
|
|
||||||
}
|
}
|
||||||
l = next;
|
l = next;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
free_unlocked_msdk_surfaces (GstMsdkVPP * thiz)
|
||||||
|
{
|
||||||
|
free_unlocked_msdk_surfaces_from_list (thiz, &thiz->locked_in_surfaces);
|
||||||
|
free_unlocked_msdk_surfaces_from_list (thiz, &thiz->locked_out_surfaces);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
free_all_msdk_surfaces (GstMsdkVPP * thiz)
|
free_all_msdk_surfaces (GstMsdkVPP * thiz)
|
||||||
{
|
{
|
||||||
g_list_free_full (thiz->locked_msdk_surfaces, free_msdk_surface);
|
g_list_free_full (thiz->locked_in_surfaces, free_msdk_surface);
|
||||||
thiz->locked_msdk_surfaces = NULL;
|
thiz->locked_in_surfaces = NULL;
|
||||||
|
g_list_free_full (thiz->locked_out_surfaces, free_msdk_surface);
|
||||||
|
thiz->locked_out_surfaces = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -925,8 +944,8 @@ error_push_buffer:
|
||||||
gst_flow_get_name (ret));
|
gst_flow_get_name (ret));
|
||||||
|
|
||||||
transform_end:
|
transform_end:
|
||||||
release_msdk_surface (thiz, in_surface);
|
release_in_surface (thiz, in_surface);
|
||||||
release_msdk_surface (thiz, out_surface);
|
release_out_surface (thiz, out_surface);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
|
@ -144,7 +144,8 @@ struct _GstMsdkVPP
|
||||||
guint num_extra_params;
|
guint num_extra_params;
|
||||||
|
|
||||||
mfxFrameAllocRequest request[2];
|
mfxFrameAllocRequest request[2];
|
||||||
GList* locked_msdk_surfaces;
|
GList* locked_in_surfaces;
|
||||||
|
GList* locked_out_surfaces;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _GstMsdkVPPClass
|
struct _GstMsdkVPPClass
|
||||||
|
|
Loading…
Reference in a new issue