mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-20 21:16:24 +00:00
vapostproc: Move up color balance detection to plugin.
In order to install the color balance interface, a GstVaFilter is instantiated and queried to know if it supports color balance filter. It was done just after the GObject was registered. Now, it's done before. The reason of this change is that deinterlace element has to be registered only if deinterlace filter is available, using only one instantiate of GstVaFilter. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2495>
This commit is contained in:
parent
ece5feeb8d
commit
0a7828e9ba
3 changed files with 24 additions and 11 deletions
|
@ -1893,7 +1893,8 @@ _register_debug_category (gpointer data)
|
|||
}
|
||||
|
||||
gboolean
|
||||
gst_va_vpp_register (GstPlugin * plugin, GstVaDevice * device, guint rank)
|
||||
gst_va_vpp_register (GstPlugin * plugin, GstVaDevice * device,
|
||||
gboolean has_colorbalance, guint rank)
|
||||
{
|
||||
static GOnce debug_once = G_ONCE_INIT;
|
||||
GType type;
|
||||
|
@ -1940,14 +1941,9 @@ gst_va_vpp_register (GstPlugin * plugin, GstVaDevice * device, guint rank)
|
|||
type = g_type_register_static (GST_TYPE_VA_BASE_TRANSFORM, type_name,
|
||||
&type_info, 0);
|
||||
|
||||
{
|
||||
GstVaFilter *filter = gst_va_filter_new (device->display);
|
||||
if (gst_va_filter_open (filter)
|
||||
&& gst_va_filter_has_filter (filter, VAProcFilterColorBalance)) {
|
||||
const GInterfaceInfo info = { gst_va_vpp_colorbalance_init, NULL, NULL };
|
||||
g_type_add_interface_static (type, GST_TYPE_COLOR_BALANCE, &info);
|
||||
}
|
||||
gst_object_unref (filter);
|
||||
if (has_colorbalance) {
|
||||
const GInterfaceInfo info = { gst_va_vpp_colorbalance_init, NULL, NULL };
|
||||
g_type_add_interface_static (type, GST_TYPE_COLOR_BALANCE, &info);
|
||||
}
|
||||
|
||||
ret = gst_element_register (plugin, feature_name, rank, type);
|
||||
|
|
|
@ -26,6 +26,7 @@ G_BEGIN_DECLS
|
|||
|
||||
gboolean gst_va_vpp_register (GstPlugin * plugin,
|
||||
GstVaDevice * device,
|
||||
gboolean has_colorbalance,
|
||||
guint rank);
|
||||
|
||||
G_END_DECLS
|
||||
|
|
|
@ -27,15 +27,16 @@
|
|||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include "gstvaav1dec.h"
|
||||
#include "gstvacaps.h"
|
||||
#include "gstvadevice.h"
|
||||
#include "gstvafilter.h"
|
||||
#include "gstvah264dec.h"
|
||||
#include "gstvah265dec.h"
|
||||
#include "gstvampeg2dec.h"
|
||||
#include "gstvaprofile.h"
|
||||
#include "gstvavp8dec.h"
|
||||
#include "gstvavp9dec.h"
|
||||
#include "gstvaav1dec.h"
|
||||
#include "gstvavpp.h"
|
||||
|
||||
#define GST_CAT_DEFAULT gstva_debug
|
||||
|
@ -188,7 +189,22 @@ plugin_register_encoders (GstPlugin * plugin, GstVaDevice * device,
|
|||
static void
|
||||
plugin_register_vpp (GstPlugin * plugin, GstVaDevice * device)
|
||||
{
|
||||
if (!gst_va_vpp_register (plugin, device, GST_RANK_NONE))
|
||||
GstVaFilter *filter;
|
||||
gboolean has_colorbalance;
|
||||
|
||||
has_colorbalance = FALSE;
|
||||
filter = gst_va_filter_new (device->display);
|
||||
if (gst_va_filter_open (filter)) {
|
||||
has_colorbalance =
|
||||
gst_va_filter_has_filter (filter, VAProcFilterColorBalance);
|
||||
} else {
|
||||
GST_WARNING ("Failed open VA filter");
|
||||
gst_object_unref (filter);
|
||||
return;
|
||||
}
|
||||
gst_object_unref (filter);
|
||||
|
||||
if (!gst_va_vpp_register (plugin, device, has_colorbalance, GST_RANK_NONE))
|
||||
GST_WARNING ("Failed to register postproc: %s", device->render_device_path);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue