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 26 G_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 */ 42 typedef 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 55 GST_VIDEO_DEPRECATED_FOR(gst_video_chroma_site_from_string) 56 GstVideoChromaSite gst_video_chroma_from_string (const gchar * s); 57 58 GST_VIDEO_DEPRECATED_FOR(gst_video_chroma_site_to_string) 59 const gchar * gst_video_chroma_to_string (GstVideoChromaSite site); 60 61 GST_VIDEO_API 62 GstVideoChromaSite gst_video_chroma_site_from_string (const gchar * s); 63 64 GST_VIDEO_API 65 gchar * 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 */ 76 typedef 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 */ 88 typedef enum { 89 GST_VIDEO_CHROMA_FLAG_NONE = 0, 90 GST_VIDEO_CHROMA_FLAG_INTERLACED = (1 << 0), 91 } GstVideoChromaFlags; 92 93 typedef struct _GstVideoChromaResample GstVideoChromaResample; 94 95 /* circular dependency, need to include this after defining the enums */ 96 #include <gst/video/video-format.h> 97 98 GST_VIDEO_API 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); 104 105 GST_VIDEO_API 106 void gst_video_chroma_resample_free (GstVideoChromaResample *resample); 107 108 GST_VIDEO_API 109 void gst_video_chroma_resample_get_info (GstVideoChromaResample *resample, 110 guint * n_lines, gint *offset); 111 112 GST_VIDEO_API 113 void gst_video_chroma_resample (GstVideoChromaResample *resample, 114 gpointer lines[], gint width); 115 116 G_END_DECLS 117 118 #endif /* __GST_VIDEO_CHROMA_H__ */ 119