1/* GStreamer
2 * Copyright (C) <2013> Wim Taymans <wim.taymans@gmail.com>
3 *
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.
8 *
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.
13 *
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.
18 */
19
20#ifndef __GST_VIDEO_CHROMA_H__
21#define __GST_VIDEO_CHROMA_H__
22
23#include <gst/gst.h>
24#include <gst/video/video-prelude.h>
25
26G_BEGIN_DECLS
27
28/**
29 * GstVideoChromaSite:
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
39 *
40 * Various Chroma sitings.
41 */
42typedef enum {
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),
53} GstVideoChromaSite;
54
55GST_VIDEO_DEPRECATED_FOR(gst_video_chroma_site_from_string)
56GstVideoChromaSite gst_video_chroma_from_string (const gchar * s);
57
58GST_VIDEO_DEPRECATED_FOR(gst_video_chroma_site_to_string)
59const gchar * gst_video_chroma_to_string (GstVideoChromaSite site);
60
61GST_VIDEO_API
62GstVideoChromaSite gst_video_chroma_site_from_string (const gchar * s);
63
64GST_VIDEO_API
65gchar * gst_video_chroma_site_to_string (GstVideoChromaSite site);
66
67/**
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
73 *
74 * Different subsampling and upsampling methods
75 */
76typedef enum {
77 GST_VIDEO_CHROMA_METHOD_NEAREST,
78 GST_VIDEO_CHROMA_METHOD_LINEAR
79} GstVideoChromaMethod;
80
81/**
82 * GstVideoChromaFlags:
83 * @GST_VIDEO_CHROMA_FLAG_NONE: no flags
84 * @GST_VIDEO_CHROMA_FLAG_INTERLACED: the input is interlaced
85 *
86 * Extra flags that influence the result from gst_video_chroma_resample_new().
87 */
88typedef enum {
89 GST_VIDEO_CHROMA_FLAG_NONE = 0,
90 GST_VIDEO_CHROMA_FLAG_INTERLACED = (1 << 0),
91} GstVideoChromaFlags;
92
93typedef struct _GstVideoChromaResample GstVideoChromaResample;
94
95/* circular dependency, need to include this after defining the enums */
96#include <gst/video/video-format.h>
97
98GST_VIDEO_API
99GstVideoChromaResample * gst_video_chroma_resample_new (GstVideoChromaMethod method,
100 GstVideoChromaSite site,
101 GstVideoChromaFlags flags,
102 GstVideoFormat format,
103 gint h_factor, gint v_factor);
104
105GST_VIDEO_API
106void gst_video_chroma_resample_free (GstVideoChromaResample *resample);
107
108GST_VIDEO_API
109void gst_video_chroma_resample_get_info (GstVideoChromaResample *resample,
110 guint * n_lines, gint *offset);
111
112GST_VIDEO_API
113void gst_video_chroma_resample (GstVideoChromaResample *resample,
114 gpointer lines[], gint width);
115
116G_END_DECLS
117
118#endif /* __GST_VIDEO_CHROMA_H__ */
119

source code of include/gstreamer-1.0/gst/video/video-chroma.h