mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-10 03:19:40 +00:00
gstvaapicontext: control reset_on_resize with option
Signed-off-by: Scott D Phillips <scott.d.phillips@intel.com> https://bugzilla.gnome.org/show_bug.cgi?id=767474
This commit is contained in:
parent
b5bf2e83f7
commit
ad9fcb9386
3 changed files with 28 additions and 1 deletions
|
@ -323,6 +323,7 @@ gst_vaapi_context_init (GstVaapiContext * context,
|
||||||
cip->chroma_type = DEFAULT_CHROMA_TYPE;
|
cip->chroma_type = DEFAULT_CHROMA_TYPE;
|
||||||
|
|
||||||
context->va_config = VA_INVALID_ID;
|
context->va_config = VA_INVALID_ID;
|
||||||
|
context->reset_on_resize = TRUE;
|
||||||
gst_vaapi_context_overlay_init (context);
|
gst_vaapi_context_overlay_init (context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -425,7 +426,7 @@ gst_vaapi_context_reset (GstVaapiContext * context,
|
||||||
if (context_update_config_encoder (context, &new_cip->config.encoder))
|
if (context_update_config_encoder (context, &new_cip->config.encoder))
|
||||||
reset_config = TRUE;
|
reset_config = TRUE;
|
||||||
} else if (new_cip->usage == GST_VAAPI_CONTEXT_USAGE_DECODE) {
|
} else if (new_cip->usage == GST_VAAPI_CONTEXT_USAGE_DECODE) {
|
||||||
if (reset_surfaces || grow_surfaces)
|
if ((reset_surfaces && context->reset_on_resize) || grow_surfaces)
|
||||||
reset_config = TRUE;
|
reset_config = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -499,3 +500,20 @@ gst_vaapi_context_get_surface_count (GstVaapiContext * context)
|
||||||
|
|
||||||
return gst_vaapi_video_pool_get_size (context->surfaces_pool);
|
return gst_vaapi_video_pool_get_size (context->surfaces_pool);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gst_vaapi_context_reset_on_resize:
|
||||||
|
* @context: a #GstVaapiContext
|
||||||
|
* @reset_on_resize: Should the context be reset on size change
|
||||||
|
*
|
||||||
|
* Sets whether the underlying context should be reset when a size change
|
||||||
|
* happens. The proper setting for this is codec dependent.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
gst_vaapi_context_reset_on_resize (GstVaapiContext * context,
|
||||||
|
gboolean reset_on_resize)
|
||||||
|
{
|
||||||
|
g_return_if_fail (context != NULL);
|
||||||
|
|
||||||
|
context->reset_on_resize = reset_on_resize;
|
||||||
|
}
|
||||||
|
|
|
@ -108,6 +108,7 @@ struct _GstVaapiContext
|
||||||
GstVaapiVideoPool *surfaces_pool;
|
GstVaapiVideoPool *surfaces_pool;
|
||||||
GPtrArray *overlays[2];
|
GPtrArray *overlays[2];
|
||||||
guint overlay_id;
|
guint overlay_id;
|
||||||
|
gboolean reset_on_resize;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -143,6 +144,11 @@ G_GNUC_INTERNAL
|
||||||
guint
|
guint
|
||||||
gst_vaapi_context_get_surface_count (GstVaapiContext * context);
|
gst_vaapi_context_get_surface_count (GstVaapiContext * context);
|
||||||
|
|
||||||
|
G_GNUC_INTERNAL
|
||||||
|
void
|
||||||
|
gst_vaapi_context_reset_on_resize (GstVaapiContext * context,
|
||||||
|
gboolean reset_on_resize);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
#endif /* GST_VAAPI_CONTEXT_H */
|
#endif /* GST_VAAPI_CONTEXT_H */
|
||||||
|
|
|
@ -220,6 +220,9 @@ ensure_context (GstVaapiDecoderVp9 * decoder)
|
||||||
|
|
||||||
if (!reset_context)
|
if (!reset_context)
|
||||||
return GST_VAAPI_DECODER_STATUS_ERROR_UNKNOWN;
|
return GST_VAAPI_DECODER_STATUS_ERROR_UNKNOWN;
|
||||||
|
|
||||||
|
gst_vaapi_context_reset_on_resize (GST_VAAPI_DECODER_CONTEXT (decoder),
|
||||||
|
FALSE);
|
||||||
}
|
}
|
||||||
return GST_VAAPI_DECODER_STATUS_SUCCESS;
|
return GST_VAAPI_DECODER_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue