gstreamer/gst-libs/gst/video/videoorientation.c
Sebastian Dröge 79809633de video-info: Add optional field-order caps field for interlaced-mode=interleaved
Usually this information is static for the whole stream, and various
container formats store this information inside the headers for the
whole stream.

Having it inside the caps for these cases simplifies code and makes it
possible to express these requirements more explicitly with the caps.

https://bugzilla.gnome.org/show_bug.cgi?id=771376
2016-11-01 20:40:07 +02:00

227 lines
6.4 KiB
C

/* GStreamer
* Copyright (C) 2006 Nokia <stefan.kost@nokia.com>
*
* videoorientation.c: video flipping and centering interface
*
* 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.
*/
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include "videoorientation.h"
#include <string.h>
/**
* SECTION:gstvideoorientation
* @short_description: Interface for elements providing video orientation
* controls
*
* The interface allows unified access to control flipping and autocenter
* operation of video-sources or operators.
*/
/* FIXME 0.11: check if we need to add API for sometimes-supportedness
* (aka making up for GstImplementsInterface removal) (probably yes) */
G_DEFINE_INTERFACE (GstVideoOrientation, gst_video_orientation, 0)
static void
gst_video_orientation_default_init (GstVideoOrientationInterface *
iface)
{
/* default virtual functions */
iface->get_hflip = NULL;
iface->get_vflip = NULL;
iface->get_hcenter = NULL;
iface->get_vcenter = NULL;
iface->set_hflip = NULL;
iface->set_vflip = NULL;
iface->set_hcenter = NULL;
iface->set_vcenter = NULL;
}
/**
* gst_video_orientation_get_hflip:
* @video_orientation: #GstVideoOrientation interface of a #GstElement
* @flip: return location for the result
*
* Get the horizontal flipping state (%TRUE for flipped) from the given object.
* Returns: %TRUE in case the element supports flipping
*/
gboolean
gst_video_orientation_get_hflip (GstVideoOrientation * video_orientation,
gboolean * flip)
{
GstVideoOrientationInterface *iface =
GST_VIDEO_ORIENTATION_GET_INTERFACE (video_orientation);
if (iface->get_hflip) {
return iface->get_hflip (video_orientation, flip);
}
return FALSE;
}
/**
* gst_video_orientation_get_vflip:
* @video_orientation: #GstVideoOrientation interface of a #GstElement
* @flip: return location for the result
*
* Get the vertical flipping state (%TRUE for flipped) from the given object.
* Returns: %TRUE in case the element supports flipping
*/
gboolean
gst_video_orientation_get_vflip (GstVideoOrientation * video_orientation,
gboolean * flip)
{
GstVideoOrientationInterface *iface =
GST_VIDEO_ORIENTATION_GET_INTERFACE (video_orientation);
if (iface->get_vflip) {
return iface->get_vflip (video_orientation, flip);
}
return FALSE;
}
/**
* gst_video_orientation_get_hcenter:
* @video_orientation: #GstVideoOrientation interface of a #GstElement
* @center: return location for the result
*
* Get the horizontal centering offset from the given object.
* Returns: %TRUE in case the element supports centering
*/
gboolean
gst_video_orientation_get_hcenter (GstVideoOrientation * video_orientation,
gint * center)
{
GstVideoOrientationInterface *iface =
GST_VIDEO_ORIENTATION_GET_INTERFACE (video_orientation);
if (iface->get_hcenter) {
return iface->get_hcenter (video_orientation, center);
}
return FALSE;
}
/**
* gst_video_orientation_get_vcenter:
* @video_orientation: #GstVideoOrientation interface of a #GstElement
* @center: return location for the result
*
* Get the vertical centering offset from the given object.
* Returns: %TRUE in case the element supports centering
*/
gboolean
gst_video_orientation_get_vcenter (GstVideoOrientation * video_orientation,
gint * center)
{
GstVideoOrientationInterface *iface =
GST_VIDEO_ORIENTATION_GET_INTERFACE (video_orientation);
if (iface->get_vcenter) {
return iface->get_vcenter (video_orientation, center);
}
return FALSE;
}
/**
* gst_video_orientation_set_hflip:
* @video_orientation: #GstVideoOrientation interface of a #GstElement
* @flip: use flipping
*
* Set the horizontal flipping state (%TRUE for flipped) for the given object.
* Returns: %TRUE in case the element supports flipping
*/
gboolean
gst_video_orientation_set_hflip (GstVideoOrientation * video_orientation,
gboolean flip)
{
GstVideoOrientationInterface *iface =
GST_VIDEO_ORIENTATION_GET_INTERFACE (video_orientation);
if (iface->set_hflip) {
return iface->set_hflip (video_orientation, flip);
}
return FALSE;
}
/**
* gst_video_orientation_set_vflip:
* @video_orientation: #GstVideoOrientation interface of a #GstElement
* @flip: use flipping
*
* Set the vertical flipping state (%TRUE for flipped) for the given object.
* Returns: %TRUE in case the element supports flipping
*/
gboolean
gst_video_orientation_set_vflip (GstVideoOrientation * video_orientation,
gboolean flip)
{
GstVideoOrientationInterface *iface =
GST_VIDEO_ORIENTATION_GET_INTERFACE (video_orientation);
if (iface->set_vflip) {
return iface->set_vflip (video_orientation, flip);
}
return FALSE;
}
/**
* gst_video_orientation_set_hcenter:
* @video_orientation: #GstVideoOrientation interface of a #GstElement
* @center: centering offset
*
* Set the horizontal centering offset for the given object.
* Returns: %TRUE in case the element supports centering
*/
gboolean
gst_video_orientation_set_hcenter (GstVideoOrientation * video_orientation,
gint center)
{
GstVideoOrientationInterface *iface =
GST_VIDEO_ORIENTATION_GET_INTERFACE (video_orientation);
if (iface->set_hcenter) {
return iface->set_hcenter (video_orientation, center);
}
return FALSE;
}
/**
* gst_video_orientation_set_vcenter:
* @video_orientation: #GstVideoOrientation interface of a #GstElement
* @center: centering offset
*
* Set the vertical centering offset for the given object.
* Returns: %TRUE in case the element supports centering
*/
gboolean
gst_video_orientation_set_vcenter (GstVideoOrientation * video_orientation,
gint center)
{
GstVideoOrientationInterface *iface =
GST_VIDEO_ORIENTATION_GET_INTERFACE (video_orientation);
if (iface->set_vcenter) {
return iface->set_vcenter (video_orientation, center);
}
return FALSE;
}