videoscale: add property to do scaling after gamma-decode
This commit is contained in:
parent
724b83c5f5
commit
43f44d41dc
@ -90,6 +90,7 @@ GST_DEBUG_CATEGORY_STATIC (GST_CAT_PERFORMANCE);
|
|||||||
#define DEFAULT_PROP_DITHER FALSE
|
#define DEFAULT_PROP_DITHER FALSE
|
||||||
#define DEFAULT_PROP_SUBMETHOD 1
|
#define DEFAULT_PROP_SUBMETHOD 1
|
||||||
#define DEFAULT_PROP_ENVELOPE 2.0
|
#define DEFAULT_PROP_ENVELOPE 2.0
|
||||||
|
#define DEFAULT_PROP_GAMMA_DECODE FALSE
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
@ -100,7 +101,8 @@ enum
|
|||||||
PROP_SHARPEN,
|
PROP_SHARPEN,
|
||||||
PROP_DITHER,
|
PROP_DITHER,
|
||||||
PROP_SUBMETHOD,
|
PROP_SUBMETHOD,
|
||||||
PROP_ENVELOPE
|
PROP_ENVELOPE,
|
||||||
|
PROP_GAMMA_DECODE,
|
||||||
};
|
};
|
||||||
|
|
||||||
#undef GST_VIDEO_SIZE_RANGE
|
#undef GST_VIDEO_SIZE_RANGE
|
||||||
@ -254,9 +256,15 @@ gst_video_scale_class_init (GstVideoScaleClass * klass)
|
|||||||
"Size of filter envelope", 1.0, 5.0, DEFAULT_PROP_ENVELOPE,
|
"Size of filter envelope", 1.0, 5.0, DEFAULT_PROP_ENVELOPE,
|
||||||
G_PARAM_CONSTRUCT | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
G_PARAM_CONSTRUCT | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
||||||
|
|
||||||
|
g_object_class_install_property (gobject_class, PROP_GAMMA_DECODE,
|
||||||
|
g_param_spec_boolean ("gamma-decode", "Gamma Decode",
|
||||||
|
"Decode gamma before scaling", DEFAULT_PROP_GAMMA_DECODE,
|
||||||
|
G_PARAM_CONSTRUCT | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
||||||
|
|
||||||
|
|
||||||
gst_element_class_set_static_metadata (element_class,
|
gst_element_class_set_static_metadata (element_class,
|
||||||
"Video scaler", "Filter/Converter/Video/Scaler",
|
"Video scaler", "Filter/Converter/Video/Scaler",
|
||||||
"Resizes video", "Wim Taymans <wim.taymans@chello.be>");
|
"Resizes video", "Wim Taymans <wim.taymans@gmail.com>");
|
||||||
|
|
||||||
gst_element_class_add_pad_template (element_class,
|
gst_element_class_add_pad_template (element_class,
|
||||||
gst_video_scale_sink_template_factory ());
|
gst_video_scale_sink_template_factory ());
|
||||||
@ -283,6 +291,7 @@ gst_video_scale_init (GstVideoScale * videoscale)
|
|||||||
videoscale->sharpen = DEFAULT_PROP_SHARPEN;
|
videoscale->sharpen = DEFAULT_PROP_SHARPEN;
|
||||||
videoscale->dither = DEFAULT_PROP_DITHER;
|
videoscale->dither = DEFAULT_PROP_DITHER;
|
||||||
videoscale->envelope = DEFAULT_PROP_ENVELOPE;
|
videoscale->envelope = DEFAULT_PROP_ENVELOPE;
|
||||||
|
videoscale->gamma_decode = DEFAULT_PROP_GAMMA_DECODE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -337,6 +346,11 @@ gst_video_scale_set_property (GObject * object, guint prop_id,
|
|||||||
vscale->envelope = g_value_get_double (value);
|
vscale->envelope = g_value_get_double (value);
|
||||||
GST_OBJECT_UNLOCK (vscale);
|
GST_OBJECT_UNLOCK (vscale);
|
||||||
break;
|
break;
|
||||||
|
case PROP_GAMMA_DECODE:
|
||||||
|
GST_OBJECT_LOCK (vscale);
|
||||||
|
vscale->gamma_decode = g_value_get_boolean (value);
|
||||||
|
GST_OBJECT_UNLOCK (vscale);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
break;
|
break;
|
||||||
@ -385,6 +399,11 @@ gst_video_scale_get_property (GObject * object, guint prop_id, GValue * value,
|
|||||||
g_value_set_double (value, vscale->envelope);
|
g_value_set_double (value, vscale->envelope);
|
||||||
GST_OBJECT_UNLOCK (vscale);
|
GST_OBJECT_UNLOCK (vscale);
|
||||||
break;
|
break;
|
||||||
|
case PROP_GAMMA_DECODE:
|
||||||
|
GST_OBJECT_LOCK (vscale);
|
||||||
|
g_value_set_boolean (value, vscale->gamma_decode);
|
||||||
|
GST_OBJECT_UNLOCK (vscale);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
break;
|
break;
|
||||||
@ -585,6 +604,11 @@ gst_video_scale_set_info (GstVideoFilter * filter, GstCaps * in,
|
|||||||
GST_VIDEO_CONVERTER_OPT_DEST_HEIGHT, G_TYPE_INT,
|
GST_VIDEO_CONVERTER_OPT_DEST_HEIGHT, G_TYPE_INT,
|
||||||
out_info->height - videoscale->borders_h, NULL);
|
out_info->height - videoscale->borders_h, NULL);
|
||||||
|
|
||||||
|
if (videoscale->gamma_decode) {
|
||||||
|
gst_structure_set (options,
|
||||||
|
GST_VIDEO_CONVERTER_OPT_GAMMA_MODE, G_TYPE_STRING, "remap", NULL);
|
||||||
|
}
|
||||||
|
|
||||||
if (videoscale->convert)
|
if (videoscale->convert)
|
||||||
gst_video_converter_free (videoscale->convert);
|
gst_video_converter_free (videoscale->convert);
|
||||||
videoscale->convert = gst_video_converter_new (in_info, out_info, options);
|
videoscale->convert = gst_video_converter_new (in_info, out_info, options);
|
||||||
|
@ -91,6 +91,7 @@ struct _GstVideoScale {
|
|||||||
gboolean dither;
|
gboolean dither;
|
||||||
int submethod;
|
int submethod;
|
||||||
double envelope;
|
double envelope;
|
||||||
|
gboolean gamma_decode;
|
||||||
|
|
||||||
GstVideoConverter *convert;
|
GstVideoConverter *convert;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user