From 24ed713b4897034f0743c7c22870c14ddc392cd6 Mon Sep 17 00:00:00 2001 From: Eunhae Choi Date: Wed, 25 Nov 2015 18:23:00 +0900 Subject: [PATCH] modify spec to build and merge prev modification Change-Id: Ib734007ed572a73143b111427c22fa8df87051a3 --- .gbs.conf | 2 +- Makefile.am | 4 +- configure.ac | 4 +- gst-libs/gst/audio/audio.def | 5 - gst-libs/gst/audio/audio.vcproj | 153 -------- gst-libs/gst/audio/audiofilter.vcproj | 144 -------- gst-libs/gst/audio/gstaudiodecoder.c | 14 + gst-libs/gst/riff/Makefile.am | 104 +++--- gst-libs/gst/riff/riff.vcproj | 158 -------- gst-libs/gst/video/Makefile.am | 4 + gst-libs/gst/video/cameracontrol.c | 582 ++++++++++++++++++++++++++++++ gst-libs/gst/video/cameracontrol.h | 435 ++++++++++++++++++++++ gst-libs/gst/video/cameracontrolchannel.c | 112 ++++++ gst-libs/gst/video/cameracontrolchannel.h | 65 ++++ gst-libs/gst/video/video-format.c | 12 + gst-libs/gst/video/video-format.h | 3 + gst-libs/gst/video/video-info.c | 8 + gst-libs/gst/video/video.vcproj | 150 -------- gst/typefind/gsttypefindfunctions.c | 82 +---- gst/typefind/typefindfunctions.vcproj | 145 -------- gst/videoconvert/Makefile.am | 9 + gst/videoconvert/gsttbmbufferpool.c | 21 +- gst/videoconvert/gsttbmbufferpool.h | 10 +- gst/videoconvert/videoconvert.vcproj | 154 -------- gst/videorate/videorate.vcproj | 145 -------- gst/videoscale/videoscale.vcproj | 154 -------- gst/videotestsrc/videotestsrc.vcproj | 154 -------- gst/volume/volume.vcproj | 148 -------- packaging/common.tar.gz | Bin 0 -> 114024 bytes packaging/gst-plugins-base.spec | 216 ++++++----- 30 files changed, 1440 insertions(+), 1757 deletions(-) delete mode 100644 gst-libs/gst/audio/audio.def delete mode 100644 gst-libs/gst/audio/audio.vcproj delete mode 100644 gst-libs/gst/audio/audiofilter.vcproj delete mode 100644 gst-libs/gst/riff/riff.vcproj create mode 100644 gst-libs/gst/video/cameracontrol.c create mode 100644 gst-libs/gst/video/cameracontrol.h create mode 100644 gst-libs/gst/video/cameracontrolchannel.c create mode 100644 gst-libs/gst/video/cameracontrolchannel.h delete mode 100644 gst-libs/gst/video/video.vcproj delete mode 100644 gst/typefind/typefindfunctions.vcproj delete mode 100644 gst/videoconvert/videoconvert.vcproj delete mode 100644 gst/videorate/videorate.vcproj delete mode 100644 gst/videoscale/videoscale.vcproj delete mode 100644 gst/videotestsrc/videotestsrc.vcproj delete mode 100644 gst/volume/volume.vcproj create mode 100644 packaging/common.tar.gz diff --git a/.gbs.conf b/.gbs.conf index 1b88822..7302e56 100644 --- a/.gbs.conf +++ b/.gbs.conf @@ -1,3 +1,3 @@ [general] -upstream_branch = tizen +upstream_branch = upstream/1.6 upstream_tag = ${upstreamversion} diff --git a/Makefile.am b/Makefile.am index 5fc3e10..2ce92e1 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,4 +1,4 @@ -DISTCHECK_CONFIGURE_FLAGS=--enable-gtk-doc +DISTCHECK_CONFIGURE_FLAGS=--disable-gtk-doc if BUILD_EXTERNAL SUBDIRS_EXT = ext @@ -12,14 +12,12 @@ SUBDIRS = \ gst sys $(SUBDIRS_EXT) \ tools \ tests \ - docs \ po \ common \ m4 DIST_SUBDIRS = \ pkgconfig \ - docs \ gst-libs \ gst sys ext \ tools \ diff --git a/configure.ac b/configure.ac index e723de6..d5145ce 100644 --- a/configure.ac +++ b/configure.ac @@ -250,8 +250,8 @@ dnl Check for fast float to int casting as defined in C99 dnl used to be used in gst-libs/gst/floatcast/floatcast.h (FIXME: still needed?) save_libs=$LIBS LIBS="$LIBS $LIBM" -AC_C99_FUNC_LRINT -AC_C99_FUNC_LRINTF +#AC_C99_FUNC_LRINT +#AC_C99_FUNC_LRINTF LIBS=$save_libs dnl Check for a way to display the function name in debug output diff --git a/gst-libs/gst/audio/audio.def b/gst-libs/gst/audio/audio.def deleted file mode 100644 index 96a3ac0..0000000 --- a/gst-libs/gst/audio/audio.def +++ /dev/null @@ -1,5 +0,0 @@ -EXPORTS - gst_plugin_desc - gst_audio_length - gst_audio_is_buffer_framed - gst_audio_highest_sample_value diff --git a/gst-libs/gst/audio/audio.vcproj b/gst-libs/gst/audio/audio.vcproj deleted file mode 100644 index 2111531..0000000 --- a/gst-libs/gst/audio/audio.vcproj +++ /dev/null @@ -1,153 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/gst-libs/gst/audio/audiofilter.vcproj b/gst-libs/gst/audio/audiofilter.vcproj deleted file mode 100644 index d551260..0000000 --- a/gst-libs/gst/audio/audiofilter.vcproj +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/gst-libs/gst/audio/gstaudiodecoder.c b/gst-libs/gst/audio/gstaudiodecoder.c index f4c663a..2d27db0 100644 --- a/gst-libs/gst/audio/gstaudiodecoder.c +++ b/gst-libs/gst/audio/gstaudiodecoder.c @@ -2244,8 +2244,12 @@ gst_audio_decoder_sink_eventfunc (GstAudioDecoder * dec, GstEvent * event) } else { GST_DEBUG_OBJECT (dec, "unsupported format; ignoring"); GST_AUDIO_DECODER_STREAM_UNLOCK (dec); +#ifdef GST_EXT_AUDIODECODER_MODIFICATION + goto newseg_wrong_format; +#else gst_event_unref (event); ret = FALSE; +#endif break; } } @@ -2369,6 +2373,16 @@ gst_audio_decoder_sink_eventfunc (GstAudioDecoder * dec, GstEvent * event) break; } return ret; + +#ifdef GST_EXT_AUDIODECODER_MODIFICATION +newseg_wrong_format: + { + GST_DEBUG_OBJECT (dec, "received non TIME newsegment"); + gst_event_unref (event); + /* SWALLOW EVENT */ + return TRUE; + } +#endif } static gboolean diff --git a/gst-libs/gst/riff/Makefile.am b/gst-libs/gst/riff/Makefile.am index 83d83cb..254201b 100644 --- a/gst-libs/gst/riff/Makefile.am +++ b/gst-libs/gst/riff/Makefile.am @@ -25,57 +25,57 @@ libgstriff_@GST_API_VERSION@_la_LDFLAGS = $(GST_LIB_LDFLAGS) $(GST_ALL_LDFLAGS) # This library does not respect the type naming conventions required to be # usable in binded languages. # -#if HAVE_INTROSPECTION -#BUILT_GIRSOURCES = GstRiff-@GST_API_VERSION@.gir -# -#gir_headers=$(patsubst %,$(srcdir)/%, $(libgstriff_@GST_API_VERSION@include_HEADERS)) -#gir_sources=$(patsubst %,$(srcdir)/%, $(libgstriff_@GST_API_VERSION@_la_SOURCES)) -# -#GstRiff-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstriff-@GST_API_VERSION@.la -# $(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" GI_SCANNER_DISABLE_CACHE=yes\ -# GST_PLUGIN_SYSTEM_PATH_1_0="" GST_PLUGIN_PATH_1_0="" GST_REGISTRY_UPDATE=no \ -# $(INTROSPECTION_SCANNER) -v --namespace GstRiff \ -# --nsversion=@GST_API_VERSION@ \ -# --strip-prefix=Gst \ -# --warn-all \ -# --c-include "gst/riff/riff.h" \ -# --add-include-path=$(builddir)/../tag \ -# --add-include-path=$(builddir)/../audio \ -# --add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ -# --add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \ -# --library=libgstriff-@GST_API_VERSION@.la \ -# --include=GstAudio-@GST_API_VERSION@ \ -# --include=GstTag-@GST_API_VERSION@ \ -# --include=Gst-@GST_API_VERSION@ \ -# --libtool="$(top_builddir)/libtool" \ -# --pkg gstreamer-@GST_API_VERSION@ \ -# --pkg gstreamer-tag-@GST_API_VERSION@ \ -# --pkg gstreamer-audio-@GST_API_VERSION@ \ -# --pkg-export gstreamer-riff-@GST_API_VERSION@ \ -# --add-init-section="$(INTROSPECTION_INIT)" \ -# --output $@ \ -# $(gir_headers) \ -# $(gir_sources) -# +if HAVE_INTROSPECTION +BUILT_GIRSOURCES = GstRiff-@GST_API_VERSION@.gir + +gir_headers=$(patsubst %,$(srcdir)/%, $(libgstriff_@GST_API_VERSION@include_HEADERS)) +gir_sources=$(patsubst %,$(srcdir)/%, $(libgstriff_@GST_API_VERSION@_la_SOURCES)) + +GstRiff-@GST_API_VERSION@.gir: $(INTROSPECTION_SCANNER) libgstriff-@GST_API_VERSION@.la + $(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" GI_SCANNER_DISABLE_CACHE=yes\ + GST_PLUGIN_SYSTEM_PATH_1_0="" GST_PLUGIN_PATH_1_0="" GST_REGISTRY_UPDATE=no \ + $(INTROSPECTION_SCANNER) -v --namespace GstRiff \ + --nsversion=@GST_API_VERSION@ \ + --strip-prefix=Gst \ + --warn-all \ + --c-include "gst/riff/riff.h" \ + --add-include-path=$(builddir)/../tag \ + --add-include-path=$(builddir)/../audio \ + --add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ + --add-include-path=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \ + --library=libgstriff-@GST_API_VERSION@.la \ + --include=GstAudio-@GST_API_VERSION@ \ + --include=GstTag-@GST_API_VERSION@ \ + --include=Gst-@GST_API_VERSION@ \ + --libtool="$(top_builddir)/libtool" \ + --pkg gstreamer-@GST_API_VERSION@ \ + --pkg gstreamer-tag-@GST_API_VERSION@ \ + --pkg gstreamer-audio-@GST_API_VERSION@ \ + --pkg-export gstreamer-riff-@GST_API_VERSION@ \ + --add-init-section="$(INTROSPECTION_INIT)" \ + --output $@ \ + $(gir_headers) \ + $(gir_sources) + ## INTROSPECTION_GIRDIR/INTROSPECTION_TYPELIBDIR aren't the right place to ## install anything - we need to install inside our prefix. -#girdir = $(datadir)/gir-1.0 -#gir_DATA = $(BUILT_GIRSOURCES) -# -#typelibsdir = $(libdir)/girepository-1.0/ -# -#typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib) -# -#%.typelib: %.gir $(INTROSPECTION_COMPILER) -# $(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \ -# $(INTROSPECTION_COMPILER) \ -# --includedir=$(srcdir) \ -# --includedir=$(builddir) \ -# --includedir=$(builddir)/../tag \ -# --includedir=$(builddir)/../audio \ -# --includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ -# --includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \ -# $(INTROSPECTION_COMPILER_OPTS) $< -o $(@F) -# -#CLEANFILES = $(BUILT_GIRSOURCES) $(typelibs_DATA) -#endif +girdir = $(datadir)/gir-1.0 +gir_DATA = $(BUILT_GIRSOURCES) + +typelibsdir = $(libdir)/girepository-1.0/ + +typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib) + +%.typelib: %.gir $(INTROSPECTION_COMPILER) + $(AM_V_GEN)PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" \ + $(INTROSPECTION_COMPILER) \ + --includedir=$(srcdir) \ + --includedir=$(builddir) \ + --includedir=$(builddir)/../tag \ + --includedir=$(builddir)/../audio \ + --includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-@GST_API_VERSION@` \ + --includedir=`PKG_CONFIG_PATH="$(GST_PKG_CONFIG_PATH)" $(PKG_CONFIG) --variable=girdir gstreamer-base-@GST_API_VERSION@` \ + $(INTROSPECTION_COMPILER_OPTS) $< -o $(@F) + +CLEANFILES = $(BUILT_GIRSOURCES) $(typelibs_DATA) +endif diff --git a/gst-libs/gst/riff/riff.vcproj b/gst-libs/gst/riff/riff.vcproj deleted file mode 100644 index dde87c0..0000000 --- a/gst-libs/gst/riff/riff.vcproj +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/gst-libs/gst/video/Makefile.am b/gst-libs/gst/video/Makefile.am index 5d31fa1..2b266d4 100644 --- a/gst-libs/gst/video/Makefile.am +++ b/gst-libs/gst/video/Makefile.am @@ -18,6 +18,8 @@ lib_LTLIBRARIES = libgstvideo-@GST_API_VERSION@.la CLEANFILES = $(BUILT_SOURCES) libgstvideo_@GST_API_VERSION@_la_SOURCES = \ + cameracontrol.c \ + cameracontrolchannel.c \ colorbalance.c \ colorbalancechannel.c \ navigation.c \ @@ -52,6 +54,8 @@ nodist_libgstvideo_@GST_API_VERSION@_la_SOURCES = $(BUILT_SOURCES) libgstvideo_@GST_API_VERSION@includedir = $(includedir)/gstreamer-@GST_API_VERSION@/gst/video libgstvideo_@GST_API_VERSION@include_HEADERS = \ + cameracontrol.h \ + cameracontrolchannel.h \ colorbalance.h \ colorbalancechannel.h \ navigation.h \ diff --git a/gst-libs/gst/video/cameracontrol.c b/gst-libs/gst/video/cameracontrol.c new file mode 100644 index 0000000..211dd2d --- /dev/null +++ b/gst-libs/gst/video/cameracontrol.c @@ -0,0 +1,582 @@ +/* + * GStreamer Camera Control Interface + * + * Copyright (c) 2000 - 2012 Samsung Electronics Co., Ltd. + * + * Contact: Jeongmo Yang + * + * This library is free software; you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License as published by the + * Free Software Foundation; either version 2.1 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 Lesser General Public + * License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library; if not, write to the Free Software Foundation, Inc., 51 + * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +/*============================================================================================ +EDIT HISTORY FOR MODULE + +This section contains comments describing changes made to the module. +Notice that changes are listed in reverse chronological order. + +when who what, where, why +--------- ------------------------ ---------------------------------------------- +12/09/08 jm80.yang@samsung.com Created + +============================================================================================*/ + + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "cameracontrol.h" +//#include "interfaces-marshal.h" + +/** + * SECTION:gstcameracontrol + * @short_description: Interface for camera control + */ + +enum { + CONTROL_VALUE_CHANGED, + CONTROL_LAST_SIGNAL +}; + +static void gst_camera_control_class_init(GstCameraControlClass *klass); + +static guint gst_camera_control_signals[CONTROL_LAST_SIGNAL] = { 0 }; + +GType gst_camera_control_get_type(void) +{ + static GType gst_camera_control_type = 0; + + if (!gst_camera_control_type) { + static const GTypeInfo gst_camera_control_info = + { + sizeof(GstCameraControlClass), + (GBaseInitFunc)gst_camera_control_class_init, + NULL, + NULL, + NULL, + NULL, + 0, + 0, + NULL, + }; + + gst_camera_control_type = g_type_register_static(G_TYPE_INTERFACE, + "GstCameraControl", + &gst_camera_control_info, + 0); + //g_type_interface_add_prerequisite(gst_camera_control_type, GST_TYPE_IMPLEMENTS_INTERFACE); + } + + return gst_camera_control_type; +} + +static void gst_camera_control_class_init(GstCameraControlClass *klass) +{ + static gboolean initialized = FALSE; + + if (!initialized) { + gst_camera_control_signals[CONTROL_VALUE_CHANGED] = + g_signal_new("control-value-changed", + GST_TYPE_CAMERA_CONTROL, G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET(GstCameraControlClass, value_changed), + NULL, NULL, NULL, + //gst_interfaces_marshal_VOID__OBJECT_INT, + G_TYPE_NONE, 2, GST_TYPE_CAMERA_CONTROL_CHANNEL, G_TYPE_INT); + + initialized = TRUE; + } + + // TODO : + klass->camera_control_type = 0; + + /* defauld virtual functions */ + klass->list_channels = NULL; + klass->set_exposure = NULL; + klass->get_exposure = NULL; + klass->set_capture_mode = NULL; + klass->get_capture_mode = NULL; + klass->set_strobe = NULL; + klass->get_strobe = NULL; + klass->set_detect = NULL; + klass->get_detect = NULL; + klass->set_value = NULL; + klass->get_value = NULL; + klass->set_zoom = NULL; + klass->get_zoom = NULL; + klass->set_focus = NULL; + klass->get_focus = NULL; + klass->start_auto_focus = NULL; + klass->stop_auto_focus = NULL; + klass->set_focus_level = NULL; + klass->get_focus_level = NULL; + klass->set_auto_focus_area = NULL; + klass->get_auto_focus_area = NULL; + klass->set_wdr = NULL; + klass->get_wdr = NULL; + klass->set_ahs = NULL; + klass->get_ahs = NULL; + klass->set_part_color = NULL; + klass->get_part_color = NULL; + klass->get_exif_info = NULL; + klass->set_capture_command = NULL; + klass->set_record_command = NULL; + klass->start_face_zoom = NULL; + klass->stop_face_zoom = NULL; + klass->set_ae_lock = NULL; + klass->get_ae_lock = NULL; + klass->set_awb_lock = NULL; + klass->get_awb_lock = NULL; +} + +const GList* gst_camera_control_list_channels(GstCameraControl *control) +{ + GstCameraControlClass *klass = GST_CAMERA_CONTROL_GET_CLASS(control); + + if (klass && klass->list_channels) { + return klass->list_channels(control); + } + + return NULL; +} + + +gboolean gst_camera_control_set_value(GstCameraControl *control, GstCameraControlChannel *control_channel, gint value) +{ + GstCameraControlClass *klass = GST_CAMERA_CONTROL_GET_CLASS(control); + + if (klass && klass->set_value) { + return klass->set_value(control, control_channel, value); + } + + return FALSE; +} + +gboolean gst_camera_control_get_value(GstCameraControl *control, GstCameraControlChannel *control_channel, gint *value) +{ + GstCameraControlClass *klass = GST_CAMERA_CONTROL_GET_CLASS(control); + + if (klass && klass->get_value) { + return klass->get_value(control, control_channel, value); + } + + return FALSE; +} + + + +gboolean gst_camera_control_set_exposure(GstCameraControl *control, gint type, gint value1, gint value2) +{ + GstCameraControlClass *klass = GST_CAMERA_CONTROL_GET_CLASS(control); + + if (klass && klass->set_exposure) { + return klass->set_exposure(control, type, value1, value2); + } + + return FALSE; +} + +gboolean gst_camera_control_get_exposure(GstCameraControl *control, gint type, gint *value1, gint *value2) +{ + GstCameraControlClass *klass = GST_CAMERA_CONTROL_GET_CLASS(control); + + if (klass && klass->get_exposure) { + return klass->get_exposure(control, type, value1, value2); + } + + return FALSE; +} + +gboolean gst_camera_control_set_capture_mode(GstCameraControl *control, gint type, gint value) +{ + GstCameraControlClass *klass = GST_CAMERA_CONTROL_GET_CLASS(control); + + if (klass && klass->set_capture_mode) { + return klass->set_capture_mode(control, type, value); + } + + return FALSE; +} + +gboolean gst_camera_control_get_capture_mode(GstCameraControl *control, gint type, gint *value) +{ + GstCameraControlClass *klass = GST_CAMERA_CONTROL_GET_CLASS(control); + + if (klass && klass->get_capture_mode) { + return klass->get_capture_mode(control, type, value); + } + + return FALSE; +} + +gboolean gst_camera_control_set_strobe(GstCameraControl *control, gint type, gint value) +{ + GstCameraControlClass *klass = GST_CAMERA_CONTROL_GET_CLASS(control); + + if (klass && klass->set_strobe) { + return klass->set_strobe(control, type, value); + } + + return FALSE; +} + +gboolean gst_camera_control_get_strobe(GstCameraControl *control, gint type, gint *value) +{ + GstCameraControlClass *klass = GST_CAMERA_CONTROL_GET_CLASS(control); + + if (klass && klass->get_strobe) { + return klass->get_strobe(control, type, value); + } + + return FALSE; +} + +gboolean gst_camera_control_set_detect(GstCameraControl *control, gint type, gint value) +{ + GstCameraControlClass *klass = GST_CAMERA_CONTROL_GET_CLASS(control); + + if (klass && klass->set_detect) { + return klass->set_detect(control, type, value); + } + + return FALSE; +} + +gboolean gst_camera_control_get_detect(GstCameraControl *control, gint type, gint *value) +{ + GstCameraControlClass *klass = GST_CAMERA_CONTROL_GET_CLASS(control); + + if (klass && klass->get_detect) { + return klass->get_detect(control, type, value); + } + + return FALSE; +} + +gboolean gst_camera_control_set_zoom(GstCameraControl *control, gint type, gint value) +{ + GstCameraControlClass *klass = GST_CAMERA_CONTROL_GET_CLASS(control); + + if (klass && klass->set_zoom) { + return klass->set_zoom(control, type, value); + } + + return FALSE; +} + +gboolean gst_camera_control_get_zoom(GstCameraControl *control, gint type, gint *value) +{ + GstCameraControlClass *klass = GST_CAMERA_CONTROL_GET_CLASS(control); + + if (klass && klass->get_zoom) { + return klass->get_zoom(control, type, value); + } + + return FALSE; +} + +gboolean gst_camera_control_set_focus(GstCameraControl *control, gint mode, gint range) +{ + GstCameraControlClass *klass = GST_CAMERA_CONTROL_GET_CLASS(control); + + if (klass && klass->set_focus) { + return klass->set_focus(control, mode, range); + } + + return FALSE; +} + +gboolean gst_camera_control_get_focus(GstCameraControl *control, gint *mode, gint *range) +{ + GstCameraControlClass *klass = GST_CAMERA_CONTROL_GET_CLASS(control); + + if (klass && klass->get_focus) { + return klass->get_focus(control, mode, range); + } + + return FALSE; +} + +gboolean gst_camera_control_start_auto_focus(GstCameraControl *control) +{ + GstCameraControlClass *klass = GST_CAMERA_CONTROL_GET_CLASS(control); + + if (klass && klass->start_auto_focus) { + return klass->start_auto_focus(control); + } + + return FALSE; +} + +gboolean gst_camera_control_stop_auto_focus(GstCameraControl *control) +{ + GstCameraControlClass *klass = GST_CAMERA_CONTROL_GET_CLASS(control); + + if (klass && klass->stop_auto_focus) { + return klass->stop_auto_focus(control); + } + + return FALSE; +} + +gboolean gst_camera_control_set_focus_level(GstCameraControl *control, gint manual_level) +{ + GstCameraControlClass *klass = GST_CAMERA_CONTROL_GET_CLASS(control); + + if (klass && klass->set_focus_level) { + return klass->set_focus_level(control, manual_level); + } + + return FALSE; +} + +gboolean gst_camera_control_get_focus_level(GstCameraControl *control, gint *manual_level) +{ + GstCameraControlClass *klass = GST_CAMERA_CONTROL_GET_CLASS(control); + + if (klass && klass->get_focus_level) { + return klass->get_focus_level(control, manual_level); + } + + return FALSE; +} + +gboolean gst_camera_control_set_auto_focus_area(GstCameraControl *control, GstCameraControlRectType rect) +{ + GstCameraControlClass *klass = GST_CAMERA_CONTROL_GET_CLASS(control); + + if (klass && klass->set_auto_focus_area) { + return klass->set_auto_focus_area(control, rect); + } + + return FALSE; +} + +gboolean gst_camera_control_get_auto_focus_area(GstCameraControl *control, GstCameraControlRectType *rect) +{ + GstCameraControlClass *klass = GST_CAMERA_CONTROL_GET_CLASS(control); + + if (klass && klass->get_auto_focus_area) { + return klass->get_auto_focus_area(control, rect); + } + + return FALSE; +} + +gboolean gst_camera_control_set_wdr(GstCameraControl *control, gint value) +{ + GstCameraControlClass *klass = GST_CAMERA_CONTROL_GET_CLASS(control); + + if (klass && klass->set_wdr) { + return klass->set_wdr(control, value); + } + + return FALSE; +} + +gboolean gst_camera_control_get_wdr(GstCameraControl *control, gint *value) +{ + GstCameraControlClass *klass = GST_CAMERA_CONTROL_GET_CLASS(control); + + if (klass && klass->get_wdr) { + return klass->get_wdr(control, value); + } + + return FALSE; +} + +gboolean gst_camera_control_set_ahs(GstCameraControl *control, gint value) +{ + GstCameraControlClass *klass = GST_CAMERA_CONTROL_GET_CLASS(control); + + if (klass && klass->set_ahs) { + return klass->set_ahs(control, value); + } + + return FALSE; +} + +gboolean gst_camera_control_get_ahs(GstCameraControl *control, gint *value) +{ + GstCameraControlClass *klass = GST_CAMERA_CONTROL_GET_CLASS(control); + + if (klass && klass->get_ahs) { + return klass->get_ahs(control, value); + } + + return FALSE; +} + +gboolean gst_camera_control_set_part_color(GstCameraControl *control, gint type, gint value) +{ + GstCameraControlClass *klass = GST_CAMERA_CONTROL_GET_CLASS(control); + + if (klass && klass->set_part_color) { + return klass->set_part_color(control, type, value); + } + + return FALSE; +} + +gboolean gst_camera_control_get_part_color(GstCameraControl *control, gint type, gint *value) +{ + GstCameraControlClass *klass = GST_CAMERA_CONTROL_GET_CLASS(control); + + if (klass && klass->get_part_color) { + return klass->get_part_color(control, type, value); + } + + return FALSE; +} + +gboolean +gst_camera_control_get_exif_info(GstCameraControl *control, GstCameraControlExifInfo *info) +{ + GstCameraControlClass *klass = GST_CAMERA_CONTROL_GET_CLASS(control); + + if (klass && klass->get_exif_info) { + return klass->get_exif_info(control, info); + } + + return FALSE; +} + + +gboolean gst_camera_control_get_basic_dev_info(GstCameraControl *control, gint dev_id, GstCameraControlCapsInfoType *info) +{ + GstCameraControlClass *klass = GST_CAMERA_CONTROL_GET_CLASS(control); + + if (klass && klass->get_basic_dev_info) { + return klass->get_basic_dev_info(control, dev_id, info); + } + + return FALSE; +} + +gboolean gst_camera_control_get_misc_dev_info(GstCameraControl *control, gint dev_id, GstCameraControlCtrlListInfoType *info) +{ + GstCameraControlClass *klass = GST_CAMERA_CONTROL_GET_CLASS( control ); + + if (klass && klass->get_misc_dev_info) { + return klass->get_misc_dev_info( control, dev_id, info ); + } + + return FALSE; +} + +gboolean gst_camera_control_get_extra_dev_info(GstCameraControl *control, gint dev_id, GstCameraControlExtraInfoType *info) +{ + GstCameraControlClass *klass = GST_CAMERA_CONTROL_GET_CLASS(control); + + if (klass && klass->get_extra_dev_info) { + return klass->get_extra_dev_info(control, dev_id, info); + } + + return FALSE; +} + +void gst_camera_control_set_capture_command(GstCameraControl *control, GstCameraControlCaptureCommand cmd) +{ + GstCameraControlClass *klass = GST_CAMERA_CONTROL_GET_CLASS(control); + + if (klass && klass->set_capture_command) { + klass->set_capture_command(control, cmd); + } + + return; +} + +void gst_camera_control_set_record_command(GstCameraControl *control, GstCameraControlRecordCommand cmd) +{ + GstCameraControlClass *klass = GST_CAMERA_CONTROL_GET_CLASS(control); + + if (klass && klass->set_record_command) { + klass->set_record_command(control, cmd); + } + + return; +} + +gboolean gst_camera_control_start_face_zoom(GstCameraControl *control, gint x, gint y, gint zoom_level) +{ + GstCameraControlClass *klass = GST_CAMERA_CONTROL_GET_CLASS(control); + + if (klass && klass->start_face_zoom) { + return klass->start_face_zoom(control, x, y, zoom_level); + } + + return FALSE; +} + +gboolean gst_camera_control_stop_face_zoom(GstCameraControl *control) +{ + GstCameraControlClass *klass = GST_CAMERA_CONTROL_GET_CLASS(control); + + if (klass && klass->stop_face_zoom) { + return klass->stop_face_zoom(control); + } + + return FALSE; +} + +gboolean gst_camera_control_set_ae_lock(GstCameraControl *control, gboolean lock) +{ + GstCameraControlClass *klass = GST_CAMERA_CONTROL_GET_CLASS(control); + + if (klass && klass->set_ae_lock) { + return klass->set_ae_lock(control, lock); + } + + return FALSE; +} + +gboolean gst_camera_control_get_ae_lock(GstCameraControl *control, gboolean *lock) +{ + GstCameraControlClass *klass = GST_CAMERA_CONTROL_GET_CLASS(control); + + if (klass && klass->get_ae_lock) { + return klass->get_ae_lock(control, lock); + } + + return FALSE; +} + +gboolean gst_camera_control_set_awb_lock(GstCameraControl *control, gboolean lock) +{ + GstCameraControlClass *klass = GST_CAMERA_CONTROL_GET_CLASS(control); + + if (klass && klass->set_awb_lock) { + return klass->set_awb_lock(control, lock); + } + + return FALSE; +} + +gboolean gst_camera_control_get_awb_lock(GstCameraControl *control, gboolean *lock) +{ + GstCameraControlClass *klass = GST_CAMERA_CONTROL_GET_CLASS(control); + + if (klass && klass->get_awb_lock) { + return klass->get_awb_lock(control, lock); + } + + return FALSE; +} + +void gst_camera_control_value_changed(GstCameraControl *control, GstCameraControlChannel *control_channel, gint value) +{ + g_signal_emit(G_OBJECT(control), gst_camera_control_signals[CONTROL_VALUE_CHANGED], 0, control_channel, value); + g_signal_emit_by_name(G_OBJECT(control_channel), "control-value-changed", value); +} diff --git a/gst-libs/gst/video/cameracontrol.h b/gst-libs/gst/video/cameracontrol.h new file mode 100644 index 0000000..788ece1 --- /dev/null +++ b/gst-libs/gst/video/cameracontrol.h @@ -0,0 +1,435 @@ +/* + * GStreamer Camera Control Interface + * + * Copyright (c) 2000 - 2012 Samsung Electronics Co., Ltd. + * + * Contact: Jeongmo Yang + * + * This library is free software; you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License as published by the + * Free Software Foundation; either version 2.1 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 Lesser General Public + * License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library; if not, write to the Free Software Foundation, Inc., 51 + * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +/* =========================================================================================== +EDIT HISTORY FOR MODULE + + This section contains comments describing changes made to the module. + Notice that changes are listed in reverse chronological order. + +when who what, where, why +--------- ------------------------ ------------------------------------------------------ +12/09/08 jm80.yang@samsung.com Created + +=========================================================================================== */ + +#ifndef __GST_CAMERA_CONTROL_H__ +#define __GST_CAMERA_CONTROL_H__ + +#include +#include +//#include + +G_BEGIN_DECLS + +#define GST_TYPE_CAMERA_CONTROL \ + (gst_camera_control_get_type()) +#define GST_CAMERA_CONTROL(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_CAMERA_CONTROL, GstCameraControl)) +#define GST_CAMERA_CONTROL_GET_CLASS(inst) \ + (G_TYPE_INSTANCE_GET_INTERFACE ((inst), GST_TYPE_CAMERA_CONTROL, GstCameraControlClass)) +#define GST_CAMERA_CONTROL_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_CAMERA_CONTROL, GstCameraControlClass)) +#define GST_IS_CAMERA_CONTROL(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_CAMERA_CONTROL)) +#define GST_IS_CAMERA_CONTROL_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_CAMERA_CONTROL)) +#define GST_CAMERA_CONTROL_TYPE(klass) (klass->camera_control_type) + + +typedef struct _GstCameraControl GstCameraControl; + +typedef enum +{ + // TODO : V4L2 Extend + GST_CAMERA_CONTROL_HARDWARE, + GST_CAMERA_CONTROL_SOFTWARE +} GstCameraControlType; + +/* enumerations for Camera control Exposure types */ +typedef enum +{ + GST_CAMERA_CONTROL_F_NUMBER, + GST_CAMERA_CONTROL_SHUTTER_SPEED, + GST_CAMERA_CONTROL_ISO, + GST_CAMERA_CONTROL_PROGRAM_MODE, + GST_CAMERA_CONTROL_EXPOSURE_MODE, + GST_CAMERA_CONTROL_EXPOSURE_VALUE +} GstCameraControlExposureType; + +/* enumerations for Camera control Capture mode types */ +typedef enum +{ + GST_CAMERA_CONTROL_CAPTURE_MODE, + GST_CAMERA_CONTROL_OUTPUT_MODE, + GST_CAMERA_CONTROL_FRAME_COUNT, + GST_CAMERA_CONTROL_JPEG_QUALITY +} GstCameraControlCaptureModeType; + +/* enumerations for Camera control Strobe types */ +typedef enum +{ + GST_CAMERA_CONTROL_STROBE_CONTROL, + GST_CAMERA_CONTROL_STROBE_CAPABILITIES, + GST_CAMERA_CONTROL_STROBE_MODE, + GST_CAMERA_CONTROL_STROBE_STATUS, + GST_CAMERA_CONTROL_STROBE_EV +} GstCameraControlStrobeType; + +/* enumerations for Camera control Face detection types */ +typedef enum +{ + GST_CAMERA_CONTROL_FACE_DETECT_MODE, + GST_CAMERA_CONTROL_FACE_DETECT_NUMBER, + GST_CAMERA_CONTROL_FACE_FOCUS_SELECT, + GST_CAMERA_CONTROL_FACE_SELECT_NUMBER, + GST_CAMERA_CONTROL_FACE_DETECT_STATUS +} GstCameraControlFaceDetectType; + +/* enumerations for Camera control Zoom types */ +typedef enum +{ + GST_CAMERA_CONTROL_DIGITAL_ZOOM, + GST_CAMERA_CONTROL_OPTICAL_ZOOM +} GstCameraControlZoomType; + +/* enumerations for Camera control Part color */ +typedef enum +{ + GST_CAMERA_CONTROL_PART_COLOR_SRC, + GST_CAMERA_CONTROL_PART_COLOR_DST, + GST_CAMERA_CONTROL_PART_COLOR_MODE +} GstCameraControlPartColorType; + +/* enumerations for Camera capture command */ +typedef enum +{ + GST_CAMERA_CONTROL_CAPTURE_COMMAND_NONE, + GST_CAMERA_CONTROL_CAPTURE_COMMAND_START, + GST_CAMERA_CONTROL_CAPTURE_COMMAND_STOP, + GST_CAMERA_CONTROL_CAPTURE_COMMAND_STOP_MULTISHOT +} GstCameraControlCaptureCommand; + +/* enumerations for Camera record command */ +typedef enum +{ + GST_CAMERA_CONTROL_RECORD_COMMAND_NONE, + GST_CAMERA_CONTROL_RECORD_COMMAND_START, + GST_CAMERA_CONTROL_RECORD_COMMAND_STOP +} GstCameraControlRecordCommand; + +///////////////////////////////// +// For Query functionalities // +// For Querying capabilities // +///////////////////////////////// +#define GST_CAMERA_CONTROL_MAX_NUM_FMT_DESC 32 +#define GST_CAMERA_CONTROL_MAX_NUM_RESOLUTION 32 +#define GST_CAMERA_CONTROL_MAX_NUM_AVAILABLE_TPF 16 +#define GST_CAMERA_CONTROL_MAX_NUM_AVAILABLE_FPS 16 +#define GST_CAMERA_CONTROL_MAX_NUM_CTRL_LIST_INFO 64 +#define GST_CAMERA_CONTROL_MAX_NUM_CTRL_MENU 64 +#define GST_CAMERA_CONTROL_MAX_NUM_DETECTED_FACES 16 +#define GST_CAMERA_CONTROL_MAX_SZ_CTRL_NAME_STRING 32 +#define GST_CAMERA_CONTROL_MAX_SZ_DEV_NAME_STRING 32 + +/*! @struct GstCameraControlFracType + * @brief For timeperframe as fraction type + * Elapse time consumed by one frame, reverse of FPS + */ +typedef struct _GstCameraControlFracType { + gint num; + gint den; +} GstCameraControlFracType; + +/*! @struct GstCameraControlRectType + * @brief For touch auto focusing area and face detection area + */ +typedef struct _GstCameraControlRectType { + gint x; + gint y; + gint width; + gint height; +} GstCameraControlRectType; + +/*! @struct GstCameraControlResolutionType + * @brief For querying supported resolutions + */ +typedef struct _GstCameraControlResolutionType { + gint w; + gint h; + + /* Available time per frame(tpf) as each pixelformat */ + gint num_avail_tpf; + GstCameraControlFracType tpf[GST_CAMERA_CONTROL_MAX_NUM_AVAILABLE_TPF]; +} GstCameraControlResolutionType; + +/*! @struct GstCameraControlFmtDescType + * @brief For querying supported format type + */ +typedef struct _GstCameraControlFmtDescType { + /* fourcc name of each pixelformat */ + guint fcc; + gint fcc_use; + + /* Available resolutions as each pixelformat */ + gint num_resolution; + GstCameraControlResolutionType resolutions[GST_CAMERA_CONTROL_MAX_NUM_RESOLUTION]; +} GstCameraControlFmtDescType; + +/*! @struct GstCameraControlCapsInfoType + * @brief For querying image input capabilities + */ +typedef struct _GstCameraControlCapsInfoType { + char dev_name[GST_CAMERA_CONTROL_MAX_SZ_DEV_NAME_STRING]; + int input_idx; + gint num_fmt_desc; + GstCameraControlFmtDescType fmt_desc[GST_CAMERA_CONTROL_MAX_NUM_FMT_DESC]; + + int num_preview_resolution; + int preview_resolution_width[GST_CAMERA_CONTROL_MAX_NUM_RESOLUTION]; + int preview_resolution_height[GST_CAMERA_CONTROL_MAX_NUM_RESOLUTION]; + + int num_capture_resolution; + int capture_resolution_width[GST_CAMERA_CONTROL_MAX_NUM_RESOLUTION]; + int capture_resolution_height[GST_CAMERA_CONTROL_MAX_NUM_RESOLUTION]; + + int num_preview_fmt; + unsigned int preview_fmt[GST_CAMERA_CONTROL_MAX_NUM_FMT_DESC]; + + int num_capture_fmt; + unsigned int capture_fmt[GST_CAMERA_CONTROL_MAX_NUM_FMT_DESC]; + + int num_fps; + GstCameraControlFracType fps[GST_CAMERA_CONTROL_MAX_NUM_AVAILABLE_FPS]; +} GstCameraControlCapsInfoType; + +/*! @struct GstCameraControlFaceInfo + * @brief For face information + */ +typedef struct _GstCameraControlFaceInfo { + int id; + int score; + GstCameraControlRectType rect; +} GstCameraControlFaceInfo; + +/*! @struct GstCameraControlFaceDetectInfo + * @brief For face detect information + */ +typedef struct _GstCameraControlFaceDetectInfo { + int num_of_faces; + GstCameraControlFaceInfo face_info[GST_CAMERA_CONTROL_MAX_NUM_DETECTED_FACES]; +} GstCameraControlFaceDetectInfo; + +///////////////////////////// +// For Querying controls // +///////////////////////////// +enum { + GST_CAMERA_CTRL_TYPE_RANGE = 0, + GST_CAMERA_CTRL_TYPE_BOOL, + GST_CAMERA_CTRL_TYPE_ARRAY, + GST_CAMERA_CTRL_TYPE_UNKNOWN, + GST_CAMERA_CTRL_TYPE_NUM, +}; + +/*! @struct GstCameraControlCtrlMenuType + * @brief For querying menu of specified controls + */ +typedef struct _GstCameraControlCtrlMenuType { + gint menu_index; + gchar menu_name[GST_CAMERA_CONTROL_MAX_SZ_CTRL_NAME_STRING]; +} GstCameraControlCtrlMenuType; + +/*! @struct GstCameraControlCtrlInfoType + * @brief For querying controls detail + */ +typedef struct _GstCameraControlCtrlInfoType { + gint avsys_ctrl_id; + gint v4l2_ctrl_id; + gint ctrl_type; + gchar ctrl_name[GST_CAMERA_CONTROL_MAX_SZ_CTRL_NAME_STRING]; + gint min; + gint max; + gint step; + gint default_val; + gint num_ctrl_menu; + GstCameraControlCtrlMenuType ctrl_menu[GST_CAMERA_CONTROL_MAX_NUM_CTRL_MENU]; +} GstCameraControlCtrlInfoType; + +/*! @struct GstCameraControlCtrlListInfoType + * @brief For querying controls + */ +typedef struct _GstCameraControlCtrlListInfoType { + gint num_ctrl_list_info; + GstCameraControlCtrlInfoType ctrl_info[GST_CAMERA_CONTROL_MAX_NUM_CTRL_LIST_INFO]; +} GstCameraControlCtrlListInfoType; + +/* capabilities field */ +#define GST_CAMERA_STROBE_CAP_NONE 0x0000 /* No strobe supported */ +#define GST_CAMERA_STROBE_CAP_OFF 0x0001 /* Always flash off mode */ +#define GST_CAMERA_STROBE_CAP_ON 0x0002 /* Always use flash light mode */ +#define GST_CAMERA_STROBE_CAP_AUTO 0x0004 /* Flashlight works automatic */ +#define GST_CAMERA_STROBE_CAP_REDEYE 0x0008 /* Red-eye reduction */ +#define GST_CAMERA_STROBE_CAP_SLOWSYNC 0x0010 /* Slow sync */ +#define GST_CAMERA_STROBE_CAP_FRONT_CURTAIN 0x0020 /* Front curtain */ +#define GST_CAMERA_STROBE_CAP_REAR_CURTAIN 0x0040 /* Rear curtain */ +#define GST_CAMERA_STROBE_CAP_PERMANENT 0x0080 /* keep turned on until turning off */ +#define GST_CAMERA_STROBE_CAP_EXTERNAL 0x0100 /* use external strobe */ + +typedef struct _GstCameraControlExtraInfoType { + guint strobe_caps; /**< Use above caps field */ + guint detection_caps; /**< Just boolean */ + guint reserved[4]; +} GstCameraControlExtraInfoType; +///////////////////////////////////// +// END For Query functionalities // +///////////////////////////////////// + + +/* structure for Camera control EXIF information */ +typedef struct _GstCameraControlExifInfo { + /* Dynamic value */ + guint32 exposure_time_numerator; /* Exposure time, given in seconds */ + guint32 exposure_time_denominator; + gint shutter_speed_numerator; /* Shutter speed, given in APEX(Additive System Photographic Exposure) */ + gint shutter_speed_denominator; + gint brigtness_numerator; /* Value of brightness, before firing flash, given in APEX value */ + gint brightness_denominator; + guint16 iso; /* Sensitivity value of sensor */ + guint16 flash; /* Whether flash is fired(1) or not(0) */ + gint metering_mode; /* metering mode in EXIF 2.2 */ + gint exif_image_width; /* Size of image */ + gint exif_image_height; + gint exposure_bias_in_APEX; /* Exposure bias in APEX standard */ + gint software_used; /* Firmware S/W version */ + + /* Fixed value */ + gint component_configuration; /* color components arrangement */ + gint colorspace; /* colorspace information */ + gint focal_len_numerator; /* Lens focal length */ + gint focal_len_denominator; + gint aperture_f_num_numerator; /* Aperture value */ + gint aperture_f_num_denominator; + gint aperture_in_APEX; /* Aperture value in APEX standard */ + gint max_lens_aperture_in_APEX; /* Max aperture value in APEX standard */ +} GstCameraControlExifInfo; + +/* structure for camera control class */ +typedef struct _GstCameraControlClass { + GTypeInterface klass; + GstCameraControlType camera_control_type; + + /* virtual functions */ + const GList* (*list_channels) (GstCameraControl *control); + gboolean (*set_value) (GstCameraControl *control, GstCameraControlChannel *control_channel, gint value); + gboolean (*get_value) (GstCameraControl *control, GstCameraControlChannel *control_channel, gint *value); + gboolean (*set_exposure) (GstCameraControl *control, gint type, gint value1, gint value2); + gboolean (*get_exposure) (GstCameraControl *control, gint type, gint *value1, gint *value2); + gboolean (*set_capture_mode) (GstCameraControl *control, gint type, gint value); + gboolean (*get_capture_mode) (GstCameraControl *control, gint type, gint *value); + gboolean (*set_strobe) (GstCameraControl *control, gint type, gint value); + gboolean (*get_strobe) (GstCameraControl *control, gint type, gint *value); + gboolean (*set_detect) (GstCameraControl *control, gint type, gint value); + gboolean (*get_detect) (GstCameraControl *control, gint type, gint *value); + gboolean (*set_zoom) (GstCameraControl *control, gint type, gint value); + gboolean (*get_zoom) (GstCameraControl *control, gint type, gint *value); + gboolean (*set_focus) (GstCameraControl *control, gint mode, gint range); + gboolean (*get_focus) (GstCameraControl *control, gint *mode, gint *range); + gboolean (*start_auto_focus) (GstCameraControl *control); + gboolean (*stop_auto_focus) (GstCameraControl *control); + gboolean (*set_focus_level) (GstCameraControl *control, gint manual_level); + gboolean (*get_focus_level) (GstCameraControl *control, gint *manual_level); + gboolean (*set_auto_focus_area) (GstCameraControl *control, GstCameraControlRectType rect); + gboolean (*get_auto_focus_area) (GstCameraControl *control, GstCameraControlRectType *rect); + gboolean (*set_wdr) (GstCameraControl *control, gint value); + gboolean (*get_wdr) (GstCameraControl *control, gint *value); + gboolean (*set_ahs) (GstCameraControl *control, gint value); + gboolean (*get_ahs) (GstCameraControl *control, gint *value); + gboolean (*set_part_color) (GstCameraControl *control, gint type, gint value); + gboolean (*get_part_color) (GstCameraControl *control, gint type, gint *value); + gboolean (*get_exif_info) (GstCameraControl *control, GstCameraControlExifInfo *info); + gboolean (*get_basic_dev_info) (GstCameraControl *control, gint dev_id, GstCameraControlCapsInfoType *info); + gboolean (*get_misc_dev_info) (GstCameraControl *control, gint dev_id, GstCameraControlCtrlListInfoType *info); + gboolean (*get_extra_dev_info) (GstCameraControl *control, gint dev_id, GstCameraControlExtraInfoType *info); + void (*set_capture_command) (GstCameraControl *control, GstCameraControlCaptureCommand cmd); + void (*set_record_command) (GstCameraControl *control, GstCameraControlRecordCommand cmd); + gboolean (*start_face_zoom) (GstCameraControl *control, gint x, gint y, gint zoom_level); + gboolean (*stop_face_zoom) (GstCameraControl *control); + gboolean (*set_ae_lock) (GstCameraControl *control, gboolean lock); + gboolean (*get_ae_lock) (GstCameraControl *control, gboolean *lock); + gboolean (*set_awb_lock) (GstCameraControl *control, gboolean lock); + gboolean (*get_awb_lock) (GstCameraControl *control, gboolean *lock); + + /* signals */ + void (* value_changed) (GstCameraControl *control, GstCameraControlChannel *channel, gint value); +} GstCameraControlClass; + +GType gst_camera_control_get_type(void); + + +const GList* gst_camera_control_list_channels (GstCameraControl *control); +gboolean gst_camera_control_set_value (GstCameraControl *control, GstCameraControlChannel *control_channel, gint value); +gboolean gst_camera_control_get_value (GstCameraControl *control, GstCameraControlChannel *control_channel, gint *value); +gboolean gst_camera_control_set_exposure (GstCameraControl *control, gint type, gint value1, gint value2); +gboolean gst_camera_control_get_exposure (GstCameraControl *control, gint type, gint *value1, gint *value2); +gboolean gst_camera_control_set_capture_mode (GstCameraControl *control, gint type, gint value); +gboolean gst_camera_control_get_capture_mode (GstCameraControl *control, gint type, gint *value); +gboolean gst_camera_control_set_strobe (GstCameraControl *control, gint type, gint value); +gboolean gst_camera_control_get_strobe (GstCameraControl *control, gint type, gint *value); +gboolean gst_camera_control_set_detect (GstCameraControl *control, gint type, gint value); +gboolean gst_camera_control_get_detect (GstCameraControl *control, gint type, gint *value); +gboolean gst_camera_control_set_zoom (GstCameraControl *control, gint type, gint value); +gboolean gst_camera_control_get_zoom (GstCameraControl *control, gint type, gint *value); +gboolean gst_camera_control_set_focus (GstCameraControl *control, gint mode, gint range); +gboolean gst_camera_control_get_focus (GstCameraControl *control, gint *mode, gint *range); +gboolean gst_camera_control_start_auto_focus (GstCameraControl *control); +gboolean gst_camera_control_stop_auto_focus (GstCameraControl *control); +gboolean gst_camera_control_set_focus_level (GstCameraControl *control, gint manual_level); +gboolean gst_camera_control_get_focus_level (GstCameraControl *control, gint *manual_level); +gboolean gst_camera_control_set_auto_focus_area (GstCameraControl *control, GstCameraControlRectType rect); +gboolean gst_camera_control_get_auto_focus_area (GstCameraControl *control, GstCameraControlRectType *rect); +gboolean gst_camera_control_set_wdr (GstCameraControl *control, gint value); +gboolean gst_camera_control_get_wdr (GstCameraControl *control, gint *value); +gboolean gst_camera_control_set_ahs (GstCameraControl *control, gint value); +gboolean gst_camera_control_get_ahs (GstCameraControl *control, gint *value); +gboolean gst_camera_control_set_part_color (GstCameraControl *control, gint type, gint value); +gboolean gst_camera_control_get_part_color (GstCameraControl *control, gint type, gint *value); +gboolean gst_camera_control_get_exif_info (GstCameraControl *control, GstCameraControlExifInfo *info); +gboolean gst_camera_control_get_basic_dev_info (GstCameraControl *control, gint dev_id, GstCameraControlCapsInfoType *info); +gboolean gst_camera_control_get_misc_dev_info (GstCameraControl *control, gint dev_id, GstCameraControlCtrlListInfoType *info); +gboolean gst_camera_control_get_extra_dev_info (GstCameraControl *control, gint dev_id, GstCameraControlExtraInfoType *info); +void gst_camera_control_set_capture_command (GstCameraControl *control, GstCameraControlCaptureCommand cmd); +void gst_camera_control_set_record_command (GstCameraControl *control, GstCameraControlRecordCommand cmd); +gboolean gst_camera_control_start_face_zoom (GstCameraControl *control, gint x, gint y, gint zoom_level); +gboolean gst_camera_control_stop_face_zoom (GstCameraControl *control); +gboolean gst_camera_control_set_ae_lock (GstCameraControl *control, gboolean lock); +gboolean gst_camera_control_get_ae_lock (GstCameraControl *control, gboolean *lock); +gboolean gst_camera_control_set_awb_lock (GstCameraControl *control, gboolean lock); +gboolean gst_camera_control_get_awb_lock (GstCameraControl *control, gboolean *lock); + + +/* trigger signal */ +void gst_camera_control_value_changed (GstCameraControl *control, GstCameraControlChannel *control_channel, gint value); + +G_END_DECLS + +#endif /* __GST_CAMERA_CONTROL_H__ */ diff --git a/gst-libs/gst/video/cameracontrolchannel.c b/gst-libs/gst/video/cameracontrolchannel.c new file mode 100644 index 0000000..86c7ce9 --- /dev/null +++ b/gst-libs/gst/video/cameracontrolchannel.c @@ -0,0 +1,112 @@ +/* GStreamer Camera Control Channel Interface + * + * Copyright (c) 2000 - 2012 Samsung Electronics Co., Ltd. + * + * Contact: Jeongmo Yang + * + * cameracontrolchannel.c: cameracontrol channel object design + * + * 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., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "cameracontrolchannel.h" + +enum { + /* FILL ME */ + SIGNAL_VALUE_CHANGED, + LAST_SIGNAL +}; + +static void gst_camera_control_channel_class_init(GstCameraControlChannelClass* klass); +static void gst_camera_control_channel_init(GstCameraControlChannel* control_channel); +static void gst_camera_control_channel_dispose(GObject* object); + +static GObjectClass *parent_class = NULL; +static guint signals[LAST_SIGNAL] = { 0 }; + +GType gst_camera_control_channel_get_type(void) +{ + static GType gst_camera_control_channel_type = 0; + + if (!gst_camera_control_channel_type) { + static const GTypeInfo camera_control_channel_info = { + sizeof (GstCameraControlChannelClass), + NULL, + NULL, + (GClassInitFunc) gst_camera_control_channel_class_init, + NULL, + NULL, + sizeof (GstCameraControlChannel), + 0, + (GInstanceInitFunc) gst_camera_control_channel_init, + NULL + }; + + gst_camera_control_channel_type = \ + g_type_register_static(G_TYPE_OBJECT, + "GstCameraControlChannel", + &camera_control_channel_info, + 0); + } + + return gst_camera_control_channel_type; +} + +static void gst_camera_control_channel_class_init(GstCameraControlChannelClass* klass) +{ + GObjectClass *object_klass = (GObjectClass*) klass; + + parent_class = g_type_class_peek_parent (klass); + + signals[SIGNAL_VALUE_CHANGED] = \ + g_signal_new("control-value-changed", + G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (GstCameraControlChannelClass, value_changed), + NULL, + NULL, + g_cclosure_marshal_VOID__INT, + G_TYPE_NONE, + 1, + G_TYPE_INT); + + object_klass->dispose = gst_camera_control_channel_dispose; +} + +static void gst_camera_control_channel_init(GstCameraControlChannel* control_channel) +{ + control_channel->label = NULL; + control_channel->min_value = control_channel->max_value = 0; +} + +static void gst_camera_control_channel_dispose(GObject* object) +{ + GstCameraControlChannel *control_channel = GST_CAMERA_CONTROL_CHANNEL(object); + + if (control_channel->label) { + g_free (control_channel->label); + } + + control_channel->label = NULL; + + if (parent_class->dispose) { + parent_class->dispose (object); + } +} diff --git a/gst-libs/gst/video/cameracontrolchannel.h b/gst-libs/gst/video/cameracontrolchannel.h new file mode 100644 index 0000000..d8a2979 --- /dev/null +++ b/gst-libs/gst/video/cameracontrolchannel.h @@ -0,0 +1,65 @@ +/* GStreamer Camera Control Channel Interface + * + * Copyright (c) 2000 - 2012 Samsung Electronics Co., Ltd. + * + * Contact: Jeongmo Yang + * + * cameracontrolchannel.h: individual channel object + * + * 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., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifndef __GST_CAMERA_CONTROL_CHANNEL_H__ +#define __GST_CAMERA_CONTROL_CHANNEL_H__ + +#include + +G_BEGIN_DECLS + +#define GST_TYPE_CAMERA_CONTROL_CHANNEL \ + (gst_camera_control_channel_get_type ()) +#define GST_CAMERA_CONTROL_CHANNEL(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_CAMERA_CONTROL_CHANNEL, \ + GstCameraControlChannel)) +#define GST_CAMERA_CONTROL_CHANNEL_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_CAMERA_CONTROL_CHANNEL, \ + GstCameraControlChannelClass)) +#define GST_IS_CAMERA_CONTROL_CHANNEL(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_CAMERA_CONTROL_CHANNEL)) +#define GST_IS_CAMERA_CONTROL_CHANNEL_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_CAMERA_CONTROL_CHANNEL)) + +typedef struct _GstCameraControlChannel { + GObject parent; + gchar *label; + gint min_value; + gint max_value; +} GstCameraControlChannel; + +typedef struct _GstCameraControlChannelClass { + GObjectClass parent; + + /* signals */ + void (*value_changed)(GstCameraControlChannel *control_channel, gint value); + + gpointer _gst_reserved[GST_PADDING]; +} GstCameraControlChannelClass; + +GType gst_camera_control_channel_get_type(void); + +G_END_DECLS + +#endif /* __GST_CAMERA_CONTROL_CHANNEL_H__ */ diff --git a/gst-libs/gst/video/video-format.c b/gst-libs/gst/video/video-format.c index cff8189..9c295e2 100644 --- a/gst-libs/gst/video/video-format.c +++ b/gst-libs/gst/video/video-format.c @@ -3437,6 +3437,8 @@ static const VideoFormat formats[] = { DPTH888, PSTR244, PLANE0, OFFS013, SUB422, PACK_YUY2), MAKE_YUV_FORMAT (UYVY, "raw video", GST_MAKE_FOURCC ('U', 'Y', 'V', 'Y'), DPTH888, PSTR244, PLANE0, OFFS102, SUB422, PACK_UYVY), + MAKE_YUV_FORMAT (ITLV, "raw video", GST_MAKE_FOURCC ('I', 'T', 'L', 'V'), + DPTH888, PSTR244, PLANE0, OFFS012, SUB422, PACK_UYVY), MAKE_YUVA_PACK_FORMAT (AYUV, "raw video", GST_MAKE_FOURCC ('A', 'Y', 'U', 'V'), DPTH8888, PSTR4444, PLANE0, OFFS1230, SUB4444, PACK_AYUV), MAKE_RGB_FORMAT (RGBx, "raw video", DPTH888, PSTR444, PLANE0, OFFS012, @@ -3474,6 +3476,10 @@ static const VideoFormat formats[] = { DPTH16_16_16, PSTR488, PLANE0, OFFS204, SUB422, PACK_v216), MAKE_YUV_FORMAT (NV12, "raw video", GST_MAKE_FOURCC ('N', 'V', '1', '2'), DPTH888, PSTR122, PLANE011, OFFS001, SUB420, PACK_NV12), + MAKE_YUV_FORMAT (SN12, "raw video", GST_MAKE_FOURCC ('S', 'N', '1', '2'), + DPTH888, PSTR122, PLANE011, OFFS001, SUB420, PACK_NV12), + MAKE_YUV_FORMAT (ST12, "raw video", GST_MAKE_FOURCC ('S', 'T', '1', '2'), + DPTH888, PSTR122, PLANE011, OFFS001, SUB420, PACK_NV12), MAKE_YUV_FORMAT (NV21, "raw video", GST_MAKE_FOURCC ('N', 'V', '2', '1'), DPTH888, PSTR122, PLANE011, OFFS010, SUB420, PACK_NV21), @@ -3760,6 +3766,8 @@ gst_video_format_from_fourcc (guint32 fourcc) return GST_VIDEO_FORMAT_YVYU; case GST_MAKE_FOURCC ('U', 'Y', 'V', 'Y'): return GST_VIDEO_FORMAT_UYVY; + case GST_MAKE_FOURCC ('I', 'T', 'L', 'V'): + return GST_VIDEO_FORMAT_ITLV; case GST_MAKE_FOURCC ('A', 'Y', 'U', 'V'): return GST_VIDEO_FORMAT_AYUV; case GST_MAKE_FOURCC ('Y', '4', '1', 'B'): @@ -3774,6 +3782,10 @@ gst_video_format_from_fourcc (guint32 fourcc) return GST_VIDEO_FORMAT_v216; case GST_MAKE_FOURCC ('N', 'V', '1', '2'): return GST_VIDEO_FORMAT_NV12; + case GST_MAKE_FOURCC ('S', 'N', '1', '2'): + return GST_VIDEO_FORMAT_SN12; + case GST_MAKE_FOURCC ('S', 'T', '1', '2'): + return GST_VIDEO_FORMAT_ST12; case GST_MAKE_FOURCC ('N', 'V', '2', '1'): return GST_VIDEO_FORMAT_NV21; case GST_MAKE_FOURCC ('N', 'V', '1', '6'): diff --git a/gst-libs/gst/video/video-format.h b/gst-libs/gst/video/video-format.h index e2a7d78..6b841bc 100644 --- a/gst-libs/gst/video/video-format.h +++ b/gst-libs/gst/video/video-format.h @@ -103,6 +103,7 @@ typedef enum { GST_VIDEO_FORMAT_YV12, GST_VIDEO_FORMAT_YUY2, GST_VIDEO_FORMAT_UYVY, + GST_VIDEO_FORMAT_ITLV, GST_VIDEO_FORMAT_AYUV, GST_VIDEO_FORMAT_RGBx, GST_VIDEO_FORMAT_BGRx, @@ -121,6 +122,8 @@ typedef enum { GST_VIDEO_FORMAT_v210, GST_VIDEO_FORMAT_v216, GST_VIDEO_FORMAT_NV12, + GST_VIDEO_FORMAT_SN12, + GST_VIDEO_FORMAT_ST12, GST_VIDEO_FORMAT_NV21, GST_VIDEO_FORMAT_GRAY8, GST_VIDEO_FORMAT_GRAY16_BE, diff --git a/gst-libs/gst/video/video-info.c b/gst-libs/gst/video/video-info.c index 20090d4..734e39d 100644 --- a/gst-libs/gst/video/video-info.c +++ b/gst-libs/gst/video/video-info.c @@ -720,15 +720,23 @@ fill_planes (GstVideoInfo * info) info->size = info->stride[0] * height * 3; break; case GST_VIDEO_FORMAT_NV12: +#ifdef GST_TIZEN_MODIFICATION + case GST_VIDEO_FORMAT_SN12: + case GST_VIDEO_FORMAT_ST12: +#endif case GST_VIDEO_FORMAT_NV21: info->stride[0] = GST_ROUND_UP_4 (width); info->stride[1] = info->stride[0]; info->offset[0] = 0; info->offset[1] = info->stride[0] * GST_ROUND_UP_2 (height); +#ifdef GST_TIZEN_MODIFICATION + info->size = info->stride[0] * GST_ROUND_UP_2 (height) * 3 / 2; +#else cr_h = GST_ROUND_UP_2 (height) / 2; if (GST_VIDEO_INFO_IS_INTERLACED (info)) cr_h = GST_ROUND_UP_2 (cr_h); info->size = info->offset[1] + info->stride[0] * cr_h; +#endif break; case GST_VIDEO_FORMAT_NV16: case GST_VIDEO_FORMAT_NV61: diff --git a/gst-libs/gst/video/video.vcproj b/gst-libs/gst/video/video.vcproj deleted file mode 100644 index 2440294..0000000 --- a/gst-libs/gst/video/video.vcproj +++ /dev/null @@ -1,150 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/gst/typefind/gsttypefindfunctions.c b/gst/typefind/gsttypefindfunctions.c index d3a3415..2bedf18 100644 --- a/gst/typefind/gsttypefindfunctions.c +++ b/gst/typefind/gsttypefindfunctions.c @@ -711,31 +711,6 @@ mid_type_find (GstTypeFind * tf, gpointer unused) gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, MID_CAPS); } -#ifdef GST_EXT_MIME_TYPES -/*** audio/xmf ***/ - -static GstStaticCaps xmf_caps = GST_STATIC_CAPS ("audio/xmf"); - -#define XMF_CAPS gst_static_caps_get(&xmf_caps) -static void -xmf_type_find (GstTypeFind * tf, gpointer unused) -{ - guint8 *data = NULL; - - /* Search FileId "XMF_" 4 bytes */ - data = gst_type_find_peek (tf, 0, 4); - if (data && data[0] == 'X' && data[1] == 'M' && data[2] == 'F' - && data[3] == '_') { - /* Search Format version "2.00" 4 bytes */ - data = gst_type_find_peek (tf, 4, 4); - if (data && data[0] == '1' && data[1] == '.' && data[2] == '0' - && data[3] == '0') { - gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, XMF_CAPS); - } - } -} -#endif - /*** audio/mobile-xmf ***/ static GstStaticCaps mxmf_caps = GST_STATIC_CAPS ("audio/mobile-xmf"); @@ -763,25 +738,6 @@ mxmf_type_find (GstTypeFind * tf, gpointer unused) } } -#ifdef GST_EXT_MIME_TYPES -/*** audio/x-smaf ***/ -static GstStaticCaps mmf_caps = GST_STATIC_CAPS ("audio/x-smaf"); - -#define MMF_CAPS gst_static_caps_get(&mmf_caps) -static void -mmf_type_find (GstTypeFind * tf, gpointer unused) -{ - guint8 *data = NULL; - - /* http://jedi.ks.uiuc.edu/~johns/links/music/midifile.html */ - /* Search FileId "MMMD" 4 bytes */ - data = gst_type_find_peek (tf, 0, 4); - if (data && data[0] == 'M' && data[1] == 'M' && data[2] == 'M' - && data[3] == 'D') { - gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, MMF_CAPS); - } -} -#endif /*** video/x-fli ***/ @@ -5576,15 +5532,12 @@ plugin_init (GstPlugin * plugin) "asf,wm,wma,wmv", "\060\046\262\165\216\146\317\021\246\331\000\252\000\142\316\154", 16, GST_TYPE_FIND_MAXIMUM); -#ifndef GST_EXT_MIME_TYPES TYPE_FIND_REGISTER (plugin, "audio/x-musepack", GST_RANK_PRIMARY, musepack_type_find, "mpc,mpp,mp+", MUSEPACK_CAPS, NULL, NULL); TYPE_FIND_REGISTER (plugin, "audio/x-au", GST_RANK_MARGINAL, au_type_find, "au,snd", AU_CAPS, NULL, NULL); -#endif TYPE_FIND_REGISTER_RIFF (plugin, "video/x-msvideo", GST_RANK_PRIMARY, "avi", "AVI "); -#ifndef GST_EXT_MIME_TYPES TYPE_FIND_REGISTER_RIFF (plugin, "audio/qcelp", GST_RANK_PRIMARY, "qcp", "QLCM"); TYPE_FIND_REGISTER_RIFF (plugin, "video/x-cdxa", GST_RANK_PRIMARY, @@ -5592,7 +5545,6 @@ plugin_init (GstPlugin * plugin) TYPE_FIND_REGISTER_START_WITH (plugin, "video/x-vcd", GST_RANK_PRIMARY, "dat", "\000\377\377\377\377\377\377\377\377\377\377\000", 12, GST_TYPE_FIND_MAXIMUM); -#endif TYPE_FIND_REGISTER_START_WITH (plugin, "audio/x-imelody", GST_RANK_PRIMARY, "imy,ime,imelody", "BEGIN:IMELODY", 13, GST_TYPE_FIND_MAXIMUM); #if 0 @@ -5601,25 +5553,16 @@ plugin_init (GstPlugin * plugin) #endif TYPE_FIND_REGISTER (plugin, "audio/midi", GST_RANK_PRIMARY, mid_type_find, "mid,midi", MID_CAPS, NULL, NULL); -#ifdef GST_EXT_MIME_TYPES - TYPE_FIND_REGISTER (plugin, "audio/xmf", GST_RANK_PRIMARY, - xmf_type_find, "xmf", XMF_CAPS, NULL, NULL); - TYPE_FIND_REGISTER (plugin, "audio/x-smaf", GST_RANK_PRIMARY, - mmf_type_find, "mmf", MMF_CAPS, NULL, NULL); -#endif TYPE_FIND_REGISTER_RIFF (plugin, "audio/riff-midi", GST_RANK_PRIMARY, "mid,midi", "RMID"); TYPE_FIND_REGISTER (plugin, "audio/mobile-xmf", GST_RANK_PRIMARY, mxmf_type_find, "mxmf", MXMF_CAPS, NULL, NULL); -#ifndef GST_EXT_MIME_TYPES TYPE_FIND_REGISTER (plugin, "video/x-fli", GST_RANK_MARGINAL, flx_type_find, "flc,fli", FLX_CAPS, NULL, NULL); -#endif TYPE_FIND_REGISTER (plugin, "application/x-id3v2", GST_RANK_PRIMARY + 103, id3v2_type_find, "mp3,mp2,mp1,mpga,ogg,flac,tta", ID3_CAPS, NULL, NULL); TYPE_FIND_REGISTER (plugin, "application/x-id3v1", GST_RANK_PRIMARY + 101, id3v1_type_find, "mp3,mp2,mp1,mpga,ogg,flac,tta", ID3_CAPS, NULL, NULL); -#ifndef GST_EXT_MIME_TYPES TYPE_FIND_REGISTER (plugin, "application/x-apetag", GST_RANK_PRIMARY + 102, apetag_type_find, "mp3,ape,mpc,wv", APETAG_CAPS, NULL, NULL); TYPE_FIND_REGISTER (plugin, "audio/x-ttafile", GST_RANK_PRIMARY, @@ -5633,12 +5576,10 @@ plugin_init (GstPlugin * plugin) "ac3,eac3", AC3_CAPS, NULL, NULL); TYPE_FIND_REGISTER (plugin, "audio/x-dts", GST_RANK_SECONDARY, dts_type_find, "dts", DTS_CAPS, NULL, NULL); -#ifndef GST_EXT_MIME_TYPES TYPE_FIND_REGISTER (plugin, "audio/x-gsm", GST_RANK_PRIMARY, NULL, "gsm", GSM_CAPS, NULL, NULL); TYPE_FIND_REGISTER (plugin, "video/mpeg-sys", GST_RANK_PRIMARY, mpeg_sys_type_find, "mpe,mpeg,mpg", MPEG_SYS_CAPS, NULL, NULL); -#endif TYPE_FIND_REGISTER (plugin, "video/mpegts", GST_RANK_PRIMARY, mpeg_ts_type_find, "ts,mts", MPEGTS_CAPS, NULL, NULL); TYPE_FIND_REGISTER (plugin, "application/ogg", GST_RANK_PRIMARY, @@ -5654,10 +5595,9 @@ plugin_init (GstPlugin * plugin) h264_video_type_find, "h264,x264,264", H264_VIDEO_CAPS, NULL, NULL); TYPE_FIND_REGISTER (plugin, "video/x-h265", GST_RANK_PRIMARY, h265_video_type_find, "h265,x265,265", H265_VIDEO_CAPS, NULL, NULL); -#ifndef GST_EXT_MIME_TYPES TYPE_FIND_REGISTER (plugin, "video/x-nuv", GST_RANK_SECONDARY, nuv_type_find, "nuv", NUV_CAPS, NULL, NULL); -#endif + /* ISO formats */ TYPE_FIND_REGISTER (plugin, "audio/x-m4a", GST_RANK_PRIMARY, m4a_type_find, "m4a", M4A_CAPS, NULL, NULL); @@ -5665,7 +5605,6 @@ plugin_init (GstPlugin * plugin) q3gp_type_find, "3gp", Q3GP_CAPS, NULL, NULL); TYPE_FIND_REGISTER (plugin, "video/quicktime", GST_RANK_PRIMARY, qt_type_find, "mov,mp4", QT_CAPS, NULL, NULL); -#ifndef GST_EXT_MIME_TYPES TYPE_FIND_REGISTER (plugin, "image/x-quicktime", GST_RANK_SECONDARY, qtif_type_find, "qif,qtif,qti", QTIF_CAPS, NULL, NULL); TYPE_FIND_REGISTER (plugin, "image/jp2", GST_RANK_PRIMARY, @@ -5675,9 +5614,6 @@ plugin_init (GstPlugin * plugin) TYPE_FIND_REGISTER (plugin, "text/html", GST_RANK_SECONDARY, html_type_find, "htm,html", HTML_CAPS, NULL, NULL); - TYPE_FIND_REGISTER (plugin, "application/x-shockwave-flash", - GST_RANK_SECONDARY, swf_type_find, "swf,swfl", SWF_CAPS, NULL, NULL); -#endif TYPE_FIND_REGISTER_START_WITH (plugin, "application/vnd.rn-realmedia", GST_RANK_SECONDARY, "ra,ram,rm,rmvb", ".RMF", 4, GST_TYPE_FIND_MAXIMUM); TYPE_FIND_REGISTER_START_WITH (plugin, "application/x-pn-realaudio", @@ -5698,25 +5634,20 @@ plugin_init (GstPlugin * plugin) "txt", UTF16_CAPS, NULL, NULL); TYPE_FIND_REGISTER (plugin, "text/utf-32", GST_RANK_MARGINAL, utf32_type_find, "txt", UTF32_CAPS, NULL, NULL); -#ifndef GST_EXT_MIME_TYPES TYPE_FIND_REGISTER (plugin, "text/uri-list", GST_RANK_MARGINAL, uri_type_find, "ram", URI_CAPS, NULL, NULL); -#endif TYPE_FIND_REGISTER (plugin, "application/x-hls", GST_RANK_MARGINAL, hls_type_find, "m3u8", HLS_CAPS, NULL, NULL); TYPE_FIND_REGISTER (plugin, "application/sdp", GST_RANK_SECONDARY, sdp_type_find, "sdp", SDP_CAPS, NULL, NULL); -#ifndef GST_EXT_MIME_TYPES TYPE_FIND_REGISTER (plugin, "application/smil", GST_RANK_SECONDARY, smil_type_find, "smil", SMIL_CAPS, NULL, NULL); TYPE_FIND_REGISTER (plugin, "application/ttml+xml", GST_RANK_SECONDARY, ttml_xml_type_find, "ttml+xml", TTML_XML_CAPS, NULL, NULL); TYPE_FIND_REGISTER (plugin, "application/xml", GST_RANK_MARGINAL, xml_type_find, "xml", GENERIC_XML_CAPS, NULL, NULL); -#endif TYPE_FIND_REGISTER_RIFF (plugin, "audio/x-wav", GST_RANK_PRIMARY, "wav", "WAVE"); -#ifndef GST_EXT_MIME_TYPES TYPE_FIND_REGISTER (plugin, "audio/x-aiff", GST_RANK_SECONDARY, aiff_type_find, "aiff,aif,aifc", AIFF_CAPS, NULL, NULL); TYPE_FIND_REGISTER (plugin, "audio/x-svx", GST_RANK_SECONDARY, svx_type_find, @@ -5739,7 +5670,6 @@ plugin_init (GstPlugin * plugin) shn_type_find, "shn", SHN_CAPS, NULL, NULL); TYPE_FIND_REGISTER (plugin, "application/x-ape", GST_RANK_SECONDARY, ape_type_find, "ape", APE_CAPS, NULL, NULL); -#endif TYPE_FIND_REGISTER (plugin, "image/jpeg", GST_RANK_PRIMARY + 15, jpeg_type_find, "jpg,jpe,jpeg", JPEG_CAPS, NULL, NULL); TYPE_FIND_REGISTER_START_WITH (plugin, "image/gif", GST_RANK_PRIMARY, "gif", @@ -5748,10 +5678,8 @@ plugin_init (GstPlugin * plugin) "png", "\211PNG\015\012\032\012", 8, GST_TYPE_FIND_MAXIMUM); TYPE_FIND_REGISTER (plugin, "image/bmp", GST_RANK_PRIMARY, bmp_type_find, "bmp", BMP_CAPS, NULL, NULL); -#ifndef GST_EXT_MIME_TYPES TYPE_FIND_REGISTER (plugin, "image/tiff", GST_RANK_PRIMARY, tiff_type_find, "tif,tiff", TIFF_CAPS, NULL, NULL); -#endif TYPE_FIND_REGISTER_RIFF (plugin, "image/webp", GST_RANK_PRIMARY, "webp", "WEBP"); TYPE_FIND_REGISTER (plugin, "image/x-exr", GST_RANK_PRIMARY, exr_type_find, @@ -5760,7 +5688,6 @@ plugin_init (GstPlugin * plugin) pnm_type_find, "pnm,ppm,pgm,pbm", PNM_CAPS, NULL, NULL); TYPE_FIND_REGISTER (plugin, "video/x-matroska", GST_RANK_PRIMARY, matroska_type_find, "mkv,mka,mk3d,webm", MATROSKA_CAPS, NULL, NULL); -#ifndef GST_EXT_MIME_TYPES TYPE_FIND_REGISTER (plugin, "application/mxf", GST_RANK_PRIMARY, mxf_type_find, "mxf", MXF_CAPS, NULL, NULL); TYPE_FIND_REGISTER_START_WITH (plugin, "video/x-mve", GST_RANK_SECONDARY, @@ -5768,12 +5695,10 @@ plugin_init (GstPlugin * plugin) GST_TYPE_FIND_MAXIMUM); TYPE_FIND_REGISTER (plugin, "video/x-dv", GST_RANK_SECONDARY, dv_type_find, "dv,dif", DV_CAPS, NULL, NULL); -#endif TYPE_FIND_REGISTER_START_WITH (plugin, "audio/x-amr-nb-sh", GST_RANK_PRIMARY, "amr", "#!AMR", 5, GST_TYPE_FIND_LIKELY); TYPE_FIND_REGISTER_START_WITH (plugin, "audio/x-amr-wb-sh", GST_RANK_PRIMARY, "amr", "#!AMR-WB", 7, GST_TYPE_FIND_MAXIMUM); -#ifndef GST_EXT_MIME_TYPES TYPE_FIND_REGISTER (plugin, "audio/iLBC-sh", GST_RANK_PRIMARY, ilbc_type_find, "ilbc", ILBC_CAPS, NULL, NULL); TYPE_FIND_REGISTER (plugin, "audio/x-sbc", GST_RANK_MARGINAL, sbc_type_find, @@ -5800,14 +5725,12 @@ plugin_init (GstPlugin * plugin) GST_RANK_SECONDARY, "Z", "\037\235", 2, GST_TYPE_FIND_LIKELY); TYPE_FIND_REGISTER (plugin, "subtitle/x-kate", GST_RANK_MARGINAL, kate_type_find, NULL, NULL, NULL, NULL); -#endif TYPE_FIND_REGISTER (plugin, "audio/x-flac", GST_RANK_PRIMARY, flac_type_find, "flac", FLAC_CAPS, NULL, NULL); TYPE_FIND_REGISTER (plugin, "audio/x-vorbis", GST_RANK_PRIMARY, vorbis_type_find, NULL, VORBIS_CAPS, NULL, NULL); TYPE_FIND_REGISTER (plugin, "video/x-theora", GST_RANK_PRIMARY, theora_type_find, NULL, THEORA_CAPS, NULL, NULL); -#ifndef GST_EXT_MIME_TYPES TYPE_FIND_REGISTER (plugin, "application/x-ogm-video", GST_RANK_PRIMARY, ogmvideo_type_find, NULL, OGMVIDEO_CAPS, NULL, NULL); TYPE_FIND_REGISTER (plugin, "application/x-ogm-audio", GST_RANK_PRIMARY, @@ -5824,10 +5747,8 @@ plugin_init (GstPlugin * plugin) NULL, CMML_CAPS, NULL, NULL); TYPE_FIND_REGISTER_START_WITH (plugin, "application/x-executable", GST_RANK_MARGINAL, NULL, "\177ELF", 4, GST_TYPE_FIND_MAXIMUM); -#endif TYPE_FIND_REGISTER (plugin, "audio/aac", GST_RANK_SECONDARY, aac_type_find, "aac,adts,adif,loas", AAC_CAPS, NULL, NULL); -#ifndef GST_EXT_MIME_TYPES TYPE_FIND_REGISTER_START_WITH (plugin, "audio/x-spc", GST_RANK_SECONDARY, "spc", "SNES-SPC700 Sound File Data", 27, GST_TYPE_FIND_MAXIMUM); TYPE_FIND_REGISTER (plugin, "audio/x-wavpack", GST_RANK_SECONDARY, @@ -5899,7 +5820,6 @@ plugin_init (GstPlugin * plugin) TYPE_FIND_REGISTER (plugin, "image/x-degas", GST_RANK_MARGINAL, degas_type_find, NULL, NULL, NULL, NULL); -#endif TYPE_FIND_REGISTER (plugin, "application/octet-stream", GST_RANK_MARGINAL, dvdiso_type_find, NULL, NULL, NULL, NULL); diff --git a/gst/typefind/typefindfunctions.vcproj b/gst/typefind/typefindfunctions.vcproj deleted file mode 100644 index 0a8922c..0000000 --- a/gst/typefind/typefindfunctions.vcproj +++ /dev/null @@ -1,145 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/gst/videoconvert/Makefile.am b/gst/videoconvert/Makefile.am index 67b5625..52df430 100644 --- a/gst/videoconvert/Makefile.am +++ b/gst/videoconvert/Makefile.am @@ -14,3 +14,12 @@ libgstvideoconvert_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) libgstvideoconvert_la_LIBTOOLFLAGS = $(GST_PLUGIN_LIBTOOLFLAGS) noinst_HEADERS = gstvideoconvert.h + +if BOARD_USE_TBM_BUF +libgstvideoconvert_la_SOURCES += gsttbmbufferpool.c +libgstvideoconvert_la_CFLAGS += -DUSE_TBM_BUFFER $(MMCOMMON_CFLAGS) $(TBM_CFLAGS) +libgstvideoconvert_la_LIBADD += $(TBM_LIBS) $(MM_COMMON_LIBS) +libgstvideoconvert_la_LDFLAGS += $(TBM_LDFLAGS) $(MM_COMMON_LDFLAGS) +noinst_HEADERS += gsttbmbufferpool.h +endif + diff --git a/gst/videoconvert/gsttbmbufferpool.c b/gst/videoconvert/gsttbmbufferpool.c index 5743177..c874825 100644 --- a/gst/videoconvert/gsttbmbufferpool.c +++ b/gst/videoconvert/gsttbmbufferpool.c @@ -2,6 +2,8 @@ #include "gsttbmbufferpool.h" #include +static GQuark gst_mm_buffer_data_quark = 0; + int calc_yplane(int width, int height) { @@ -132,7 +134,6 @@ G_DEFINE_TYPE (GstMMBufferPool, gst_mm_buffer_pool, GST_TYPE_BUFFER_POOL); static gboolean gst_mm_buffer_pool_start (GstBufferPool * bpool) { - GstMMBufferPool *pool = GST_MM_BUFFER_POOL (bpool); return GST_BUFFER_POOL_CLASS (gst_mm_buffer_pool_parent_class)->start (bpool); } @@ -142,7 +143,7 @@ gst_mm_buffer_pool_stop (GstBufferPool * bpool) { GstMMBufferPool *pool = GST_MM_BUFFER_POOL (bpool); - if(gst_buffer_pool_is_active (pool) == TRUE) + if(gst_buffer_pool_is_active (bpool) == TRUE) return FALSE; /* Remove any buffers that are there */ if(pool->buffers != NULL){ @@ -162,11 +163,7 @@ gst_mm_buffer_pool_stop (GstBufferPool * bpool) static const gchar ** gst_mm_buffer_pool_get_options (GstBufferPool * bpool) { - static const gchar *raw_video_options[] = - { GST_BUFFER_POOL_OPTION_VIDEO_META, NULL }; static const gchar *options[] = { NULL }; - GstMMBufferPool *pool = GST_MM_BUFFER_POOL (bpool); - return options; } @@ -206,13 +203,6 @@ no_caps: GST_WARNING_OBJECT (pool, "no caps in config"); return FALSE; } -wrong_video_caps: - { - GST_OBJECT_UNLOCK (pool); - GST_WARNING_OBJECT (pool, - "failed getting geometry from caps %" GST_PTR_FORMAT, caps); - return FALSE; - } } static GstFlowReturn @@ -232,7 +222,7 @@ gst_mm_buffer_pool_alloc_buffer (GstBufferPool * bpool, mm_buf = (GstMMBuffer*) malloc(sizeof(GstMMBuffer)); mem = gst_mm_memory_allocator_alloc (pool->allocator, 0, mm_buf); buf = gst_buffer_new (); - buf->pool = pool; + buf->pool = bpool; mem->size = sizeof(GstMMBuffer); mem->offset = 0; gst_buffer_append_memory (buf, mem); @@ -309,6 +299,7 @@ gst_mm_buffer_pool_free_buffer (GstBufferPool * bpool, GstBuffer * buffer) gst_mm_buffer_data_quark, NULL, NULL); #ifdef USE_TBM_BUFFER + { GstMapInfo map_info = GST_MAP_INFO_INIT; mem = gst_buffer_peek_memory (buffer, 1); if (mem != NULL) { @@ -324,6 +315,7 @@ gst_mm_buffer_pool_free_buffer (GstBufferPool * bpool, GstBuffer * buffer) tbm_bo_unmap(mm_video_buf->handle.bo[1]); tbm_bo_unref(mm_video_buf->handle.bo[1]); } + } } #endif GST_BUFFER_POOL_CLASS (gst_mm_buffer_pool_parent_class)->free_buffer (bpool, @@ -376,7 +368,6 @@ static void gst_mm_buffer_pool_release_buffer (GstBufferPool * bpool, GstBuffer * buffer) { GstMMBufferPool *pool = GST_MM_BUFFER_POOL (bpool); - int err; GstMMBuffer *mm_buf; if (!pool->allocating && !pool->deactivated) { diff --git a/gst/videoconvert/gsttbmbufferpool.h b/gst/videoconvert/gsttbmbufferpool.h index 8b1ef6c..5ff3e37 100644 --- a/gst/videoconvert/gsttbmbufferpool.h +++ b/gst/videoconvert/gsttbmbufferpool.h @@ -9,7 +9,7 @@ #include #ifdef USE_TBM_BUFFER -#include +#include #include #include #include @@ -51,7 +51,7 @@ struct _GstMMBuffer #define GST_MM_VIDEO_MEMORY_TYPE "mmvideobuffer" -static GQuark gst_mm_buffer_data_quark = 0; +/*static GQuark gst_mm_buffer_data_quark = 0;*/ #define GST_MM_BUFFER_POOL(pool) ((GstMMBufferPool *) pool) typedef struct _GstMMBufferPool GstMMBufferPool; @@ -102,6 +102,12 @@ struct _GstMMBufferPoolClass GstBufferPool * gst_mm_buffer_pool_new (GstElement * element ); +int +calc_yplane(int width, int height); + +int +calc_uvplane(int width, int height); + #if 0 diff --git a/gst/videoconvert/videoconvert.vcproj b/gst/videoconvert/videoconvert.vcproj deleted file mode 100644 index f6ca6ce..0000000 --- a/gst/videoconvert/videoconvert.vcproj +++ /dev/null @@ -1,154 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/gst/videorate/videorate.vcproj b/gst/videorate/videorate.vcproj deleted file mode 100644 index d42d9ca..0000000 --- a/gst/videorate/videorate.vcproj +++ /dev/null @@ -1,145 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/gst/videoscale/videoscale.vcproj b/gst/videoscale/videoscale.vcproj deleted file mode 100644 index 9388f67..0000000 --- a/gst/videoscale/videoscale.vcproj +++ /dev/null @@ -1,154 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/gst/videotestsrc/videotestsrc.vcproj b/gst/videotestsrc/videotestsrc.vcproj deleted file mode 100644 index baff9fe..0000000 --- a/gst/videotestsrc/videotestsrc.vcproj +++ /dev/null @@ -1,154 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/gst/volume/volume.vcproj b/gst/volume/volume.vcproj deleted file mode 100644 index 149b8d8..0000000 --- a/gst/volume/volume.vcproj +++ /dev/null @@ -1,148 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/packaging/common.tar.gz b/packaging/common.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..389600a2b5fb5623b19f3c7f8677032f9b139e6a GIT binary patch literal 114024 zcmV)0K+eA(iwFQ2kWE$q1MI!&dfPa%0DAsLPk~W1ZONm>cD5d;-4n%D9G&)dET@yc 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 wgL^-PNif9?MGdWePPuCG&wv)al;x4|f)DrZ@V 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 z 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 literal 0 HcmV?d00001 diff --git a/packaging/gst-plugins-base.spec b/packaging/gst-plugins-base.spec index cc134d9..d32c627 100644 --- a/packaging/gst-plugins-base.spec +++ b/packaging/gst-plugins-base.spec @@ -1,44 +1,34 @@ -%bcond_with cdparanoia -%bcond_with x %define gst_branch 1.0 +%define _lib_gstreamer_dir %{_libdir}/gstreamer-%{gst_branch} +%define _libdebug_dir %{_libdir}/debug/usr/lib Name: gst-plugins-base -Version: 1.4.1 -Release: 7 +Version: 1.6.1 +Release: 2 License: LGPL-2.1+ and GPL-2.0+ Summary: GStreamer Streaming-Media Framework Plug-Ins Url: http://gstreamer.freedesktop.org/ Group: Multimedia/Framework Source: http://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-%{version}.tar.xz -Source100: common.tar.bz2 +Source100: common.tar.gz BuildRequires: gettext-tools BuildRequires: glib2-devel >= 2.32 BuildRequires: gstreamer-devel >= 1.0.0 BuildRequires: orc >= 0.4.16 BuildRequires: python BuildRequires: update-desktop-files -%if %{with x} -BuildRequires: pkgconfig(ice) -BuildRequires: pkgconfig(sm) -BuildRequires: pkgconfig(xext) -BuildRequires: pkgconfig(xv) -BuildRequires: pkgconfig(xfixes) -BuildRequires: pkgconfig(dri2proto) -BuildRequires: pkgconfig(libdri2) -%endif -BuildRequires: gobject-introspection-devel >= 1.31.1 -%if %{with cdparanoia} -BuildRequires: pkgconfig(cdparanoia-3) -%endif BuildRequires: pkgconfig(alsa) >= 0.9.1 BuildRequires: pkgconfig(freetype2) >= 2.0.9 BuildRequires: pkgconfig(libxml-2.0) BuildRequires: pkgconfig(ogg) >= 1.0 +BuildRequires: pkgconfig(pango) >= 1.22.0 +BuildRequires: pkgconfig(pangocairo) >= 1.22.0 BuildRequires: pkgconfig(theoradec) >= 1.1 BuildRequires: pkgconfig(theoraenc) >= 1.1 BuildRequires: pkgconfig(vorbis) >= 1.0 BuildRequires: pkgconfig(vorbisenc) >= 1.0 BuildRequires: pkgconfig(zlib) +BuildRequires: gobject-introspection-devel >= 1.31.1 BuildRequires: pkgconfig(libdrm) BuildRequires: pkgconfig(libtbm) BuildRequires: pkgconfig(mm-ta) @@ -53,41 +43,40 @@ anything media-related, from real-time sound processing to playing videos. Its plug-in-based architecture means that new data types or processing capabilities can be added simply by installing new plug-ins. - %package devel Summary: Include files and Libraries -Requires: %{name} = %{version} +Requires: %{name} = %{version} %description devel This package contains all necessary include files and libraries needed to compile and link applications that use gstreamer-plugins-base. - %prep -%setup -q +%setup -q -n gst-plugins-base-%{version} %setup -q -T -D -a 100 - %build # FIXME: GTKDOC_CFLAGS, GST_OBJ_CFLAGS: # Silently ignored compilation of uninstalled gtk-doc scanners without RPM_OPT_FLAGS. export V=1 NOCONFIGURE=1 ./autogen.sh export CFLAGS="%{optflags} -fno-strict-aliasing\ - %ifarch %{arm} +%ifarch %{arm} -DGST_EXT_AUDIODECODER_MODIFICATION\ -DGST_EXT_XV_ENHANCEMENT\ -DGST_EXT_LINK_FIMCCONVERT\ - -DGST_EXT_MIME_TYPES - %endif + -DGST_EXT_MIME_TYPES\ + -DGST_TIZEN_MODIFICATION\ +%endif " %configure\ - --disable-static\ - --enable-experimental\ - --disable-gtk-doc\ - --enable-introspection\ - --disable-encoding\ - --disable-examples + --disable-static\ + --enable-experimental\ + --disable-gtk-doc\ + --enable-introspection\ + --disable-encoding\ + --disable-examples\ + --enable-use-tbmbuf make %{?_smp_mflags} %install @@ -96,86 +85,131 @@ rm -rf %{buildroot} %find_lang %{name}-%{gst_branch} mv %{name}-%{gst_branch}.lang %{name}.lang - %post -p /sbin/ldconfig - %postun -p /sbin/ldconfig - %lang_package %files %manifest %{name}.manifest -%defattr(-, root, root) %license COPYING COPYING.LIB + %{_bindir}/gst-device-monitor-%{gst_branch} %{_bindir}/gst-discoverer-%{gst_branch} %{_bindir}/gst-play-%{gst_branch} -%{_libdir}/gstreamer-%{gst_branch}/libgstadder.so -%{_libdir}/gstreamer-%{gst_branch}/libgstalsa.so -%{_libdir}/gstreamer-%{gst_branch}/libgstapp.so -%{_libdir}/gstreamer-%{gst_branch}/libgstaudioconvert.so -%{_libdir}/gstreamer-%{gst_branch}/libgstaudioresample.so -%{_libdir}/gstreamer-%{gst_branch}/libgstaudiotestsrc.so -%{_libdir}/gstreamer-%{gst_branch}/libgstaudiorate.so -%{_libdir}/gstreamer-%{gst_branch}/libgstgio.so -%{_libdir}/gstreamer-%{gst_branch}/libgstogg.so -%{_libdir}/gstreamer-%{gst_branch}/libgstplayback.so -%{_libdir}/gstreamer-%{gst_branch}/libgstsubparse.so -%{_libdir}/gstreamer-%{gst_branch}/libgsttcp.so -%{_libdir}/gstreamer-%{gst_branch}/libgsttheora.so -%{_libdir}/gstreamer-%{gst_branch}/libgsttypefindfunctions.so -%{_libdir}/gstreamer-%{gst_branch}/libgstvideoconvert.so -%{_libdir}/gstreamer-%{gst_branch}/libgstvideorate.so -%{_libdir}/gstreamer-%{gst_branch}/libgstvideoscale.so -%{_libdir}/gstreamer-%{gst_branch}/libgstvideotestsrc.so -%{_libdir}/gstreamer-%{gst_branch}/libgstvolume.so -%{_libdir}/gstreamer-%{gst_branch}/libgstvorbis.so -#%{_libdir}/gstreamer-%{gst_branch}/libgstencodebin.so + +%define _lib_gstreamer_dir %{_libdir}/gstreamer-%{gst_branch} +%define _libdebug_dir %{_libdir}/debug/usr/lib + +%{_lib_gstreamer_dir}/libgstadder.so +%{_lib_gstreamer_dir}/libgstalsa.so +%{_lib_gstreamer_dir}/libgstapp.so +%{_lib_gstreamer_dir}/libgstaudioconvert.so +%{_lib_gstreamer_dir}/libgstaudioresample.so +%{_lib_gstreamer_dir}/libgstaudiotestsrc.so +%{_lib_gstreamer_dir}/libgstaudiorate.so +%{_lib_gstreamer_dir}/libgstgio.so +%{_lib_gstreamer_dir}/libgstogg.so +%{_lib_gstreamer_dir}/libgstplayback.so +%{_lib_gstreamer_dir}/libgstsubparse.so +%{_lib_gstreamer_dir}/libgsttcp.so +%{_lib_gstreamer_dir}/libgsttheora.so +%{_lib_gstreamer_dir}/libgsttypefindfunctions.so +%{_lib_gstreamer_dir}/libgstvideoconvert.so +%{_lib_gstreamer_dir}/libgstvideorate.so +%{_lib_gstreamer_dir}/libgstvideoscale.so +%{_lib_gstreamer_dir}/libgstvideotestsrc.so +%{_lib_gstreamer_dir}/libgstvolume.so +%{_lib_gstreamer_dir}/libgstvorbis.so +%{_lib_gstreamer_dir}/libgstpango.so + +%{_libdir}/libgstapp-%{gst_branch}.so.0 +%{_libdir}/libgstaudio-%{gst_branch}.so.0 +%{_libdir}/libgstallocators-%{gst_branch}.so.0 +%{_libdir}/libgstfft-%{gst_branch}.so.0 +%{_libdir}/libgstpbutils-%{gst_branch}.so.0 +%{_libdir}/libgstriff-%{gst_branch}.so.0 +%{_libdir}/libgstrtp-%{gst_branch}.so.0 +%{_libdir}/libgstrtsp-%{gst_branch}.so.0 +%{_libdir}/libgstsdp-%{gst_branch}.so.0 +%{_libdir}/libgsttag-%{gst_branch}.so.0 +%{_libdir}/libgstvideo-%{gst_branch}.so.0 + %doc %{_mandir}/man1/gst-device-monitor-* %doc %{_mandir}/man1/gst-discoverer-* %doc %{_mandir}/man1/gst-play-* -%if %{with x} -%{_libdir}/gstreamer-%{gst_branch}/libgstximagesink.so -%{_libdir}/gstreamer-%{gst_branch}/libgstxvimagesink.so -%endif -%if %{with cdparanoia} -%{_libdir}/gstreamer-%{gst_branch}/libgstcdparanoia.so -%endif +%define so_version so.0.601.0 + +%{_libdir}/libgstapp-%{gst_branch}.%{so_version} +%{_libdir}/libgstaudio-%{gst_branch}.%{so_version} +%{_libdir}/libgstallocators-%{gst_branch}.%{so_version} +%{_libdir}/libgstfft-%{gst_branch}.%{so_version} +%{_libdir}/libgstpbutils-%{gst_branch}.%{so_version} +%{_libdir}/libgstriff-%{gst_branch}.%{so_version} +%{_libdir}/libgstrtp-%{gst_branch}.%{so_version} +%{_libdir}/libgstrtsp-%{gst_branch}.%{so_version} +%{_libdir}/libgstsdp-%{gst_branch}.%{so_version} +%{_libdir}/libgsttag-%{gst_branch}.%{so_version} +%{_libdir}/libgstvideo-%{gst_branch}.%{so_version} + +%define _libgirrepo_dir %{_libdir}/girepository-%{gst_branch} + +%{_libgirrepo_dir}/GstApp-%{gst_branch}.typelib +%{_libgirrepo_dir}/GstAudio-%{gst_branch}.typelib +%{_libgirrepo_dir}/GstAllocators-%{gst_branch}.typelib +%{_libgirrepo_dir}/GstFft-%{gst_branch}.typelib +%{_libgirrepo_dir}/GstRiff-%{gst_branch}.typelib +%{_libgirrepo_dir}/GstRtp-%{gst_branch}.typelib +%{_libgirrepo_dir}/GstRtsp-%{gst_branch}.typelib +%{_libgirrepo_dir}/GstSdp-%{gst_branch}.typelib +%{_libgirrepo_dir}/GstTag-%{gst_branch}.typelib +%{_libgirrepo_dir}/GstVideo-%{gst_branch}.typelib +%{_libgirrepo_dir}/GstPbutils-%{gst_branch}.typelib -%{_libdir}/libgstapp*.so.* -%{_libdir}/libgstaudio*.so.* -%{_libdir}/libgstallocators*.so.* -%{_libdir}/libgstfft*.so.* -%{_libdir}/girepository-1.0/GstApp-*.typelib -%{_libdir}/girepository-1.0/GstAudio-*.typelib -%{_libdir}/girepository-1.0/GstAllocators-*.typelib -%{_libdir}/girepository-1.0/GstFft-*.typelib -%{_libdir}/girepository-1.0/GstRiff-*.typelib -%{_libdir}/girepository-1.0/GstRtp-*.typelib -%{_libdir}/girepository-1.0/GstRtsp-*.typelib -%{_libdir}/girepository-1.0/GstSdp-*.typelib -%{_libdir}/girepository-1.0/GstTag-*.typelib -%{_libdir}/girepository-1.0/GstVideo-*.typelib -%{_libdir}/girepository-1.0/GstPbutils-*.typelib -%{_libdir}/libgstpbutils*.so.* -%{_libdir}/libgstriff*.so.* -%{_libdir}/libgstrtp*.so.* -%{_libdir}/libgstrtsp*.so.* -%{_libdir}/libgstsdp*.so.* -%{_libdir}/libgsttag*.so.* %dir %{_datadir}/gst-plugins-base/ %dir %{_datadir}/gst-plugins-base/%{gst_branch}/ -%{_datadir}/gst-plugins-base/%{gst_branch}/license-translations.dict -%{_libdir}/libgstvideo*.so.* +%{_datadir}/gst-plugins-base/%{gst_branch}/license-translations.dict %files devel %manifest %{name}.manifest -%defattr(-, root, root) %{_includedir}/gstreamer-%{gst_branch}/* -%{_libdir}/*.so -%{_libdir}/pkgconfig/*.pc -%{_datadir}/gir-1.0/*.gir +%{_libdir}/libgstapp-%{gst_branch}.so +%{_libdir}/libgstaudio-%{gst_branch}.so +%{_libdir}/libgstallocators-%{gst_branch}.so +%{_libdir}/libgstfft-%{gst_branch}.so +%{_libdir}/libgstpbutils-%{gst_branch}.so +%{_libdir}/libgstriff-%{gst_branch}.so +%{_libdir}/libgstrtp-%{gst_branch}.so +%{_libdir}/libgstrtsp-%{gst_branch}.so +%{_libdir}/libgstsdp-%{gst_branch}.so +%{_libdir}/libgsttag-%{gst_branch}.so +%{_libdir}/libgstvideo-%{gst_branch}.so + +%{_libdir}/pkgconfig/gstreamer-allocators-1.0.pc +%{_libdir}/pkgconfig/gstreamer-app-1.0.pc +%{_libdir}/pkgconfig/gstreamer-audio-1.0.pc +%{_libdir}/pkgconfig/gstreamer-fft-1.0.pc +%{_libdir}/pkgconfig/gstreamer-pbutils-1.0.pc +%{_libdir}/pkgconfig/gstreamer-plugins-base-1.0.pc +%{_libdir}/pkgconfig/gstreamer-riff-1.0.pc +%{_libdir}/pkgconfig/gstreamer-rtp-1.0.pc +%{_libdir}/pkgconfig/gstreamer-rtsp-1.0.pc +%{_libdir}/pkgconfig/gstreamer-sdp-1.0.pc +%{_libdir}/pkgconfig/gstreamer-tag-1.0.pc +%{_libdir}/pkgconfig/gstreamer-video-1.0.pc + +%{_datadir}/gir-%{gst_branch}/GstApp-%{gst_branch}.gir +%{_datadir}/gir-%{gst_branch}/GstAudio-%{gst_branch}.gir +%{_datadir}/gir-%{gst_branch}/GstAllocators-%{gst_branch}.gir +%{_datadir}/gir-%{gst_branch}/GstFft-%{gst_branch}.gir +%{_datadir}/gir-%{gst_branch}/GstRiff-%{gst_branch}.gir +%{_datadir}/gir-%{gst_branch}/GstRtp-%{gst_branch}.gir +%{_datadir}/gir-%{gst_branch}/GstRtsp-%{gst_branch}.gir +%{_datadir}/gir-%{gst_branch}/GstSdp-%{gst_branch}.gir +%{_datadir}/gir-%{gst_branch}/GstTag-%{gst_branch}.gir +%{_datadir}/gir-%{gst_branch}/GstVideo-%{gst_branch}.gir +%{_datadir}/gir-%{gst_branch}/GstPbutils-%{gst_branch}.gir + -- 2.7.4