blob: 0fca8e93e3d81004ca36f90e4a1d42ebb7eac051 [file] [log] [blame]
David Schleef1bdd2c92003-07-02 06:16:39 +00001/* GStreamer
2 * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
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
Tim-Philipp Müller230cf412012-11-04 00:07:18 +000016 * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
17 * Boston, MA 02110-1301, USA.
David Schleef1bdd2c92003-07-02 06:16:39 +000018 */
19
Thomas Vander Stichele0b05eee2005-11-29 01:30:40 +000020#ifndef __GST_VIDEO_FLIP_H__
21#define __GST_VIDEO_FLIP_H__
David Schleef1bdd2c92003-07-02 06:16:39 +000022
Sebastian Dröge8c4aeb22010-04-18 13:03:48 +020023#include <gst/gst.h>
Sebastian Drögee8ca3902010-04-18 14:29:30 +020024#include <gst/video/video.h>
Thomas Vander Stichele01f2c2f2005-11-29 10:46:00 +000025#include <gst/video/gstvideofilter.h>
David Schleef1bdd2c92003-07-02 06:16:39 +000026
Johan Dahlin5acffea2004-03-15 16:32:54 +000027G_BEGIN_DECLS
28
Wim Taymanse85d1632006-03-03 14:39:55 +000029/**
30 * GstVideoFlipMethod:
31 * @GST_VIDEO_FLIP_METHOD_IDENTITY: Identity (no rotation)
32 * @GST_VIDEO_FLIP_METHOD_90R: Rotate clockwise 90 degrees
33 * @GST_VIDEO_FLIP_METHOD_180: Rotate 180 degrees
34 * @GST_VIDEO_FLIP_METHOD_90L: Rotate counter-clockwise 90 degrees
35 * @GST_VIDEO_FLIP_METHOD_HORIZ: Flip horizontally
36 * @GST_VIDEO_FLIP_METHOD_VERT: Flip vertically
37 * @GST_VIDEO_FLIP_METHOD_TRANS: Flip across upper left/lower right diagonal
38 * @GST_VIDEO_FLIP_METHOD_OTHER: Flip across upper right/lower left diagonal
Nicolas Dufresneed77b222013-10-03 16:39:26 -040039 * @GST_VIDEO_FLIP_METHOD_AUTO: Select flip method based on image-orientation tag
Wim Taymanse85d1632006-03-03 14:39:55 +000040 *
41 * The different flip methods.
42 */
Johan Dahlin5acffea2004-03-15 16:32:54 +000043typedef enum {
Thomas Vander Stichele0b05eee2005-11-29 01:30:40 +000044 GST_VIDEO_FLIP_METHOD_IDENTITY,
45 GST_VIDEO_FLIP_METHOD_90R,
46 GST_VIDEO_FLIP_METHOD_180,
47 GST_VIDEO_FLIP_METHOD_90L,
48 GST_VIDEO_FLIP_METHOD_HORIZ,
49 GST_VIDEO_FLIP_METHOD_VERT,
50 GST_VIDEO_FLIP_METHOD_TRANS,
Nicolas Dufresneed77b222013-10-03 16:39:26 -040051 GST_VIDEO_FLIP_METHOD_OTHER,
52 GST_VIDEO_FLIP_METHOD_AUTO
Thomas Vander Stichele0b05eee2005-11-29 01:30:40 +000053} GstVideoFlipMethod;
David Schleefe22a7822003-07-02 06:50:32 +000054
Thomas Vander Stichele0b05eee2005-11-29 01:30:40 +000055#define GST_TYPE_VIDEO_FLIP \
56 (gst_video_flip_get_type())
57#define GST_VIDEO_FLIP(obj) \
58 (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_VIDEO_FLIP,GstVideoFlip))
59#define GST_VIDEO_FLIP_CLASS(klass) \
60 (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_VIDEO_FLIP,GstVideoFlipClass))
61#define GST_IS_VIDEO_FLIP(obj) \
62 (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_VIDEO_FLIP))
Stefan Kost1def6692006-06-01 21:07:26 +000063#define GST_IS_VIDEO_FLIP_CLASS(klass) \
Thomas Vander Stichele0b05eee2005-11-29 01:30:40 +000064 (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_VIDEO_FLIP))
David Schleef1bdd2c92003-07-02 06:16:39 +000065
Thomas Vander Stichele0b05eee2005-11-29 01:30:40 +000066typedef struct _GstVideoFlip GstVideoFlip;
67typedef struct _GstVideoFlipClass GstVideoFlipClass;
David Schleef1bdd2c92003-07-02 06:16:39 +000068
Wim Taymanse85d1632006-03-03 14:39:55 +000069/**
70 * GstVideoFlip:
71 *
72 * Opaque datastructure.
73 */
Thomas Vander Stichele0b05eee2005-11-29 01:30:40 +000074struct _GstVideoFlip {
Thomas Vander Stichele4ad25ff2005-11-30 08:26:47 +000075 GstVideoFilter videofilter;
Wim Taymans22146572011-12-21 23:51:03 +010076
Sebastian Dröge8c4aeb22010-04-18 13:03:48 +020077 /* < private > */
Xabier Rodriguez Calvar56982052016-07-26 19:39:58 +020078 GstVideoOrientationMethod method;
79 GstVideoOrientationMethod tag_method;
80 GstVideoOrientationMethod active_method;
Wim Taymansead60ad2011-06-28 14:03:43 +020081 void (*process) (GstVideoFlip *videoflip, GstVideoFrame *dest, const GstVideoFrame *src);
David Schleef1bdd2c92003-07-02 06:16:39 +000082};
83
Thomas Vander Stichele0b05eee2005-11-29 01:30:40 +000084struct _GstVideoFlipClass {
Thomas Vander Stichele4ad25ff2005-11-30 08:26:47 +000085 GstVideoFilterClass parent_class;
David Schleef1bdd2c92003-07-02 06:16:39 +000086};
87
Thomas Vander Stichele4ad25ff2005-11-30 08:26:47 +000088GType gst_video_flip_get_type (void);
David Schleef1bdd2c92003-07-02 06:16:39 +000089
90G_END_DECLS
Johan Dahlin5acffea2004-03-15 16:32:54 +000091
Thomas Vander Stichele0b05eee2005-11-29 01:30:40 +000092#endif /* __GST_VIDEO_FLIP_H__ */