2 * Copyright (C) <2013> Wim Taymans <wim.taymans@gmail.com>
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Library General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Library General Public License for more details.
14 * You should have received a copy of the GNU Library General Public
15 * License along with this library; if not, write to the
16 * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
17 * Boston, MA 02110-1301, USA.
20 #ifndef __GST_VIDEO_CHROMA_H__
21 #define __GST_VIDEO_CHROMA_H__
24 #include <gst/video/video-prelude.h>
30 * @GST_VIDEO_CHROMA_SITE_UNKNOWN: unknown cositing
31 * @GST_VIDEO_CHROMA_SITE_NONE: no cositing
32 * @GST_VIDEO_CHROMA_SITE_H_COSITED: chroma is horizontally cosited
33 * @GST_VIDEO_CHROMA_SITE_V_COSITED: chroma is vertically cosited
34 * @GST_VIDEO_CHROMA_SITE_ALT_LINE: choma samples are sited on alternate lines
35 * @GST_VIDEO_CHROMA_SITE_COSITED: chroma samples cosited with luma samples
36 * @GST_VIDEO_CHROMA_SITE_JPEG: jpeg style cositing, also for mpeg1 and mjpeg
37 * @GST_VIDEO_CHROMA_SITE_MPEG2: mpeg2 style cositing
38 * @GST_VIDEO_CHROMA_SITE_DV: DV style cositing
40 * Various Chroma sitings.
43 GST_VIDEO_CHROMA_SITE_UNKNOWN = 0,
44 GST_VIDEO_CHROMA_SITE_NONE = (1 << 0),
45 GST_VIDEO_CHROMA_SITE_H_COSITED = (1 << 1),
46 GST_VIDEO_CHROMA_SITE_V_COSITED = (1 << 2),
47 GST_VIDEO_CHROMA_SITE_ALT_LINE = (1 << 3),
48 /* some common chroma cositing */
49 GST_VIDEO_CHROMA_SITE_COSITED = (GST_VIDEO_CHROMA_SITE_H_COSITED | GST_VIDEO_CHROMA_SITE_V_COSITED),
50 GST_VIDEO_CHROMA_SITE_JPEG = (GST_VIDEO_CHROMA_SITE_NONE),
51 GST_VIDEO_CHROMA_SITE_MPEG2 = (GST_VIDEO_CHROMA_SITE_H_COSITED),
52 GST_VIDEO_CHROMA_SITE_DV = (GST_VIDEO_CHROMA_SITE_COSITED | GST_VIDEO_CHROMA_SITE_ALT_LINE),
55 GST_VIDEO_DEPRECATED_FOR(gst_video_chroma_site_from_string)
56 GstVideoChromaSite gst_video_chroma_from_string (const gchar * s);
58 GST_VIDEO_DEPRECATED_FOR(gst_video_chroma_site_to_string)
59 const gchar * gst_video_chroma_to_string (GstVideoChromaSite site);
62 GstVideoChromaSite gst_video_chroma_site_from_string (const gchar * s);
65 gchar * gst_video_chroma_site_to_string (GstVideoChromaSite site);
68 * GstVideoChromaMethod:
69 * @GST_VIDEO_CHROMA_METHOD_NEAREST: Duplicates the chroma samples when
70 * upsampling and drops when subsampling
71 * @GST_VIDEO_CHROMA_METHOD_LINEAR: Uses linear interpolation to reconstruct
72 * missing chroma and averaging to subsample
74 * Different subsampling and upsampling methods
77 GST_VIDEO_CHROMA_METHOD_NEAREST,
78 GST_VIDEO_CHROMA_METHOD_LINEAR
79 } GstVideoChromaMethod;
82 * GstVideoChromaFlags:
83 * @GST_VIDEO_CHROMA_FLAG_NONE: no flags
84 * @GST_VIDEO_CHROMA_FLAG_INTERLACED: the input is interlaced
86 * Extra flags that influence the result from gst_video_chroma_resample_new().
89 GST_VIDEO_CHROMA_FLAG_NONE = 0,
90 GST_VIDEO_CHROMA_FLAG_INTERLACED = (1 << 0),
91 } GstVideoChromaFlags;
93 typedef struct _GstVideoChromaResample GstVideoChromaResample;
95 /* circular dependency, need to include this after defining the enums */
96 #include <gst/video/video-format.h>
99 GstVideoChromaResample * gst_video_chroma_resample_new (GstVideoChromaMethod method,
100 GstVideoChromaSite site,
101 GstVideoChromaFlags flags,
102 GstVideoFormat format,
103 gint h_factor, gint v_factor);
106 void gst_video_chroma_resample_free (GstVideoChromaResample *resample);
109 void gst_video_chroma_resample_get_info (GstVideoChromaResample *resample,
110 guint * n_lines, gint *offset);
113 void gst_video_chroma_resample (GstVideoChromaResample *resample,
114 gpointer lines[], gint width);
118 #endif /* __GST_VIDEO_CHROMA_H__ */