mirror of https://github.com/HandBrake/HandBrake
68 lines
1.9 KiB
C
68 lines
1.9 KiB
C
/* grayscale.c
|
|
|
|
Copyright (c) 2003-2025 HandBrake Team
|
|
This file is part of the HandBrake source code
|
|
Homepage: <http://handbrake.fr/>.
|
|
It may be used under the terms of the GNU General Public License v2.
|
|
For full terms see the file COPYING file or visit http://www.gnu.org/licenses/gpl-2.0.html
|
|
*/
|
|
|
|
#include "handbrake/handbrake.h"
|
|
#include "handbrake/avfilter_priv.h"
|
|
|
|
const char grayscale_template[] =
|
|
"cb=^"HB_FLOAT_REG"$:cr=^"HB_FLOAT_REG"$:size=^"HB_FLOAT_REG"$:high=^"HB_FLOAT_REG"$";
|
|
|
|
static int grayscale_init(hb_filter_object_t *filter, hb_filter_init_t *init);
|
|
|
|
hb_filter_object_t hb_filter_grayscale =
|
|
{
|
|
.id = HB_FILTER_GRAYSCALE,
|
|
.enforce_order = 1,
|
|
.skip = 1,
|
|
.name = "Grayscale",
|
|
.settings = NULL,
|
|
.init = grayscale_init,
|
|
.work = hb_avfilter_null_work,
|
|
.close = hb_avfilter_alias_close,
|
|
.settings_template = grayscale_template
|
|
};
|
|
|
|
static int grayscale_init(hb_filter_object_t * filter, hb_filter_init_t *init)
|
|
{
|
|
hb_filter_private_t *pv = NULL;
|
|
|
|
pv = calloc(1, sizeof(struct hb_filter_private_s));
|
|
filter->private_data = pv;
|
|
if (pv == NULL)
|
|
{
|
|
return 1;
|
|
}
|
|
pv->input = *init;
|
|
|
|
hb_dict_t *settings = filter->settings;
|
|
|
|
double cb = 0, cr = 0, size = 1, high = 0;
|
|
|
|
hb_dict_extract_double(&cb, settings, "cb");
|
|
hb_dict_extract_double(&cr, settings, "cr");
|
|
hb_dict_extract_double(&size, settings, "size");
|
|
hb_dict_extract_double(&high, settings, "high");
|
|
|
|
hb_dict_t *avsettings = hb_dict_init();
|
|
hb_dict_t *avfilter = hb_dict_init();
|
|
|
|
hb_dict_set_double(avsettings, "cb", cb);
|
|
hb_dict_set_double(avsettings, "cr", cr);
|
|
hb_dict_set_double(avsettings, "size", size);
|
|
hb_dict_set_double(avsettings, "high", high);
|
|
|
|
hb_dict_set(avfilter, "monochrome", avsettings);
|
|
|
|
pv->avfilters = avfilter;
|
|
|
|
pv->output = *init;
|
|
|
|
return 0;
|
|
}
|