| /* GStreamer |
| * Copyright (C) <2014> Wim Taymans <wim.taymans@gmail.com> |
| * |
| * This library is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU Library General Public |
| * License as published by the Free Software Foundation; either |
| * version 2 of the License, or (at your option) any later version. |
| * |
| * This library is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| * Library General Public License for more details. |
| * |
| * You should have received a copy of the GNU Library General Public |
| * License along with this library; if not, write to the |
| * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, |
| * Boston, MA 02110-1301, USA. |
| */ |
| |
| #ifndef __GST_VIDEO_RESAMPLER_H__ |
| #define __GST_VIDEO_RESAMPLER_H__ |
| |
| #include <gst/gst.h> |
| |
| G_BEGIN_DECLS |
| |
| typedef struct _GstVideoResampler GstVideoResampler; |
| |
| /** |
| * GstVideoResamplerMethod: |
| * @GST_VIDEO_RESAMPLER_METHOD_NEAREST: Duplicates the samples when |
| * upsampling and drops when downsampling |
| * @GST_VIDEO_RESAMPLER_METHOD_LINEAR: Uses linear interpolation to reconstruct |
| * missing samples and averaging to downsample |
| * @GST_VIDEO_RESAMPLER_METHOD_CUBIC: Uses cubic interpolation |
| * @GST_VIDEO_RESAMPLER_METHOD_SINC: Uses sinc interpolation |
| * @GST_VIDEO_RESAMPLER_METHOD_LANCZOS: Uses lanczos interpolation |
| * |
| * Different subsampling and upsampling methods |
| * |
| * Since: 1.6 |
| */ |
| typedef enum { |
| GST_VIDEO_RESAMPLER_METHOD_NEAREST, |
| GST_VIDEO_RESAMPLER_METHOD_LINEAR, |
| GST_VIDEO_RESAMPLER_METHOD_CUBIC, |
| GST_VIDEO_RESAMPLER_METHOD_SINC, |
| GST_VIDEO_RESAMPLER_METHOD_LANCZOS |
| } GstVideoResamplerMethod; |
| |
| /** |
| * GST_VIDEO_RESAMPLER_OPT_CUBIC_B: |
| * |
| * G_TYPE_DOUBLE, B parameter of the cubic filter. The B |
| * parameter controls the bluriness. Values between 0.0 and |
| * 2.0 are accepted. 1/3 is the default. |
| * |
| * Below are some values of popular filters: |
| * B C |
| * Hermite 0.0 0.0 |
| * Spline 1.0 0.0 |
| * Catmull-Rom 0.0 1/2 |
| * Mitchell 1/3 1/3 |
| * Robidoux 0.3782 0.3109 |
| * Robidoux |
| * Sharp 0.2620 0.3690 |
| * Robidoux |
| * Soft 0.6796 0.1602 |
| */ |
| #define GST_VIDEO_RESAMPLER_OPT_CUBIC_B "GstVideoResampler.cubic-b" |
| /** |
| * GST_VIDEO_RESAMPLER_OPT_CUBIC_C: |
| * |
| * G_TYPE_DOUBLE, C parameter of the cubic filter. The C |
| * parameter controls the Keys alpha value. Values between 0.0 and |
| * 2.0 are accepted. 1/3 is the default. |
| * |
| * See #GST_VIDEO_RESAMPLER_OPT_CUBIC_B for some more common values |
| */ |
| #define GST_VIDEO_RESAMPLER_OPT_CUBIC_C "GstVideoResampler.cubic-c" |
| |
| /** |
| * GST_VIDEO_RESAMPLER_OPT_ENVELOPE: |
| * |
| * G_TYPE_DOUBLE, specifies the size of filter envelope for |
| * @GST_VIDEO_RESAMPLER_METHOD_LANCZOS. values are clamped between |
| * 1.0 and 5.0. 2.0 is the default. |
| */ |
| #define GST_VIDEO_RESAMPLER_OPT_ENVELOPE "GstVideoResampler.envelope" |
| |
| /** |
| * GST_VIDEO_RESAMPLER_OPT_SHARPNESS: |
| * |
| * G_TYPE_DOUBLE, specifies sharpness of the filter for |
| * @GST_VIDEO_RESAMPLER_METHOD_LANCZOS. values are clamped between |
| * 0.5 and 1.5. 1.0 is the default. |
| */ |
| #define GST_VIDEO_RESAMPLER_OPT_SHARPNESS "GstVideoResampler.sharpness" |
| |
| /** |
| * GST_VIDEO_RESAMPLER_OPT_SHARPEN: |
| * |
| * G_TYPE_DOUBLE, specifies sharpening of the filter for |
| * @GST_VIDEO_RESAMPLER_METHOD_LANCZOS. values are clamped between |
| * 0.0 and 1.0. 0.0 is the default. |
| */ |
| #define GST_VIDEO_RESAMPLER_OPT_SHARPEN "GstVideoResampler.sharpen" |
| /** |
| * GST_VIDEO_RESAMPLER_OPT_MAX_TAPS: |
| * |
| * G_TYPE_INT, limits the maximum number of taps to use. |
| * 16 is the default. |
| */ |
| #define GST_VIDEO_RESAMPLER_OPT_MAX_TAPS "GstVideoResampler.max-taps" |
| |
| /** |
| * GstVideoResamplerFlags: |
| * @GST_VIDEO_RESAMPLER_FLAG_NONE: no flags |
| * @GST_VIDEO_RESAMPLER_FLAG_HALF_TAPS: when no taps are given, half the |
| * number of calculated taps. This can be used when making scalers |
| * for the different fields of an interlaced picture. Since 1.10 |
| * |
| * Different resampler flags. |
| * |
| * Since: 1.6 |
| */ |
| typedef enum { |
| GST_VIDEO_RESAMPLER_FLAG_NONE = (0), |
| GST_VIDEO_RESAMPLER_FLAG_HALF_TAPS = (1 << 0), |
| } GstVideoResamplerFlags; |
| |
| /** |
| * GstVideoResampler: |
| * @in_size: the input size |
| * @out_size: the output size |
| * @max_taps: the maximum number of taps |
| * @n_phases: the number of phases |
| * @offset: array with the source offset for each output element |
| * @phase: array with the phase to use for each output element |
| * @n_taps: array with new number of taps for each phase |
| * @taps: the taps for all phases |
| * |
| * A structure holding resampler information. |
| * |
| * Since: 1.6 |
| */ |
| struct _GstVideoResampler |
| { |
| gint in_size; |
| gint out_size; |
| guint max_taps; |
| guint n_phases; |
| guint32 *offset; |
| guint32 *phase; |
| guint32 *n_taps; |
| gdouble *taps; |
| |
| /*< private >*/ |
| gpointer _gst_reserved[GST_PADDING]; |
| }; |
| |
| |
| gboolean gst_video_resampler_init (GstVideoResampler *resampler, |
| GstVideoResamplerMethod method, |
| GstVideoResamplerFlags flags, |
| guint n_phases, guint n_taps, |
| gdouble shift, |
| guint in_size, guint out_size, |
| GstStructure *options); |
| |
| void gst_video_resampler_clear (GstVideoResampler *resampler); |
| |
| G_END_DECLS |
| |
| #endif /* __GST_VIDEO_RESAMPLER_H__ */ |