/* GStreamer * Copyright (C) 2006 Nokia * * 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 /** * SECTION:gstvideoorientation * @title: 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; }