--- /dev/null
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program 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 General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
--- /dev/null
+SUBDIRS = ivi/gst-auto-launch/src
+docdir = /usr/share/$(PACKAGE)
+dist_doc_DATA = LICENSE ivi/gst-auto-launch/AUTHORS ivi/gst-auto-launch/README
--- /dev/null
+autoreconf -i
+touch vala.stamp
+touch ivi/gst-auto-launch/src/vala.stamp
--- /dev/null
+AC_INIT([gst-auto-launch], [0.3.21], [tigrux@gmail.com], [gst-auto-launch])
+AC_CONFIG_SRCDIR([Makefile.am])
+AC_CONFIG_HEADERS(config.h)
+AM_INIT_AUTOMAKE([foreign])
+
+AC_PROG_CC
+#AC_PROG_LIBTOOL
+#AC_DISABLE_STATIC
+
+AC_PATH_PROG(VALAC, valac, valac)
+AC_SUBST(VALAC)
+
+AC_SUBST(CFLAGS)
+AC_SUBST(CPPFLAGS)
+AC_SUBST(LDFLAGS)
+
+VALAFLAGS="--pkg gstreamer-1.0 --pkg gstreamer-base-1.0 --pkg posix"
+AC_SUBST(VALAFLAGS)
+
+PKG_CHECK_MODULES(PROGRAM, gstreamer-1.0 gstreamer-base-1.0 gthread-2.0)
+AC_SUBST(PROGRAM_CFLAGS)
+AC_SUBST(PROGRAM_LIBS)
+
+AC_CONFIG_FILES([
+ Makefile
+ ivi/gst-auto-launch/src/Makefile
+ ])
+
+AC_OUTPUT
--- /dev/null
+- Sandino Flores
+ <sflores at dextratech dot com>
+ <tigrux at gmail dot com>
--- /dev/null
+====== Source ======
+
+This code is from https://github.com/tigrux/gst-auto-launch
+with version 0.3.21-0-g9f6f92a on Nov 18, 2011
+
+
+====== Build ======
+
+One shall build this package under normal user.
+./autogen.sh
+./configure --prefix=/usr
+make
+
+Or build rpm package in an rpmbuild environment.
+./pack.sh
+
+
+====== Usage ======
+
+gst-auto-launch is an improved version of gst-launch that accepts commands.
+
+Usage: ./gst-auto-launch <pipeline description> <list of commands>
+Where each command is of the form <seconds>:<name>
+
+Supported commands are:
+ pause:
+ Change pipeline state to PAUSED
+ seek:
+ Seek to the specified time
+ null:
+ Change pipeline state to NULL
+ stop:
+ Change pipeline state to READY
+ eos:
+ Send eos to the source elements
+ set:
+ Set properties of an object
+ quit:
+ Quit the event loop
+ ready:
+ Change pipeline state to READY
+ play:
+ Change pipeline state to PLAYING
+ navigation:
+ Send the specified navigation event name to an element in the given coords
+
+Example:
+gst-auto-launch videotestsrc ! autovideosink 0:pause 1:play +5:eos
+gst-auto-launch videotestsrc ! clockoverlay name=clock ! autovideosink 0:play 2:set:clock:valignment:bottom 5:eos
--- /dev/null
+AM_CPPFLAGS = $(PROGRAM_CFLAGS)
+
+BUILT_SOURCES = vala.stamp
+
+bin_PROGRAMS = gst-auto-launch
+
+gst_auto_launch_VALASOURCES = \
+ auto-pipeline.vala \
+ task-scanner.vala \
+ task.vala \
+ gst-auto-launch.vala \
+ command.vala \
+ commands.vala
+
+gst_auto_launch_SOURCES = \
+ $(gst_auto_launch_VALASOURCES:.vala=.c)
+
+gst_auto_launch_LDADD = \
+ $(PROGRAM_LIBS)
+
+vala.stamp: $(gst_auto_launch_VALASOURCES)
+ $(VALAC) --thread -C $(VALAFLAGS) $(gst_auto_launch_VALASOURCES)
+ touch $@
+
+bindir=/usr/bin
+EXTRA_DIST = $(bin_PROGRAMS)
--- /dev/null
+/* auto-pipeline.c generated by valac 0.10.0, the Vala compiler
+ * generated from auto-pipeline.vala, do not modify */
+
+
+#include <glib.h>
+#include <glib-object.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdarg.h>
+#include <stdio.h>
+#include <gst/gst.h>
+
+
+#define TYPE_AUTO_PIPELINE (auto_pipeline_get_type ())
+#define AUTO_PIPELINE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_AUTO_PIPELINE, AutoPipeline))
+#define AUTO_PIPELINE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_AUTO_PIPELINE, AutoPipelineClass))
+#define IS_AUTO_PIPELINE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_AUTO_PIPELINE))
+#define IS_AUTO_PIPELINE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_AUTO_PIPELINE))
+#define AUTO_PIPELINE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_AUTO_PIPELINE, AutoPipelineClass))
+
+typedef struct _AutoPipeline AutoPipeline;
+typedef struct _AutoPipelineClass AutoPipelineClass;
+typedef struct _AutoPipelinePrivate AutoPipelinePrivate;
+#define _fclose0(var) ((var == NULL) ? NULL : (var = (fclose (var), NULL)))
+#define _gst_object_unref0(var) ((var == NULL) ? NULL : (var = (gst_object_unref (var), NULL)))
+#define _g_free0(var) (var = (g_free (var), NULL))
+#define _g_error_free0(var) ((var == NULL) ? NULL : (var = (g_error_free (var), NULL)))
+
+struct _AutoPipeline {
+ GObject parent_instance;
+ AutoPipelinePrivate * priv;
+};
+
+struct _AutoPipelineClass {
+ GObjectClass parent_class;
+};
+
+struct _AutoPipelinePrivate {
+ FILE* log_stream;
+ gboolean _output_messages_enabled;
+ gint _return_status;
+ GstBin* _pipeline;
+};
+
+
+extern AutoPipeline* auto_pipeline;
+static gpointer auto_pipeline_parent_class = NULL;
+
+#define LOG_FILENAME "gst-auto-launch.log"
+gint vprintf (const char* format, va_list ap);
+gint vfprintf (FILE* stream, const char* format, va_list ap);
+GType auto_pipeline_get_type (void) G_GNUC_CONST;
+#define AUTO_PIPELINE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TYPE_AUTO_PIPELINE, AutoPipelinePrivate))
+enum {
+ AUTO_PIPELINE_DUMMY_PROPERTY,
+ AUTO_PIPELINE_RETURN_STATUS,
+ AUTO_PIPELINE_OUTPUT_MESSAGES_ENABLED,
+ AUTO_PIPELINE_PIPELINE
+};
+void auto_pipeline_log (AutoPipeline* self, const char* format, ...);
+static void auto_pipeline_on_bus_message (AutoPipeline* self, GstMessage* message);
+static gboolean _lambda0_ (GQuark q, GValue* v, AutoPipeline* self);
+static gboolean __lambda0__gst_structure_foreach_func (GQuark field_id, GValue* value, gpointer self);
+void auto_pipeline_set_return_status (AutoPipeline* self, gint value);
+GstBin* auto_pipeline_get_pipeline (AutoPipeline* self);
+gboolean auto_pipeline_set_state (AutoPipeline* self, GstState state);
+GstElement* auto_pipeline_get_by_name (AutoPipeline* self, const char* name);
+gboolean auto_pipeline_send_eos (AutoPipeline* self);
+AutoPipeline* auto_pipeline_new (void);
+AutoPipeline* auto_pipeline_construct (GType object_type);
+gint auto_pipeline_get_return_status (AutoPipeline* self);
+gboolean auto_pipeline_get_output_messages_enabled (AutoPipeline* self);
+void auto_pipeline_set_output_messages_enabled (AutoPipeline* self, gboolean value);
+void auto_pipeline_set_pipeline (AutoPipeline* self, GstBin* value);
+static void _auto_pipeline_on_bus_message_gst_bus_message (GstBus* _sender, GstMessage* message, gpointer self);
+static void auto_pipeline_finalize (GObject* obj);
+static void auto_pipeline_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec);
+static void auto_pipeline_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec);
+static int _vala_strcmp0 (const char * str1, const char * str2);
+
+
+
+void auto_pipeline_log (AutoPipeline* self, const char* format, ...) {
+ va_list args_vl;
+ g_return_if_fail (self != NULL);
+ g_return_if_fail (format != NULL);
+ va_start (args_vl, format);
+ if (self->priv->log_stream != NULL) {
+ vfprintf (self->priv->log_stream, format, args_vl);
+ }
+ vprintf (format, args_vl);
+ va_end (args_vl);
+}
+
+
+static gpointer _gst_object_ref0 (gpointer self) {
+ return self ? gst_object_ref (self) : NULL;
+}
+
+
+static gboolean _lambda0_ (GQuark q, GValue* v, AutoPipeline* self) {
+ gboolean result = FALSE;
+ GValue _tmp0_ = {0};
+ GValue vs;
+ vs = (g_value_init (&_tmp0_, G_TYPE_STRING), g_value_set_string (&_tmp0_, ""), _tmp0_);
+ g_value_transform (v, &vs);
+ auto_pipeline_log (self, " '%s' : '''%s''',\n", g_quark_to_string (q), g_value_get_string (&vs), NULL);
+ result = TRUE;
+ G_IS_VALUE (&vs) ? (g_value_unset (&vs), NULL) : NULL;
+ return result;
+}
+
+
+static gboolean __lambda0__gst_structure_foreach_func (GQuark field_id, GValue* value, gpointer self) {
+ gboolean result;
+ result = _lambda0_ (field_id, value, self);
+ return result;
+}
+
+
+static void auto_pipeline_on_bus_message (AutoPipeline* self, GstMessage* message) {
+ g_return_if_fail (self != NULL);
+ g_return_if_fail (message != NULL);
+ if (self->priv->_output_messages_enabled) {
+ guint32 seqnum;
+ GstObject* src;
+ const GstStructure* s;
+ char* src_name;
+ GTimeVal tv = {0};
+ seqnum = gst_message_get_seqnum (message);
+ src = message->src;
+ s = gst_message_get_structure (message);
+ src_name = NULL;
+ if (GST_IS_ELEMENT (src)) {
+ char* _tmp0_;
+ src_name = (_tmp0_ = g_strdup (gst_object_get_name (src)), _g_free0 (src_name), _tmp0_);
+ } else {
+ if (GST_IS_PAD (src)) {
+ GstPad* pad;
+ char* pad_name;
+ GstElement* _tmp1_;
+ char* _tmp2_;
+ char* parent_name;
+ char* _tmp3_;
+ pad = _gst_object_ref0 (GST_PAD (src));
+ pad_name = g_strdup (gst_object_get_name ((GstObject*) pad));
+ parent_name = (_tmp2_ = g_strdup (gst_object_get_name ((GstObject*) (_tmp1_ = gst_pad_get_parent_element (pad)))), _gst_object_unref0 (_tmp1_), _tmp2_);
+ src_name = (_tmp3_ = g_strdup_printf ("%s:%s", parent_name, pad_name), _g_free0 (src_name), _tmp3_);
+ _g_free0 (parent_name);
+ _g_free0 (pad_name);
+ _gst_object_unref0 (pad);
+ } else {
+ if (GST_IS_OBJECT (src)) {
+ char* _tmp4_;
+ src_name = (_tmp4_ = g_strdup (gst_object_get_name (src)), _g_free0 (src_name), _tmp4_);
+ }
+ }
+ }
+ auto_pipeline_log (self, " {\n", NULL);
+ auto_pipeline_log (self, " 'seqnum' : %u,\n", seqnum, NULL);
+ auto_pipeline_log (self, " 'type' : '%s',\n", gst_message_type_get_name (message->type), NULL);
+ g_get_current_time (&tv);
+ auto_pipeline_log (self, " 'time' : %lu.%06lu,\n", tv.tv_sec, tv.tv_usec, NULL);
+ if (src_name != NULL) {
+ auto_pipeline_log (self, " 'src' : '%s',\n", src_name, NULL);
+ }
+ if (s != NULL) {
+ auto_pipeline_log (self, " 'structure' : {\n", NULL);
+ auto_pipeline_log (self, " 'name' : '%s',\n", gst_structure_get_name (s), NULL);
+ gst_structure_foreach (s, __lambda0__gst_structure_foreach_func, self);
+ auto_pipeline_log (self, " }\n", NULL);
+ }
+ auto_pipeline_log (self, " },\n", NULL);
+ _g_free0 (src_name);
+ }
+ switch (message->type) {
+ case GST_MESSAGE_ERROR:
+ {
+ {
+ GError* e;
+ char* s;
+ GError* _tmp5_ = NULL;
+ GError* _tmp6_;
+ char* _tmp7_ = NULL;
+ char* _tmp8_;
+ e = NULL;
+ s = NULL;
+ (gst_message_parse_error (message, &_tmp5_, &_tmp7_), e = (_tmp6_ = _tmp5_, _g_error_free0 (e), _tmp6_));
+ s = (_tmp8_ = _tmp7_, _g_free0 (s), _tmp8_);
+ g_critical ("auto-pipeline.vala:100: Bus error: %s %s\n", e->message, s);
+ auto_pipeline_set_return_status (self, 1);
+ g_signal_emit_by_name (self, "quit");
+ _g_free0 (s);
+ _g_error_free0 (e);
+ break;
+ }
+ }
+ case GST_MESSAGE_EOS:
+ {
+ {
+ gst_element_set_state ((GstElement*) auto_pipeline_get_pipeline (self), GST_STATE_NULL);
+ g_signal_emit_by_name (self, "quit");
+ break;
+ }
+ }
+ default:
+ {
+ break;
+ }
+ }
+}
+
+
+gboolean auto_pipeline_set_state (AutoPipeline* self, GstState state) {
+ gboolean result = FALSE;
+ g_return_val_if_fail (self != NULL, FALSE);
+ result = gst_element_set_state ((GstElement*) auto_pipeline_get_pipeline (self), state) != GST_STATE_CHANGE_FAILURE;
+ return result;
+}
+
+
+GstElement* auto_pipeline_get_by_name (AutoPipeline* self, const char* name) {
+ GstElement* result = NULL;
+ char* _tmp0_;
+ gboolean _tmp1_;
+ g_return_val_if_fail (self != NULL, NULL);
+ g_return_val_if_fail (name != NULL, NULL);
+ if ((_tmp1_ = _vala_strcmp0 (_tmp0_ = gst_object_get_name ((GstObject*) auto_pipeline_get_pipeline (self)), name) == 0, _g_free0 (_tmp0_), _tmp1_)) {
+ result = _gst_object_ref0 ((GstElement*) auto_pipeline_get_pipeline (self));
+ return result;
+ } else {
+ result = gst_bin_get_by_name (auto_pipeline_get_pipeline (self), name);
+ return result;
+ }
+}
+
+
+gboolean auto_pipeline_send_eos (AutoPipeline* self) {
+ gboolean result = FALSE;
+ g_return_val_if_fail (self != NULL, FALSE);
+ g_print ("Sending EOS to the pipeline\n");
+ result = gst_element_send_event ((GstElement*) auto_pipeline_get_pipeline (auto_pipeline), gst_event_new_eos ());
+ return result;
+}
+
+
+AutoPipeline* auto_pipeline_construct (GType object_type) {
+ AutoPipeline * self;
+ self = (AutoPipeline*) g_object_new (object_type, NULL);
+ return self;
+}
+
+
+AutoPipeline* auto_pipeline_new (void) {
+ return auto_pipeline_construct (TYPE_AUTO_PIPELINE);
+}
+
+
+gint auto_pipeline_get_return_status (AutoPipeline* self) {
+ gint result;
+ g_return_val_if_fail (self != NULL, 0);
+ result = self->priv->_return_status;
+ return result;
+}
+
+
+void auto_pipeline_set_return_status (AutoPipeline* self, gint value) {
+ g_return_if_fail (self != NULL);
+ self->priv->_return_status = value;
+ g_object_notify ((GObject *) self, "return-status");
+}
+
+
+gboolean auto_pipeline_get_output_messages_enabled (AutoPipeline* self) {
+ gboolean result;
+ g_return_val_if_fail (self != NULL, FALSE);
+ result = self->priv->_output_messages_enabled;
+ return result;
+}
+
+
+void auto_pipeline_set_output_messages_enabled (AutoPipeline* self, gboolean value) {
+ gboolean _tmp0_ = FALSE;
+ g_return_if_fail (self != NULL);
+ if (!self->priv->_output_messages_enabled) {
+ _tmp0_ = value;
+ } else {
+ _tmp0_ = FALSE;
+ }
+ if (_tmp0_) {
+ FILE* _tmp1_;
+ self->priv->log_stream = (_tmp1_ = fopen (LOG_FILENAME, "w"), _fclose0 (self->priv->log_stream), _tmp1_);
+ }
+ self->priv->_output_messages_enabled = value;
+ g_object_notify ((GObject *) self, "output-messages-enabled");
+}
+
+
+GstBin* auto_pipeline_get_pipeline (AutoPipeline* self) {
+ GstBin* result;
+ g_return_val_if_fail (self != NULL, NULL);
+ result = self->priv->_pipeline;
+ return result;
+}
+
+
+static void _auto_pipeline_on_bus_message_gst_bus_message (GstBus* _sender, GstMessage* message, gpointer self) {
+ auto_pipeline_on_bus_message (self, message);
+}
+
+
+void auto_pipeline_set_pipeline (AutoPipeline* self, GstBin* value) {
+ GstBin* _tmp0_;
+ GstBus* bus;
+ g_return_if_fail (self != NULL);
+ self->priv->_pipeline = (_tmp0_ = _gst_object_ref0 (value), _gst_object_unref0 (self->priv->_pipeline), _tmp0_);
+ bus = _gst_object_ref0 (((GstElement*) self->priv->_pipeline)->bus);
+ gst_bus_add_signal_watch (bus);
+ g_signal_connect_object (bus, "message", (GCallback) _auto_pipeline_on_bus_message_gst_bus_message, self, 0);
+ _gst_object_unref0 (bus);
+ g_object_notify ((GObject *) self, "pipeline");
+}
+
+
+static void auto_pipeline_class_init (AutoPipelineClass * klass) {
+ auto_pipeline_parent_class = g_type_class_peek_parent (klass);
+ g_type_class_add_private (klass, sizeof (AutoPipelinePrivate));
+ G_OBJECT_CLASS (klass)->get_property = auto_pipeline_get_property;
+ G_OBJECT_CLASS (klass)->set_property = auto_pipeline_set_property;
+ G_OBJECT_CLASS (klass)->finalize = auto_pipeline_finalize;
+ g_object_class_install_property (G_OBJECT_CLASS (klass), AUTO_PIPELINE_RETURN_STATUS, g_param_spec_int ("return-status", "return-status", "return-status", G_MININT, G_MAXINT, 0, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE | G_PARAM_WRITABLE));
+ g_object_class_install_property (G_OBJECT_CLASS (klass), AUTO_PIPELINE_OUTPUT_MESSAGES_ENABLED, g_param_spec_boolean ("output-messages-enabled", "output-messages-enabled", "output-messages-enabled", FALSE, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE | G_PARAM_WRITABLE));
+ g_object_class_install_property (G_OBJECT_CLASS (klass), AUTO_PIPELINE_PIPELINE, g_param_spec_object ("pipeline", "pipeline", "pipeline", GST_TYPE_BIN, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE | G_PARAM_WRITABLE));
+ g_signal_new ("quit", TYPE_AUTO_PIPELINE, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
+}
+
+
+static void auto_pipeline_instance_init (AutoPipeline * self) {
+ self->priv = AUTO_PIPELINE_GET_PRIVATE (self);
+ self->priv->_return_status = 0;
+}
+
+
+static void auto_pipeline_finalize (GObject* obj) {
+ AutoPipeline * self;
+ self = AUTO_PIPELINE (obj);
+ _fclose0 (self->priv->log_stream);
+ _gst_object_unref0 (self->priv->_pipeline);
+ G_OBJECT_CLASS (auto_pipeline_parent_class)->finalize (obj);
+}
+
+
+GType auto_pipeline_get_type (void) {
+ static volatile gsize auto_pipeline_type_id__volatile = 0;
+ if (g_once_init_enter (&auto_pipeline_type_id__volatile)) {
+ static const GTypeInfo g_define_type_info = { sizeof (AutoPipelineClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) auto_pipeline_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (AutoPipeline), 0, (GInstanceInitFunc) auto_pipeline_instance_init, NULL };
+ GType auto_pipeline_type_id;
+ auto_pipeline_type_id = g_type_register_static (G_TYPE_OBJECT, "AutoPipeline", &g_define_type_info, 0);
+ g_once_init_leave (&auto_pipeline_type_id__volatile, auto_pipeline_type_id);
+ }
+ return auto_pipeline_type_id__volatile;
+}
+
+
+static void auto_pipeline_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec) {
+ AutoPipeline * self;
+ self = AUTO_PIPELINE (object);
+ switch (property_id) {
+ case AUTO_PIPELINE_RETURN_STATUS:
+ g_value_set_int (value, auto_pipeline_get_return_status (self));
+ break;
+ case AUTO_PIPELINE_OUTPUT_MESSAGES_ENABLED:
+ g_value_set_boolean (value, auto_pipeline_get_output_messages_enabled (self));
+ break;
+ case AUTO_PIPELINE_PIPELINE:
+ g_value_set_object (value, auto_pipeline_get_pipeline (self));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ break;
+ }
+}
+
+
+static void auto_pipeline_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec) {
+ AutoPipeline * self;
+ self = AUTO_PIPELINE (object);
+ switch (property_id) {
+ case AUTO_PIPELINE_RETURN_STATUS:
+ auto_pipeline_set_return_status (self, g_value_get_int (value));
+ break;
+ case AUTO_PIPELINE_OUTPUT_MESSAGES_ENABLED:
+ auto_pipeline_set_output_messages_enabled (self, g_value_get_boolean (value));
+ break;
+ case AUTO_PIPELINE_PIPELINE:
+ auto_pipeline_set_pipeline (self, g_value_get_object (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ break;
+ }
+}
+
+
+static int _vala_strcmp0 (const char * str1, const char * str2) {
+ if (str1 == NULL) {
+ return -(str1 != str2);
+ }
+ if (str2 == NULL) {
+ return str1 != str2;
+ }
+ return strcmp (str1, str2);
+}
+
+
+
+
--- /dev/null
+const string LOG_FILENAME = "gst-auto-launch.log";
+
+[PrintfFormat]
+extern int vprintf(string format, va_list ap);
+
+[PrintfFormat]
+extern int vfprintf(FileStream stream, string format, va_list ap);
+
+
+class AutoPipeline: Object {
+
+ public signal void quit();
+
+ FileStream log_stream;
+
+ bool _output_messages_enabled;
+ public int return_status {get; set; default = 0;}
+
+ public bool output_messages_enabled {
+ set {
+ if(!_output_messages_enabled && value)
+ log_stream = FileStream.open(LOG_FILENAME, "w");
+ _output_messages_enabled = value;
+ }
+ get {
+ return _output_messages_enabled;
+ }
+ }
+
+ public void log(string format, ...) {
+ va_list args_vl = va_list();
+ if(log_stream != null)
+ vfprintf(log_stream, format, args_vl);
+ vprintf(format, args_vl);
+ }
+
+
+ Gst.Bin _pipeline;
+
+ public Gst.Bin pipeline {
+ get {
+ return _pipeline;
+ }
+
+ set {
+ _pipeline = value;
+ Gst.Bus bus = _pipeline.bus;
+ bus.add_signal_watch();
+ bus.message.connect(on_bus_message);
+ }
+ }
+
+
+ void on_bus_message(Gst.Message message) {
+ if(_output_messages_enabled) {
+ uint32 seqnum = message.get_seqnum();
+ unowned Gst.Object src = message.src;
+ unowned Gst.Structure s = message.get_structure();
+ string src_name = null;
+
+ if(src is Gst.Element)
+ src_name = src.name;
+ else if(src is Gst.Pad) {
+ Gst.Pad pad = (Gst.Pad)src;
+ string pad_name = pad.name;
+ string parent_name = pad.get_parent_element().name;
+ src_name = "%s:%s".printf(parent_name, pad_name);
+ }
+ else if(src is Gst.Object)
+ src_name = src.name;
+
+ log(" {\n");
+ log(" 'seqnum' : %u,\n", seqnum);
+ log(" 'type' : '%s',\n", message.type.to_string());
+ TimeVal tv = TimeVal();
+ log(" 'time' : %lu.%06lu,\n", tv.tv_sec, tv.tv_usec);
+ if(src_name != null)
+ log(" 'src' : '%s',\n", src_name);
+ if(s != null) {
+ log(" 'structure' : {\n");
+ log(" 'name' : '%s',\n", s.get_name());
+ s.foreach(
+ (q, v) => {
+ Value vs = "";
+ v.transform(ref vs);
+ log(" '%s' : '''%s''',\n", q.to_string(), vs.get_string());
+ return true;
+ });
+ log(" }\n");
+ }
+ log(" },\n");
+
+ }
+
+ switch(message.type) {
+ case Gst.MessageType.ERROR: {
+ Error e;
+ string s;
+ message.parse_error(out e, out s);
+ critical("Bus error: %s %s\n", e.message, s);
+ return_status = 1;
+ quit();
+ break;
+ }
+ case Gst.MessageType.EOS: {
+ pipeline.set_state(Gst.State.NULL);
+ quit();
+ break;
+ }
+ default:
+ break;
+ }
+ }
+
+
+ public bool set_state(Gst.State state) {
+ return pipeline.set_state(state) != Gst.StateChangeReturn.FAILURE;
+ }
+
+
+ public Gst.Element? get_by_name(string name) {
+ if(pipeline.get_name() == name)
+ return pipeline;
+ else
+ return pipeline.get_by_name(name);
+ }
+
+
+ public bool send_eos() {
+ print("Sending EOS to the pipeline\n");
+ return auto_pipeline.pipeline.send_event(new Gst.Event.eos());
+
+ return true;
+ }
+}
+
--- /dev/null
+/* command.c generated by valac 0.10.0, the Vala compiler
+ * generated from command.vala, do not modify */
+
+
+#include <glib.h>
+#include <glib-object.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+#define TYPE_AUTO_PIPELINE (auto_pipeline_get_type ())
+#define AUTO_PIPELINE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_AUTO_PIPELINE, AutoPipeline))
+#define AUTO_PIPELINE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_AUTO_PIPELINE, AutoPipelineClass))
+#define IS_AUTO_PIPELINE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_AUTO_PIPELINE))
+#define IS_AUTO_PIPELINE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_AUTO_PIPELINE))
+#define AUTO_PIPELINE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_AUTO_PIPELINE, AutoPipelineClass))
+
+typedef struct _AutoPipeline AutoPipeline;
+typedef struct _AutoPipelineClass AutoPipelineClass;
+
+#define TYPE_TASK (task_get_type ())
+#define TASK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_TASK, Task))
+#define TASK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_TASK, TaskClass))
+#define IS_TASK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_TASK))
+#define IS_TASK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_TASK))
+#define TASK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_TASK, TaskClass))
+
+typedef struct _Task Task;
+typedef struct _TaskClass TaskClass;
+
+#define TYPE_COMMAND (command_get_type ())
+typedef struct _Command Command;
+#define _g_free0(var) (var = (g_free (var), NULL))
+
+typedef gint (*CommandFunc) (AutoPipeline* auto_pipeline, Task* task);
+struct _Command {
+ char* name;
+ char* description;
+ char* args_desc;
+ CommandFunc function;
+};
+
+
+
+GType auto_pipeline_get_type (void) G_GNUC_CONST;
+GType task_get_type (void) G_GNUC_CONST;
+GType command_get_type (void) G_GNUC_CONST;
+Command* command_dup (const Command* self);
+void command_free (Command* self);
+void command_copy (const Command* self, Command* dest);
+void command_destroy (Command* self);
+gchar command_get_arg_desc (Command *self, guint arg_i);
+guint command_get_n_args (Command *self);
+
+
+
+static glong string_get_length (const char* self) {
+ glong result;
+ g_return_val_if_fail (self != NULL, 0L);
+ result = g_utf8_strlen (self, (gssize) (-1));
+ return result;
+}
+
+
+gchar command_get_arg_desc (Command *self, guint arg_i) {
+ gchar result = '\0';
+ if (arg_i >= string_get_length ((*self).args_desc)) {
+ result = (gchar) 0;
+ return result;
+ }
+ result = (gchar) g_utf8_get_char (g_utf8_offset_to_pointer ((*self).args_desc, arg_i));
+ return result;
+}
+
+
+guint command_get_n_args (Command *self) {
+ guint result = 0U;
+ result = (guint) string_get_length ((*self).args_desc);
+ return result;
+}
+
+
+void command_copy (const Command* self, Command* dest) {
+ dest->name = g_strdup (self->name);
+ dest->description = g_strdup (self->description);
+ dest->args_desc = g_strdup (self->args_desc);
+ dest->function = self->function;
+}
+
+
+void command_destroy (Command* self) {
+ _g_free0 (self->name);
+ _g_free0 (self->description);
+ _g_free0 (self->args_desc);
+}
+
+
+Command* command_dup (const Command* self) {
+ Command* dup;
+ dup = g_new0 (Command, 1);
+ command_copy (self, dup);
+ return dup;
+}
+
+
+void command_free (Command* self) {
+ command_destroy (self);
+ g_free (self);
+}
+
+
+GType command_get_type (void) {
+ static volatile gsize command_type_id__volatile = 0;
+ if (g_once_init_enter (&command_type_id__volatile)) {
+ GType command_type_id;
+ command_type_id = g_boxed_type_register_static ("Command", (GBoxedCopyFunc) command_dup, (GBoxedFreeFunc) command_free);
+ g_once_init_leave (&command_type_id__volatile, command_type_id);
+ }
+ return command_type_id__volatile;
+}
+
+
+
+
--- /dev/null
+[CCode (has_target=false)]
+delegate int CommandFunc(AutoPipeline auto_pipeline, Task task);
+
+
+struct Command {
+ string name;
+ string description;
+ string args_desc;
+ CommandFunc function;
+
+ public char get_arg_desc(uint arg_i) {
+ if(arg_i >= args_desc.length)
+ return 0;
+ return (char)args_desc[arg_i];
+ }
+
+ public uint get_n_args() {
+ return (uint)args_desc.length;
+ }
+}
+
--- /dev/null
+/* commands.c generated by valac 0.10.0, the Vala compiler
+ * generated from commands.vala, do not modify */
+
+
+#include <glib.h>
+#include <glib-object.h>
+#include <stdlib.h>
+#include <string.h>
+#include <gst/gst.h>
+#include <float.h>
+#include <math.h>
+
+
+#define TYPE_COMMAND (command_get_type ())
+
+#define TYPE_AUTO_PIPELINE (auto_pipeline_get_type ())
+#define AUTO_PIPELINE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_AUTO_PIPELINE, AutoPipeline))
+#define AUTO_PIPELINE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_AUTO_PIPELINE, AutoPipelineClass))
+#define IS_AUTO_PIPELINE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_AUTO_PIPELINE))
+#define IS_AUTO_PIPELINE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_AUTO_PIPELINE))
+#define AUTO_PIPELINE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_AUTO_PIPELINE, AutoPipelineClass))
+
+typedef struct _AutoPipeline AutoPipeline;
+typedef struct _AutoPipelineClass AutoPipelineClass;
+
+#define TYPE_TASK (task_get_type ())
+#define TASK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_TASK, Task))
+#define TASK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_TASK, TaskClass))
+#define IS_TASK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_TASK))
+#define IS_TASK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_TASK))
+#define TASK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_TASK, TaskClass))
+
+typedef struct _Task Task;
+typedef struct _TaskClass TaskClass;
+typedef struct _Command Command;
+#define _gst_object_unref0(var) ((var == NULL) ? NULL : (var = (gst_object_unref (var), NULL)))
+#define _g_free0(var) (var = (g_free (var), NULL))
+#define _gst_event_unref0(var) ((var == NULL) ? NULL : (var = (gst_event_unref (var), NULL)))
+
+typedef gint (*CommandFunc) (AutoPipeline* auto_pipeline, Task* task);
+struct _Command {
+ char* name;
+ char* description;
+ char* args_desc;
+ CommandFunc function;
+};
+
+
+
+GType command_get_type (void) G_GNUC_CONST;
+GType auto_pipeline_get_type (void) G_GNUC_CONST;
+GType task_get_type (void) G_GNUC_CONST;
+Command* command_dup (const Command* self);
+void command_free (Command* self);
+void command_copy (const Command* self, Command* dest);
+void command_destroy (Command* self);
+gint command_play (AutoPipeline* auto_pipeline, Task* task);
+static gint _command_play_command_func (AutoPipeline* auto_pipeline, Task* task);
+gint command_pause (AutoPipeline* auto_pipeline, Task* task);
+static gint _command_pause_command_func (AutoPipeline* auto_pipeline, Task* task);
+gint command_ready (AutoPipeline* auto_pipeline, Task* task);
+static gint _command_ready_command_func (AutoPipeline* auto_pipeline, Task* task);
+gint command_null (AutoPipeline* auto_pipeline, Task* task);
+static gint _command_null_command_func (AutoPipeline* auto_pipeline, Task* task);
+gint command_eos (AutoPipeline* auto_pipeline, Task* task);
+static gint _command_eos_command_func (AutoPipeline* auto_pipeline, Task* task);
+gint command_quit (AutoPipeline* auto_pipeline, Task* task);
+static gint _command_quit_command_func (AutoPipeline* auto_pipeline, Task* task);
+gint command_set (AutoPipeline* auto_pipeline, Task* task);
+static gint _command_set_command_func (AutoPipeline* auto_pipeline, Task* task);
+gint command_seek (AutoPipeline* auto_pipeline, Task* task);
+static gint _command_seek_command_func (AutoPipeline* auto_pipeline, Task* task);
+gint command_navigation (AutoPipeline* auto_pipeline, Task* task);
+static gint _command_navigation_command_func (AutoPipeline* auto_pipeline, Task* task);
+gint command_emit (AutoPipeline* auto_pipeline, Task* task);
+static gint _command_emit_command_func (AutoPipeline* auto_pipeline, Task* task);
+gboolean auto_pipeline_set_state (AutoPipeline* self, GstState state);
+GValueArray* task_get_arguments (Task* self);
+GstElement* auto_pipeline_get_by_name (AutoPipeline* self, const char* name);
+GstBin* auto_pipeline_get_pipeline (AutoPipeline* self);
+gboolean auto_pipeline_send_eos (AutoPipeline* self);
+void scanner_register_symbols (GScanner* scanner);
+static int _vala_strcmp0 (const char * str1, const char * str2);
+
+const Command COMMANDS[12] = {{"play", "Change pipeline state to PLAYING", "", _command_play_command_func}, {"pause", "Change pipeline state to PAUSED", "", _command_pause_command_func}, {"ready", "Change pipeline state to READY", "", _command_ready_command_func}, {"stop", "Change pipeline state to READY", "", _command_ready_command_func}, {"null", "Change pipeline state to NULL", "", _command_null_command_func}, {"eos", "Send eos to the source elements", "", _command_eos_command_func}, {"quit", "Quit the event loop", "", _command_quit_command_func}, {"set", "Set properties of an object", "ssv", _command_set_command_func}, {"seek", "Seek to the specified time", "t", _command_seek_command_func}, {"navigation", "Send the specified navigation event name to an element in the given co" \
+"ords", "ssii", _command_navigation_command_func}, {"emit", "Emit a signal to an element", "ss", _command_emit_command_func}, {NULL}};
+
+
+static gint _command_play_command_func (AutoPipeline* auto_pipeline, Task* task) {
+ gint result;
+ result = command_play (auto_pipeline, task);
+ return result;
+}
+
+
+static gint _command_pause_command_func (AutoPipeline* auto_pipeline, Task* task) {
+ gint result;
+ result = command_pause (auto_pipeline, task);
+ return result;
+}
+
+
+static gint _command_ready_command_func (AutoPipeline* auto_pipeline, Task* task) {
+ gint result;
+ result = command_ready (auto_pipeline, task);
+ return result;
+}
+
+
+static gint _command_null_command_func (AutoPipeline* auto_pipeline, Task* task) {
+ gint result;
+ result = command_null (auto_pipeline, task);
+ return result;
+}
+
+
+static gint _command_eos_command_func (AutoPipeline* auto_pipeline, Task* task) {
+ gint result;
+ result = command_eos (auto_pipeline, task);
+ return result;
+}
+
+
+static gint _command_quit_command_func (AutoPipeline* auto_pipeline, Task* task) {
+ gint result;
+ result = command_quit (auto_pipeline, task);
+ return result;
+}
+
+
+static gint _command_set_command_func (AutoPipeline* auto_pipeline, Task* task) {
+ gint result;
+ result = command_set (auto_pipeline, task);
+ return result;
+}
+
+
+static gint _command_seek_command_func (AutoPipeline* auto_pipeline, Task* task) {
+ gint result;
+ result = command_seek (auto_pipeline, task);
+ return result;
+}
+
+
+static gint _command_navigation_command_func (AutoPipeline* auto_pipeline, Task* task) {
+ gint result;
+ result = command_navigation (auto_pipeline, task);
+ return result;
+}
+
+
+static gint _command_emit_command_func (AutoPipeline* auto_pipeline, Task* task) {
+ gint result;
+ result = command_emit (auto_pipeline, task);
+ return result;
+}
+
+
+gint command_play (AutoPipeline* auto_pipeline, Task* task) {
+ gint result = 0;
+ gint _tmp0_ = 0;
+ g_return_val_if_fail (auto_pipeline != NULL, 0);
+ g_return_val_if_fail (task != NULL, 0);
+ g_print ("Passing to PLAYING\n");
+ if (auto_pipeline_set_state (auto_pipeline, GST_STATE_PLAYING)) {
+ _tmp0_ = 0;
+ } else {
+ _tmp0_ = 1;
+ }
+ result = _tmp0_;
+ return result;
+}
+
+
+gint command_pause (AutoPipeline* auto_pipeline, Task* task) {
+ gint result = 0;
+ gint _tmp0_ = 0;
+ g_return_val_if_fail (auto_pipeline != NULL, 0);
+ g_return_val_if_fail (task != NULL, 0);
+ g_print ("Passing to PAUSED\n");
+ if (auto_pipeline_set_state (auto_pipeline, GST_STATE_PAUSED)) {
+ _tmp0_ = 0;
+ } else {
+ _tmp0_ = 1;
+ }
+ result = _tmp0_;
+ return result;
+}
+
+
+gint command_ready (AutoPipeline* auto_pipeline, Task* task) {
+ gint result = 0;
+ gint _tmp0_ = 0;
+ g_return_val_if_fail (auto_pipeline != NULL, 0);
+ g_return_val_if_fail (task != NULL, 0);
+ g_print ("Passing to READY\n");
+ if (auto_pipeline_set_state (auto_pipeline, GST_STATE_READY)) {
+ _tmp0_ = 0;
+ } else {
+ _tmp0_ = 1;
+ }
+ result = _tmp0_;
+ return result;
+}
+
+
+gint command_null (AutoPipeline* auto_pipeline, Task* task) {
+ gint result = 0;
+ gint _tmp0_ = 0;
+ g_return_val_if_fail (auto_pipeline != NULL, 0);
+ g_return_val_if_fail (task != NULL, 0);
+ g_print ("Passing to NULL\n");
+ if (auto_pipeline_set_state (auto_pipeline, GST_STATE_NULL)) {
+ _tmp0_ = 0;
+ } else {
+ _tmp0_ = 1;
+ }
+ result = _tmp0_;
+ return result;
+}
+
+
+gint command_quit (AutoPipeline* auto_pipeline, Task* task) {
+ gint result = 0;
+ g_return_val_if_fail (auto_pipeline != NULL, 0);
+ g_return_val_if_fail (task != NULL, 0);
+ g_print ("Quitting\n");
+ g_signal_emit_by_name (auto_pipeline, "quit");
+ result = 0;
+ return result;
+}
+
+
+gint command_set (AutoPipeline* auto_pipeline, Task* task) {
+ gint result = 0;
+ GValue _tmp0_;
+ char* element_name;
+ GstElement* element;
+ GValue _tmp1_;
+ char* prop_name;
+ GParamSpec* prop_spec;
+ GType prop_type;
+ GValue prop_value;
+ GValue string_value = {0};
+ char* value_as_string;
+ GValue converted_value = {0};
+ char* _tmp3_;
+ g_return_val_if_fail (auto_pipeline != NULL, 0);
+ g_return_val_if_fail (task != NULL, 0);
+ element_name = g_strdup (g_value_get_string ((_tmp0_ = task_get_arguments (task)->values[0], &_tmp0_)));
+ element = auto_pipeline_get_by_name (auto_pipeline, element_name);
+ if (element == NULL) {
+ g_printerr ("No element named '%s'\n", element_name);
+ result = 1;
+ _gst_object_unref0 (element);
+ _g_free0 (element_name);
+ return result;
+ }
+ prop_name = g_strdup (g_value_get_string ((_tmp1_ = task_get_arguments (task)->values[1], &_tmp1_)));
+ prop_spec = g_object_class_find_property (G_OBJECT_GET_CLASS ((GObject*) element), prop_name);
+ if (prop_spec == NULL) {
+ g_printerr ("No property '%s' in element '%s'\n", prop_name, element_name);
+ result = 1;
+ _g_free0 (prop_name);
+ _gst_object_unref0 (element);
+ _g_free0 (element_name);
+ return result;
+ }
+ prop_type = prop_spec->value_type;
+ prop_value = task_get_arguments (task)->values[2];
+ if (G_VALUE_HOLDS (&prop_value, G_TYPE_STRING)) {
+ char* prop_string;
+ prop_string = g_strdup (g_value_get_string (&prop_value));
+ if (G_TYPE_IS_ENUM (prop_type)) {
+ GEnumClass* enum_class;
+ GEnumValue* enum_value;
+ enum_class = (GEnumClass*) g_type_class_peek (prop_type);
+ enum_value = g_enum_get_value_by_nick (enum_class, prop_string);
+ if (enum_value != NULL) {
+ GValue _tmp2_ = {0};
+ prop_value = (g_value_init (&_tmp2_, G_TYPE_INT), g_value_set_int (&_tmp2_, enum_value->value), _tmp2_);
+ G_IS_VALUE (&_tmp2_) ? (g_value_unset (&_tmp2_), NULL) : NULL;
+ } else {
+ g_printerr ("'%s' is not a valid value for enum '%s'\n", prop_string, g_type_name (prop_type));
+ result = 1;
+ _g_free0 (prop_string);
+ _g_free0 (prop_name);
+ _gst_object_unref0 (element);
+ _g_free0 (element_name);
+ return result;
+ }
+ }
+ _g_free0 (prop_string);
+ }
+ g_value_init (&string_value, G_TYPE_STRING);
+ g_value_transform (&prop_value, &string_value);
+ value_as_string = g_strdup (g_value_get_string (&string_value));
+ g_value_init (&converted_value, prop_type);
+ if (!g_param_value_convert (prop_spec, &prop_value, &converted_value, TRUE)) {
+ g_print ("'%s' is not a valid value for property '%s' of type '%s'\n", value_as_string, prop_name, g_type_name (prop_type));
+ result = 1;
+ G_IS_VALUE (&converted_value) ? (g_value_unset (&converted_value), NULL) : NULL;
+ _g_free0 (value_as_string);
+ G_IS_VALUE (&string_value) ? (g_value_unset (&string_value), NULL) : NULL;
+ _g_free0 (prop_name);
+ _gst_object_unref0 (element);
+ _g_free0 (element_name);
+ return result;
+ }
+ g_print ("Setting property '%s' of element '%s' to '%s'\n", prop_name, _tmp3_ = gst_object_get_name ((GstObject*) element), value_as_string);
+ _g_free0 (_tmp3_);
+ g_object_set_property ((GObject*) element, prop_name, &converted_value);
+ result = 0;
+ G_IS_VALUE (&converted_value) ? (g_value_unset (&converted_value), NULL) : NULL;
+ _g_free0 (value_as_string);
+ G_IS_VALUE (&string_value) ? (g_value_unset (&string_value), NULL) : NULL;
+ _g_free0 (prop_name);
+ _gst_object_unref0 (element);
+ _g_free0 (element_name);
+ return result;
+}
+
+
+static gpointer _gst_event_ref0 (gpointer self) {
+ return self ? gst_event_ref (self) : NULL;
+}
+
+
+gint command_seek (AutoPipeline* auto_pipeline, Task* task) {
+ gint result = 0;
+ GValue position_value = {0};
+ GValue _tmp0_;
+ double position_seconds;
+ gint64 position_useconds;
+ GstEvent* seek_event;
+ gint _tmp1_ = 0;
+ g_return_val_if_fail (auto_pipeline != NULL, 0);
+ g_return_val_if_fail (task != NULL, 0);
+ g_value_init (&position_value, G_TYPE_DOUBLE);
+ g_value_transform ((_tmp0_ = task_get_arguments (task)->values[0], &_tmp0_), &position_value);
+ position_seconds = g_value_get_double (&position_value);
+ position_useconds = (gint64) (position_seconds * GST_SECOND);
+ seek_event = gst_event_new_seek (1.0, GST_FORMAT_TIME, GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_KEY_UNIT, GST_SEEK_TYPE_SET, position_useconds, GST_SEEK_TYPE_NONE, (gint64) 0);
+ g_print ("Seeking to second %lf\n", position_seconds);
+ if (gst_element_send_event ((GstElement*) auto_pipeline_get_pipeline (auto_pipeline), _gst_event_ref0 (seek_event))) {
+ _tmp1_ = 0;
+ } else {
+ _tmp1_ = 1;
+ }
+ result = _tmp1_;
+ _gst_event_unref0 (seek_event);
+ G_IS_VALUE (&position_value) ? (g_value_unset (&position_value), NULL) : NULL;
+ return result;
+}
+
+
+gint command_eos (AutoPipeline* auto_pipeline, Task* task) {
+ gint result = 0;
+ gint _tmp0_ = 0;
+ g_return_val_if_fail (auto_pipeline != NULL, 0);
+ g_return_val_if_fail (task != NULL, 0);
+ if (auto_pipeline_send_eos (auto_pipeline)) {
+ _tmp0_ = 0;
+ } else {
+ _tmp0_ = 1;
+ }
+ result = _tmp0_;
+ return result;
+}
+
+
+gint command_navigation (AutoPipeline* auto_pipeline, Task* task) {
+ gint result = 0;
+ GValue _tmp0_;
+ char* element_name;
+ GValue _tmp1_;
+ char* event_name;
+ GValue _tmp2_;
+ gint pointer_x;
+ GValue _tmp3_;
+ gint pointer_y;
+ gint _tmp4_ = 0;
+ gint button;
+ GstElement* element;
+ GstPad* src_pad;
+ g_return_val_if_fail (auto_pipeline != NULL, 0);
+ g_return_val_if_fail (task != NULL, 0);
+ element_name = g_strdup (g_value_get_string ((_tmp0_ = task_get_arguments (task)->values[0], &_tmp0_)));
+ event_name = g_strdup (g_value_get_string ((_tmp1_ = task_get_arguments (task)->values[1], &_tmp1_)));
+ pointer_x = g_value_get_int ((_tmp2_ = task_get_arguments (task)->values[2], &_tmp2_));
+ pointer_y = g_value_get_int ((_tmp3_ = task_get_arguments (task)->values[3], &_tmp3_));
+ if (_vala_strcmp0 (event_name, "mouse-move") != 0) {
+ _tmp4_ = 1;
+ } else {
+ _tmp4_ = 0;
+ }
+ button = _tmp4_;
+ element = auto_pipeline_get_by_name (auto_pipeline, element_name);
+ if (element == NULL) {
+ g_printerr ("No element named '%s'\n", element_name);
+ result = 1;
+ _gst_object_unref0 (element);
+ _g_free0 (event_name);
+ _g_free0 (element_name);
+ return result;
+ }
+ src_pad = gst_element_get_static_pad (element, "src");
+ if (src_pad == NULL) {
+ g_printerr ("No src pad in element %s", element_name);
+ result = 1;
+ _gst_object_unref0 (src_pad);
+ _gst_object_unref0 (element);
+ _g_free0 (event_name);
+ _g_free0 (element_name);
+ return result;
+ }
+ gst_pad_send_event (src_pad, gst_event_new_navigation (gst_structure_new ("application/x-gst-navigation", "event", G_TYPE_STRING, event_name, "button", G_TYPE_INT, button, "pointer_x", G_TYPE_DOUBLE, (double) pointer_x, "pointer_y", G_TYPE_DOUBLE, (double) pointer_y, NULL, NULL)));
+ result = 0;
+ _gst_object_unref0 (src_pad);
+ _gst_object_unref0 (element);
+ _g_free0 (event_name);
+ _g_free0 (element_name);
+ return result;
+}
+
+
+gint command_emit (AutoPipeline* auto_pipeline, Task* task) {
+ gint result = 0;
+ GValue _tmp0_;
+ char* element_name;
+ GstElement* element;
+ GValue _tmp1_;
+ char* signal_name;
+ guint signal_id;
+ g_return_val_if_fail (auto_pipeline != NULL, 0);
+ g_return_val_if_fail (task != NULL, 0);
+ element_name = g_strdup (g_value_get_string ((_tmp0_ = task_get_arguments (task)->values[0], &_tmp0_)));
+ element = auto_pipeline_get_by_name (auto_pipeline, element_name);
+ if (element == NULL) {
+ g_printerr ("No element named '%s'\n", element_name);
+ result = 1;
+ _gst_object_unref0 (element);
+ _g_free0 (element_name);
+ return result;
+ }
+ signal_name = g_strdup (g_value_get_string ((_tmp1_ = task_get_arguments (task)->values[1], &_tmp1_)));
+ signal_id = g_signal_lookup (signal_name, G_TYPE_FROM_CLASS ((GTypeClass*) G_OBJECT_GET_CLASS ((GObject*) element)));
+ if (signal_id == 0) {
+ g_printerr ("No signal '%s' in element '%s'\n", signal_name, element_name);
+ result = 1;
+ _g_free0 (signal_name);
+ _gst_object_unref0 (element);
+ _g_free0 (element_name);
+ return result;
+ }
+ g_signal_emit (element, signal_id, (GQuark) 0, NULL);
+ result = 0;
+ _g_free0 (signal_name);
+ _gst_object_unref0 (element);
+ _g_free0 (element_name);
+ return result;
+}
+
+
+void scanner_register_symbols (GScanner* scanner) {
+ g_return_if_fail (scanner != NULL);
+ {
+ gint i;
+ i = 0;
+ {
+ gboolean _tmp0_;
+ _tmp0_ = TRUE;
+ while (TRUE) {
+ if (!_tmp0_) {
+ i++;
+ }
+ _tmp0_ = FALSE;
+ if (!(COMMANDS[i].name != NULL)) {
+ break;
+ }
+ g_scanner_scope_add_symbol (scanner, 0U, COMMANDS[i].name, &COMMANDS[i]);
+ }
+ }
+ }
+}
+
+
+static int _vala_strcmp0 (const char * str1, const char * str2) {
+ if (str1 == NULL) {
+ return -(str1 != str2);
+ }
+ if (str2 == NULL) {
+ return str1 != str2;
+ }
+ return strcmp (str1, str2);
+}
+
+
+
+
--- /dev/null
+const Command[] COMMANDS = {
+ {"play", "Change pipeline state to PLAYING", "", command_play},
+ {"pause", "Change pipeline state to PAUSED", "", command_pause},
+ {"ready", "Change pipeline state to READY", "", command_ready},
+ {"stop", "Change pipeline state to READY", "", command_ready},
+ {"null", "Change pipeline state to NULL", "", command_null},
+ {"eos", "Send eos to the source elements", "", command_eos},
+ {"quit", "Quit the event loop", "", command_quit},
+ {"set", "Set properties of an object", "ssv", command_set},
+ {"seek", "Seek to the specified time", "t", command_seek},
+ {"navigation", "Send the specified navigation event name to an element in the given coords", "ssii", command_navigation},
+ {"emit", "Emit a signal to an element", "ss", command_emit},
+ {null}
+};
+
+
+int command_play(AutoPipeline auto_pipeline, Task task) {
+ print("Passing to PLAYING\n");
+ return auto_pipeline.set_state(Gst.State.PLAYING) ? 0 : 1;
+}
+
+
+int command_pause(AutoPipeline auto_pipeline, Task task) {
+ print("Passing to PAUSED\n");
+ return auto_pipeline.set_state(Gst.State.PAUSED) ? 0 : 1;
+}
+
+
+int command_ready(AutoPipeline auto_pipeline, Task task) {
+ print("Passing to READY\n");
+ return auto_pipeline.set_state(Gst.State.READY) ? 0 : 1;
+}
+
+
+int command_null(AutoPipeline auto_pipeline, Task task) {
+ print("Passing to NULL\n");
+ return auto_pipeline.set_state(Gst.State.NULL) ? 0 : 1;
+}
+
+
+int command_quit(AutoPipeline auto_pipeline, Task task) {
+ print("Quitting\n");
+ auto_pipeline.quit();
+ return 0;
+}
+
+
+int command_set(AutoPipeline auto_pipeline, Task task) {
+ string element_name = task.arguments.values[0].get_string();
+
+ Gst.Element? element = auto_pipeline.get_by_name(element_name);
+ if(element == null) {
+ printerr("No element named '%s'\n", element_name);
+ return 1;
+ }
+
+ string prop_name = task.arguments.values[1].get_string();
+ weak ParamSpec? prop_spec = element.get_class().find_property(prop_name);
+
+ if(prop_spec == null) {
+ printerr("No property '%s' in element '%s'\n", prop_name, element_name);
+ return 1;
+ }
+ Type prop_type = prop_spec.value_type;
+
+ weak Value prop_value = task.arguments.values[2];
+ if(prop_value.holds(typeof(string))) {
+ string prop_string = prop_value.get_string();
+ if(prop_type.is_enum()) {
+ weak EnumClass enum_class = (EnumClass)prop_type.class_peek();
+ weak EnumValue? enum_value = enum_class.get_value_by_nick(prop_string);
+ if(enum_value != null)
+ prop_value = enum_value.value;
+ else {
+ printerr("'%s' is not a valid value for enum '%s'\n",
+ prop_string, prop_type.name());
+ return 1;
+ }
+ }
+ }
+
+ Value string_value = Value(typeof(string));
+ prop_value.transform(ref string_value);
+ string value_as_string = string_value.get_string();
+
+ Value converted_value = Value(prop_type);
+
+ if(!prop_spec.value_convert(prop_value, converted_value, true)) {
+ print("'%s' is not a valid value for property '%s' of type '%s'\n",
+ value_as_string, prop_name, prop_type.name());
+ return 1;
+ }
+
+ print("Setting property '%s' of element '%s' to '%s'\n",
+ prop_name, element.get_name(), value_as_string);
+
+ element.set_property(prop_name, converted_value);
+ return 0;
+}
+
+
+int command_seek(AutoPipeline auto_pipeline, Task task) {
+ Value position_value = Value(typeof(double));
+ task.arguments.values[0].transform(ref position_value);
+ double position_seconds = position_value.get_double();
+ int64 position_useconds = (int64)(position_seconds * Gst.SECOND);
+
+ Gst.Event seek_event =
+ new Gst.Event.seek(
+ 1.0, Gst.Format.TIME,
+ Gst.SeekFlags.FLUSH | Gst.SeekFlags.KEY_UNIT,
+ Gst.SeekType.SET, position_useconds,
+ Gst.SeekType.NONE, 0);
+
+ print("Seeking to second %lf\n", position_seconds);
+ return auto_pipeline.pipeline.send_event(seek_event) ? 0 : 1;
+}
+
+
+int command_eos(AutoPipeline auto_pipeline, Task task) {
+ return auto_pipeline.send_eos() ? 0 : 1;
+}
+
+
+int command_navigation(AutoPipeline auto_pipeline, Task task) {
+ string element_name = task.arguments.values[0].get_string();
+ string event_name = task.arguments.values[1].get_string();
+ int pointer_x = task.arguments.values[2].get_int();
+ int pointer_y = task.arguments.values[3].get_int();
+ int button = (event_name != "mouse-move") ? 1 : 0;
+
+ Gst.Element? element = auto_pipeline.get_by_name(element_name);
+ if(element == null) {
+ printerr("No element named '%s'\n", element_name);
+ return 1;
+ }
+
+ Gst.Pad src_pad = element.get_static_pad("src");
+ if(src_pad == null) {
+ printerr("No src pad in element %s", element_name);
+ return 1;
+ }
+
+ src_pad.send_event(
+ new Gst.Event.navigation(
+ new Gst.Structure("application/x-gst-navigation",
+ "event", typeof(string), event_name,
+ "button", typeof(int), button,
+ "pointer_x", typeof(double), (double)pointer_x,
+ "pointer_y", typeof(double), (double)pointer_y,
+ null)));
+ return 0;
+}
+
+
+int command_emit(AutoPipeline auto_pipeline, Task task) {
+ string element_name = task.arguments.values[0].get_string();
+
+ Gst.Element? element = auto_pipeline.get_by_name(element_name);
+ if(element == null) {
+ printerr("No element named '%s'\n", element_name);
+ return 1;
+ }
+
+ string signal_name = task.arguments.values[1].get_string();
+ uint signal_id = Signal.lookup(signal_name, element.get_class().get_type());
+ if(signal_id == 0)
+ {
+ printerr("No signal '%s' in element '%s'\n", signal_name, element_name);
+ return 1;
+ }
+
+ Signal.emit(element, signal_id, 0);
+ return 0;
+}
+
+
+void scanner_register_symbols(Scanner scanner) {
+ for(int i=0; COMMANDS[i].name != null; i++)
+ scanner.scope_add_symbol(0U, COMMANDS[i].name, &COMMANDS[i]);
+}
+
--- /dev/null
+/* gst-auto-launch.c generated by valac 0.10.0, the Vala compiler
+ * generated from gst-auto-launch.vala, do not modify */
+
+
+#include <glib.h>
+#include <glib-object.h>
+#include <stdlib.h>
+#include <string.h>
+#include <gst/gst.h>
+#include <signal.h>
+#include <float.h>
+#include <math.h>
+
+
+#define TYPE_AUTO_PIPELINE (auto_pipeline_get_type ())
+#define AUTO_PIPELINE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_AUTO_PIPELINE, AutoPipeline))
+#define AUTO_PIPELINE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_AUTO_PIPELINE, AutoPipelineClass))
+#define IS_AUTO_PIPELINE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_AUTO_PIPELINE))
+#define IS_AUTO_PIPELINE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_AUTO_PIPELINE))
+#define AUTO_PIPELINE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_AUTO_PIPELINE, AutoPipelineClass))
+
+typedef struct _AutoPipeline AutoPipeline;
+typedef struct _AutoPipelineClass AutoPipelineClass;
+#define _g_option_context_free0(var) ((var == NULL) ? NULL : (var = (g_option_context_free (var), NULL)))
+#define _g_error_free0(var) ((var == NULL) ? NULL : (var = (g_error_free (var), NULL)))
+#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
+
+#define TYPE_TASK_SCANNER (task_scanner_get_type ())
+#define TASK_SCANNER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_TASK_SCANNER, TaskScanner))
+#define TASK_SCANNER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_TASK_SCANNER, TaskScannerClass))
+#define IS_TASK_SCANNER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_TASK_SCANNER))
+#define IS_TASK_SCANNER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_TASK_SCANNER))
+#define TASK_SCANNER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_TASK_SCANNER, TaskScannerClass))
+
+typedef struct _TaskScanner TaskScanner;
+typedef struct _TaskScannerClass TaskScannerClass;
+#define _g_free0(var) (var = (g_free (var), NULL))
+
+#define TYPE_TASK (task_get_type ())
+#define TASK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_TASK, Task))
+#define TASK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_TASK, TaskClass))
+#define IS_TASK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_TASK))
+#define IS_TASK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_TASK))
+#define TASK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_TASK, TaskClass))
+
+typedef struct _Task Task;
+typedef struct _TaskClass TaskClass;
+#define _g_regex_unref0(var) ((var == NULL) ? NULL : (var = (g_regex_unref (var), NULL)))
+#define __g_list_free_g_free0(var) ((var == NULL) ? NULL : (var = (_g_list_free_g_free (var), NULL)))
+#define __g_list_free_g_object_unref0(var) ((var == NULL) ? NULL : (var = (_g_list_free_g_object_unref (var), NULL)))
+
+#define TYPE_COMMAND (command_get_type ())
+typedef struct _Command Command;
+#define _gst_object_unref0(var) ((var == NULL) ? NULL : (var = (gst_object_unref (var), NULL)))
+#define _g_main_loop_unref0(var) ((var == NULL) ? NULL : (var = (g_main_loop_unref (var), NULL)))
+
+typedef gint (*CommandFunc) (AutoPipeline* auto_pipeline, Task* task);
+struct _Command {
+ char* name;
+ char* description;
+ char* args_desc;
+ CommandFunc function;
+};
+
+
+extern gboolean output_messages;
+gboolean output_messages = FALSE;
+extern gboolean force_eos;
+gboolean force_eos = FALSE;
+extern guint how_many_control_c_pressed;
+guint how_many_control_c_pressed = (guint) 0;
+extern AutoPipeline* auto_pipeline;
+AutoPipeline* auto_pipeline = NULL;
+
+GType auto_pipeline_get_type (void) G_GNUC_CONST;
+void on_control_c (void);
+gboolean auto_pipeline_send_eos (AutoPipeline* self);
+gint _vala_main (char** args, int args_length1);
+AutoPipeline* auto_pipeline_new (void);
+AutoPipeline* auto_pipeline_construct (GType object_type);
+static void _on_control_c_sighandler_t (gint signal);
+#define LOG_FILENAME "gst-auto-launch.log"
+void auto_pipeline_set_output_messages_enabled (AutoPipeline* self, gboolean value);
+void auto_pipeline_log (AutoPipeline* self, const char* format, ...);
+TaskScanner* task_scanner_new (void);
+TaskScanner* task_scanner_construct (GType object_type);
+GType task_scanner_get_type (void) G_GNUC_CONST;
+void task_scanner_print_description (TaskScanner* self);
+GType task_get_type (void) G_GNUC_CONST;
+Task* task_scanner_get_task_from_arg (TaskScanner* self, const char* arg);
+static void _g_list_free_g_free (GList* self);
+static void _g_list_free_g_object_unref (GList* self);
+GType command_get_type (void) G_GNUC_CONST;
+Command* command_dup (const Command* self);
+void command_free (Command* self);
+void command_copy (const Command* self, Command* dest);
+void command_destroy (Command* self);
+Command* task_scanner_lookup_command (TaskScanner* self, const char* command_name);
+Task* task_new (double seconds, Command* command);
+Task* task_construct (GType object_type, double seconds, Command* command);
+void auto_pipeline_set_pipeline (AutoPipeline* self, GstBin* value);
+GstBin* auto_pipeline_get_pipeline (AutoPipeline* self);
+guint task_exec (Task* self, AutoPipeline* auto_pipeline);
+static void _g_main_loop_quit_auto_pipeline_quit (AutoPipeline* _sender, gpointer self);
+gint auto_pipeline_get_return_status (AutoPipeline* self);
+static void _vala_array_destroy (gpointer array, gint array_length, GDestroyNotify destroy_func);
+static void _vala_array_free (gpointer array, gint array_length, GDestroyNotify destroy_func);
+static gint _vala_array_length (gpointer array);
+
+const GOptionEntry options[3] = {{"gst-messages", 'm', 0, G_OPTION_ARG_NONE, &output_messages, "Output messages", NULL}, {"eos-on-shutdown", 'e', 0, G_OPTION_ARG_NONE, &force_eos, "Force EOS on sources before shutting the pipeline down", NULL}, {NULL}};
+static GRegex* _tmp9_regex_0 = NULL;
+
+
+void on_control_c (void) {
+ if (auto_pipeline == NULL) {
+ return;
+ }
+ if (how_many_control_c_pressed == 0) {
+ auto_pipeline_send_eos (auto_pipeline);
+ } else {
+ g_signal_emit_by_name (auto_pipeline, "quit");
+ }
+ how_many_control_c_pressed++;
+}
+
+
+static void _on_control_c_sighandler_t (gint signal) {
+ on_control_c ();
+}
+
+
+static gpointer _g_object_ref0 (gpointer self) {
+ return self ? g_object_ref (self) : NULL;
+}
+
+
+static gboolean string_contains (const char* self, const char* needle) {
+ gboolean result = FALSE;
+ g_return_val_if_fail (self != NULL, FALSE);
+ g_return_val_if_fail (needle != NULL, FALSE);
+ result = strstr (self, needle) != NULL;
+ return result;
+}
+
+
+static inline GRegex* _thread_safe_regex_init (GRegex** re, const gchar * pattern, GRegexMatchFlags match_options) {
+ if (g_once_init_enter ((volatile gsize*) re)) {
+ GRegex* val = g_regex_new (pattern, match_options, 0, NULL);
+ g_once_init_leave ((volatile gsize*) re, (gsize) val);
+ }
+ return *re;
+}
+
+
+static gpointer _g_regex_ref0 (gpointer self) {
+ return self ? g_regex_ref (self) : NULL;
+}
+
+
+static void _g_list_free_g_free (GList* self) {
+ g_list_foreach (self, (GFunc) g_free, NULL);
+ g_list_free (self);
+}
+
+
+static void _g_list_free_g_object_unref (GList* self) {
+ g_list_foreach (self, (GFunc) g_object_unref, NULL);
+ g_list_free (self);
+}
+
+
+static void _g_main_loop_quit_auto_pipeline_quit (AutoPipeline* _sender, gpointer self) {
+ g_main_loop_quit (self);
+}
+
+
+gint _vala_main (char** args, int args_length1) {
+ gint result = 0;
+ GOptionContext* opt_context;
+ AutoPipeline* _tmp1_;
+ GTimeVal tv = {0};
+ TaskScanner* scanner;
+ GList* tasks;
+ GList* effective_args_list;
+ gint i;
+ gint effective_args_length1;
+ gint _effective_args_size_;
+ char** _tmp11_;
+ gint _tmp10_;
+ char** effective_args;
+ char* _tmp13_;
+ char* pipeline_desc;
+ GMainLoop* loop;
+ GError * _inner_error_ = NULL;
+ opt_context = NULL;
+ {
+ GOptionContext* _tmp0_;
+ opt_context = (_tmp0_ = g_option_context_new ("- Build pipelines and run commands on them"), _g_option_context_free0 (opt_context), _tmp0_);
+ g_option_context_set_help_enabled (opt_context, TRUE);
+ g_option_context_add_main_entries (opt_context, options, "messages");
+ g_option_context_add_group (opt_context, gst_init_get_option_group ());
+ g_option_context_parse (opt_context, &args_length1, &args, &_inner_error_);
+ if (_inner_error_ != NULL) {
+ if (_inner_error_->domain == G_OPTION_ERROR) {
+ goto __catch0_g_option_error;
+ }
+ _g_option_context_free0 (opt_context);
+ g_critical ("file %s: line %d: unexpected error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+ g_clear_error (&_inner_error_);
+ return 0;
+ }
+ }
+ goto __finally0;
+ __catch0_g_option_error:
+ {
+ GError * e;
+ e = _inner_error_;
+ _inner_error_ = NULL;
+ {
+ g_printerr ("Option parsing failed: %s\n", e->message);
+ result = -1;
+ _g_error_free0 (e);
+ _g_option_context_free0 (opt_context);
+ return result;
+ }
+ }
+ __finally0:
+ if (_inner_error_ != NULL) {
+ _g_option_context_free0 (opt_context);
+ g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+ g_clear_error (&_inner_error_);
+ return 0;
+ }
+ auto_pipeline = (_tmp1_ = auto_pipeline_new (), _g_object_unref0 (auto_pipeline), _tmp1_);
+ if (force_eos) {
+ signal (SIGINT, _on_control_c_sighandler_t);
+ }
+ if (output_messages) {
+ g_printerr ("Logging message to '%s'\n", LOG_FILENAME);
+ auto_pipeline_set_output_messages_enabled (auto_pipeline, output_messages);
+ }
+ if (output_messages) {
+ GTimeVal _tmp2_ = {0};
+ auto_pipeline_log (auto_pipeline, "{\n", NULL);
+ tv = (g_get_current_time (&_tmp2_), _tmp2_);
+ auto_pipeline_log (auto_pipeline, " 'start' : %6lu.%06lu,\n", tv.tv_sec, tv.tv_usec, NULL);
+ }
+ scanner = task_scanner_new ();
+ if (args_length1 < 2) {
+ char* _tmp3_;
+ g_printerr ("%s", _tmp3_ = g_option_context_get_help (opt_context, TRUE, NULL));
+ _g_free0 (_tmp3_);
+ g_printerr ("Commands are of the form <seconds>:<command>\n");
+ g_printerr ("Supported commands are:\n");
+ task_scanner_print_description (scanner);
+ g_printerr ("\nExamples:\n");
+ g_printerr (" %s videotestsrc ! autovideosink 0:pause 1:play +5:eos\n", args[0]);
+ g_printerr (" %s videotestsrc ! clockoverlay name=clock ! autovideosink 0:play 2:s" \
+"et:clock:valignment:bottom 5:eos\n", args[0]);
+ result = 1;
+ _g_object_unref0 (scanner);
+ _g_option_context_free0 (opt_context);
+ return result;
+ }
+ tasks = NULL;
+ effective_args_list = NULL;
+ {
+ gint _tmp4_;
+ char** _tmp5_ = NULL;
+ char** arg_collection;
+ int arg_collection_length1;
+ int arg_it;
+ arg_collection = (_tmp5_ = args + 1, _tmp4_ = args_length1 - 1, _tmp5_);
+ arg_collection_length1 = _tmp4_;
+ for (arg_it = 0; arg_it < _tmp4_; arg_it = arg_it + 1) {
+ char* arg;
+ arg = g_strdup (arg_collection[arg_it]);
+ {
+ Task* task;
+ task = task_scanner_get_task_from_arg (scanner, arg);
+ if (task != NULL) {
+ tasks = g_list_append (tasks, _g_object_ref0 (task));
+ } else {
+ if (!g_str_has_prefix (arg, "--")) {
+ gboolean _tmp6_ = FALSE;
+ if (string_contains (arg, " ")) {
+ _tmp6_ = string_contains (arg, "=");
+ } else {
+ _tmp6_ = FALSE;
+ }
+ if (_tmp6_) {
+ gint parts_length1;
+ gint _parts_size_;
+ char** _tmp8_;
+ char** _tmp7_;
+ char** parts;
+ GRegex* _tmp9_;
+ GRegex* prop_name_regex;
+ parts = (_tmp8_ = _tmp7_ = g_strsplit (arg, "=", 2), parts_length1 = _vala_array_length (_tmp7_), _parts_size_ = parts_length1, _tmp8_);
+ prop_name_regex = _g_regex_ref0 (_thread_safe_regex_init (&_tmp9_regex_0, "^[A-Za-z][a-zA-Z0-9_-]+$", 0));
+ if (g_regex_match (prop_name_regex, parts[0], 0, NULL)) {
+ char* new_arg;
+ new_arg = g_strdup_printf ("%s=\"%s\"", parts[0], parts[1]);
+ effective_args_list = g_list_append (effective_args_list, g_strdup (new_arg));
+ _g_free0 (new_arg);
+ _g_regex_unref0 (prop_name_regex);
+ parts = (_vala_array_free (parts, parts_length1, (GDestroyNotify) g_free), NULL);
+ _g_object_unref0 (task);
+ _g_free0 (arg);
+ continue;
+ }
+ _g_regex_unref0 (prop_name_regex);
+ parts = (_vala_array_free (parts, parts_length1, (GDestroyNotify) g_free), NULL);
+ }
+ effective_args_list = g_list_append (effective_args_list, g_strdup (arg));
+ } else {
+ result = 1;
+ _g_object_unref0 (task);
+ _g_free0 (arg);
+ __g_list_free_g_free0 (effective_args_list);
+ __g_list_free_g_object_unref0 (tasks);
+ _g_object_unref0 (scanner);
+ _g_option_context_free0 (opt_context);
+ return result;
+ }
+ }
+ _g_object_unref0 (task);
+ _g_free0 (arg);
+ }
+ }
+ }
+ if (g_list_length (tasks) == 0) {
+ char* auto_symbol;
+ Command* auto_command;
+ auto_symbol = g_strdup ("play");
+ g_printerr ("No commands given, will exec '%s' automatically\n", auto_symbol);
+ auto_command = task_scanner_lookup_command (scanner, auto_symbol);
+ if (auto_command != NULL) {
+ Task* auto_task;
+ auto_task = task_new ((double) 0, auto_command);
+ tasks = g_list_append (tasks, _g_object_ref0 (auto_task));
+ _g_object_unref0 (auto_task);
+ } else {
+ g_printerr ("Could not find a command named '%s'\n", auto_symbol);
+ }
+ _g_free0 (auto_symbol);
+ }
+ i = 0;
+ effective_args = (_tmp11_ = g_new0 (char*, (_tmp10_ = g_list_length (effective_args_list) + 1) + 1), effective_args_length1 = _tmp10_, _effective_args_size_ = effective_args_length1, _tmp11_);
+ {
+ GList* arg_collection;
+ GList* arg_it;
+ arg_collection = effective_args_list;
+ for (arg_it = arg_collection; arg_it != NULL; arg_it = arg_it->next) {
+ char* arg;
+ arg = g_strdup ((const char*) arg_it->data);
+ {
+ char* _tmp12_;
+ effective_args[i] = (_tmp12_ = g_strdup (arg), _g_free0 (effective_args[i]), _tmp12_);
+ i++;
+ _g_free0 (arg);
+ }
+ }
+ }
+ effective_args[i] = (_tmp13_ = NULL, _g_free0 (effective_args[i]), _tmp13_);
+ pipeline_desc = g_strjoinv (" ", effective_args);
+ {
+ GstElement* _tmp15_;
+ GstElement* _tmp16_;
+ GstBin* _tmp17_;
+ if (output_messages) {
+ GTimeVal _tmp14_ = {0};
+ tv = (g_get_current_time (&_tmp14_), _tmp14_);
+ auto_pipeline_log (auto_pipeline, " 'description' : '%s',\n", pipeline_desc, NULL);
+ }
+ _tmp15_ = gst_parse_launch (pipeline_desc, &_inner_error_);
+ if (_inner_error_ != NULL) {
+ goto __catch1_g_error;
+ }
+ auto_pipeline_set_pipeline (auto_pipeline, _tmp17_ = (_tmp16_ = _tmp15_, GST_IS_BIN (_tmp16_) ? ((GstBin*) _tmp16_) : NULL));
+ _gst_object_unref0 (_tmp17_);
+ if (output_messages) {
+ GTimeVal _tmp18_ = {0};
+ tv = (g_get_current_time (&_tmp18_), _tmp18_);
+ auto_pipeline_log (auto_pipeline, " 'launch' : %6lu.%06lu,\n", tv.tv_sec, tv.tv_usec, NULL);
+ }
+ }
+ goto __finally1;
+ __catch1_g_error:
+ {
+ GError * e;
+ e = _inner_error_;
+ _inner_error_ = NULL;
+ {
+ g_printerr ("Error: %s\n", e->message);
+ if (auto_pipeline_get_pipeline (auto_pipeline) != NULL) {
+ gst_element_set_state ((GstElement*) auto_pipeline_get_pipeline (auto_pipeline), GST_STATE_NULL);
+ }
+ result = 1;
+ _g_error_free0 (e);
+ _g_free0 (pipeline_desc);
+ effective_args = (_vala_array_free (effective_args, effective_args_length1, (GDestroyNotify) g_free), NULL);
+ __g_list_free_g_free0 (effective_args_list);
+ __g_list_free_g_object_unref0 (tasks);
+ _g_object_unref0 (scanner);
+ _g_option_context_free0 (opt_context);
+ return result;
+ }
+ }
+ __finally1:
+ if (_inner_error_ != NULL) {
+ _g_free0 (pipeline_desc);
+ effective_args = (_vala_array_free (effective_args, effective_args_length1, (GDestroyNotify) g_free), NULL);
+ __g_list_free_g_free0 (effective_args_list);
+ __g_list_free_g_object_unref0 (tasks);
+ _g_object_unref0 (scanner);
+ _g_option_context_free0 (opt_context);
+ g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
+ g_clear_error (&_inner_error_);
+ return 0;
+ }
+ {
+ GList* task_collection;
+ GList* task_it;
+ task_collection = tasks;
+ for (task_it = task_collection; task_it != NULL; task_it = task_it->next) {
+ Task* task;
+ task = _g_object_ref0 ((Task*) task_it->data);
+ {
+ task_exec (task, auto_pipeline);
+ _g_object_unref0 (task);
+ }
+ }
+ }
+ loop = g_main_loop_new (NULL, FALSE);
+ g_signal_connect (auto_pipeline, "quit", (GCallback) _g_main_loop_quit_auto_pipeline_quit, loop);
+ if (output_messages) {
+ auto_pipeline_log (auto_pipeline, " 'message' : [\n", NULL);
+ }
+ g_main_loop_run (loop);
+ if (output_messages) {
+ auto_pipeline_log (auto_pipeline, " ],\n", NULL);
+ }
+ gst_element_set_state ((GstElement*) auto_pipeline_get_pipeline (auto_pipeline), GST_STATE_NULL);
+ if (output_messages) {
+ GTimeVal _tmp19_ = {0};
+ tv = (g_get_current_time (&_tmp19_), _tmp19_);
+ auto_pipeline_log (auto_pipeline, " 'end' : %6lu.%06lu,\n", tv.tv_sec, tv.tv_usec, NULL);
+ auto_pipeline_log (auto_pipeline, "}\n", NULL);
+ }
+ result = auto_pipeline_get_return_status (auto_pipeline);
+ _g_main_loop_unref0 (loop);
+ _g_free0 (pipeline_desc);
+ effective_args = (_vala_array_free (effective_args, effective_args_length1, (GDestroyNotify) g_free), NULL);
+ __g_list_free_g_free0 (effective_args_list);
+ __g_list_free_g_object_unref0 (tasks);
+ _g_object_unref0 (scanner);
+ _g_option_context_free0 (opt_context);
+ return result;
+}
+
+
+int main (int argc, char ** argv) {
+ g_thread_init (NULL);
+ g_type_init ();
+ return _vala_main (argv, argc);
+}
+
+
+static void _vala_array_destroy (gpointer array, gint array_length, GDestroyNotify destroy_func) {
+ if ((array != NULL) && (destroy_func != NULL)) {
+ int i;
+ for (i = 0; i < array_length; i = i + 1) {
+ if (((gpointer*) array)[i] != NULL) {
+ destroy_func (((gpointer*) array)[i]);
+ }
+ }
+ }
+}
+
+
+static void _vala_array_free (gpointer array, gint array_length, GDestroyNotify destroy_func) {
+ _vala_array_destroy (array, array_length, destroy_func);
+ g_free (array);
+}
+
+
+static gint _vala_array_length (gpointer array) {
+ int length;
+ length = 0;
+ if (array) {
+ while (((gpointer*) array)[length]) {
+ length++;
+ }
+ }
+ return length;
+}
+
+
+
+
--- /dev/null
+bool output_messages;
+bool force_eos;
+
+const OptionEntry[] options = {
+ { "gst-messages", 'm', 0, OptionArg.NONE, ref output_messages, "Output messages", null },
+ { "eos-on-shutdown", 'e', 0, OptionArg.NONE, ref force_eos, "Force EOS on sources before shutting the pipeline down", null },
+ {null}
+};
+
+
+uint how_many_control_c_pressed = 0;
+AutoPipeline auto_pipeline;
+
+void on_control_c() {
+ if(auto_pipeline == null)
+ return;
+ if(how_many_control_c_pressed == 0)
+ auto_pipeline.send_eos();
+ else
+ auto_pipeline.quit();
+ how_many_control_c_pressed++;
+}
+
+
+int main(string[] args) {
+ OptionContext opt_context;
+ try {
+ opt_context = new OptionContext("- Build pipelines and run commands on them");
+ opt_context.set_help_enabled(true);
+ opt_context.add_main_entries(options, "messages");
+ opt_context.add_group(Gst.init_get_option_group());
+ opt_context.parse(ref args);
+ }
+ catch (OptionError e) {
+ printerr("Option parsing failed: %s\n", e.message);
+ return -1;
+ }
+
+ auto_pipeline = new AutoPipeline();
+
+ if(force_eos)
+ Posix.signal(Posix.SIGINT, on_control_c);
+
+ if(output_messages) {
+ printerr("Logging message to '%s'\n", LOG_FILENAME);
+ auto_pipeline.output_messages_enabled = output_messages;
+ }
+
+ TimeVal tv;
+
+ if(output_messages) {
+ auto_pipeline.log("{\n");
+ tv = TimeVal();
+ auto_pipeline.log(" 'start' : %6lu.%06lu,\n", tv.tv_sec, tv.tv_usec);
+ }
+
+ TaskScanner scanner = new TaskScanner();
+
+ if(args.length < 2) {
+ printerr(opt_context.get_help(true, null));
+ printerr("Commands are of the form <seconds>:<command>\n");
+ printerr("Supported commands are:\n");
+
+ scanner.print_description();
+
+ printerr("\nExamples:\n");
+ printerr(" %s videotestsrc ! autovideosink 0:pause 1:play +5:eos\n", args[0]);
+ printerr(" %s videotestsrc ! clockoverlay name=clock ! autovideosink 0:play 2:set:clock:valignment:bottom 5:eos\n", args[0]);
+
+ return 1;
+ }
+
+ List<Task> tasks = new List<Task> ();
+ List<string> effective_args_list = new List<string> ();
+
+ foreach(string arg in args[1:args.length]) {
+ Task? task = scanner.get_task_from_arg(arg);
+ if(task != null)
+ tasks.append(task);
+ else if(!arg.has_prefix("--")) {
+ if(" " in arg && "=" in arg) {
+ string[] parts = arg.split("=", 2);
+ Regex prop_name_regex = /^[A-Za-z][a-zA-Z0-9_-]+$/;
+ if(prop_name_regex.match(parts[0])) {
+ string new_arg = "%s=\"%s\"".printf(parts[0],parts[1]);
+ effective_args_list.append(new_arg);
+ continue;
+ }
+ }
+ effective_args_list.append(arg);
+ }
+ else
+ return 1;
+ }
+
+ if(tasks.length() == 0) {
+ string auto_symbol = "play";
+ printerr("No commands given, will exec '%s' automatically\n", auto_symbol);
+ weak Command? auto_command = scanner.lookup_command(auto_symbol);
+ if(auto_command != null) {
+ Task auto_task = new Task(0, auto_command);
+ tasks.append(auto_task);
+ }
+ else
+ printerr("Could not find a command named '%s'\n", auto_symbol);
+ }
+
+ int i = 0;
+ string[] effective_args = new string[effective_args_list.length()+1];
+ foreach(string arg in effective_args_list) {
+ effective_args[i] = arg;
+ i++;
+ }
+ effective_args[i] = null;
+ string pipeline_desc = string.joinv(" ", effective_args);
+
+ try {
+ if(output_messages) {
+ tv = TimeVal();
+ auto_pipeline.log(" 'description' : '%s',\n", pipeline_desc);
+ }
+ auto_pipeline.pipeline = Gst.parse_launch(pipeline_desc) as Gst.Bin;
+ if(output_messages) {
+ tv = TimeVal();
+ auto_pipeline.log(" 'launch' : %6lu.%06lu,\n", tv.tv_sec, tv.tv_usec);
+ }
+
+ }
+ catch(Error e) {
+ printerr("Error: %s\n", e.message);
+ if(auto_pipeline.pipeline != null)
+ auto_pipeline.pipeline.set_state(Gst.State.NULL);
+ return 1;
+ }
+
+ foreach(Task task in tasks)
+ task.exec(auto_pipeline);
+
+ MainLoop loop = new MainLoop();
+ auto_pipeline.quit.connect(loop.quit);
+
+ if(output_messages)
+ auto_pipeline.log(" 'message' : [\n");
+ loop.run();
+ if(output_messages)
+ auto_pipeline.log(" ],\n");
+ auto_pipeline.pipeline.set_state(Gst.State.NULL);
+ if(output_messages) {
+ tv = TimeVal();
+ auto_pipeline.log(" 'end' : %6lu.%06lu,\n", tv.tv_sec, tv.tv_usec);
+ auto_pipeline.log("}\n");
+ }
+
+ return auto_pipeline.return_status;
+}
+
--- /dev/null
+/* task-scanner.c generated by valac 0.10.0, the Vala compiler
+ * generated from task-scanner.vala, do not modify */
+
+
+#include <glib.h>
+#include <glib-object.h>
+#include <float.h>
+#include <math.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+#define TYPE_TASK_SCANNER (task_scanner_get_type ())
+#define TASK_SCANNER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_TASK_SCANNER, TaskScanner))
+#define TASK_SCANNER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_TASK_SCANNER, TaskScannerClass))
+#define IS_TASK_SCANNER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_TASK_SCANNER))
+#define IS_TASK_SCANNER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_TASK_SCANNER))
+#define TASK_SCANNER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_TASK_SCANNER, TaskScannerClass))
+
+typedef struct _TaskScanner TaskScanner;
+typedef struct _TaskScannerClass TaskScannerClass;
+typedef struct _TaskScannerPrivate TaskScannerPrivate;
+#define _g_scanner_destroy0(var) ((var == NULL) ? NULL : (var = (g_scanner_destroy (var), NULL)))
+
+#define TYPE_TASK (task_get_type ())
+#define TASK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_TASK, Task))
+#define TASK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_TASK, TaskClass))
+#define IS_TASK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_TASK))
+#define IS_TASK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_TASK))
+#define TASK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_TASK, TaskClass))
+
+typedef struct _Task Task;
+typedef struct _TaskClass TaskClass;
+
+#define TYPE_COMMAND (command_get_type ())
+
+#define TYPE_AUTO_PIPELINE (auto_pipeline_get_type ())
+#define AUTO_PIPELINE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_AUTO_PIPELINE, AutoPipeline))
+#define AUTO_PIPELINE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_AUTO_PIPELINE, AutoPipelineClass))
+#define IS_AUTO_PIPELINE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_AUTO_PIPELINE))
+#define IS_AUTO_PIPELINE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_AUTO_PIPELINE))
+#define AUTO_PIPELINE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_AUTO_PIPELINE, AutoPipelineClass))
+
+typedef struct _AutoPipeline AutoPipeline;
+typedef struct _AutoPipelineClass AutoPipelineClass;
+typedef struct _Command Command;
+#define _g_free0(var) (var = (g_free (var), NULL))
+#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
+
+struct _TaskScanner {
+ GObject parent_instance;
+ TaskScannerPrivate * priv;
+};
+
+struct _TaskScannerClass {
+ GObjectClass parent_class;
+};
+
+struct _TaskScannerPrivate {
+ GScanner* scanner;
+ double last_time_seconds;
+};
+
+typedef gint (*CommandFunc) (AutoPipeline* auto_pipeline, Task* task);
+struct _Command {
+ char* name;
+ char* description;
+ char* args_desc;
+ CommandFunc function;
+};
+
+
+static gpointer task_scanner_parent_class = NULL;
+
+GType task_scanner_get_type (void) G_GNUC_CONST;
+#define TASK_SCANNER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TYPE_TASK_SCANNER, TaskScannerPrivate))
+enum {
+ TASK_SCANNER_DUMMY_PROPERTY
+};
+TaskScanner* task_scanner_new (void);
+TaskScanner* task_scanner_construct (GType object_type);
+void scanner_register_symbols (GScanner* scanner);
+GType task_get_type (void) G_GNUC_CONST;
+Task* task_scanner_get_task_from_arg (TaskScanner* self, const char* arg);
+static double task_scanner_get_seconds (TaskScanner* self, GTokenType* last_token);
+GType command_get_type (void) G_GNUC_CONST;
+GType auto_pipeline_get_type (void) G_GNUC_CONST;
+Command* command_dup (const Command* self);
+void command_free (Command* self);
+void command_copy (const Command* self, Command* dest);
+void command_destroy (Command* self);
+Task* task_new (double seconds, Command* command);
+Task* task_construct (GType object_type, double seconds, Command* command);
+gchar command_get_arg_desc (Command *self, guint arg_i);
+GValueArray* task_get_arguments (Task* self);
+static double task_scanner_get_signed_number (TaskScanner* self, GTokenType* last_token);
+guint command_get_n_args (Command *self);
+static double task_scanner_get_number (TaskScanner* self, GTokenType* last_token, gint* relative);
+void task_scanner_print_description (TaskScanner* self);
+static void _lambda2_ (void* key, void* val, TaskScanner* self);
+static void __lambda2__gh_func (void* key, void* value, gpointer self);
+Command* task_scanner_lookup_command (TaskScanner* self, const char* command_name);
+static void task_scanner_finalize (GObject* obj);
+static int _vala_strcmp0 (const char * str1, const char * str2);
+
+
+
+TaskScanner* task_scanner_construct (GType object_type) {
+ TaskScanner * self;
+ GScanner* _tmp0_;
+ self = (TaskScanner*) g_object_new (object_type, NULL);
+ self->priv->last_time_seconds = (double) 0;
+ self->priv->scanner = (_tmp0_ = g_scanner_new (NULL), _g_scanner_destroy0 (self->priv->scanner), _tmp0_);
+ (*self->priv->scanner->config).scan_identifier_1char = TRUE;
+ (*self->priv->scanner->config).identifier_2_string = TRUE;
+ scanner_register_symbols (self->priv->scanner);
+ (*self->priv->scanner->config).cset_identifier_nth = G_CSET_a_2_z G_CSET_A_2_Z " _-0123456789" G_CSET_LATINC G_CSET_LATINS;
+ return self;
+}
+
+
+TaskScanner* task_scanner_new (void) {
+ return task_scanner_construct (TYPE_TASK_SCANNER);
+}
+
+
+static gboolean string_contains (const char* self, const char* needle) {
+ gboolean result = FALSE;
+ g_return_val_if_fail (self != NULL, FALSE);
+ g_return_val_if_fail (needle != NULL, FALSE);
+ result = strstr (self, needle) != NULL;
+ return result;
+}
+
+
+static glong string_get_length (const char* self) {
+ glong result;
+ g_return_val_if_fail (self != NULL, 0L);
+ result = g_utf8_strlen (self, (gssize) (-1));
+ return result;
+}
+
+
+Task* task_scanner_get_task_from_arg (TaskScanner* self, const char* arg) {
+ Task* result = NULL;
+ GTokenType token = 0;
+ double number;
+ gboolean _tmp0_ = FALSE;
+ Command* command;
+ Task* task;
+ guint arg_n;
+ g_return_val_if_fail (self != NULL, NULL);
+ g_return_val_if_fail (arg != NULL, NULL);
+ if (!string_contains (arg, ":")) {
+ result = NULL;
+ return result;
+ }
+ g_scanner_input_text (self->priv->scanner, arg, (guint) string_get_length (arg));
+ number = task_scanner_get_seconds (self, &token);
+ if (token != G_TOKEN_INT) {
+ _tmp0_ = token != G_TOKEN_FLOAT;
+ } else {
+ _tmp0_ = FALSE;
+ }
+ if (_tmp0_) {
+ result = NULL;
+ return result;
+ }
+ self->priv->last_time_seconds = number;
+ token = g_scanner_get_next_token (self->priv->scanner);
+ if (token != ':') {
+ g_printerr ("Expected ':' between seconds and command\n");
+ result = NULL;
+ return result;
+ }
+ token = g_scanner_get_next_token (self->priv->scanner);
+ if (token != G_TOKEN_SYMBOL) {
+ g_printerr ("Expected a valid command\n");
+ result = NULL;
+ return result;
+ }
+ command = (Command*) self->priv->scanner->value.v_symbol;
+ task = task_new (number, command);
+ arg_n = (guint) 0;
+ while (TRUE) {
+ gchar arg_desc;
+ if (!((token = g_scanner_get_next_token (self->priv->scanner)) == ':')) {
+ break;
+ }
+ arg_desc = command_get_arg_desc (command, arg_n);
+ token = g_scanner_peek_next_token (self->priv->scanner);
+ if (token == G_TOKEN_STRING) {
+ char* s;
+ g_scanner_get_next_token (self->priv->scanner);
+ s = g_strdup (self->priv->scanner->value.v_string);
+ if (_vala_strcmp0 (s, "true") == 0) {
+ GValue _tmp1_ = {0};
+ GValue _tmp2_;
+ g_value_array_append (task_get_arguments (task), (_tmp2_ = (g_value_init (&_tmp1_, G_TYPE_BOOLEAN), g_value_set_boolean (&_tmp1_, TRUE), _tmp1_), &_tmp2_));
+ G_IS_VALUE (&_tmp1_) ? (g_value_unset (&_tmp1_), NULL) : NULL;
+ } else {
+ if (_vala_strcmp0 (s, "false") == 0) {
+ GValue _tmp3_ = {0};
+ GValue _tmp4_;
+ g_value_array_append (task_get_arguments (task), (_tmp4_ = (g_value_init (&_tmp3_, G_TYPE_BOOLEAN), g_value_set_boolean (&_tmp3_, FALSE), _tmp3_), &_tmp4_));
+ G_IS_VALUE (&_tmp3_) ? (g_value_unset (&_tmp3_), NULL) : NULL;
+ } else {
+ GValue _tmp5_ = {0};
+ GValue _tmp6_;
+ g_value_array_append (task_get_arguments (task), (_tmp6_ = (g_value_init (&_tmp5_, G_TYPE_STRING), g_value_set_string (&_tmp5_, s), _tmp5_), &_tmp6_));
+ G_IS_VALUE (&_tmp5_) ? (g_value_unset (&_tmp5_), NULL) : NULL;
+ }
+ }
+ _g_free0 (s);
+ } else {
+ gboolean _tmp7_ = FALSE;
+ gboolean _tmp8_ = FALSE;
+ gboolean _tmp9_ = FALSE;
+ if (token == G_TOKEN_INT) {
+ _tmp9_ = TRUE;
+ } else {
+ _tmp9_ = token == G_TOKEN_FLOAT;
+ }
+ if (_tmp9_) {
+ _tmp8_ = TRUE;
+ } else {
+ _tmp8_ = token == '+';
+ }
+ if (_tmp8_) {
+ _tmp7_ = TRUE;
+ } else {
+ _tmp7_ = token == '-';
+ }
+ if (_tmp7_) {
+ if (arg_desc == 't') {
+ GValue _tmp10_ = {0};
+ GValue _tmp11_;
+ number = task_scanner_get_seconds (self, &token);
+ g_value_array_append (task_get_arguments (task), (_tmp11_ = (g_value_init (&_tmp10_, G_TYPE_DOUBLE), g_value_set_double (&_tmp10_, (double) number), _tmp10_), &_tmp11_));
+ G_IS_VALUE (&_tmp10_) ? (g_value_unset (&_tmp10_), NULL) : NULL;
+ } else {
+ number = task_scanner_get_signed_number (self, &token);
+ if (token == G_TOKEN_INT) {
+ GValue _tmp12_ = {0};
+ GValue _tmp13_;
+ g_value_array_append (task_get_arguments (task), (_tmp13_ = (g_value_init (&_tmp12_, G_TYPE_INT), g_value_set_int (&_tmp12_, (gint) number), _tmp12_), &_tmp13_));
+ G_IS_VALUE (&_tmp12_) ? (g_value_unset (&_tmp12_), NULL) : NULL;
+ } else {
+ if (token == G_TOKEN_FLOAT) {
+ GValue _tmp14_ = {0};
+ GValue _tmp15_;
+ g_value_array_append (task_get_arguments (task), (_tmp15_ = (g_value_init (&_tmp14_, G_TYPE_DOUBLE), g_value_set_double (&_tmp14_, (double) number), _tmp14_), &_tmp15_));
+ G_IS_VALUE (&_tmp14_) ? (g_value_unset (&_tmp14_), NULL) : NULL;
+ }
+ }
+ }
+ }
+ }
+ arg_n++;
+ }
+ if (command_get_n_args (command) != task_get_arguments (task)->n_values) {
+ g_printerr ("Command '%s' takes %u arguments (got %u)\n", (*command).name, command_get_n_args (command), task_get_arguments (task)->n_values);
+ result = NULL;
+ _g_object_unref0 (task);
+ return result;
+ }
+ {
+ guint arg_i;
+ arg_i = (guint) 0;
+ {
+ gboolean _tmp16_;
+ _tmp16_ = TRUE;
+ while (TRUE) {
+ gchar arg_desc;
+ GValue arg_value;
+ if (!_tmp16_) {
+ arg_i++;
+ }
+ _tmp16_ = FALSE;
+ if (!(arg_i < arg_n)) {
+ break;
+ }
+ arg_desc = command_get_arg_desc (command, arg_i);
+ arg_value = task_get_arguments (task)->values[arg_i];
+ switch (arg_desc) {
+ case 's':
+ {
+ if (!G_VALUE_HOLDS (&arg_value, G_TYPE_STRING)) {
+ g_printerr ("Argument %u of '%s' must be a string\n", arg_i, (*command).name);
+ result = NULL;
+ _g_object_unref0 (task);
+ return result;
+ }
+ break;
+ }
+ case 'i':
+ {
+ if (!G_VALUE_HOLDS (&arg_value, G_TYPE_INT)) {
+ g_printerr ("Argument %u of '%s' must be an integer\n", arg_i, (*command).name);
+ result = NULL;
+ _g_object_unref0 (task);
+ return result;
+ }
+ break;
+ }
+ case 't':
+ {
+ if (!G_VALUE_HOLDS (&arg_value, G_TYPE_DOUBLE)) {
+ g_printerr ("Argument %u of '%s' must be in seconds\n", arg_i, (*command).name);
+ result = NULL;
+ _g_object_unref0 (task);
+ return result;
+ }
+ number = g_value_get_double (&arg_value);
+ if (number < 0.0) {
+ g_printerr ("Argument %u of '%s' cannot be negative\n", arg_i, (*command).name);
+ result = NULL;
+ _g_object_unref0 (task);
+ return result;
+ }
+ break;
+ }
+ }
+ }
+ }
+ }
+ result = task;
+ return result;
+}
+
+
+static double task_scanner_get_seconds (TaskScanner* self, GTokenType* last_token) {
+ double result = 0.0;
+ gint relative = 0;
+ double seconds;
+ g_return_val_if_fail (self != NULL, 0.0);
+ seconds = task_scanner_get_number (self, last_token, &relative);
+ if (relative != 0) {
+ seconds = seconds + (relative * self->priv->last_time_seconds);
+ }
+ result = seconds;
+ return result;
+}
+
+
+static double task_scanner_get_signed_number (TaskScanner* self, GTokenType* last_token) {
+ double result = 0.0;
+ gint relative = 0;
+ double number;
+ g_return_val_if_fail (self != NULL, 0.0);
+ number = task_scanner_get_number (self, last_token, &relative);
+ if (relative == (-1)) {
+ result = -number;
+ return result;
+ }
+ result = number;
+ return result;
+}
+
+
+static double task_scanner_get_number (TaskScanner* self, GTokenType* last_token, gint* relative) {
+ double result = 0.0;
+ double number = 0.0;
+ GTokenType token;
+ g_return_val_if_fail (self != NULL, 0.0);
+ token = g_scanner_get_next_token (self->priv->scanner);
+ if (token == '+') {
+ *relative = 1;
+ } else {
+ if (token == '-') {
+ *relative = -1;
+ } else {
+ *relative = 0;
+ }
+ }
+ if ((*relative) != 0) {
+ token = g_scanner_get_next_token (self->priv->scanner);
+ }
+ if (token == G_TOKEN_INT) {
+ number = (double) self->priv->scanner->value.v_int;
+ } else {
+ if (token == G_TOKEN_FLOAT) {
+ number = self->priv->scanner->value.v_float;
+ } else {
+ number = (double) 0;
+ }
+ }
+ *last_token = token;
+ result = number;
+ return result;
+}
+
+
+static void _lambda2_ (void* key, void* val, TaskScanner* self) {
+ char* name;
+ Command* command;
+ name = g_strdup ((const char*) key);
+ command = (Command*) val;
+ g_printerr (" %s:\n %s\n", name, (*command).description);
+ _g_free0 (name);
+}
+
+
+static void __lambda2__gh_func (void* key, void* value, gpointer self) {
+ _lambda2_ (key, value, self);
+}
+
+
+void task_scanner_print_description (TaskScanner* self) {
+ g_return_if_fail (self != NULL);
+ g_scanner_scope_foreach_symbol (self->priv->scanner, 0U, __lambda2__gh_func, self);
+}
+
+
+Command* task_scanner_lookup_command (TaskScanner* self, const char* command_name) {
+ Command* result = NULL;
+ g_return_val_if_fail (self != NULL, NULL);
+ g_return_val_if_fail (command_name != NULL, NULL);
+ result = (Command*) g_scanner_lookup_symbol (self->priv->scanner, command_name);
+ return result;
+}
+
+
+static void task_scanner_class_init (TaskScannerClass * klass) {
+ task_scanner_parent_class = g_type_class_peek_parent (klass);
+ g_type_class_add_private (klass, sizeof (TaskScannerPrivate));
+ G_OBJECT_CLASS (klass)->finalize = task_scanner_finalize;
+}
+
+
+static void task_scanner_instance_init (TaskScanner * self) {
+ self->priv = TASK_SCANNER_GET_PRIVATE (self);
+}
+
+
+static void task_scanner_finalize (GObject* obj) {
+ TaskScanner * self;
+ self = TASK_SCANNER (obj);
+ _g_scanner_destroy0 (self->priv->scanner);
+ G_OBJECT_CLASS (task_scanner_parent_class)->finalize (obj);
+}
+
+
+GType task_scanner_get_type (void) {
+ static volatile gsize task_scanner_type_id__volatile = 0;
+ if (g_once_init_enter (&task_scanner_type_id__volatile)) {
+ static const GTypeInfo g_define_type_info = { sizeof (TaskScannerClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) task_scanner_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (TaskScanner), 0, (GInstanceInitFunc) task_scanner_instance_init, NULL };
+ GType task_scanner_type_id;
+ task_scanner_type_id = g_type_register_static (G_TYPE_OBJECT, "TaskScanner", &g_define_type_info, 0);
+ g_once_init_leave (&task_scanner_type_id__volatile, task_scanner_type_id);
+ }
+ return task_scanner_type_id__volatile;
+}
+
+
+static int _vala_strcmp0 (const char * str1, const char * str2) {
+ if (str1 == NULL) {
+ return -(str1 != str2);
+ }
+ if (str2 == NULL) {
+ return str1 != str2;
+ }
+ return strcmp (str1, str2);
+}
+
+
+
+
--- /dev/null
+class TaskScanner: Object {
+ Scanner scanner;
+ double last_time_seconds;
+
+
+ public TaskScanner() {
+ last_time_seconds = 0;
+ scanner = new Scanner(null);
+ scanner.config.scan_identifier_1char = true;
+ scanner.config.identifier_2_string = true;
+ scanner_register_symbols(scanner);
+ scanner.config.cset_identifier_nth =
+ CharacterSet.a_2_z + CharacterSet.A_2_Z + " _-0123456789" +
+ CharacterSet.LATINC + CharacterSet.LATINS;
+ }
+
+
+ public Task? get_task_from_arg(string arg) {
+ if(!arg.contains(":"))
+ return null;
+ scanner.input_text(arg, (uint)arg.length);
+
+ TokenType token;
+
+ double number = get_seconds(out token);
+ if(token != TokenType.INT && token != TokenType.FLOAT)
+ return null;
+
+ last_time_seconds = number;
+
+ token = scanner.get_next_token();
+ if(token != ':') {
+ printerr("Expected ':' between seconds and command\n");
+ return null;
+ }
+
+ token = scanner.get_next_token();
+ if(token != TokenType.SYMBOL) {
+ printerr("Expected a valid command\n");
+ return null;
+ }
+
+ weak Command? command = (Command?)scanner.value.symbol;
+ Task task = new Task(number, command);
+
+ uint arg_n = 0;
+ while( (token = scanner.get_next_token()) == ':') {
+ char arg_desc = command.get_arg_desc(arg_n);
+
+ token = scanner.peek_next_token();
+ if(token == TokenType.STRING) {
+ scanner.get_next_token();
+ string s = scanner.value.string;
+ if(s == "true")
+ task.arguments.append(true);
+ else if(s == "false")
+ task.arguments.append(false);
+ else
+ task.arguments.append(s);
+ }
+ else
+ if(token == TokenType.INT || token == TokenType.FLOAT ||
+ token == '+' || token == '-') {
+ if(arg_desc == 't') {
+ number = get_seconds(out token);
+ task.arguments.append((double)number);
+ }
+ else {
+ number = get_signed_number(out token);
+ if(token == TokenType.INT)
+ task.arguments.append((int)number);
+ else
+ if(token == TokenType.FLOAT)
+ task.arguments.append((double)number);
+ }
+ }
+ arg_n++;
+ }
+
+ if(command.get_n_args() != task.arguments.n_values) {
+ printerr("Command '%s' takes %u arguments (got %u)\n",
+ command.name, command.get_n_args(), task.arguments.n_values);
+ return null;
+ }
+
+ for(uint arg_i = 0; arg_i < arg_n; arg_i++) {
+ char arg_desc = command.get_arg_desc(arg_i);
+ unowned Value arg_value = task.arguments.values[arg_i];
+ switch(arg_desc) {
+ case 's':
+ if(!arg_value.holds(typeof(string))) {
+ printerr("Argument %u of '%s' must be a string\n",
+ arg_i, command.name);
+ return null;
+ }
+ break;
+ case 'i':
+ if(!arg_value.holds(typeof(int))) {
+ printerr("Argument %u of '%s' must be an integer\n",
+ arg_i, command.name);
+ return null;
+ }
+ break;
+ case 't':
+ if(!arg_value.holds(typeof(double))) {
+ printerr("Argument %u of '%s' must be in seconds\n",
+ arg_i, command.name);
+ return null;
+ }
+ number = arg_value.get_double();
+ if(number < 0.0) {
+ printerr("Argument %u of '%s' cannot be negative\n",
+ arg_i, command.name);
+ return null;
+ }
+ break;
+ }
+ }
+
+ return task;
+ }
+
+
+ double get_seconds(out TokenType last_token) {
+ int relative;
+ double seconds = get_number(out last_token, out relative);
+
+ if(relative != 0)
+ seconds += relative * last_time_seconds;
+
+ return seconds;
+ }
+
+
+ double get_signed_number(out TokenType last_token) {
+ int relative;
+ double number = get_number(out last_token, out relative);
+
+ if(relative == -1)
+ return -number;
+ return number;
+ }
+
+
+ double get_number(out TokenType last_token, out int relative) {
+ double number;
+ TokenType token = scanner.get_next_token();
+
+ if(token == '+')
+ relative = 1;
+ else if(token == '-')
+ relative = -1;
+ else
+ relative = 0;
+
+ if(relative != 0)
+ token = scanner.get_next_token();
+
+ if(token == TokenType.INT)
+ number = scanner.value.int;
+ else if(token == TokenType.FLOAT)
+ number = scanner.value.float;
+ else
+ number = 0;
+
+ last_token = token;
+ return number;
+ }
+
+
+ public void print_description() {
+ scanner.scope_foreach_symbol(0U,
+ (key, val) => {
+ string name = (string)key;
+ weak Command? command = (Command?)val;
+ printerr(" %s:\n %s\n", name, command.description);
+ }
+ );
+ }
+
+
+ public unowned Command? lookup_command(string command_name) {
+ return (Command?)scanner.lookup_symbol(command_name);
+ }
+}
+
--- /dev/null
+/* task.c generated by valac 0.10.0, the Vala compiler
+ * generated from task.vala, do not modify */
+
+
+#include <glib.h>
+#include <glib-object.h>
+#include <float.h>
+#include <math.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+#define TYPE_TASK (task_get_type ())
+#define TASK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_TASK, Task))
+#define TASK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_TASK, TaskClass))
+#define IS_TASK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_TASK))
+#define IS_TASK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_TASK))
+#define TASK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_TASK, TaskClass))
+
+typedef struct _Task Task;
+typedef struct _TaskClass TaskClass;
+typedef struct _TaskPrivate TaskPrivate;
+
+#define TYPE_COMMAND (command_get_type ())
+
+#define TYPE_AUTO_PIPELINE (auto_pipeline_get_type ())
+#define AUTO_PIPELINE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_AUTO_PIPELINE, AutoPipeline))
+#define AUTO_PIPELINE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_AUTO_PIPELINE, AutoPipelineClass))
+#define IS_AUTO_PIPELINE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_AUTO_PIPELINE))
+#define IS_AUTO_PIPELINE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_AUTO_PIPELINE))
+#define AUTO_PIPELINE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_AUTO_PIPELINE, AutoPipelineClass))
+
+typedef struct _AutoPipeline AutoPipeline;
+typedef struct _AutoPipelineClass AutoPipelineClass;
+typedef struct _Command Command;
+#define _g_value_array_free0(var) ((var == NULL) ? NULL : (var = (g_value_array_free (var), NULL)))
+#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
+typedef struct _Block1Data Block1Data;
+
+struct _Task {
+ GObject parent_instance;
+ TaskPrivate * priv;
+};
+
+struct _TaskClass {
+ GObjectClass parent_class;
+};
+
+typedef gint (*CommandFunc) (AutoPipeline* auto_pipeline, Task* task);
+struct _Command {
+ char* name;
+ char* description;
+ char* args_desc;
+ CommandFunc function;
+};
+
+struct _TaskPrivate {
+ double _seconds;
+ Command* _command;
+ GValueArray* _arguments;
+};
+
+struct _Block1Data {
+ int _ref_count_;
+ Task * self;
+ AutoPipeline* auto_pipeline;
+};
+
+
+static gpointer task_parent_class = NULL;
+
+GType task_get_type (void) G_GNUC_CONST;
+GType command_get_type (void) G_GNUC_CONST;
+GType auto_pipeline_get_type (void) G_GNUC_CONST;
+Command* command_dup (const Command* self);
+void command_free (Command* self);
+void command_copy (const Command* self, Command* dest);
+void command_destroy (Command* self);
+#define TASK_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TYPE_TASK, TaskPrivate))
+enum {
+ TASK_DUMMY_PROPERTY,
+ TASK_SECONDS,
+ TASK_ARGUMENTS
+};
+Task* task_new (double seconds, Command* command);
+Task* task_construct (GType object_type, double seconds, Command* command);
+guint task_exec (Task* self, AutoPipeline* auto_pipeline);
+double task_get_seconds (Task* self);
+static gboolean _lambda1_ (Block1Data* _data1_);
+gint auto_pipeline_get_return_status (AutoPipeline* self);
+void auto_pipeline_set_return_status (AutoPipeline* self, gint value);
+static gboolean __lambda1__gsource_func (gpointer self);
+static Block1Data* block1_data_ref (Block1Data* _data1_);
+static void block1_data_unref (Block1Data* _data1_);
+GValueArray* task_get_arguments (Task* self);
+static void task_finalize (GObject* obj);
+static void task_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec);
+
+
+
+Task* task_construct (GType object_type, double seconds, Command* command) {
+ Task * self;
+ GValueArray* _tmp0_;
+ self = (Task*) g_object_new (object_type, NULL);
+ self->priv->_seconds = seconds;
+ self->priv->_command = command;
+ self->priv->_arguments = (_tmp0_ = g_value_array_new ((guint) 0), _g_value_array_free0 (self->priv->_arguments), _tmp0_);
+ return self;
+}
+
+
+Task* task_new (double seconds, Command* command) {
+ return task_construct (TYPE_TASK, seconds, command);
+}
+
+
+static gboolean _lambda1_ (Block1Data* _data1_) {
+ Task * self;
+ gboolean result = FALSE;
+ self = _data1_->self;
+ if (auto_pipeline_get_return_status (_data1_->auto_pipeline) == 0) {
+ gint status;
+ status = (*self->priv->_command).function (_data1_->auto_pipeline, self);
+ if (status != 0) {
+ auto_pipeline_set_return_status (_data1_->auto_pipeline, status);
+ g_signal_emit_by_name (_data1_->auto_pipeline, "quit");
+ }
+ }
+ result = FALSE;
+ return result;
+}
+
+
+static gboolean __lambda1__gsource_func (gpointer self) {
+ gboolean result;
+ result = _lambda1_ (self);
+ return result;
+}
+
+
+static gpointer _g_object_ref0 (gpointer self) {
+ return self ? g_object_ref (self) : NULL;
+}
+
+
+static Block1Data* block1_data_ref (Block1Data* _data1_) {
+ g_atomic_int_inc (&_data1_->_ref_count_);
+ return _data1_;
+}
+
+
+static void block1_data_unref (Block1Data* _data1_) {
+ if (g_atomic_int_dec_and_test (&_data1_->_ref_count_)) {
+ _g_object_unref0 (_data1_->self);
+ _g_object_unref0 (_data1_->auto_pipeline);
+ g_slice_free (Block1Data, _data1_);
+ }
+}
+
+
+guint task_exec (Task* self, AutoPipeline* auto_pipeline) {
+ guint result = 0U;
+ Block1Data* _data1_;
+ g_return_val_if_fail (self != NULL, 0U);
+ g_return_val_if_fail (auto_pipeline != NULL, 0U);
+ _data1_ = g_slice_new0 (Block1Data);
+ _data1_->_ref_count_ = 1;
+ _data1_->self = g_object_ref (self);
+ _data1_->auto_pipeline = _g_object_ref0 (auto_pipeline);
+ result = g_timeout_add_full (G_PRIORITY_DEFAULT, (guint) (task_get_seconds (self) * 1000), __lambda1__gsource_func, block1_data_ref (_data1_), block1_data_unref);
+ block1_data_unref (_data1_);
+ return result;
+}
+
+
+double task_get_seconds (Task* self) {
+ double result;
+ g_return_val_if_fail (self != NULL, 0.0);
+ result = self->priv->_seconds;
+ return result;
+}
+
+
+GValueArray* task_get_arguments (Task* self) {
+ GValueArray* result;
+ g_return_val_if_fail (self != NULL, NULL);
+ result = self->priv->_arguments;
+ return result;
+}
+
+
+static void task_class_init (TaskClass * klass) {
+ task_parent_class = g_type_class_peek_parent (klass);
+ g_type_class_add_private (klass, sizeof (TaskPrivate));
+ G_OBJECT_CLASS (klass)->get_property = task_get_property;
+ G_OBJECT_CLASS (klass)->finalize = task_finalize;
+ g_object_class_install_property (G_OBJECT_CLASS (klass), TASK_SECONDS, g_param_spec_double ("seconds", "seconds", "seconds", -G_MAXDOUBLE, G_MAXDOUBLE, 0.0, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
+ g_object_class_install_property (G_OBJECT_CLASS (klass), TASK_ARGUMENTS, g_param_spec_boxed ("arguments", "arguments", "arguments", G_TYPE_VALUE_ARRAY, G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB | G_PARAM_READABLE));
+}
+
+
+static void task_instance_init (Task * self) {
+ self->priv = TASK_GET_PRIVATE (self);
+}
+
+
+static void task_finalize (GObject* obj) {
+ Task * self;
+ self = TASK (obj);
+ _g_value_array_free0 (self->priv->_arguments);
+ G_OBJECT_CLASS (task_parent_class)->finalize (obj);
+}
+
+
+GType task_get_type (void) {
+ static volatile gsize task_type_id__volatile = 0;
+ if (g_once_init_enter (&task_type_id__volatile)) {
+ static const GTypeInfo g_define_type_info = { sizeof (TaskClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) task_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (Task), 0, (GInstanceInitFunc) task_instance_init, NULL };
+ GType task_type_id;
+ task_type_id = g_type_register_static (G_TYPE_OBJECT, "Task", &g_define_type_info, 0);
+ g_once_init_leave (&task_type_id__volatile, task_type_id);
+ }
+ return task_type_id__volatile;
+}
+
+
+static void task_get_property (GObject * object, guint property_id, GValue * value, GParamSpec * pspec) {
+ Task * self;
+ self = TASK (object);
+ switch (property_id) {
+ case TASK_SECONDS:
+ g_value_set_double (value, task_get_seconds (self));
+ break;
+ case TASK_ARGUMENTS:
+ g_value_set_boxed (value, task_get_arguments (self));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ break;
+ }
+}
+
+
+
+
--- /dev/null
+class Task: Object {
+ double _seconds;
+ unowned Command? _command;
+ ValueArray _arguments;
+
+
+ public double seconds {
+ get {
+ return _seconds;
+ }
+ }
+
+
+ public ValueArray arguments {
+ get {
+ return _arguments;
+ }
+ }
+
+
+ public Task(double seconds, Command command) {
+ _seconds = seconds;
+ _command = command;
+ _arguments = new ValueArray(0);
+ }
+
+
+ public uint exec(AutoPipeline auto_pipeline) {
+ return Timeout.add((uint)(seconds*1000),
+ () => {
+ if(auto_pipeline.return_status == 0) {
+ int status = _command.function(auto_pipeline, this);
+ if(status != 0) {
+ auto_pipeline.return_status = status;
+ auto_pipeline.quit();
+ }
+ }
+ return false;
+ });
+ }
+}
+
--- /dev/null
+-----------------------
+ Introduction
+-----------------------
+The tts-gstreamer-tests is a test suite to test media playing features of gstreamer.
+
+
+-----------------------
+How to Run
+-----------------------
+Pre-condition:
+1. Install gstreamer-utils
+2. if you don't have testkit-lite, you can get it from https://github.com/testkit/testkit-lite
+
+Steps:
+1. prepare some media files and configure /usr/share/tests/common-multimedia-suite/tts-gstreamer-tests/env.sh --- specify in env.sh
+2. launch terminal app in weston UI and play an audio by command "paplay /usr/share/sounds/alsa/Front_Center.wav" to trigger Pulseaudio daemon
+3. testkit-lite -f /usr/share/tests/common-multimedia-suite/tts-gstreamer-tests/tests.xml --comm localhost -o ./results.xml
+
+
+
+----------------------
+Test Environment setup
+----------------------
+Some media files are needed, you can configure /usr/share/tests/common-multimedia-suite/tts-gstreamer-tests/env.sh to specify
+them; e.g. MF_TEST_8K="/usr/share/tests/common-multimedia-suite/tts-gstreamer-tests/data/PCM_16bit_Mono_8KHz_128Kbps_60sec\(1Mb\).wav"
+
+
+-----------------------
+TODO
+-----------------------
--- /dev/null
+#!/bin/bash
+# Copyright (C) 2011, Intel Corporation.
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms and conditions of the GNU General Public License,
+# version 2, as published by the Free Software Foundation.
+#
+# This program is distributed in the hope it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License along with
+# this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+# Place - Suite 330, Boston, MA 02111-1307 USA.
+#
+# Authors:
+# Zhang, Zhiqiang <zhiqiang.zhang@intel.com>
+#
+# DESCR:
+# Cleanup process like gst-launch or su - app -c "XDG_RUNTIME_DIR=/run/user/5000 && gst-auto-launch
+
+
+# try to kill the process for 3 times
+rm -rf /tmp/test_result
+COUNT=0
+while [ "$COUNT" -lt 3 ]; do
+ PID=`ps -eaf | grep -E "gst-launch|gst-auto-launch" | grep -v "grep" | awk '{print $2}'`
+ if [ -z "$PID" ]; then
+ break;
+ fi
+
+ echo "Kill $PID"
+ kill $PID
+ let "COUNT += 1"
+done
--- /dev/null
+#!/bin/sh
+#
+# Copyright (C) 2011 Intel Corporation
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+#
+# Authors:
+# Zhang, Zhiqiang <zhiqiang.zhang@intel.com>
+#
+
+
+DATA_PATH=$(cd `dirname $0`;pwd)/data
+TEST_RESULT="/tmp/test_result"
+RET=0
+
+## below media files are needed but not include in this package, prepare them before run test ##
+
+#setup a http server and put some media files on it:
+HTTP=http://your.httpserver.com/media
+
+# used in script:gstreamer_audio_playbin2_http_alaw.sh
+## stored in http server
+# wav audio: RIFF (little-endian) data, WAVE audio, ITU G.711 A-law, stereo 44100 Hz
+GT_HTTP_AUDIO_ALAW="a-LAW_8bit_Stereo_44.1KHz_120sec\(10.1MB\)_AKM.wav"
+
+# used in script:gstreamer_audio_playbin2_http_imaadpcm.sh
+## stored in http server
+# wav audio: RIFF (little-endian) data, WAVE audio, IMA ADPCM, stereo 32000 Hz
+GT_HTTP_IMAADPCM="IMAADPCM_4bit_Stereo_32KHz_256Kbps_60sec\(1.8Mb\).wav"
+
+# used in script:gstreamer_audio_playbin2_http_ulaw.sh
+## stored in http server
+# wav audio: RIFF (little-endian) data, WAVE audio, ITU G.711 mu-law, stereo 44100 Hz
+GT_HTTP_AUDIO_ULAW="u-LAW_8bit_Stereo_44.1KHz_120sec\(10MB\)_AKM.wav"
+
+# used in script:gstreamer_video_http_ogg.sh
+## stored in http server
+# ogv video: kittens_240p.ogv: Ogg data, Skeleton v4.0
+GT_HTTP_VIDEO_OGV="kittens_240p.ogv"
+
+# used in script:gstreamer_audio_playbin2_imaadpcm_4bit_stereo_32khz_256kbps.sh
+# wav audio: RIFF (little-endian) data, WAVE audio, IMA ADPCM, stereo 32000 Hz
+GT_IMAADPCM="/opt/tts-gstreamer-tests/data/IMAADPCM_4bit_Stereo_32KHz_256Kbps_60sec\(1.8Mb\).wav"
+
+# used in script:gstreamer_audio_playbin2_lpcm_16bit_stereo_44.1khz.sh
+# wav audio: RIFF (little-endian) data, WAVE audio, Microsoft PCM, 16 bit, stereo 44100 Hz
+GT_AUDIO_LPCM_16="/opt/tts-gstreamer-tests/data/LPCM_16bit_Stereo_44.1KHz_60sec\(10Mb\).wav"
+
+# used in script:gstreamer_audio_playbin2_lpcm_24bit_stereo_48khz.sh
+# wav audio: RIFF (little-endian) data, WAVE audio, Microsoft PCM, 24 bit, stereo 48000 Hz
+GT_AUDIO_LPCM_24="/opt/tts-gstreamer-tests/data/LPCM_24bit_Stereo_48KHz_60sec\(16.8Mb\).wav"
+
+# used in script:gstreamer_audio_playbin2_ogg_vorbis_16bit_mono_8khz_42kbps.sh
+# ogg audio: Ogg data, Vorbis audio, mono, 8000 Hz, ~41997 bps
+GT_OGG_MONO="/opt/tts-gstreamer-tests/data/OGG_16bit_Mono_8KHz_42Kbps_2min\(0.5MB\).ogg"
+
+# used in scripts:
+# gstreamer_audio_avidemux.sh
+# gstreamer_audio_pause_avidemux.sh
+# gstreamer_audio_play_avidemux.sh
+# gstreamer_audio_playbin2_alaw_8bit_stereo_44.1khz.sh
+# gstreamer_audio_resume_avidemux.sh
+# gstreamer_audio_resume_avidemux.sh
+# gstreamer_audio_seek_avidemux.sh
+# gstreamer_audio_stop_avidemux.sh
+# avi audio: RIFF (little-endian) data, AVI, 0 x 0, >30 fps
+GT_AUDIO_PCM_16="/opt/tts-gstreamer-tests/data/PCM_16bit_Stereo_44.1KHz_1411Kbps_60sec.avi"
+
+# used in script:gstreamer_image_jpegdec.sh
+# jpeg file: JPEG image data, EXIF standard
+GT_IMAGE_JPG="/opt/tts-gstreamer-tests/data/butterfly.jpg"
+
+# used in scripts:
+# gstreamer_audio_alsasink.sh
+# gstreamer_audio_pause_ogg.sh
+# gstreamer_audio_play_ogg.sh
+# gstreamer_audio_pulsesink.sh
+# gstreamer_audio_resume_ogg.sh
+# gstreamer_audio_seek_ogg.sh
+# gstreamer_audio_stop_ogg.sh
+# gstreamer_audio_vorbisdec.sh
+# gstreamer_video_oggdemux.sh
+# gstreamer_video_pause_oggdemux.sh
+# gstreamer_video_playbin2_ogg_theora_vorbis.sh
+# gstreamer_video_play_oggdemux.sh
+# gstreamer_video_resume_oggdemux.sh
+# gstreamer_video_seek_oggdemux.sh
+# gstreamer_video_stop_oggdemux.sh
+# gstreamer_video_theoradec.sh
+# ogg video: Ogg data, Skeleton v4.0
+GT_KITTENS="/opt/tts-gstreamer-tests/data/kittens.ogg"
+
+# used in script:gstreamer_image_pngdec.sh
+# png file: PNG image data, 640 x 320, 8-bit/color RGB, non-interlaced
+GT_IMAGE_PNG="/opt/tts-gstreamer-tests/data/timer2.png"
+
+# used in script:gstreamer_audio_playbin2_ulaw_8bit_stereo_44.1khz.sh
+# wav audio: RIFF (little-endian) data, WAVE audio, ITU G.711 mu-law, stereo 44100 Hz
+GT_AUDIO_ULAW="/opt/tts-gstreamer-tests/data/u-LAW_8bit_Stereo_44.1KHz_120sec\(10MB\)_AKM.wav"
+
+## END ##
+
+export DISPLAY=:0.0
--- /dev/null
+#!/bin/bash
+#
+# Copyright (C) 2011 Intel Corporation.
+#
+# This program 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.
+#
+# It 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 software; if not, write to the Free
+# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+# 02111-1307 USA.
+#
+# Authors:
+# Zhang Zhiqiang <zhiqiang.zhang@intel.com>
+#
+# DESCR:
+# Check gstreamer a-law encode status
+#
+# TIMEOUT: 200
+
+
+. $(cd `dirname $0`;pwd)/env.sh
+if [ $UID = 0 ];then
+ su - app -c "XDG_RUNTIME_DIR=/run/user/5000 && gst-launch-1.0 autoaudiosrc num-buffers=100 ! audioconvert ! alawenc ! wavenc ! filesink location=/tmp/mulawenc.wav &> $TEST_RESULT &"
+else
+ gst-launch-1.0 autoaudiosrc num-buffers=100 ! audioconvert ! alawenc ! wavenc ! filesink location=/tmp/mulawenc.wav &> $TEST_RESULT &
+fi
+
+sleep 5
+
+a=$(cat $TEST_RESULT | grep "PLAYING")
+
+
+if [ "$a" = "Setting pipeline to PLAYING ..." ]; then
+ echo "gstreamer alawenc pass"
+else
+ echo "gstreamer alawenc fail"
+ cat $TEST_RESULT
+ RET=1
+fi
+
+. $(cd `dirname $0`;pwd)/cleanup.sh
+exit $RET
+
+
--- /dev/null
+#!/bin/bash
+#
+# Copyright (C) 2008-2011 Intel Corporation.
+#
+# This program 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.
+#
+# It 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 software; if not, write to the Free
+# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+# 02111-1307 USA.
+#
+# Authors:
+# Jessica JI <jessica.ji@intel.com>
+# Zhang Zhiqiang <zhiqiang.zhang@intel.com>
+#
+# DESCR:
+# Check gstreamer and autoaudiosink integration status
+#
+# TIMEOUT : 200
+
+
+. $(cd `dirname $0`;pwd)/env.sh
+
+su - app -c "XDG_RUNTIME_DIR=/run/user/5000 && gst-launch-1.0 filesrc location="${GT_KITTENS}" num-buffers=30 ! oggdemux ! vorbisdec ! audioconvert ! audioresample ! autoaudiosink &> $TEST_RESULT &"
+
+sleep 5
+
+a=$(cat $TEST_RESULT | grep "PLAYING")
+
+
+if [ "$a" = "Setting pipeline to PLAYING ..." ]; then
+ echo "gstreamer alsasink pass"
+else
+ echo "gstreamer alsasink fail"
+ cat $TEST_RESULT
+ RET=1
+fi
+
+. $(cd `dirname $0`;pwd)/cleanup.sh
+exit $RET
+
+
--- /dev/null
+#!/bin/bash
+#
+# Copyright (C) 2008-2011 Intel Corporation.
+#
+# This program 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.
+#
+# It 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 software; if not, write to the Free
+# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+# 02111-1307 USA.
+#
+# Authors:
+# Jessica JI <jessica.ji@intel.com>
+# Zhang Zhiqiang <zhiqiang.zhang@intel.com>
+#
+# DESCR:
+# Check gstreamer avidemux work status
+#
+# TIMEOUT: 200
+
+
+. $(cd `dirname $0`;pwd)/env.sh
+
+su - app -c "XDG_RUNTIME_DIR=/run/user/5000 && gst-launch-1.0 filesrc location=${GT_AUDIO_PCM_16} num-buffers=30 ! avidemux name=demux demux.audio_0 ! decodebin ! audioconvert ! audioresample ! autoaudiosink &> $TEST_RESULT &"
+
+sleep 5
+
+a=$(cat $TEST_RESULT | grep "PLAYING")
+
+
+if [ "$a" = "Setting pipeline to PLAYING ..." ]; then
+ echo "gstreamer avidemux pass"
+else
+ echo "gstreamer avidemux fail"
+ cat $TEST_RESULT
+ RET=1
+fi
+
+. $(cd `dirname $0`;pwd)/cleanup.sh
+exit $RET
+
+
--- /dev/null
+#!/bin/bash
+#
+# Copyright (C) 2011 Intel Corporation.
+#
+# This program 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.
+#
+# It 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 software; if not, write to the Free
+# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+# 02111-1307 USA.
+#
+# Authors:
+# Zhang Zhiqiang <zhiqiang.zhang@intel.com>
+#
+# DESCR:
+# Check gstreamer u-law encode status
+#
+# TIMEOUT: 200
+
+
+. $(cd `dirname $0`;pwd)/env.sh
+
+su - app -c "XDG_RUNTIME_DIR=/run/user/5000 && gst-launch-1.0 autoaudiosrc num-buffers=100 ! audioconvert ! mulawenc ! wavenc ! filesink location=/tmp/mulawenc.wav &> $TEST_RESULT &"
+
+sleep 5
+
+a=$(cat $TEST_RESULT | grep "PLAYING")
+
+
+if [ "$a" = "Setting pipeline to PLAYING ..." ]; then
+ echo "gstreamer alawenc pass"
+else
+ echo "gstreamer alawenc fail"
+ cat $TEST_RESULT
+ RET=1
+fi
+
+. $(cd `dirname $0`;pwd)/cleanup.sh
+exit $RET
+
--- /dev/null
+#!/bin/bash
+#
+# Copyright (C) 2011 Intel Corporation.
+#
+# This program 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.
+#
+# It 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 software; if not, write to the Free
+# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+# 02111-1307 USA.
+#
+# Authors:
+# Zhang Zhiqiang <zhiqiang.zhang@intel.com>
+#
+# DESCR:
+# Check pause status for audio a-LAW format.
+#
+# TIMEOUT: 160
+set -x
+
+
+. $(cd `dirname $0`;pwd)/env.sh
+
+su - app -c "XDG_RUNTIME_DIR=/run/user/5000 && gst-auto-launch filesrc location=$DATA_PATH/a-LAW_8bit_Stereo_44.1KHz_120sec\(10.1MB\)_AKM.wav num-buffers=200 ! wavparse ! alawdec ! audioconvert ! autoaudiosink 0:play 5:pause 10:play &> $TEST_RESULT &"
+
+sleep 15
+
+a=$(cat $TEST_RESULT | grep "PAUSED")
+
+
+if [ "$a" = "Passing to PAUSED" ]; then
+ echo "gstreamer pause pass"
+else
+ echo "gstreamer pause fail"
+ cat $TEST_RESULT
+ RET=1
+fi
+
+. $(cd `dirname $0`;pwd)/cleanup.sh
+exit $RET
+
--- /dev/null
+#!/bin/bash
+#
+# Copyright (C) 2008-2011 Intel Corporation.
+#
+# This program 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.
+#
+# It 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 software; if not, write to the Free
+# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+# 02111-1307 USA.
+#
+# Authors:
+# Jessica JI <jessica.ji@intel.com>
+# Zhang Zhiqiang <zhiqiang.zhang@intel.com>
+#
+# DESCR:
+# Check gstreamer avidemux pause status
+#
+# TIMEOUT: 200
+. $(cd `dirname $0`;pwd)/env.sh
+
+su - app -c "XDG_RUNTIME_DIR=/run/user/5000 && gst-auto-launch filesrc location=${GT_AUDIO_PCM_16} num-buffers=50 ! avidemux name=demux demux.audio_0 ! decodebin ! audioconvert ! audioresample ! autoaudiosink 0:play 0.5:pause 1:play &> $TEST_RESULT &"
+
+sleep 10
+
+a=$(cat $TEST_RESULT | grep "PAUSED")
+
+
+if [ "$a" = "Passing to PAUSED" ]; then
+ echo "gstreamer avidemux pause pass"
+else
+ echo "gstreamer avidemux pause fail"
+ cat $TEST_RESULT
+ RET=1
+fi
+
+. $(cd `dirname $0`;pwd)/cleanup.sh
+exit $RET
+
+
--- /dev/null
+#!/bin/bash
+#
+# Copyright (C) 2011 Intel Corporation.
+#
+# This program 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.
+#
+# It 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 software; if not, write to the Free
+# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+# 02111-1307 USA.
+#
+# Authors:
+# Zhang Zhiqiang <zhiqiang.zhang@intel.com>
+#
+# DESCR:
+# Check pause status for audio Linear PCM format.
+#
+# TIMEOUT: 160
+
+
+. $(cd `dirname $0`;pwd)/env.sh
+
+su - app -c "XDG_RUNTIME_DIR=/run/user/5000 && gst-auto-launch filesrc location=$DATA_PATH/LPCM_16bit_Stereo_44.1KHz_60sec\(10Mb\).wav num-buffers=200 ! wavparse ! audioconvert ! autoaudiosink 0:play 2:pause 5:play &> $TEST_RESULT &"
+
+sleep 10
+
+a=$(cat $TEST_RESULT | grep "PAUSED")
+
+
+if [ "$a" = "Passing to PAUSED" ]; then
+ echo "gstreamer pause pass"
+else
+ echo "gstreamer pause fail"
+ cat $TEST_RESULT
+ RET=1
+fi
+
+. $(cd `dirname $0`;pwd)/cleanup.sh
+exit $RET
+
--- /dev/null
+#!/bin/bash
+#
+# Copyright (C) 2008 Intel Corporation.
+#
+# This program 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.
+#
+# It 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 software; if not, write to the Free
+# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+# 02111-1307 USA.
+#
+# Authors:
+# Jessica JI <jessica.ji@intel.com>
+# Zhang Zhiqiang <zhiqiang.zhang@intel.com>
+# Modification:
+# Li Cathy <cathy.li@intel.com> Date: 2012-03-07
+# Refine the pipeline
+##
+# DESCR:
+# Check gstreamer play status for ogg codec
+#
+# TIMEOUT: 200
+
+
+. $(cd `dirname $0`;pwd)/env.sh
+
+su - app -c "XDG_RUNTIME_DIR=/run/user/5000 && gst-auto-launch filesrc location=${GT_KITTENS} num-buffers=50 ! oggdemux ! vorbisdec ! audioconvert ! audioresample ! autoaudiosink 0:play 5:pause 10:play &> $TEST_RESULT &"
+
+sleep 15
+
+a=$(cat $TEST_RESULT | grep "PAUSED")
+
+
+if [ "$a" = "Passing to PAUSED" ]; then
+ echo "gstreamer pause pass"
+else
+ echo "gstreamer pause fail"
+ cat $TEST_RESULT
+ RET=1
+fi
+
+. $(cd `dirname $0`;pwd)/cleanup.sh
+exit $RET
+
+
--- /dev/null
+#!/bin/bash
+#
+# Copyright (C) 2011 Intel Corporation.
+#
+# This program 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.
+#
+# It 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 software; if not, write to the Free
+# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+# 02111-1307 USA.
+#
+# Authors:
+# Zhang Zhiqiang <zhiqiang.zhang@intel.com>
+#
+# DESCR:
+# Check pause status for audio u-LAW format.
+#
+# TIMEOUT: 160
+
+
+. $(cd `dirname $0`;pwd)/env.sh
+
+su - app -c "XDG_RUNTIME_DIR=/run/user/5000 && gst-auto-launch filesrc location=$DATA_PATH/u-LAW_8bit_Stereo_44.1KHz_120sec\(10MB\)_AKM.wav num-buffers=200 ! wavparse ! mulawdec ! audioconvert ! autoaudiosink 0:play 5:pause 10:play &> $TEST_RESULT &"
+
+sleep 15
+
+a=$(cat $TEST_RESULT | grep "PAUSED")
+
+
+if [ "$a" = "Passing to PAUSED" ]; then
+ echo "gstreamer pause pass"
+else
+ echo "gstreamer pause fail"
+ cat $TEST_RESULT
+ RET=1
+fi
+
+. $(cd `dirname $0`;pwd)/cleanup.sh
+exit $RET
+
--- /dev/null
+#!/bin/bash
+#
+# Copyright (C) 2011 Intel Corporation.
+#
+# This program 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.
+#
+# It 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 software; if not, write to the Free
+# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+# 02111-1307 USA.
+#
+# Authors:
+# Zhang Zhiqiang <zhiqiang.zhang@intel.com>
+#
+# DESCR:
+# Check play status for audio a-LAW format.
+#
+# TIMEOUT: 160
+
+
+. $(cd `dirname $0`;pwd)/env.sh
+
+su - app -c "XDG_RUNTIME_DIR=/run/user/5000 && gst-auto-launch filesrc location=$DATA_PATH/a-LAW_8bit_Stereo_44.1KHz_120sec\(10.1MB\)_AKM.wav num-buffers=50 ! wavparse ! alawdec ! audioconvert ! autoaudiosink 2:play &> $TEST_RESULT &"
+
+sleep 5
+
+a=$(cat $TEST_RESULT | grep "PLAYING")
+echo $a
+
+
+if [ "$a" = "Passing to PLAYING" ]; then
+ echo "gstreamer play pass"
+else
+ echo "gstreamer play fail"
+ cat $TEST_RESULT
+ RET=1
+fi
+
+. $(cd `dirname $0`;pwd)/cleanup.sh
+exit $RET
+
--- /dev/null
+#!/bin/bash
+#
+# Copyright (C) 2008-2011 Intel Corporation.
+#
+# This program 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.
+#
+# It 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 software; if not, write to the Free
+# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+# 02111-1307 USA.
+#
+# Authors:
+# Jessica JI <jessica.ji@intel.com>
+# Zhang Zhiqiang <zhiqiang.zhang@intel.com>
+#
+# DESCR:
+# Check gstreamer avidemux play status
+#
+# TIMEOUT: 200
+
+
+. $(cd `dirname $0`;pwd)/env.sh
+
+su - app -c "XDG_RUNTIME_DIR=/run/user/5000 && gst-auto-launch filesrc location=${GT_AUDIO_PCM_16} num-buffers=30 ! avidemux name=demux demux.audio_00 ! decodebin ! audioconvert ! audioresample ! autoaudiosink 0:play &> $TEST_RESULT &"
+
+sleep 5
+
+a=$(cat $TEST_RESULT | grep "PLAYING")
+
+if [ "$a" = "Passing to PLAYING" ]; then
+ echo "gstreamer avidemux play pass"
+else
+ echo "gstreamer avidemux play fail"
+ cat $TEST_RESULT
+ RET=1
+fi
+
+. $(cd `dirname $0`;pwd)/cleanup.sh
+exit $RET
+
+
--- /dev/null
+#!/bin/bash
+#
+# Copyright (C) 2011 Intel Corporation.
+#
+# This program 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.
+#
+# It 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 software; if not, write to the Free
+# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+# 02111-1307 USA.
+#
+# Authors:
+# Zhang Zhiqiang <zhiqiang.zhang@intel.com>
+#
+# DESCR:
+# Check play status for audio Linear PCM format.
+#
+# TIMEOUT: 160
+
+
+. $(cd `dirname $0`;pwd)/env.sh
+
+su - app -c "XDG_RUNTIME_DIR=/run/user/5000 && gst-auto-launch filesrc location=$DATA_PATH/LPCM_16bit_Stereo_44.1KHz_60sec\(10Mb\).wav num-buffers=50 ! wavparse ! audioconvert ! autoaudiosink 0:play &> $TEST_RESULT &"
+
+sleep 5
+
+a=$(cat $TEST_RESULT | grep "PLAYING")
+
+
+if [ "$a" = "Passing to PLAYING" ]; then
+ echo "gstreamer play pass"
+else
+ echo "gstreamer play fail"
+ cat $TEST_RESULT
+ RET=1
+fi
+
+. $(cd `dirname $0`;pwd)/cleanup.sh
+exit $RET
+
--- /dev/null
+#!/bin/bash
+#
+# Copyright (C) 2008 Intel Corporation.
+#
+# This program 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.
+#
+# It 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 software; if not, write to the Free
+# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+# 02111-1307 USA.
+#
+# Authors:
+# Jessica JI <jessica.ji@intel.com>
+# Zhang Zhiqiang <zhiqiang.zhang@intel.com>
+#
+# DESCR:
+# Check gstreamer play status for ogg codec
+#
+# TIMEOUT: 200
+
+
+. $(cd `dirname $0`;pwd)/env.sh
+
+su - app -c "XDG_RUNTIME_DIR=/run/user/5000 && gst-auto-launch filesrc location=${GT_KITTENS} num-buffers=30 ! oggdemux ! vorbisdec ! audioconvert ! autoaudiosink 0:play &> $TEST_RESULT &"
+
+sleep 5
+
+a=$(cat $TEST_RESULT | grep "PLAYING")
+
+
+if [ "$a" = "Passing to PLAYING" ]; then
+ echo "gstreamer play pass"
+else
+ echo "gstreamer play fail"
+ cat $TEST_RESULT
+ RET=1
+fi
+
+. $(cd `dirname $0`;pwd)/cleanup.sh
+exit $RET
+
+
--- /dev/null
+#!/bin/bash
+#
+# Copyright (C) 2011 Intel Corporation.
+#
+# This program 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.
+#
+# It 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 software; if not, write to the Free
+# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+# 02111-1307 USA.
+#
+# Authors:
+# Zhang Zhiqiang <zhiqiang.zhang@intel.com>
+#
+# DESCR:
+# Check play status for audio u-LAW format.
+#
+# TIMEOUT: 160
+
+
+. $(cd `dirname $0`;pwd)/env.sh
+
+su - app -c "XDG_RUNTIME_DIR=/run/user/5000 && gst-auto-launch filesrc location=$DATA_PATH/u-LAW_8bit_Stereo_44.1KHz_120sec\(10MB\)_AKM.wav num-buffers=50 ! wavparse ! mulawdec ! audioconvert ! autoaudiosink 0:play &> $TEST_RESULT &"
+
+sleep 10
+
+a=$(cat $TEST_RESULT | grep "PLAYING")
+
+
+if [ "$a" = "Passing to PLAYING" ]; then
+ echo "gstreamer play pass"
+else
+ echo "gstreamer play fail"
+ cat $TEST_RESULT
+ ERT=1
+fi
+
+. $(cd `dirname $0`;pwd)/cleanup.sh
+exit $RET
+
--- /dev/null
+#!/bin/bash
+#
+# Copyright (C) 2011, Intel Corporation
+#
+# This program 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 of the License,
+# or (at your option) any later version.
+#
+# This program 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
+# General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+# USA.
+#
+# Authors:
+# Zhang Zhiqiang <zhiqiang.zhang@intel.com>
+#
+# DESCR:
+# Check local audio playback of a-LAW format by gst-launch-1.0 and
+# playbin2 with uri only.
+#
+# TIMEOUT: 160
+
+
+. $(cd `dirname $0`;pwd)/env.sh
+
+
+$(cd `dirname $0`;pwd)/playbin2.sh "file://${GT_AUDIO_PCM_16}"
+
+
--- /dev/null
+#!/bin/bash
+#
+# Copyright (C) 2011, Intel Corporation
+#
+# This program 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 of the License,
+# or (at your option) any later version.
+#
+# This program 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
+# General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+# USA.
+#
+# Authors:
+# Zhang Zhiqiang <zhiqiang.zhang@intel.com>
+#
+# DESCR:
+# Check streamimg audio through http of a-LAW format
+# by gst-launch-1.0 and playbin2 with uri only.
+#
+# TIMEOUT: 300
+
+
+. $(cd `dirname $0`;pwd)/env.sh
+
+
+$(cd `dirname $0`;pwd)/playbin2.sh "$HTTP/${GT_HTTP_AUDIO_ALAW}" 15
+
+
--- /dev/null
+#!/bin/bash
+#
+# Copyright (C) 2011, Intel Corporation
+#
+# This program 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 of the License,
+# or (at your option) any later version.
+#
+# This program 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
+# General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+# USA.
+#
+# Authors:
+# Zhang Zhiqiang <zhiqiang.zhang@intel.com>
+#
+# DESCR:
+# Check streamimg audio through http of IMA ADPCM format
+# by gst-launch-1.0 and playbin2 with uri only.
+#
+# TIMEOUT: 300
+
+
+. $(cd `dirname $0`;pwd)/env.sh
+
+
+$(cd `dirname $0`;pwd)/playbin2.sh "$HTTP/${GT_HTTP_IMAADPCM}" 15
+
+
--- /dev/null
+#!/bin/bash
+#
+# Copyright (C) 2011, Intel Corporation
+#
+# This program 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 of the License,
+# or (at your option) any later version.
+#
+# This program 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
+# General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+# USA.
+#
+# Authors:
+# Zhang Zhiqiang <zhiqiang.zhang@intel.com>
+#
+# DESCR:
+# Check streamimg audio through http of Linear PCM format
+# by gst-launch-1.0 and playbin2 with uri only.
+#
+# TIMEOUT: 300
+
+
+. $(cd `dirname $0`;pwd)/env.sh
+
+
+$(cd `dirname $0`;pwd)/playbin2.sh "$HTTP/Contents/Audio/Linear_PCM/LPCM_16bit_Stereo_44.1KHz_60sec(10Mb).wav" 15
+
+
--- /dev/null
+#!/bin/bash
+#
+# Copyright (C) 2011, Intel Corporation
+#
+# This program 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 of the License,
+# or (at your option) any later version.
+#
+# This program 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
+# General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+# USA.
+#
+# Authors:
+# Zhang Zhiqiang <zhiqiang.zhang@intel.com>
+#
+# DESCR:
+# Check streamimg audio through http of u-LAW format
+# by gst-launch-1.0 and playbin2 with uri only.
+#
+# TIMEOUT: 300
+
+
+. $(cd `dirname $0`;pwd)/env.sh
+
+
+$(cd `dirname $0`;pwd)/playbin2.sh "$HTTP/${GT_HTTP_AUDIO_ULAW}" 15
+
+
--- /dev/null
+#!/bin/bash
+#
+# Copyright (C) 2011, Intel Corporation
+#
+# This program 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 of the License,
+# or (at your option) any later version.
+#
+# This program 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
+# General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+# USA.
+#
+# Authors:
+# Zhang Zhiqiang <zhiqiang.zhang@intel.com>
+#
+# DESCR:
+# Check local audio playback of IMA ADPCM format by gst-launch-1.0 and
+# playbin2 with uri only.
+#
+# TIMEOUT: 160
+
+
+. $(cd `dirname $0`;pwd)/env.sh
+
+
+$(cd `dirname $0`;pwd)/playbin2.sh "file://${GT_IMAADPCM}"
+
+
--- /dev/null
+#!/bin/bash
+#
+# Copyright (C) 2011, Intel Corporation
+#
+# This program 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 of the License,
+# or (at your option) any later version.
+#
+# This program 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
+# General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+# USA.
+#
+# Authors:
+# Zhang Zhiqiang <zhiqiang.zhang@intel.com>
+#
+# DESCR:
+# Check local audio playback of Linear PCM format by gst-launch-1.0 and
+# playbin2 with uri only.
+#
+# TIMEOUT: 90
+
+
+. $(cd `dirname $0`;pwd)/env.sh
+
+
+$(cd `dirname $0`;pwd)/playbin2.sh "file://${GT_AUDIO_LPCM_16}"
+
+
--- /dev/null
+#!/bin/bash
+#
+# Copyright (C) 2011, Intel Corporation
+#
+# This program 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 of the License,
+# or (at your option) any later version.
+#
+# This program 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
+# General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+# USA.
+#
+# Authors:
+# Zhang Zhiqiang <zhiqiang.zhang@intel.com>
+#
+# DESCR:
+# Check local audio playback of Linear PCM format by gst-launch-1.0 and
+# playbin2 with uri only.
+#
+# TIMEOUT: 90
+
+
+. $(cd `dirname $0`;pwd)/env.sh
+
+
+$(cd `dirname $0`;pwd)/playbin2.sh "file://${GT_AUDIO_LPCM_24}"
+
+
--- /dev/null
+#!/bin/bash
+#
+# Copyright (C) 2011, Intel Corporation
+#
+# This program 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 of the License,
+# or (at your option) any later version.
+#
+# This program 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
+# General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+# USA.
+#
+# Authors:
+# Zhang Zhiqiang <zhiqiang.zhang@intel.com>
+#
+# DESCR:
+# Check local audio playback of OGG-Vorbis format by gst-launch-1.0 and
+# playbin2 with uri only.
+#
+# TIMEOUT: 160
+
+
+. $(cd `dirname $0`;pwd)/env.sh
+
+
+$(cd `dirname $0`;pwd)/playbin2.sh "file://${GT_OGG_MONO}"
+
+
--- /dev/null
+#!/bin/bash
+#
+# Copyright (C) 2011, Intel Corporation
+#
+# This program 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 of the License,
+# or (at your option) any later version.
+#
+# This program 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
+# General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+# USA.
+#
+# Authors:
+# Zhang Zhiqiang <zhiqiang.zhang@intel.com>
+#
+# DESCR:
+# Check local audio playback of u-LAW format by gst-launch-1.0 and
+# playbin2 with uri only.
+#
+# TIMEOUT: 160
+
+
+. $(cd `dirname $0`;pwd)/env.sh
+
+
+$(cd `dirname $0`;pwd)/playbin2.sh "file://${GT_AUDIO_ULAW}"
+
+
--- /dev/null
+#!/bin/bash
+#
+# Copyright (C) 2008 Intel Corporation.
+#
+# This program 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.
+#
+# It 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 software; if not, write to the Free
+# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+# 02111-1307 USA.
+#
+# Authors:
+# Jessica JI <jessica.ji@intel.com>
+# Zhang Zhiqiang <zhiqiang.zhang@intel.com>
+#
+# DESCR:
+# Check pulsesink plugins work status
+#
+# TIMEOUT: 200
+
+
+. $(cd `dirname $0`;pwd)/env.sh
+if [ $UID = 0 ];then
+ su - app -c "XDG_RUNTIME_DIR=/run/user/5000 && gst-launch-1.0 -v filesrc location=${GT_KITTENS} num-buffers=30 ! oggdemux ! vorbisdec ! audioconvert ! audioresample ! volume volume=0.9 ! pulsesink &> $TEST_RESULT &"
+else
+ gst-launch-1.0 -v filesrc location=${GT_KITTENS} num-buffers=30 ! oggdemux ! vorbisdec ! audioconvert ! audioresample ! volume volume=0.9 ! pulsesink &> $TEST_RESULT &
+fi
+sleep 10
+
+a=$(cat $TEST_RESULT | grep "PLAYING")
+
+
+if [ "$a" = "Setting pipeline to PLAYING ..." ]; then
+ echo "gstreamer pulsesink pass"
+else
+ echo "gstreamer pulsesink fail"
+ cat $TEST_RESULT
+ RET=1
+fi
+
+. $(cd `dirname $0`;pwd)/cleanup.sh
+exit $RET
+
+
--- /dev/null
+#!/bin/bash
+#
+# Copyright (C) 2011 Intel Corporation.
+#
+# This program 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.
+#
+# It 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 software; if not, write to the Free
+# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+# 02111-1307 USA.
+#
+# Authors:
+# Zhang Zhiqiang <zhiqiang.zhang@intel.com>
+#
+# DESCR:
+# Check gstreamer pulsesrc status, which captures audio
+# from a PulseAudio server
+#
+# TIMEOUT: 200
+
+
+. $(cd `dirname $0`;pwd)/env.sh
+if [ $UID = 0 ];then
+ su - app -c "XDG_RUNTIME_DIR=/run/user/5000 && gst-launch-1.0 pulsesrc num-buffers=100 ! audioconvert ! wavenc ! filesink location=/tmp/pulsesrc.wav > $TEST_RESULT"
+else
+ gst-launch-1.0 pulsesrc num-buffers=100 ! audioconvert ! wavenc ! filesink location=/tmp/pulsesrc.wav > $TEST_RESULT
+fi
+
+sleep 10
+
+a=$(cat $TEST_RESULT | grep "PLAYING")
+
+
+if [ "$a" = "Setting pipeline to PLAYING ..." ]; then
+ echo "gstreamer pulsesrc pass"
+else
+ echo "gstreamer pulsesrc fail"
+ cat $TEST_RESULT
+ RET=1
+fi
+
+. $(cd `dirname $0`;pwd)/cleanup.sh
+exit $RET
+
--- /dev/null
+#!/bin/bash
+#
+# Copyright (C) 2011 Intel Corporation.
+#
+# This program 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.
+#
+# It 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 software; if not, write to the Free
+# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+# 02111-1307 USA.
+#
+# Authors:
+# Zhang Zhiqiang <zhiqiang.zhang@intel.com>
+#
+# DESCR:
+# Check resume status for audio a-LAW format.
+#
+# TIMEOUT: 160
+
+
+. $(cd `dirname $0`;pwd)/env.sh
+
+su - app -c "XDG_RUNTIME_DIR=/run/user/5000 && gst-auto-launch filesrc location=$DATA_PATH/a-LAW_8bit_Stereo_44.1KHz_120sec\(10.1MB\)_AKM.wav num-buffers=300 ! wavparse ! alawdec ! audioconvert ! autoaudiosink 0:play 5:stop 6:seek:10 &> $TEST_RESULT &"
+
+sleep 15
+
+a=$(cat $TEST_RESULT | grep "READY")
+
+
+if [ "$a" = "Passing to READY" ]; then
+ echo "gstreamer resume pass"
+else
+ echo "gstreamer resume fail"
+ cat $TEST_RESULT
+ RET=1
+fi
+
+. $(cd `dirname $0`;pwd)/cleanup.sh
+exit $RET
+
--- /dev/null
+#!/bin/bash
+#
+# Copyright (C) 2008-2011 Intel Corporation.
+#
+# This program 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.
+#
+# It 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 software; if not, write to the Free
+# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+# 02111-1307 USA.
+#
+# Authors:
+# Jessica JI <jessica.ji@intel.com>
+# Zhang Zhiqiang <zhiqiang.zhang@intel.com>
+#
+# DESCR:
+# Check gstreamer avidemux resume status
+#
+# TIMEOUT: 200
+
+
+. $(cd `dirname $0`;pwd)/env.sh
+if [ $UID = 0 ];then
+ su - app -c "XDG_RUNTIME_DIR=/run/user/5000 && gst-auto-launch filesrc location=${GT_AUDIO_PCM_16} num-buffers=60 ! avidemux name=demux demux.audio_0 ! decodebin ! audioconvert ! audioresample ! autoaudiosink 0:play 0.5:stop 1:seek:1.5 &> $TEST_RESULT &"
+else
+ gst-auto-launch filesrc location=${GT_AUDIO_PCM_16} num-buffers=60 ! avidemux name=demux demux.audio_0 ! decodebin ! audioconvert ! audioresample ! autoaudiosink 0:play 0.5:stop 1:seek:1.5 &> $TEST_RESULT &
+fi
+
+sleep 5
+
+a=$(cat $TEST_RESULT | grep "READY")
+
+
+if [ "$a" = "Passing to READY" ]; then
+ echo "gstreamer avidemux resume pass"
+else
+ echo "gstreamer avidemux resume fail"
+ cat $TEST_RESULT
+ RET=1
+fi
+
+. $(cd `dirname $0`;pwd)/cleanup.sh
+exit $RET
+
+
--- /dev/null
+#!/bin/bash
+#
+# Copyright (C) 2011 Intel Corporation.
+#
+# This program 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.
+#
+# It 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 software; if not, write to the Free
+# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+# 02111-1307 USA.
+#
+# Authors:
+# Zhang Zhiqiang <zhiqiang.zhang@intel.com>
+#
+# DESCR:
+# Check resume status for audio Linear PCM format.
+#
+# TIMEOUT: 160
+
+
+. $(cd `dirname $0`;pwd)/env.sh
+
+su - app -c "XDG_RUNTIME_DIR=/run/user/5000 && gst-auto-launch filesrc location=$DATA_PATH/LPCM_16bit_Stereo_44.1KHz_60sec\(10Mb\).wav num-buffers=300 ! wavparse ! audioconvert ! autoaudiosink 0:play 5:stop 6:seek:10 &> $TEST_RESULT &"
+
+sleep 15
+
+a=$(cat $TEST_RESULT | grep "READY")
+
+
+if [ "$a" = "Passing to READY" ]; then
+ echo "gstreamer resume pass"
+else
+ echo "gstreamer resume fail"
+ cat $TEST_RESULT
+ RET=1
+fi
+
+. $(cd `dirname $0`;pwd)/cleanup.sh
+exit $RET
+
--- /dev/null
+#!/bin/bash
+#
+# Copyright (C) 2008 Intel Corporation.
+#
+# This program 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.
+#
+# It 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 software; if not, write to the Free
+# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+# 02111-1307 USA.
+#
+# Authors:
+# Jessica JI <jessica.ji@intel.com>
+# Zhang Zhiqiang <zhiqiang.zhang@intel.com>
+#
+# DESCR:
+# Check gstreamer resume status for ogg codec
+#
+# TIMEOUT: 200
+
+
+. $(cd `dirname $0`;pwd)/env.sh
+
+su - app -c "XDG_RUNTIME_DIR=/run/user/5000 && gst-auto-launch filesrc location=${GT_KITTENS} ! oggdemux ! vorbisdec ! audioconvert ! autoaudiosink 0:play 5:stop 6:seek:10 &> $TEST_RESULT &"
+
+sleep 15
+
+a=$(cat $TEST_RESULT | grep "READY")
+
+
+if [ "$a" = "Passing to READY" ]; then
+ echo "gstreamer resume pass"
+else
+ echo "gstreamer resume fail"
+ cat $TEST_RESULT
+ RET=1
+fi
+
+. $(cd `dirname $0`;pwd)/cleanup.sh
+exit $RET
+
--- /dev/null
+#!/bin/bash
+#
+# Copyright (C) 2011 Intel Corporation.
+#
+# This program 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.
+#
+# It 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 software; if not, write to the Free
+# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+# 02111-1307 USA.
+#
+# Authors:
+# Zhang Zhiqiang <zhiqiang.zhang@intel.com>
+#
+# DESCR:
+# Check resume status for audio u-LAW format.
+#
+# TIMEOUT: 160
+
+
+. $(cd `dirname $0`;pwd)/env.sh
+
+su - app -c "XDG_RUNTIME_DIR=/run/user/5000 && gst-auto-launch filesrc location=$DATA_PATH/u-LAW_8bit_Stereo_44.1KHz_120sec\(10MB\)_AKM.wav num-buffers=300 ! wavparse ! mulawdec ! audioconvert ! autoaudiosink 0:play 5:stop 6:seek:10 &> $TEST_RESULT &"
+
+sleep 15
+
+a=$(cat $TEST_RESULT | grep "READY")
+
+
+if [ "$a" = "Passing to READY" ]; then
+ echo "gstreamer resume pass"
+else
+ echo "gstreamer resume fail"
+ cat $TEST_RESULT
+ RET=1
+fi
+
+. $(cd `dirname $0`;pwd)/cleanup.sh
+exit $RET
+
--- /dev/null
+#!/bin/bash
+#
+# Copyright (C) 2008 Intel Corporation.
+#
+# This program 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.
+#
+# It 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 software; if not, write to the Free
+# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+# 02111-1307 USA.
+#
+# Authors:
+# Zhang Zhiqiang <zhiqiang.zhang@intel.com>
+#
+# DESCR:
+# Check seek status for audio a-LAW format.
+#
+# TIMEOUT: 160
+
+
+. $(cd `dirname $0`;pwd)/env.sh
+
+su - app -c "XDG_RUNTIME_DIR=/run/user/5000 && gst-auto-launch filesrc location=$DATA_PATH/a-LAW_8bit_Stereo_44.1KHz_120sec\(10.1MB\)_AKM.wav num-buffers=50 ! wavparse ! alawdec ! audioconvert ! autoaudiosink 0:play 1:pause 2:seek:10 12:play &> $TEST_RESULT &"
+
+sleep 30
+
+a=$(cat $TEST_RESULT | grep "Seeking")
+
+
+if [ "$a" = "Seeking to second 10.000000" ]; then
+ echo "gstreamer seek pass"
+else
+ echo "gstreamer seek fail"
+ cat $TEST_RESULT
+ RET=1
+fi
+
+. $(cd `dirname $0`;pwd)/cleanup.sh
+exit $RET
+
--- /dev/null
+#!/bin/bash
+#
+# Copyright (C) 2008 Intel Corporation.
+#
+# This program 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.
+#
+# It 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 software; if not, write to the Free
+# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+# 02111-1307 USA.
+#
+# Authors:
+# Jessica JI <jessica.ji@intel.com>
+# Zhang Zhiqiang <zhiqiang.zhang@intel.com>
+#
+# DESCR:
+# Check gstreamer avidemux seek status
+#
+# TIMEOUT: 200
+
+
+. $(cd `dirname $0`;pwd)/env.sh
+
+su - app -c "XDG_RUNTIME_DIR=/run/user/5000 && gst-auto-launch filesrc location=${GT_AUDIO_PCM_16} num-buffers=60 ! avidemux name=demux demux.audio_0 ! decodebin ! audioconvert ! audioresample ! autoaudiosink 0:play 0.5:seek:1 2:play &> $TEST_RESULT &"
+
+sleep 10
+
+a=$(cat $TEST_RESULT | grep "Seeking")
+
+
+if [ "$a" = "Seeking to second 1.000000" ]; then
+ echo "gstreamer avidemux seek pass"
+else
+ echo "gstreamer avidemux seek fail"
+ cat $TEST_RESULT
+ RET=1
+fi
+
+. $(cd `dirname $0`;pwd)/cleanup.sh
+exit $RET
+
+
--- /dev/null
+#!/bin/bash
+#
+# Copyright (C) 2008 Intel Corporation.
+#
+# This program 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.
+#
+# It 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 software; if not, write to the Free
+# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+# 02111-1307 USA.
+#
+# Authors:
+# Zhang Zhiqiang <zhiqiang.zhang@intel.com>
+#
+# DESCR:
+# Check seek status for audio Linear PCM format.
+#
+# TIMEOUT: 160
+
+
+. $(cd `dirname $0`;pwd)/env.sh
+
+su - app -c "XDG_RUNTIME_DIR=/run/user/5000 && gst-auto-launch filesrc location=$DATA_PATH/LPCM_16bit_Stereo_44.1KHz_60sec\(10Mb\).wav num-buffers=50 ! wavparse ! audioconvert ! autoaudiosink 0:play 1:pause 2:seek:10 12:play &> $TEST_RESULT &"
+
+sleep 15
+
+a=$(cat $TEST_RESULT | grep "Seeking")
+
+
+if [ "$a" = "Seeking to second 10.000000" ]; then
+ echo "gstreamer seek pass"
+else
+ echo "gstreamer seek fail"
+ cat $TEST_RESULT
+ RET=1
+fi
+
+. $(cd `dirname $0`;pwd)/cleanup.sh
+exit $RET
+
--- /dev/null
+#!/bin/bash
+#
+# Copyright (C) 2008 Intel Corporation.
+#
+# This program 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.
+#
+# It 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 software; if not, write to the Free
+# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+# 02111-1307 USA.
+#
+# Authors:
+# Jessica JI <jessica.ji@intel.com>
+# Zhang Zhiqiang <zhiqiang.zhang@intel.com>
+#
+# DESCR:
+# Check gstreamer seek status for ogg codec
+#
+# TIMEOUT: 200
+
+
+. $(cd `dirname $0`;pwd)/env.sh
+
+su - app -c "XDG_RUNTIME_DIR=/run/user/5000 && gst-auto-launch filesrc location=${GT_KITTENS} num-buffers=50 ! oggdemux ! vorbisdec ! audioconvert ! audioresample ! autoaudiosink 0:play 1:pause 2:seek:10 12:play &> $TEST_RESULT &"
+
+sleep 15
+
+a=$(cat $TEST_RESULT | grep "Seeking")
+
+
+if [ "$a" = "Seeking to second 10.000000" ]; then
+ echo "gstreamer seek pass"
+else
+ echo "gstreamer seek fail"
+ cat $TEST_RESULT
+ RET=1
+fi
+
+. $(cd `dirname $0`;pwd)/cleanup.sh
+exit $RET
+
+
--- /dev/null
+#!/bin/bash
+#
+# Copyright (C) 2008 Intel Corporation.
+#
+# This program 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.
+#
+# It 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 software; if not, write to the Free
+# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+# 02111-1307 USA.
+#
+# Authors:
+# Zhang Zhiqiang <zhiqiang.zhang@intel.com>
+#
+# DESCR:
+# Check seek status for audio u-LAW format.
+#
+# TIMEOUT: 160
+
+
+. $(cd `dirname $0`;pwd)/env.sh
+
+su - app -c "XDG_RUNTIME_DIR=/run/user/5000 && gst-auto-launch filesrc location=$DATA_PATH/u-LAW_8bit_Stereo_44.1KHz_120sec\(10MB\)_AKM.wav num-buffers=50 ! wavparse ! mulawdec ! audioconvert ! autoaudiosink 0:play 1:pause 2:seek:10 12:play &> $TEST_RESULT &"
+
+sleep 15
+
+a=$(cat $TEST_RESULT | grep "Seeking")
+
+
+if [ "$a" = "Seeking to second 10.000000" ]; then
+ echo "gstreamer seek pass"
+else
+ echo "gstreamer seek fail"
+ cat $TEST_RESULT
+ exit 1
+fi
+
+. $(cd `dirname $0`;pwd)/cleanup.sh
+exit $RET
+
--- /dev/null
+#!/bin/bash
+#
+# Copyright (C) 2011 Intel Corporation.
+#
+# This program 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.
+#
+# It 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 software; if not, write to the Free
+# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+# 02111-1307 USA.
+#
+# Authors:
+# Zhang Zhiqiang <zhiqiang.zhang@intel.com>
+#
+# DESCR:
+# Check stop status for audio a-LAW format.
+#
+# TIMEOUT: 160
+
+
+. $(cd `dirname $0`;pwd)/env.sh
+
+su - app -c "XDG_RUNTIME_DIR=/run/user/5000 && gst-auto-launch filesrc location=$DATA_PATH/a-LAW_8bit_Stereo_44.1KHz_120sec\(10.1MB\)_AKM.wav num-buffers=300 ! wavparse ! alawdec ! audioconvert ! autoaudiosink 0:play 5:stop 6:seek:10 &> $TEST_RESULT &"
+
+sleep 15
+
+a=$(cat $TEST_RESULT | grep "READY")
+
+
+if [ "$a" = "Passing to READY" ]; then
+ echo "gstreamer stop pass"
+else
+ echo "gstreamer stop fail"
+ cat $TEST_RESULT
+ RET=1
+fi
+
+. $(cd `dirname $0`;pwd)/cleanup.sh
+exit $RET
+
--- /dev/null
+#!/bin/bash
+#
+# Copyright (C) 2008 Intel Corporation.
+#
+# This program 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.
+#
+# It 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 software; if not, write to the Free
+# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+# 02111-1307 USA.
+#
+# Authors:
+# Jessica JI <jessica.ji@intel.com>
+# Zhang Zhiqiang <zhiqiang.zhang@intel.com>
+#
+# DESCR:
+# Check gstreamer avidemux work status
+#
+# TIMEOUT: 200
+
+
+. $(cd `dirname $0`;pwd)/env.sh
+
+su - app -c "XDG_RUNTIME_DIR=/run/user/5000 && gst-auto-launch filesrc location=${GT_AUDIO_PCM_16} num-buffers=50 ! avidemux name=demux demux.audio_0 ! decodebin ! audioconvert ! audioresample ! autoaudiosink 0:play 0.5:stop 1:seek:1.5 &> $TEST_RESULT &"
+
+sleep 5
+
+a=$(cat $TEST_RESULT | grep "READY")
+
+
+if [ "$a" = "Passing to READY" ]; then
+ echo "gstreamer avidemux stop pass"
+else
+ echo "gstreamer avidemux stop fail"
+ cat $TEST_RESULT
+ RET=1
+fi
+
+. $(cd `dirname $0`;pwd)/cleanup.sh
+exit $RET
+
+
--- /dev/null
+#!/bin/bash
+#
+# Copyright (C) 2011 Intel Corporation.
+#
+# This program 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.
+#
+# It 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 software; if not, write to the Free
+# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+# 02111-1307 USA.
+#
+# Authors:
+# Zhang Zhiqiang <zhiqiang.zhang@intel.com>
+#
+# DESCR:
+# Check stop status for audio Linear PCM format.
+#
+# TIMEOUT: 160
+
+
+. $(cd `dirname $0`;pwd)/env.sh
+
+su - app -c "XDG_RUNTIME_DIR=/run/user/5000 && gst-auto-launch filesrc location=$DATA_PATH/LPCM_16bit_Stereo_44.1KHz_60sec\(10Mb\).wav num-buffers=300 ! wavparse ! audioconvert ! autoaudiosink 0:play 5:stop 6:seek:10 &> $TEST_RESULT &"
+
+sleep 15
+
+a=$(cat $TEST_RESULT | grep "READY")
+
+
+if [ "$a" = "Passing to READY" ]; then
+ echo "gstreamer stop pass"
+else
+ echo "gstreamer stop fail"
+ cat $TEST_RESULT
+ RET=1
+fi
+
+. $(cd `dirname $0`;pwd)/cleanup.sh
+exit $RET
+
--- /dev/null
+#!/bin/bash
+#
+# Copyright (C) 2008 Intel Corporation.
+#
+# This program 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.
+#
+# It 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 software; if not, write to the Free
+# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+# 02111-1307 USA.
+#
+# Authors:
+# Jessica JI <jessica.ji@intel.com>
+# Zhang Zhiqiang <zhiqiang.zhang@intel.com>
+#
+# DESCR:
+# Check gstreamer stop status for ogg codec
+#
+# TIMEOUT: 200
+
+
+. $(cd `dirname $0`;pwd)/env.sh
+
+su - app -c "XDG_RUNTIME_DIR=/run/user/5000 && gst-auto-launch filesrc location=${GT_KITTENS} ! oggdemux ! vorbisdec ! audioconvert ! audioresample ! autoaudiosink 0:play 5:stop 6:seek:10 &> $TEST_RESULT &"
+
+sleep 15
+
+a=$(cat $TEST_RESULT | grep "READY")
+
+
+if [ "$a" = "Passing to READY" ]; then
+ echo "gstreamer stop pass"
+else
+ echo "gstreamer stop fail"
+ cat $TEST_RESULT
+ RET=1
+fi
+
+. $(cd `dirname $0`;pwd)/cleanup.sh
+exit $RET
+
--- /dev/null
+#!/bin/bash
+#
+# Copyright (C) 2011 Intel Corporation.
+#
+# This program 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.
+#
+# It 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 software; if not, write to the Free
+# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+# 02111-1307 USA.
+#
+# Authors:
+# Zhang Zhiqiang <zhiqiang.zhang@intel.com>
+#
+# DESCR:
+# Check stop status for audio u-LAW format.
+#
+# TIMEOUT: 160
+
+
+. $(cd `dirname $0`;pwd)/env.sh
+
+su - app -c "XDG_RUNTIME_DIR=/run/user/5000 && gst-auto-launch filesrc location=$DATA_PATH/u-LAW_8bit_Stereo_44.1KHz_120sec\(10MB\)_AKM.wav num-buffers=300 ! wavparse ! mulawdec ! audioconvert ! autoaudiosink 0:play 5:stop 6:seek:10 &> $TEST_RESULT &"
+
+sleep 15
+
+a=$(cat $TEST_RESULT | grep "READY")
+
+
+if [ "$a" = "Passing to READY" ]; then
+ echo "gstreamer stop pass"
+else
+ echo "gstreamer stop fail"
+ cat $TEST_RESULT
+ RET=1
+fi
+
+. $(cd `dirname $0`;pwd)/cleanup.sh
+exit $RET
+
--- /dev/null
+#!/bin/bash
+#
+# Copyright (C) 2008 Intel Corporation.
+#
+# This program 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.
+#
+# It 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 software; if not, write to the Free
+# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+# 02111-1307 USA.
+#
+# Authors:
+# Jessica JI <jessica.ji@intel.com>
+# Zhang Zhiqiang <zhiqiang.zhang@intel.com>
+#
+# DESCR:
+# Check vorbisdec work status
+#
+# TIMEOUT: 200
+
+
+. $(cd `dirname $0`;pwd)/env.sh
+
+su - app -c "XDG_RUNTIME_DIR=/run/user/5000 && gst-launch-1.0 filesrc location=${GT_KITTENS} num-buffers=30 ! oggdemux ! vorbisdec ! audioconvert ! autoaudiosink &> $TEST_RESULT &"
+
+sleep 5
+
+a=$(cat $TEST_RESULT | grep "PLAYING")
+
+
+if [ "$a" = "Setting pipeline to PLAYING ..." ]; then
+ echo "gstreamer vorbisdec pass"
+else
+ echo "gstreamer vorbisdec fail"
+ cat $TEST_RESULT
+ RET=1
+fi
+
+. $(cd `dirname $0`;pwd)/cleanup.sh
+exit $RET
+
+
--- /dev/null
+#!/bin/bash
+#DESCR : Check gstreamer vorbis codec encode status
+#TIMEOUT : 200
+
+#
+# Copyright (C) 2008 Intel Corporation.
+#
+# This program 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.
+#
+# It 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 software; if not, write to the Free
+# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+# 02111-1307 USA.
+#
+# Authors:
+# Jessica JI <jessica.ji@intel.com>
+# Zhang Zhiqiang <zhiqiang.zhang@intel.com>
+#
+# DESCR:
+# Check vorbisenc work status
+#
+# TIMEOUT: 200
+
+
+. $(cd `dirname $0`;pwd)/env.sh
+if [ -f /tmp/vorbisenc.ogg ];then rm -rf /tmp/vorbisenc.ogg;fi
+if [ $UID = 0 ];then
+ su - app -c "XDG_RUNTIME_DIR=/run/user/5000 && gst-launch-1.0 -v pulsesrc num-buffers=100 ! audioconvert ! vorbisenc ! oggmux ! filesink location=/tmp/vorbisenc.ogg &>$TEST_RESULT &"
+else
+ gst-launch-1.0 -v pulsesrc num-buffers=100 ! audioconvert ! vorbisenc ! oggmux ! filesink location=/tmp/vorbisenc.ogg &>$TEST_RESULT &
+fi
+
+#gst-launch-1.0 -v autoaudiosrc num-buffers=100 ! audioconvert ! vorbisenc ! oggmux ! filesink location=/tmp/vorbisenc.ogg &>$TEST_RESULT &
+
+sleep 5
+
+a=$(cat $TEST_RESULT | grep "EOS")
+
+
+if [ "$a" = "Got EOS from element \"pipeline0\"." ]; then
+ echo "gstreamer vorbisenc pass"
+else
+ echo "gstreamer vorbisenc fail"
+ cat $TEST_RESULT
+ RET=1
+fi
+
+. $(cd `dirname $0`;pwd)/cleanup.sh
+exit $RET
+
--- /dev/null
+#!/bin/bash
+#
+# Copyright (C) 2008 Intel Corporation.
+#
+# This program 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.
+#
+# It 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 software; if not, write to the Free
+# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+# 02111-1307 USA.
+#
+# Authors:
+# Jessica JI <jessica.ji@intel.com>
+# Zhang Zhiqiang <zhiqiang.zhang@intel.com>
+#
+# DESCR:
+# Check gstreamer jpeg decode status
+#
+# TIMEOUT: 200
+
+
+. $(cd `dirname $0`;pwd)/env.sh
+if [ $UID = 0 ];then
+ su - app -c "XDG_RUNTIME_DIR=/run/user/5000 && gst-launch-1.0 playbin uri="file://${GT_IMAGE_JPG}" &> $TEST_RESULT"
+else
+ gst-launch-1.0 playbin uri="file://${GT_IMAGE_JPG}" &> $TEST_RESULT
+fi
+#gst-launch-1.0 filesrc location=$DATA_PATH/butterfly.jpg ! decodebin ! videoconvert ! autovideosink &> $TEST_RESULT
+#gst-launch-1.0 filesrc location=$DATA_PATH/butterfly.jpg ! jpegdec ! videoscale ! autovideosink &> $TEST_RESULT
+
+a=$(cat $TEST_RESULT | grep "EOS")
+
+#if [ "$a" = "Got EOS from element \"pipeline0\"." ]; then
+if [ "$a" = "Got EOS from element \"playbin0\"." ]; then
+ echo "gstreamer jpegdec pass"
+else
+ echo "gstreamer jpegdec fail"
+ cat $TEST_RESULT
+ RET=1
+fi
+
+. $(cd `dirname $0`;pwd)/cleanup.sh
+exit $RET
+
+
--- /dev/null
+#!/bin/bash
+#
+# Copyright (C) 2008 Intel Corporation.
+#
+# This program 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.
+#
+# It 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 software; if not, write to the Free
+# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+# 02111-1307 USA.
+#
+# Authors:
+# Zhang Zhiqiang <zhiqiang.zhang@intel.com>
+#
+# DESCR:
+# Check gstreamer JPEG encode status
+#
+# TIMEOUT: 60
+
+
+. $(cd `dirname $0`;pwd)/env.sh
+if [ $UID = 0 ];then
+ su - app -c "XDG_RUNTIME_DIR=/run/user/5000 && gst-launch-1.0 v4l2src num-buffers=1 ! jpegenc ! filesink location=/tmp/jpegenc.jpg &> $TEST_RESULT &"
+else
+ gst-launch-1.0 v4l2src num-buffers=1 ! jpegenc ! filesink location=/tmp/jpegenc.jpg &> $TEST_RESULT &
+fi
+
+#gst-launch-1.0 v4l2src num-buffers=1 ! video/x-raw-yuv,width=320,height=240 ! ffmpegcolorspace ! jpegenc ! filesink location=/tmp/jpegenc.jpg &> $TEST_RESULT &
+
+sleep 5
+
+a=$(cat $TEST_RESULT | grep "New clock")
+
+
+if [ "$a" = "New clock: GstSystemClock" ]; then
+ echo "gstreamer jpegenc pass"
+else
+ echo "gstreamer jpegenc fail"
+ cat $TEST_RESULT
+ RET=1
+fi
+
+. $(cd `dirname $0`;pwd)/cleanup.sh
+exit $RET
+
--- /dev/null
+#!/bin/bash
+#
+# Copyright (C) 2008 Intel Corporation.
+#
+# This program 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.
+#
+# It 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 software; if not, write to the Free
+# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+# 02111-1307 USA.
+#
+# Authors:
+# Jessica JI <jessica.ji@intel.com>
+# Zhang Zhiqiang <zhiqiang.zhang@intel.com>
+#
+# DESCR:
+# Check gstreamer png decode status
+#
+# TIMEOUT: 200
+
+
+. $(cd `dirname $0`;pwd)/env.sh
+if [ $UID = 0 ];then
+ su - app -c "XDG_RUNTIME_DIR=/run/user/5000 && gst-launch-1.0 filesrc location=${GT_IMAGE_PNG} ! decodebin ! videoconvert ! autovideosink &> $TEST_RESULT"
+else
+ gst-launch-1.0 filesrc location=${GT_IMAGE_PNG} ! decodebin ! videoconvert ! autovideosink &> $TEST_RESULT
+fi
+#gst-launch-1.0 filesrc location=$DATA_PATH/timer2.png ! pngdec ! videoscale ! autovideosink &> $TEST_RESULT
+
+sleep 1
+
+a=$(cat $TEST_RESULT | grep "EOS")
+
+
+if [ "$a" = "Got EOS from element \"pipeline0\"." ]; then
+ echo "gstreamer pngdec pass"
+else
+ echo "gstreamer pngdec fail"
+ cat $TEST_RESULT
+ RET=1
+fi
+
+. $(cd `dirname $0`;pwd)/cleanup.sh
+exit $RET
+
+
--- /dev/null
+#!/bin/bash
+#
+# Copyright (C) 2008 Intel Corporation.
+#
+# This program 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.
+#
+# It 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 software; if not, write to the Free
+# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+# 02111-1307 USA.
+#
+# Authors:
+# Zhang Zhiqiang <zhiqiang.zhang@intel.com>
+#
+# DESCR:
+# Check gstreamer PNG encode status
+#
+# TIMEOUT: 60
+
+
+. $(cd `dirname $0`;pwd)/env.sh
+if [ $UID = 0 ];then
+ su - app -c "XDG_RUNTIME_DIR=/run/user/5000 && gst-launch-1.0 v4l2src num-buffers=1 ! autovideoconvert ! pngenc ! filesink location=/tmp/pngenc.jpg &> $TEST_RESULT &"
+else
+ gst-launch-1.0 v4l2src num-buffers=1 ! autovideoconvert ! pngenc ! filesink location=/tmp/pngenc.jpg &> $TEST_RESULT &
+fi
+#gst-launch-1.0 v4l2src num-buffers=1 ! video/x-raw-yuv,width=320,height=240 ! ffmpegcolorspace ! pngenc ! filesink location=/tmp/pngenc.jpg &> $TEST_RESULT &
+
+sleep 5
+
+a=$(cat $TEST_RESULT | grep "New clock")
+
+
+if [ "$a" = "New clock: GstSystemClock" ]; then
+ echo "gstreamer pngenc pass"
+else
+ echo "gstreamer pngenc fail"
+ cat $TEST_RESULT
+ RET=1
+fi
+
+. $(cd `dirname $0`;pwd)/cleanup.sh
+exit $RET
+
--- /dev/null
+#!/bin/bash
+#
+# Copyright (C) 2008-2011 Intel Corporation.
+#
+# This program 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.
+#
+# It 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 software; if not, write to the Free
+# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+# 02111-1307 USA.
+#
+# Authors:
+# Jessica JI < jessica.ji@intel.com >
+# Zhiqiang Zhang <zhiqiang.zhang@intel.com>
+#
+# DESCR:
+# Check http status of OGG Theora Vorbis format
+#
+# TIMEOUT: 200
+
+
+. $(cd `dirname $0`;pwd)/env.sh
+
+$(cd `dirname $0`;pwd)/playbin2.sh "$HTTP/${GT_HTTP_VIDEO_OGV}" 15
+
--- /dev/null
+#!/bin/bash
+#
+# Copyright (C) 2008-2011 Intel Corporation.
+#
+# This program 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.
+#
+# It 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 software; if not, write to the Free
+# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+# 02111-1307 USA.
+#
+# Authors:
+# Jessica JI <jessica.ji@intel.com>
+# Zhang Zhiqiang <zhiqiang.zhang@intel.com>
+#
+# DESCR:
+# Check gstreamer oggdemux work status
+#
+# TIMEOUT: 200
+
+
+. $(cd `dirname $0`;pwd)/env.sh
+if [ $UID = 0 ];then
+ su - app -c "XDG_RUNTIME_DIR=/run/user/5000 && gst-launch-1.0 filesrc location=${GT_KITTENS} num-buffers=30 ! oggdemux name=demuxer demuxer. ! queue ! theoradec ! videoscale ! autovideosink demuxer. ! queue ! vorbisdec ! audioconvert ! audioresample ! autoaudiosink &> $TEST_RESULT &"
+else
+ gst-launch-1.0 filesrc location=${GT_KITTENS} num-buffers=30 ! oggdemux name=demuxer demuxer. ! queue ! theoradec ! videoscale ! autovideosink demuxer. ! queue ! vorbisdec ! audioconvert ! audioresample ! autoaudiosink &> $TEST_RESULT &
+fi
+sleep 10
+
+a=$(cat $TEST_RESULT | grep "PLAYING")
+
+
+if [ "$a" = "Setting pipeline to PLAYING ..." ]; then
+ echo "gstreamer oggdemux pass"
+else
+ echo "gstreamer oggdemux fail"
+ cat $TEST_RESULT
+ RET=1
+fi
+
+. $(cd `dirname $0`;pwd)/cleanup.sh
+exit $RET
+
+
--- /dev/null
+#!/bin/bash
+#
+# Copyright (C) 2008 Intel Corporation.
+#
+# This program 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.
+#
+# It 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 software; if not, write to the Free
+# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+# 02111-1307 USA.
+#
+# Authors:
+# Jessica JI <jessica.ji@intel.com>
+# Zhang Zhiqiang <zhiqiang.zhang@intel.com>
+#
+# DESCR:
+# Check gstreamer oggdemux pause status
+#
+# TIMEOUT: 200
+
+
+. $(cd `dirname $0`;pwd)/env.sh
+if [ $UID = 0 ];then
+ su - app -c "XDG_RUNTIME_DIR=/run/user/5000 && gst-auto-launch filesrc location=${GT_KITTENS} num-buffers=50 ! oggdemux name=demuxer demuxer. ! queue ! theoradec ! videoscale ! autovideosink demuxer. ! queue ! vorbisdec ! audioconvert ! audioresample ! autoaudiosink 0:play 5:pause 10:play &> $TEST_RESULT &"
+else
+ gst-auto-launch filesrc location=${GT_KITTENS} num-buffers=50 ! oggdemux name=demuxer demuxer. ! queue ! theoradec ! videoscale ! autovideosink demuxer. ! queue ! vorbisdec ! audioconvert ! audioresample ! autoaudiosink 0:play 5:pause 10:play &> $TEST_RESULT &
+fi
+
+sleep 12
+
+a=$(cat $TEST_RESULT | grep "PAUSED")
+
+
+if [ "$a" = "Passing to PAUSED" ]; then
+ echo "gstreamer oggdemux pause pass"
+else
+ echo "gstreamer oggdemux pause fail"
+ RET=1
+fi
+
+. $(cd `dirname $0`;pwd)/cleanup.sh
+exit $RET
+
+
--- /dev/null
+#!/bin/bash
+#
+# Copyright (C) 2008-2011 Intel Corporation.
+#
+# This program 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.
+#
+# It 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 software; if not, write to the Free
+# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+# 02111-1307 USA.
+#
+# Authors:
+# Jessica JI <jessica.ji@intel.com>
+# Zhang Zhiqiang <zhiqiang.zhang@intel.com>
+#
+# DESCR:
+# Check gstreamer oggdemux play status
+#
+# TIMEOUT: 200
+
+
+. $(cd `dirname $0`;pwd)/env.sh
+if [ $UID = 0 ];then
+ su - app -c "XDG_RUNTIME_DIR=/run/user/5000 && gst-auto-launch filesrc location=${GT_KITTENS} num-buffers=50 ! oggdemux name=demuxer demuxer. ! queue ! theoradec ! videoscale ! autovideosink demuxer. ! queue ! vorbisdec ! audioconvert ! audioresample ! autoaudiosink 0:play &> $TEST_RESULT &"
+else
+ gst-auto-launch filesrc location=${GT_KITTENS} num-buffers=50 ! oggdemux name=demuxer demuxer. ! queue ! theoradec ! videoscale ! autovideosink demuxer. ! queue ! vorbisdec ! audioconvert ! audioresample ! autoaudiosink 0:play &> $TEST_RESULT &
+fi
+
+sleep 5
+
+a=$(cat $TEST_RESULT | grep "PLAYING")
+echo $a
+
+
+if [ "$a" = "Passing to PLAYING" ]; then
+ echo "gstreamer oggdemux play pass"
+else
+ echo "gstreamer oggdemux play fail"
+ cat $TEST_RESULT
+ RET=1
+fi
+
+. $(cd `dirname $0`;pwd)/cleanup.sh
+exit $RET
+
+
--- /dev/null
+#!/bin/bash
+#
+# Copyright (C) 2011, Intel Corporation
+#
+# This program 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 of the License,
+# or (at your option) any later version.
+#
+# This program 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
+# General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+# USA.
+#
+# Authors:
+# Zhang Zhiqiang <zhiqiang.zhang@intel.com>
+#
+# DESCR:
+# Check local video playback of OGG-Theora-Vorbis format
+# by gst-launch-1.0 and playbin2 with uri only.
+#
+# TIMEOUT: 160
+
+
+. $(cd `dirname $0`;pwd)/env.sh
+
+
+$(cd `dirname $0`;pwd)/playbin2.sh "file://${GT_KITTENS}"
+
+
--- /dev/null
+#!/bin/bash
+#
+# Copyright (C) 2008 Intel Corporation.
+#
+# This program 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.
+#
+# It 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 software; if not, write to the Free
+# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+# 02111-1307 USA.
+#
+# Authors:
+# Jessica JI <jessica.ji@intel.com>
+# Zhang Zhiqiang <zhiqiang.zhang@intel.com>
+#
+# DESCR:
+# Check gstreamer oggdemux resume status
+#
+# TIMEOUT: 200
+
+
+. $(cd `dirname $0`;pwd)/env.sh
+if [ $UID = 0 ];then
+ su - app -c "XDG_RUNTIME_DIR=/run/user/5000 && gst-auto-launch filesrc location=${GT_KITTENS} num-buffers=50 ! oggdemux name=demuxer demuxer. ! queue ! theoradec ! videoscale ! autovideosink demuxer. ! queue ! vorbisdec ! audioconvert ! audioresample ! autoaudiosink 0:play 5:stop 6:seek:10 &> $TEST_RESULT &"
+else
+ gst-auto-launch filesrc location=${GT_KITTENS} num-buffers=50 ! oggdemux name=demuxer demuxer. ! queue ! theoradec ! videoscale ! autovideosink demuxer. ! queue ! vorbisdec ! audioconvert ! audioresample ! autoaudiosink 0:play 5:stop 6:seek:10 &> $TEST_RESULT &
+fi
+sleep 15
+
+a=$(cat $TEST_RESULT | grep "READY")
+
+
+if [ "$a" = "Passing to READY" ]; then
+ echo "gstreamer oggdemux resume pass"
+else
+ echo "gstreamer oggav resume fail"
+ cat $TEST_RESULT
+ RET=1
+fi
+
+. $(cd `dirname $0`;pwd)/cleanup.sh
+exit $RET
+
+
--- /dev/null
+#!/bin/bash
+#
+# Copyright (C) 2008-2011 Intel Corporation.
+#
+# This program 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.
+#
+# It 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 software; if not, write to the Free
+# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+# 02111-1307 USA.
+#
+# Authors:
+# Jessica JI <jessica.ji@intel.com>
+# Zhang Zhiqiang <zhiqiang.zhang@intel.com>
+#
+# DESCR:
+# Check gstreamer oggdemux seek status
+#
+# TIMEOUT: 200
+
+
+. $(cd `dirname $0`;pwd)/env.sh
+if [ $UID = 0 ];then
+ su - app -c "XDG_RUNTIME_DIR=/run/user/5000 && gst-auto-launch filesrc location=${GT_KITTENS} num-buffers=50 ! oggdemux name=demuxer demuxer. ! queue ! theoradec ! videoscale ! autovideosink demuxer. ! queue ! vorbisdec ! audioconvert ! audioresample ! autoaudiosink 0:play 1:pause 2:seek:10 12:play &>$TEST_RESULT"
+else
+ gst-auto-launch filesrc location=${GT_KITTENS} num-buffers=50 ! oggdemux name=demuxer demuxer. ! queue ! theoradec ! videoscale ! autovideosink demuxer. ! queue ! vorbisdec ! audioconvert ! audioresample ! autoaudiosink 0:play 1:pause 2:seek:10 12:play &>$TEST_RESULT
+fi
+
+sleep 15
+
+a=$(cat $TEST_RESULT | grep "Seeking")
+
+
+if [ "$a" = "Seeking to second 10.000000" ]; then
+ echo "gstreamer oggdemux seek pass"
+else
+ echo "gstreamer oggdemux seek fail"
+ cat $TEST_RESULT
+ RET=1
+fi
+
+. $(cd `dirname $0`;pwd)/cleanup.sh
+exit $RET
+
+
--- /dev/null
+#!/bin/bash
+#
+# Copyright (C) 2008-2011 Intel Corporation.
+#
+# This program 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.
+#
+# It 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 software; if not, write to the Free
+# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+# 02111-1307 USA.
+#
+# Authors:
+# Jessica JI <jessica.ji@intel.com>
+# Zhang Zhiqiang <zhiqiang.zhang@intel.com>
+#
+# DESCR:
+# Check gstreamer oggdemux stop status
+#
+# TIMEOUT: 200
+
+
+. $(cd `dirname $0`;pwd)/env.sh
+if [ $UID = 0 ];then
+ su - app -c "XDG_RUNTIME_DIR=/run/user/5000 && gst-auto-launch filesrc location=${GT_KITTENS} num-buffers=50 ! oggdemux name=demuxer demuxer. ! queue ! theoradec ! videoscale ! autovideosink demuxer. ! queue ! vorbisdec ! audioconvert ! audioresample ! autoaudiosink 0:play 5:stop 6:seek:10 &> $TEST_RESULT &"
+else
+ gst-auto-launch filesrc location=${GT_KITTENS} num-buffers=50 ! oggdemux name=demuxer demuxer. ! queue ! theoradec ! videoscale ! autovideosink demuxer. ! queue ! vorbisdec ! audioconvert ! audioresample ! autoaudiosink 0:play 5:stop 6:seek:10 &> $TEST_RESULT &
+fi
+
+sleep 15
+
+a=$(cat $TEST_RESULT | grep "READY")
+
+
+if [ "$a" = "Passing to READY" ]; then
+ echo "gstreamer oggdemux stop pass"
+else
+ echo "gstreamer oggdemux stop fail"
+ cat $TEST_RESULT
+ RET=1
+fi
+
+. $(cd `dirname $0`;pwd)/cleanup.sh
+exit $RET
+
+
--- /dev/null
+#!/bin/bash
+#
+# Copyright (C) 2008 Intel Corporation.
+#
+# This program 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.
+#
+# It 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 software; if not, write to the Free
+# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+# 02111-1307 USA.
+#
+# Authors:
+# Jessica JI <jessica.ji@intel.com>
+# Zhang Zhiqiang <zhiqiang.zhang@intel.com>
+#
+# DESCR:
+# Check theoradec work status
+#
+# TIMEOUT: 200
+
+
+. $(cd `dirname $0`;pwd)/env.sh
+if [ $UID = 0 ];then
+ su - app -c "XDG_RUNTIME_DIR=/run/user/5000 && gst-launch-1.0 filesrc location=${GT_KITTENS} num-buffers=30 ! oggdemux ! theoradec ! videoscale ! autovideosink &> $TEST_RESULT &"
+else
+ gst-launch-1.0 filesrc location=${GT_KITTENS} num-buffers=30 ! oggdemux ! theoradec ! videoscale ! autovideosink &> $TEST_RESULT &
+fi
+
+sleep 5
+
+a=$(cat $TEST_RESULT | grep "PLAYING")
+
+
+if [ "$a" = "Setting pipeline to PLAYING ..." ]; then
+ echo "gstreamer theoradec pass"
+else
+ echo "gstreamer theoradec fail"
+ cat $TEST_RESULT
+ RET=1
+fi
+
+. $(cd `dirname $0`;pwd)/cleanup.sh
+exit $RET
+
+
--- /dev/null
+#!/bin/bash
+#
+# Copyright (C) 2008 Intel Corporation.
+#
+# This program 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.
+#
+# It 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 software; if not, write to the Free
+# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+# 02111-1307 USA.
+#
+# Authors:
+# Jessica JI <jessica.ji@intel.com>
+# Zhang Zhiqiang <zhiqiang.zhang@intel.com>
+#
+# DESCR:
+# Check theoraenc work status
+#
+# TIMEOUT: 200
+
+
+. $(cd `dirname $0`;pwd)/env.sh
+
+su - app -c "XDG_RUNTIME_DIR=/run/user/5000 && gst-launch-1.0 v4l2src num-buffers=20 ! autovideoconvert ! theoraenc ! oggmux ! filesink location=/tmp/theoraenc.ogg &> $TEST_RESULT &"
+
+sleep 30
+
+a=$(cat $TEST_RESULT | grep "New clock")
+
+
+if [ "$a" = "New clock: GstSystemClock" ]; then
+ echo "gstreamer thenraenc pass"
+else
+ echo "gstreamer thenoraenc fail"
+ cat $TEST_RESULT
+ RET=1
+fi
+
+. $(cd `dirname $0`;pwd)/cleanup.sh
+exit $RET
+
+
--- /dev/null
+#!/bin/bash
+#
+# Copyright (C) 2011, Intel Corporation
+#
+# This program 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 of the License,
+# or (at your option) any later version.
+#
+# This program 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
+# General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+# USA.
+#
+# Authors:
+# Zhang Zhiqiang <zhiqiang.zhang@intel.com>
+#
+# Modificator:
+# Li Cathy <cathy.li@intel.com> Date: 2012-02-24
+#
+# DESCR:
+# Test GStreamer pipeline using playbin2 with uri only.
+#
+
+
+# check parameter sanity
+if [ $# -lt 1 ]; then
+ echo "Usage: $0 <URI> [TIMEOUT]"
+ echo " URI is to set playbin uri with protocol FILEE/HTTP/RTSP"
+ echo " TIMEOUT is the time in seconds you want playbin2 to play the media"
+ echo "You need to set URI of the media file to play"
+ exit 1
+fi
+
+
+. $(cd `dirname $0`;pwd)/env.sh
+
+
+# play the media with GStreamer su - app -c "XDG_RUNTIME_DIR=/run/user/5000 && gst-auto-launch and playbin2 for 10 seconds
+# su - app -c "XDG_RUNTIME_DIR=/run/user/5000 && gst-auto-launch playbin2 uri=$1 0:play 10:eos
+
+# play the media with GStreamer gst-launch and playbin2
+if [ $UID = 0 ];then
+ su - app -c "XDG_RUNTIME_DIR=/run/user/5000 && gst-launch-1.0 playbin uri="$1" &> $TEST_RESULT &"
+else
+ gst-launch-1.0 playbin uri=$1 &> $TEST_RESULT &
+fi
+
+# check error message after TIMEOUT or 3 seconds
+if [ -n "$2" ]; then
+ sleep $2
+else
+ sleep 3
+fi
+
+ERR=$(cat $TEST_RESULT | grep "ERROR")
+
+if [ -n "$ERR" ]; then
+ cat $TEST_RESULT
+ RET=1
+fi
+
+# clean up
+. $(cd `dirname $0`;pwd)/cleanup.sh
+exit $RET
+
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<test_definition name="">\r
+ <suite name="tts-gstreamer-tests">\r
+ <set name="gst-plugins-bad">\r
+ <testcase purpose="To check if streamimg audio through http of IMA ADPCM format work correctly" type="functional_positive" status="designed" component="GStreamer/gst-plugins-bad" execution_type="auto" priority="P1" id="gstreamer_audio_playbin2_http_imaadpcm">\r
+ <description>\r
+ <pre_condition />\r
+ <post_condition />\r
+ <steps>\r
+ <step order="1">\r
+ <step_desc>Check streamimg audio through http of IMA ADPCM format.</step_desc>\r
+ <expected>0</expected>\r
+ </step>\r
+ </steps>\r
+ <test_script_entry timeout="90" test_script_expected_result="0">/usr/share/tests/common-multimedia-suite/tts-gstreamer-tests/gstreamer_audio_playbin2_http_imaadpcm.sh</test_script_entry>\r
+ </description>\r
+ <categories>\r
+ <category>Netbook</category>\r
+ <category>TV</category>\r
+ </categories>\r
+ </testcase>\r
+ <testcase purpose="To check if local audio playback of IMA ADPCM format by gst-launch-0.10 and playbin2 with uri work correctly" type="functional_positive" status="designed" component="GStreamer/gst-plugins-bad" execution_type="auto" priority="P1" id="gstreamer_audio_playbin2_imaadpcm_4bit_stereo_32khz_256kbps">\r
+ <description>\r
+ <pre_condition />\r
+ <post_condition />\r
+ <steps>\r
+ <step order="1">\r
+ <step_desc>Check local audio playback of IMA ADPCM format by gst-launch-0.10 and playbin2 with uri only.</step_desc>\r
+ <expected>0</expected>\r
+ </step>\r
+ </steps>\r
+ <test_script_entry timeout="90" test_script_expected_result="0">/usr/share/tests/common-multimedia-suite/tts-gstreamer-tests/gstreamer_audio_playbin2_imaadpcm_4bit_stereo_32khz_256kbps.sh</test_script_entry>\r
+ </description>\r
+ <categories>\r
+ <category>Netbook</category>\r
+ <category>TV</category>\r
+ </categories>\r
+ </testcase>\r
+ </set>\r
+ <set name="gst-plugins-base">\r
+ <testcase purpose="To check if gstreamer and alsasink plugins integration status is correct" type="functional_positive" status="approved" component="GStreamer/gst-plugins-base" execution_type="auto" priority="P1" id="gstreamer_audio_alsasink">\r
+ <description>\r
+ <pre_condition />\r
+ <post_condition />\r
+ <steps>\r
+ <step order="1">\r
+ <step_desc>Check gstreamer and alsa plugins integration status</step_desc>\r
+ <expected>0</expected>\r
+ </step>\r
+ </steps>\r
+ <test_script_entry timeout="90" test_script_expected_result="0">/usr/share/tests/common-multimedia-suite/tts-gstreamer-tests/gstreamer_audio_alsasink.sh</test_script_entry>\r
+ </description>\r
+ <categories>\r
+ <category>IVI</category>\r
+ <category>Netbook</category>\r
+ <category>TV</category>\r
+ </categories>\r
+ </testcase>\r
+ <testcase purpose="To check if gstreamer pause ogg codec work correctly" type="functional_positive" status="approved" requirement_ref="Framework API: Pause" component="GStreamer/gst-plugins-base" execution_type="auto" priority="P0" id="gstreamer_audio_pause_ogg">\r
+ <description>\r
+ <pre_condition />\r
+ <post_condition />\r
+ <steps>\r
+ <step order="1">\r
+ <step_desc>Check gstreamer pause status for ogg codec</step_desc>\r
+ <expected>0</expected>\r
+ </step>\r
+ </steps>\r
+ <test_script_entry timeout="90" test_script_expected_result="0">/usr/share/tests/common-multimedia-suite/tts-gstreamer-tests/gstreamer_audio_pause_ogg.sh</test_script_entry>\r
+ </description>\r
+ <categories>\r
+ <category>IVI</category>\r
+ <category>Netbook</category>\r
+ <category>TV</category>\r
+ </categories>\r
+ </testcase>\r
+ <testcase purpose="To check if gstreamer play ogg codec correctly" type="functional_positive" status="approved" component="GStreamer/gst-plugins-base" execution_type="auto" priority="P1" id="gstreamer_audio_play_ogg">\r
+ <description>\r
+ <pre_condition />\r
+ <post_condition />\r
+ <steps>\r
+ <step order="1">\r
+ <step_desc>Check gstreamer play status for ogg codec</step_desc>\r
+ <expected>0</expected>\r
+ </step>\r
+ </steps>\r
+ <test_script_entry timeout="90" test_script_expected_result="0">/usr/share/tests/common-multimedia-suite/tts-gstreamer-tests/gstreamer_audio_play_ogg.sh</test_script_entry>\r
+ </description>\r
+ <categories>\r
+ <category>IVI</category>\r
+ <category>Netbook</category>\r
+ <category>TV</category>\r
+ </categories>\r
+ </testcase>\r
+ <testcase purpose="To check if local audio playback of OGG-Vorbis format by gst-launch-0.10 and playbin2 with uri work correctly" type="functional_positive" status="approved" component="GStreamer/gst-plugins-base" execution_type="auto" priority="P1" id="gstreamer_audio_playbin2_ogg_vorbis_16bit_mono_8khz_42kbps">\r
+ <description>\r
+ <pre_condition />\r
+ <post_condition />\r
+ <steps>\r
+ <step order="1">\r
+ <step_desc>Check local audio playback of OGG-Vorbis format by gst-launch-0.10 and playbin2 with uri only.</step_desc>\r
+ <expected>0</expected>\r
+ </step>\r
+ </steps>\r
+ <test_script_entry timeout="90" test_script_expected_result="0">/usr/share/tests/common-multimedia-suite/tts-gstreamer-tests/gstreamer_audio_playbin2_ogg_vorbis_16bit_mono_8khz_42kbps.sh</test_script_entry>\r
+ </description>\r
+ <categories>\r
+ <category>IVI</category>\r
+ <category>Netbook</category>\r
+ <category>TV</category>\r
+ </categories>\r
+ </testcase>\r
+ <testcase purpose="To check if gstreamer resume status is correct for ogg codec" type="functional_positive" status="approved" component="GStreamer/gst-plugins-base" execution_type="auto" priority="P1" id="gstreamer_audio_resume_ogg">\r
+ <description>\r
+ <pre_condition />\r
+ <post_condition />\r
+ <steps>\r
+ <step order="1">\r
+ <step_desc>Check gstreamer resume status for ogg codec</step_desc>\r
+ <expected>0</expected>\r
+ </step>\r
+ </steps>\r
+ <test_script_entry timeout="90" test_script_expected_result="0">/usr/share/tests/common-multimedia-suite/tts-gstreamer-tests/gstreamer_audio_resume_ogg.sh</test_script_entry>\r
+ </description>\r
+ <categories>\r
+ <category>IVI</category>\r
+ <category>Netbook</category>\r
+ <category>TV</category>\r
+ </categories>\r
+ </testcase>\r
+ <testcase purpose="To check if gstreamer seek ogg codec correctly" type="functional_positive" status="approved" requirement_ref="Framework API: Set" component="GStreamer/gst-plugins-base" execution_type="auto" priority="P1" id="gstreamer_audio_seek_ogg">\r
+ <description>\r
+ <pre_condition />\r
+ <post_condition />\r
+ <steps>\r
+ <step order="1">\r
+ <step_desc>Check gstreamer seek status for ogg codec</step_desc>\r
+ <expected>0</expected>\r
+ </step>\r
+ </steps>\r
+ <test_script_entry timeout="90" test_script_expected_result="0">/usr/share/tests/common-multimedia-suite/tts-gstreamer-tests/gstreamer_audio_seek_ogg.sh</test_script_entry>\r
+ </description>\r
+ <categories>\r
+ <category>IVI</category>\r
+ <category>Netbook</category>\r
+ <category>TV</category>\r
+ </categories>\r
+ </testcase>\r
+ <testcase purpose="To check if gstreamer stop status is correct for ogg codec" type="functional_positive" status="approved" component="GStreamer/gst-plugins-base" execution_type="auto" priority="P0" id="gstreamer_audio_stop_ogg">\r
+ <description>\r
+ <pre_condition />\r
+ <post_condition />\r
+ <steps>\r
+ <step order="1">\r
+ <step_desc>Check gstreamer stop status for ogg codec</step_desc>\r
+ <expected>0</expected>\r
+ </step>\r
+ </steps>\r
+ <test_script_entry timeout="90" test_script_expected_result="0">/usr/share/tests/common-multimedia-suite/tts-gstreamer-tests/gstreamer_audio_stop_ogg.sh</test_script_entry>\r
+ </description>\r
+ <categories>\r
+ <category>IVI</category>\r
+ <category>Netbook</category>\r
+ <category>TV</category>\r
+ </categories>\r
+ </testcase>\r
+ <testcase purpose="To check if vorbisdec work correctly" type="functional_positive" status="approved" requirement_ref="Codec: OGG/Vorbis" component="GStreamer/gst-plugins-base" execution_type="auto" priority="P1" id="gstreamer_audio_vorbisdec">\r
+ <description>\r
+ <pre_condition />\r
+ <post_condition />\r
+ <steps>\r
+ <step order="1">\r
+ <step_desc>Check vorbisdec work status</step_desc>\r
+ <expected>0</expected>\r
+ </step>\r
+ </steps>\r
+ <test_script_entry timeout="90" test_script_expected_result="0">/usr/share/tests/common-multimedia-suite/tts-gstreamer-tests/gstreamer_audio_vorbisdec.sh</test_script_entry>\r
+ </description>\r
+ <categories>\r
+ <category>IVI</category>\r
+ <category>Netbook</category>\r
+ <category>TV</category>\r
+ </categories>\r
+ </testcase>\r
+ <testcase purpose="To check if gstreamer vorbis codec encode work correctly" type="functional_positive" status="approved" component="GStreamer/gst-plugins-base" execution_type="auto" priority="P1" id="gstreamer_audio_vorbisenc">\r
+ <description>\r
+ <pre_condition />\r
+ <post_condition />\r
+ <steps>\r
+ <step order="1">\r
+ <step_desc>Check gstreamer vorbis codec encode status</step_desc>\r
+ <expected>0</expected>\r
+ </step>\r
+ </steps>\r
+ <test_script_entry timeout="90" test_script_expected_result="0">/usr/share/tests/common-multimedia-suite/tts-gstreamer-tests/gstreamer_audio_vorbisenc.sh</test_script_entry>\r
+ </description>\r
+ <categories>\r
+ <category>IVI</category>\r
+ <category>Netbook</category>\r
+ <category>TV</category>\r
+ </categories>\r
+ </testcase>\r
+\r
+ <testcase purpose="To check if gstreamer http plugins work correctly" type="functional_positive" status="approved" component="GStreamer/gst-plugins-base" execution_type="auto" priority="P1" id="gstreamer_video_http_ogg">\r
+ <description>\r
+ <pre_condition />\r
+ <post_condition />\r
+ <steps>\r
+ <step order="1">\r
+ <step_desc>Check gstreamer http plugins work status</step_desc>\r
+ <expected>0</expected>\r
+ </step>\r
+ </steps>\r
+ <test_script_entry timeout="90" test_script_expected_result="0">/usr/share/tests/common-multimedia-suite/tts-gstreamer-tests/gstreamer_video_http_ogg.sh</test_script_entry>\r
+ </description>\r
+ <categories>\r
+ <category>IVI</category>\r
+ <category>Netbook</category>\r
+ <category>TV</category>\r
+ </categories>\r
+ </testcase>\r
+ <testcase purpose="To check if oggdemux work correctly" type="functional_positive" status="approved" component="GStreamer/gst-plugins-base" execution_type="auto" priority="P1" id="gstreamer_video_oggdemux">\r
+ <description>\r
+ <pre_condition />\r
+ <post_condition />\r
+ <steps>\r
+ <step order="1">\r
+ <step_desc>Check oggdemux work status</step_desc>\r
+ <expected>0</expected>\r
+ </step>\r
+ </steps>\r
+ <test_script_entry timeout="90" test_script_expected_result="0">/usr/share/tests/common-multimedia-suite/tts-gstreamer-tests/gstreamer_video_oggdemux.sh</test_script_entry>\r
+ </description>\r
+ <categories>\r
+ <category>IVI</category>\r
+ <category>Netbook</category>\r
+ <category>TV</category>\r
+ </categories>\r
+ </testcase>\r
+\r
+ <testcase purpose="To check if gstreamer oggdemux for pause status is correct" type="functional_positive" status="approved" component="GStreamer/gst-plugins-base" execution_type="auto" priority="P1" id="gstreamer_video_pause_oggdemux">\r
+ <description>\r
+ <pre_condition />\r
+ <post_condition />\r
+ <steps>\r
+ <step order="1">\r
+ <step_desc>Check gstreamer oggdemux for pause status</step_desc>\r
+ <expected>0</expected>\r
+ </step>\r
+ </steps>\r
+ <test_script_entry timeout="90" test_script_expected_result="0">/usr/share/tests/common-multimedia-suite/tts-gstreamer-tests/gstreamer_video_pause_oggdemux.sh</test_script_entry>\r
+ </description>\r
+ <categories>\r
+ <category>IVI</category>\r
+ <category>Netbook</category>\r
+ <category>TV</category>\r
+ </categories>\r
+ </testcase>\r
+ <testcase purpose="To check if gstreamer oggdemux for play status is correct" type="functional_positive" status="approved" component="GStreamer/gst-plugins-base" execution_type="auto" priority="P1" id="gstreamer_video_play_oggdemux">\r
+ <description>\r
+ <pre_condition />\r
+ <post_condition />\r
+ <steps>\r
+ <step order="1">\r
+ <step_desc>Check gstreamer oggdemux for play status</step_desc>\r
+ <expected>0</expected>\r
+ </step>\r
+ </steps>\r
+ <test_script_entry timeout="90" test_script_expected_result="0">/usr/share/tests/common-multimedia-suite/tts-gstreamer-tests/gstreamer_video_play_oggdemux.sh</test_script_entry>\r
+ </description>\r
+ <categories>\r
+ <category>IVI</category>\r
+ <category>Netbook</category>\r
+ <category>TV</category>\r
+ </categories>\r
+ </testcase>\r
+ <testcase purpose="To check if local video playback of OGG-Theora-Vorbis format by gst-launch-0.10 and playbin2 with uri correctly" type="functional_positive" status="approved" component="GStreamer/gst-plugins-base" execution_type="auto" priority="P0" id="gstreamer_video_playbin2_ogg_theora_vorbis">\r
+ <description>\r
+ <pre_condition />\r
+ <post_condition />\r
+ <steps>\r
+ <step order="1">\r
+ <step_desc>Check local video playback of OGG-Theora-Vorbis format by gst-launch-0.10 and playbin2 with uri only.</step_desc>\r
+ <expected>0</expected>\r
+ </step>\r
+ </steps>\r
+ <test_script_entry timeout="90" test_script_expected_result="0">/usr/share/tests/common-multimedia-suite/tts-gstreamer-tests/gstreamer_video_playbin2_ogg_theora_vorbis.sh</test_script_entry>\r
+ </description>\r
+ <categories>\r
+ <category>IVI</category>\r
+ <category>Netbook</category>\r
+ <category>TV</category>\r
+ </categories>\r
+ </testcase>\r
+ <testcase purpose="To check if gstreamer resume oggdemux work correctly" type="functional_positive" status="approved" component="GStreamer/gst-plugins-base" execution_type="auto" priority="P1" id="gstreamer_video_resume_oggdemux">\r
+ <description>\r
+ <pre_condition />\r
+ <post_condition />\r
+ <steps>\r
+ <step order="1">\r
+ <step_desc>Check gstreamer oggdemux for resume status</step_desc>\r
+ <expected>0</expected>\r
+ </step>\r
+ </steps>\r
+ <test_script_entry timeout="90" test_script_expected_result="0">/usr/share/tests/common-multimedia-suite/tts-gstreamer-tests/gstreamer_video_resume_oggdemux.sh</test_script_entry>\r
+ </description>\r
+ <categories>\r
+ <category>IVI</category>\r
+ <category>Netbook</category>\r
+ <category>TV</category>\r
+ </categories>\r
+ </testcase>\r
+ <testcase purpose="To check if gstreamer seek oggdemux work correctly" type="functional_positive" status="approved" component="GStreamer/gst-plugins-base" execution_type="auto" priority="P1" id="gstreamer_video_seek_oggdemux">\r
+ <description>\r
+ <pre_condition />\r
+ <post_condition />\r
+ <steps>\r
+ <step order="1">\r
+ <step_desc>Check gstreamer oggdemux for seek status</step_desc>\r
+ <expected>0</expected>\r
+ </step>\r
+ </steps>\r
+ <test_script_entry timeout="90" test_script_expected_result="0">/usr/share/tests/common-multimedia-suite/tts-gstreamer-tests/gstreamer_video_seek_oggdemux.sh</test_script_entry>\r
+ </description>\r
+ <categories>\r
+ <category>IVI</category>\r
+ <category>Netbook</category>\r
+ <category>TV</category>\r
+ </categories>\r
+ </testcase>\r
+ <testcase purpose="To check if gstreamer oggdemux for stop status work correctly" type="functional_positive" status="approved" component="GStreamer/gst-plugins-base" execution_type="auto" priority="P1" id="gstreamer_video_stop_oggdemux">\r
+ <description>\r
+ <pre_condition />\r
+ <post_condition />\r
+ <steps>\r
+ <step order="1">\r
+ <step_desc>Check gstreamer oggdemux for stop status</step_desc>\r
+ <expected>0</expected>\r
+ </step>\r
+ </steps>\r
+ <test_script_entry timeout="90" test_script_expected_result="0">/usr/share/tests/common-multimedia-suite/tts-gstreamer-tests/gstreamer_video_stop_oggdemux.sh</test_script_entry>\r
+ </description>\r
+ <categories>\r
+ <category>IVI</category>\r
+ <category>Netbook</category>\r
+ <category>TV</category>\r
+ </categories>\r
+ </testcase>\r
+ <testcase purpose="To check if theoradec plugins work correctly" type="functional_positive" status="approved" component="GStreamer/gst-plugins-base" execution_type="auto" priority="P1" id="gstreamer_video_theoradec">\r
+ <description>\r
+ <pre_condition />\r
+ <post_condition />\r
+ <steps>\r
+ <step order="1">\r
+ <step_desc>Check theoradec plugins work status</step_desc>\r
+ <expected>0</expected>\r
+ </step>\r
+ </steps>\r
+ <test_script_entry timeout="200" test_script_expected_result="0">/usr/share/tests/common-multimedia-suite/tts-gstreamer-tests/gstreamer_video_theoradec.sh</test_script_entry>\r
+ </description>\r
+ <categories>\r
+ <category>Netbook</category>\r
+ <category>TV</category>\r
+ <category>IVI</category>\r
+ </categories>\r
+ </testcase>\r
+ <testcase purpose="To check if gstreamer theora codec encode status is correct" type="functional_positive" status="approved" component="GStreamer/gst-plugins-base" execution_type="auto" priority="P1" id="gstreamer_video_theoraenc">\r
+ <description>\r
+ <pre_condition />\r
+ <post_condition />\r
+ <steps>\r
+ <step order="1">\r
+ <step_desc>Check gstreamer theora codec encode status</step_desc>\r
+ <expected>0</expected>\r
+ </step>\r
+ </steps>\r
+ <test_script_entry timeout="90" test_script_expected_result="0">/usr/share/tests/common-multimedia-suite/tts-gstreamer-tests/gstreamer_video_theoraenc.sh</test_script_entry>\r
+ </description>\r
+ <categories>\r
+ <category>Netbook</category>\r
+ <category>TV</category>\r
+ <category>IVI_Crossville</category>\r
+ </categories>\r
+ </testcase>\r
+ </set>\r
+ <set name="gst-plugins-good">\r
+ <testcase purpose="To check if alawenc plugins work correctly" type="functional_positive" status="approved" component="GStreamer/gst-plugins-good" execution_type="auto" priority="P1" id="gstreamer_audio_alawenc">\r
+ <description>\r
+ <pre_condition />\r
+ <post_condition />\r
+ <steps>\r
+ <step order="1">\r
+ <step_desc>Check alawenc plugins work status</step_desc>\r
+ <expected>0</expected>\r
+ </step>\r
+ </steps>\r
+ <test_script_entry timeout="200" test_script_expected_result="0">/usr/share/tests/common-multimedia-suite/tts-gstreamer-tests/gstreamer_audio_alawenc.sh</test_script_entry>\r
+ </description>\r
+ <categories>\r
+ <category>IVI</category>\r
+ <category>Netbook</category>\r
+ <category>TV</category>\r
+ </categories>\r
+ </testcase>\r
+ <testcase purpose="To check if avidemux plugins work correctly" type="functional_positive" status="approved" component="GStreamer/gst-plugins-good" execution_type="auto" priority="P1" id="gstreamer_audio_avidemux">\r
+ <description>\r
+ <pre_condition />\r
+ <post_condition />\r
+ <steps>\r
+ <step order="1">\r
+ <step_desc>Check avidemux plugins work status</step_desc>\r
+ <expected>0</expected>\r
+ </step>\r
+ </steps>\r
+ <test_script_entry timeout="90" test_script_expected_result="0">/usr/share/tests/common-multimedia-suite/tts-gstreamer-tests/gstreamer_audio_avidemux.sh</test_script_entry>\r
+ </description>\r
+ <categories>\r
+ <category>IVI</category>\r
+ <category>Netbook</category>\r
+ <category>TV</category>\r
+ </categories>\r
+ </testcase>\r
+ <testcase purpose="To check if mulawsrc plugins work correctly" type="functional_positive" status="approved" component="GStreamer/gst-plugins-good" execution_type="auto" priority="P1" id="gstreamer_audio_mulawenc">\r
+ <description>\r
+ <pre_condition />\r
+ <post_condition />\r
+ <steps>\r
+ <step order="1">\r
+ <step_desc>Check mulawsrc plugins work status</step_desc>\r
+ <expected>0</expected>\r
+ </step>\r
+ </steps>\r
+ <test_script_entry timeout="200" test_script_expected_result="0">/usr/share/tests/common-multimedia-suite/tts-gstreamer-tests/gstreamer_audio_mulawenc.sh</test_script_entry>\r
+ </description>\r
+ <categories>\r
+ <category>IVI</category>\r
+ <category>Netbook</category>\r
+ <category>TV</category>\r
+ </categories>\r
+ </testcase>\r
+ <testcase purpose="To check if pause status for audio a-LAW format work correctly." type="functional_positive" status="approved" component="GStreamer/gst-plugins-good" execution_type="auto" priority="P1" id="gstreamer_audio_pause_alaw">\r
+ <description>\r
+ <pre_condition />\r
+ <post_condition />\r
+ <steps>\r
+ <step order="1">\r
+ <step_desc>Check pause status for audio a-LAW format.</step_desc>\r
+ <expected>0</expected>\r
+ </step>\r
+ </steps>\r
+ <test_script_entry timeout="90" test_script_expected_result="0">/usr/share/tests/common-multimedia-suite/tts-gstreamer-tests/gstreamer_audio_pause_alaw.sh</test_script_entry>\r
+ </description>\r
+ <categories>\r
+ <category>IVI</category>\r
+ <category>Netbook</category>\r
+ <category>TV</category>\r
+ </categories>\r
+ </testcase>\r
+ <testcase purpose="To check if gstreamer avidemux for pause work correctly" type="functional_positive" status="approved" component="GStreamer/gst-plugins-good" execution_type="auto" priority="P1" id="gstreamer_audio_pause_avidemux">\r
+ <description>\r
+ <pre_condition />\r
+ <post_condition />\r
+ <steps>\r
+ <step order="1">\r
+ <step_desc>Check gstreamer avidemux for pause status</step_desc>\r
+ <expected>0</expected>\r
+ </step>\r
+ </steps>\r
+ <test_script_entry timeout="90" test_script_expected_result="0">/usr/share/tests/common-multimedia-suite/tts-gstreamer-tests/gstreamer_audio_pause_avidemux.sh</test_script_entry>\r
+ </description>\r
+ <categories>\r
+ <category>IVI</category>\r
+ <category>Netbook</category>\r
+ <category>TV</category>\r
+ </categories>\r
+ </testcase>\r
+ <testcase purpose="To check if pause status for audio Linear PCM format work correctly." type="functional_positive" status="approved" component="GStreamer/gst-plugins-good" execution_type="auto" priority="P1" id="gstreamer_audio_pause_lpcm">\r
+ <description>\r
+ <pre_condition />\r
+ <post_condition />\r
+ <steps>\r
+ <step order="1">\r
+ <step_desc>Check pause status for audio Linear PCM format.</step_desc>\r
+ <expected>0</expected>\r
+ </step>\r
+ </steps>\r
+ <test_script_entry timeout="160" test_script_expected_result="0">/usr/share/tests/common-multimedia-suite/tts-gstreamer-tests/gstreamer_audio_pause_lpcm.sh</test_script_entry>\r
+ </description>\r
+ <categories>\r
+ <category>IVI</category>\r
+ <category>Netbook</category>\r
+ <category>TV</category>\r
+ </categories>\r
+ </testcase>\r
+ <testcase purpose="To check if pause audio u-LAW format work correctly." type="functional_positive" status="approved" component="GStreamer/gst-plugins-good" execution_type="auto" priority="P1" id="gstreamer_audio_pause_ulaw">\r
+ <description>\r
+ <pre_condition />\r
+ <post_condition />\r
+ <steps>\r
+ <step order="1">\r
+ <step_desc>Check pause status for audio u-LAW format.</step_desc>\r
+ <expected>0</expected>\r
+ </step>\r
+ </steps>\r
+ <test_script_entry timeout="160" test_script_expected_result="0">/usr/share/tests/common-multimedia-suite/tts-gstreamer-tests/gstreamer_audio_pause_ulaw.sh</test_script_entry>\r
+ </description>\r
+ <categories>\r
+ <category>IVI</category>\r
+ <category>Netbook</category>\r
+ <category>TV</category>\r
+ </categories>\r
+ </testcase>\r
+ <testcase purpose="To check if play audio a-LAW format work correctly." type="functional_positive" status="approved" component="GStreamer/gst-plugins-good" execution_type="auto" priority="P1" id="gstreamer_audio_play_alaw">\r
+ <description>\r
+ <pre_condition />\r
+ <post_condition />\r
+ <steps>\r
+ <step order="1">\r
+ <step_desc>Check play status for audio a-LAW format.</step_desc>\r
+ <expected>0</expected>\r
+ </step>\r
+ </steps>\r
+ <test_script_entry timeout="90" test_script_expected_result="0">/usr/share/tests/common-multimedia-suite/tts-gstreamer-tests/gstreamer_audio_play_alaw.sh</test_script_entry>\r
+ </description>\r
+ <categories>\r
+ <category>IVI</category>\r
+ <category>Netbook</category>\r
+ <category>TV</category>\r
+ </categories>\r
+ </testcase>\r
+ <testcase purpose="To check if gstreamer avidemux for play work correctly" type="functional_positive" status="approved" component="GStreamer/gst-plugins-good" execution_type="auto" priority="P1" id="gstreamer_audio_play_avidemux">\r
+ <description>\r
+ <pre_condition />\r
+ <post_condition />\r
+ <steps>\r
+ <step order="1">\r
+ <step_desc>Check gstreamer avidemux for play status</step_desc>\r
+ <expected>0</expected>\r
+ </step>\r
+ </steps>\r
+ <test_script_entry timeout="90" test_script_expected_result="0">/usr/share/tests/common-multimedia-suite/tts-gstreamer-tests/gstreamer_audio_play_avidemux.sh</test_script_entry>\r
+ </description>\r
+ <categories>\r
+ <category>IVI</category>\r
+ <category>Netbook</category>\r
+ <category>TV</category>\r
+ </categories>\r
+ </testcase>\r
+ <testcase purpose="To check if play audio Linear PCM format correctly" type="functional_positive" status="approved" component="GStreamer/gst-plugins-good" execution_type="auto" priority="P1" id="gstreamer_audio_play_lpcm">\r
+ <description>\r
+ <pre_condition />\r
+ <post_condition />\r
+ <steps>\r
+ <step order="1">\r
+ <step_desc>Check play status for audio Linear PCM format.</step_desc>\r
+ <expected>0</expected>\r
+ </step>\r
+ </steps>\r
+ <test_script_entry timeout="90" test_script_expected_result="0">/usr/share/tests/common-multimedia-suite/tts-gstreamer-tests/gstreamer_audio_play_lpcm.sh</test_script_entry>\r
+ </description>\r
+ <categories>\r
+ <category>IVI</category>\r
+ <category>Netbook</category>\r
+ <category>TV</category>\r
+ </categories>\r
+ </testcase>\r
+ <testcase purpose="To check if play audio u-LAW format correctly" type="functional_positive" status="approved" component="GStreamer/gst-plugins-good" execution_type="auto" priority="P1" id="gstreamer_audio_play_ulaw">\r
+ <description>\r
+ <pre_condition />\r
+ <post_condition />\r
+ <steps>\r
+ <step order="1">\r
+ <step_desc>Check play status for audio u-LAW format.</step_desc>\r
+ <expected>0</expected>\r
+ </step>\r
+ </steps>\r
+ <test_script_entry timeout="90" test_script_expected_result="0">/usr/share/tests/common-multimedia-suite/tts-gstreamer-tests/gstreamer_audio_play_ulaw.sh</test_script_entry>\r
+ </description>\r
+ <categories>\r
+ <category>IVI</category>\r
+ <category>Netbook</category>\r
+ <category>TV</category>\r
+ </categories>\r
+ </testcase>\r
+ <testcase purpose="To check if local audio playback of a-LAW format by gst-launch-0.10 and playbin2 with uri work correctly." type="functional_positive" status="approved" component="GStreamer/gst-plugins-good" execution_type="auto" priority="P0" id="gstreamer_audio_playbin2_alaw_8bit_stereo_44.1khz">\r
+ <description>\r
+ <pre_condition />\r
+ <post_condition />\r
+ <steps>\r
+ <step order="1">\r
+ <step_desc>Check local audio playback of a-LAW format by gst-launch-0.10 and playbin2 with uri only.</step_desc>\r
+ <expected>0</expected>\r
+ </step>\r
+ </steps>\r
+ <test_script_entry timeout="90" test_script_expected_result="0">/usr/share/tests/common-multimedia-suite/tts-gstreamer-tests/gstreamer_audio_playbin2_alaw_8bit_stereo_44.1khz.sh</test_script_entry>\r
+ </description>\r
+ <categories>\r
+ <category>IVI</category>\r
+ <category>Netbook</category>\r
+ <category>TV</category>\r
+ </categories>\r
+ </testcase>\r
+ <testcase purpose="To check if streamimg audio through http of a-LAW format work correctly" type="functional_positive" status="approved" component="GStreamer/gst-plugins-good" execution_type="auto" priority="P1" id="gstreamer_audio_playbin2_http_alaw">\r
+ <description>\r
+ <pre_condition />\r
+ <post_condition />\r
+ <steps>\r
+ <step order="1">\r
+ <step_desc>Check streamimg audio through http of a-LAW format.</step_desc>\r
+ <expected>0</expected>\r
+ </step>\r
+ </steps>\r
+ <test_script_entry timeout="90" test_script_expected_result="0">/usr/share/tests/common-multimedia-suite/tts-gstreamer-tests/gstreamer_audio_playbin2_http_alaw.sh</test_script_entry>\r
+ </description>\r
+ <categories>\r
+ <category>IVI</category>\r
+ <category>Netbook</category>\r
+ <category>TV</category>\r
+ </categories>\r
+ </testcase>\r
+ <testcase purpose="To check if streamimg audio through http of Linear PCM format work correctly." type="functional_positive" status="approved" component="GStreamer/gst-plugins-good" execution_type="auto" priority="P1" id="gstreamer_audio_playbin2_http_lpcm">\r
+ <description>\r
+ <pre_condition />\r
+ <post_condition />\r
+ <steps>\r
+ <step order="1">\r
+ <step_desc>Check streamimg audio through http of Linear PCM format.</step_desc>\r
+ <expected>0</expected>\r
+ </step>\r
+ </steps>\r
+ <test_script_entry timeout="90" test_script_expected_result="0">/usr/share/tests/common-multimedia-suite/tts-gstreamer-tests/gstreamer_audio_playbin2_http_lpcm.sh</test_script_entry>\r
+ </description>\r
+ <categories>\r
+ <category>IVI</category>\r
+ <category>Netbook</category>\r
+ <category>TV</category>\r
+ </categories>\r
+ </testcase>\r
+ <testcase purpose="To check if streamimg audio through http of u-LAW format work correctly" type="functional_positive" status="approved" component="GStreamer/gst-plugins-good" execution_type="auto" priority="P1" id="gstreamer_audio_playbin2_http_ulaw">\r
+ <description>\r
+ <pre_condition />\r
+ <post_condition />\r
+ <steps>\r
+ <step order="1">\r
+ <step_desc>Check streamimg audio through http of u-LAW format.</step_desc>\r
+ <expected>0</expected>\r
+ </step>\r
+ </steps>\r
+ <test_script_entry timeout="90" test_script_expected_result="0">/usr/share/tests/common-multimedia-suite/tts-gstreamer-tests/gstreamer_audio_playbin2_http_ulaw.sh</test_script_entry>\r
+ </description>\r
+ <categories>\r
+ <category>IVI</category>\r
+ <category>Netbook</category>\r
+ <category>TV</category>\r
+ </categories>\r
+ </testcase>\r
+ <testcase purpose="To check if local audio playback of Linear PCM format by gst-launch-0.10 and playbin2 with uri work correctly." type="functional_positive" status="approved" component="GStreamer/gst-plugins-good" execution_type="auto" priority="P1" id="gstreamer_audio_playbin2_lpcm_16bit_stereo_44.1khz">\r
+ <description>\r
+ <pre_condition />\r
+ <post_condition />\r
+ <steps>\r
+ <step order="1">\r
+ <step_desc>Check local audio playback of Linear PCM format by gst-launch-0.10 and playbin2 with uri only.</step_desc>\r
+ <expected>0</expected>\r
+ </step>\r
+ </steps>\r
+ <test_script_entry timeout="90" test_script_expected_result="0">/usr/share/tests/common-multimedia-suite/tts-gstreamer-tests/gstreamer_audio_playbin2_lpcm_16bit_stereo_44.1khz.sh</test_script_entry>\r
+ </description>\r
+ <categories>\r
+ <category>IVI</category>\r
+ <category>Netbook</category>\r
+ <category>TV</category>\r
+ </categories>\r
+ </testcase>\r
+ <testcase purpose="To check if local audio playback of Linear PCM format by gst-launch-0.10 and playbin2 with uri work correctly." type="functional_positive" status="approved" component="GStreamer/gst-plugins-good" execution_type="auto" priority="P1" id="gstreamer_audio_playbin2_lpcm_24bit_stereo_48khz">\r
+ <description>\r
+ <pre_condition />\r
+ <post_condition />\r
+ <steps>\r
+ <step order="1">\r
+ <step_desc>Check local audio playback of Linear PCM format by gst-launch-0.10 and playbin2 with uri only.</step_desc>\r
+ <expected>0</expected>\r
+ </step>\r
+ </steps>\r
+ <test_script_entry timeout="90" test_script_expected_result="0">/usr/share/tests/common-multimedia-suite/tts-gstreamer-tests/gstreamer_audio_playbin2_lpcm_24bit_stereo_48khz.sh</test_script_entry>\r
+ </description>\r
+ <categories>\r
+ <category>IVI</category>\r
+ <category>Netbook</category>\r
+ <category>TV</category>\r
+ </categories>\r
+ </testcase>\r
+ <testcase purpose="To check if local audio playback of u-LAW format by gst-launch-0.10 and playbin2 with uri work correctly." type="functional_positive" status="approved" component="GStreamer/gst-plugins-good" execution_type="auto" priority="P1" id="gstreamer_audio_playbin2_ulaw_8bit_stereo_44.1khz">\r
+ <description>\r
+ <pre_condition />\r
+ <post_condition />\r
+ <steps>\r
+ <step order="1">\r
+ <step_desc>Check local audio playback of u-LAW format by gst-launch-0.10 and playbin2 with uri only.</step_desc>\r
+ <expected>0</expected>\r
+ </step>\r
+ </steps>\r
+ <test_script_entry timeout="90" test_script_expected_result="0">/usr/share/tests/common-multimedia-suite/tts-gstreamer-tests/gstreamer_audio_playbin2_ulaw_8bit_stereo_44.1khz.sh</test_script_entry>\r
+ </description>\r
+ <categories>\r
+ <category>IVI</category>\r
+ <category>Netbook</category>\r
+ <category>TV</category>\r
+ </categories>\r
+ </testcase>\r
+ <testcase purpose="To check if pulsesink plugins work correctly" type="functional_positive" status="approved" component="GStreamer/gst-plugins-good" execution_type="auto" priority="P1" id="gstreamer_audio_pulsesink">\r
+ <description>\r
+ <pre_condition />\r
+ <post_condition />\r
+ <steps>\r
+ <step order="1">\r
+ <step_desc>Check pulsesink plugins work status</step_desc>\r
+ <expected>0</expected>\r
+ </step>\r
+ </steps>\r
+ <test_script_entry timeout="90" test_script_expected_result="0">/usr/share/tests/common-multimedia-suite/tts-gstreamer-tests/gstreamer_audio_pulsesink.sh</test_script_entry>\r
+ </description>\r
+ <categories>\r
+ <category>IVI</category>\r
+ <category>Netbook</category>\r
+ <category>TV</category>\r
+ </categories>\r
+ </testcase>\r
+ <testcase purpose="To check if pulsesrc plugins work correctly" type="functional_positive" status="approved" component="GStreamer/gst-plugins-good" execution_type="auto" priority="P1" id="gstreamer_audio_pulsesrc">\r
+ <description>\r
+ <pre_condition />\r
+ <post_condition />\r
+ <steps>\r
+ <step order="1">\r
+ <step_desc>Check pulsesrc plugins work status</step_desc>\r
+ <expected>0</expected>\r
+ </step>\r
+ </steps>\r
+ <test_script_entry timeout="90" test_script_expected_result="0">/usr/share/tests/common-multimedia-suite/tts-gstreamer-tests/gstreamer_audio_pulsesrc.sh</test_script_entry>\r
+ </description>\r
+ <categories>\r
+ <category>IVI</category>\r
+ <category>Netbook</category>\r
+ <category>TV</category>\r
+ </categories>\r
+ </testcase>\r
+ <testcase purpose="To check if resume for audio a-LAW format work correctly." type="functional_positive" status="approved" component="GStreamer/gst-plugins-good" execution_type="auto" priority="P1" id="gstreamer_audio_resume_alaw">\r
+ <description>\r
+ <pre_condition />\r
+ <post_condition />\r
+ <steps>\r
+ <step order="1">\r
+ <step_desc>Check resume status for audio a-LAW format.</step_desc>\r
+ <expected>0</expected>\r
+ </step>\r
+ </steps>\r
+ <test_script_entry timeout="90" test_script_expected_result="0">/usr/share/tests/common-multimedia-suite/tts-gstreamer-tests/gstreamer_audio_resume_alaw.sh</test_script_entry>\r
+ </description>\r
+ <categories>\r
+ <category>IVI</category>\r
+ <category>Netbook</category>\r
+ <category>TV</category>\r
+ </categories>\r
+ </testcase>\r
+ <testcase purpose="To check if gstreamer avidemux for resume work correctly" type="functional_positive" status="approved" component="GStreamer/gst-plugins-good" execution_type="auto" priority="P1" id="gstreamer_audio_resume_avidemux">\r
+ <description>\r
+ <pre_condition />\r
+ <post_condition />\r
+ <steps>\r
+ <step order="1">\r
+ <step_desc>Check gstreamer avidemux for resume status</step_desc>\r
+ <expected>0</expected>\r
+ </step>\r
+ </steps>\r
+ <test_script_entry timeout="90" test_script_expected_result="0">/usr/share/tests/common-multimedia-suite/tts-gstreamer-tests/gstreamer_audio_resume_avidemux.sh</test_script_entry>\r
+ </description>\r
+ <categories>\r
+ <category>IVI</category>\r
+ <category>Netbook</category>\r
+ <category>TV</category>\r
+ </categories>\r
+ </testcase>\r
+ <testcase purpose="To check if resume status for audio Linear PCM format is correct." type="functional_positive" status="approved" component="GStreamer/gst-plugins-good" execution_type="auto" priority="P1" id="gstreamer_audio_resume_lpcm">\r
+ <description>\r
+ <pre_condition />\r
+ <post_condition />\r
+ <steps>\r
+ <step order="1">\r
+ <step_desc>Check resume status for audio Linear PCM format.</step_desc>\r
+ <expected>0</expected>\r
+ </step>\r
+ </steps>\r
+ <test_script_entry timeout="160" test_script_expected_result="0">/usr/share/tests/common-multimedia-suite/tts-gstreamer-tests/gstreamer_audio_resume_lpcm.sh</test_script_entry>\r
+ </description>\r
+ <categories>\r
+ <category>IVI</category>\r
+ <category>Netbook</category>\r
+ <category>TV</category>\r
+ </categories>\r
+ </testcase>\r
+ <testcase purpose="To check if resume audio u-LAW format work correctly" type="functional_positive" status="approved" component="GStreamer/gst-plugins-good" execution_type="auto" priority="P1" id="gstreamer_audio_resume_ulaw">\r
+ <description>\r
+ <pre_condition />\r
+ <post_condition />\r
+ <steps>\r
+ <step order="1">\r
+ <step_desc>Check resume status for audio u-LAW format.</step_desc>\r
+ <expected>0</expected>\r
+ </step>\r
+ </steps>\r
+ <test_script_entry timeout="90" test_script_expected_result="0">/usr/share/tests/common-multimedia-suite/tts-gstreamer-tests/gstreamer_audio_resume_ulaw.sh</test_script_entry>\r
+ </description>\r
+ <categories>\r
+ <category>IVI</category>\r
+ <category>Netbook</category>\r
+ <category>TV</category>\r
+ </categories>\r
+ </testcase>\r
+ <testcase purpose="To check if seek status for audio a-LAW format work correctly" type="functional_positive" status="approved" component="GStreamer/gst-plugins-good" execution_type="auto" priority="P1" id="gstreamer_audio_seek_alaw">\r
+ <description>\r
+ <pre_condition />\r
+ <post_condition />\r
+ <steps>\r
+ <step order="1">\r
+ <step_desc>Check seek status for audio a-LAW format.</step_desc>\r
+ <expected>0</expected>\r
+ </step>\r
+ </steps>\r
+ <test_script_entry timeout="90" test_script_expected_result="0">/usr/share/tests/common-multimedia-suite/tts-gstreamer-tests/gstreamer_audio_seek_alaw.sh</test_script_entry>\r
+ </description>\r
+ <categories>\r
+ <category>IVI</category>\r
+ <category>Netbook</category>\r
+ <category>TV</category>\r
+ </categories>\r
+ </testcase>\r
+ <testcase purpose="To check if gstreamer avidemux for seek status is correctly" type="functional_positive" status="approved" component="GStreamer/gst-plugins-good" execution_type="auto" priority="P1" id="gstreamer_audio_seek_avidemux">\r
+ <description>\r
+ <pre_condition />\r
+ <post_condition />\r
+ <steps>\r
+ <step order="1">\r
+ <step_desc>Check gstreamer avidemux for seek status</step_desc>\r
+ <expected>0</expected>\r
+ </step>\r
+ </steps>\r
+ <test_script_entry timeout="90" test_script_expected_result="0">/usr/share/tests/common-multimedia-suite/tts-gstreamer-tests/gstreamer_audio_seek_avidemux.sh</test_script_entry>\r
+ </description>\r
+ <categories>\r
+ <category>IVI</category>\r
+ <category>Netbook</category>\r
+ <category>TV</category>\r
+ </categories>\r
+ </testcase>\r
+ <testcase purpose="To check if seek audio Linear PCM format work correctly" type="functional_positive" status="approved" component="GStreamer/gst-plugins-good" execution_type="auto" priority="P1" id="gstreamer_audio_seek_lpcm">\r
+ <description>\r
+ <pre_condition />\r
+ <post_condition />\r
+ <steps>\r
+ <step order="1">\r
+ <step_desc>Check seek status for audio Linear PCM format.</step_desc>\r
+ <expected>0</expected>\r
+ </step>\r
+ </steps>\r
+ <test_script_entry timeout="90" test_script_expected_result="0">/usr/share/tests/common-multimedia-suite/tts-gstreamer-tests/gstreamer_audio_seek_lpcm.sh</test_script_entry>\r
+ </description>\r
+ <categories>\r
+ <category>IVI</category>\r
+ <category>Netbook</category>\r
+ <category>TV</category>\r
+ </categories>\r
+ </testcase>\r
+ <testcase purpose="To check if seek for audio u-LAW format correctly." type="functional_positive" status="approved" component="GStreamer/gst-plugins-good" execution_type="auto" priority="P1" id="gstreamer_audio_seek_ulaw">\r
+ <description>\r
+ <pre_condition />\r
+ <post_condition />\r
+ <steps>\r
+ <step order="1">\r
+ <step_desc>Check seek status for audio u-LAW format.</step_desc>\r
+ <expected>0</expected>\r
+ </step>\r
+ </steps>\r
+ <test_script_entry timeout="90" test_script_expected_result="0">/usr/share/tests/common-multimedia-suite/tts-gstreamer-tests/gstreamer_audio_seek_ulaw.sh</test_script_entry>\r
+ </description>\r
+ <categories>\r
+ <category>IVI</category>\r
+ <category>Netbook</category>\r
+ <category>TV</category>\r
+ </categories>\r
+ </testcase>\r
+ <testcase purpose="To check if stop audio a-LAW format work correctly." type="functional_positive" status="approved" component="GStreamer/gst-plugins-good" execution_type="auto" priority="P1" id="gstreamer_audio_stop_alaw">\r
+ <description>\r
+ <pre_condition />\r
+ <post_condition />\r
+ <steps>\r
+ <step order="1">\r
+ <step_desc>Check stop status for audio a-LAW format.</step_desc>\r
+ <expected>0</expected>\r
+ </step>\r
+ </steps>\r
+ <test_script_entry timeout="90" test_script_expected_result="0">/usr/share/tests/common-multimedia-suite/tts-gstreamer-tests/gstreamer_audio_stop_alaw.sh</test_script_entry>\r
+ </description>\r
+ <categories>\r
+ <category>IVI</category>\r
+ <category>Netbook</category>\r
+ <category>TV</category>\r
+ </categories>\r
+ </testcase>\r
+ <testcase purpose="To check if gstreamer avidemux for stop status is correct" type="functional_positive" status="approved" component="GStreamer/gst-plugins-good" execution_type="auto" priority="P1" id="gstreamer_audio_stop_avidemux">\r
+ <description>\r
+ <pre_condition />\r
+ <post_condition />\r
+ <steps>\r
+ <step order="1">\r
+ <step_desc>Check gstreamer avidemux for stop status</step_desc>\r
+ <expected>0</expected>\r
+ </step>\r
+ </steps>\r
+ <test_script_entry timeout="90" test_script_expected_result="0">/usr/share/tests/common-multimedia-suite/tts-gstreamer-tests/gstreamer_audio_stop_avidemux.sh</test_script_entry>\r
+ </description>\r
+ <categories>\r
+ <category>IVI</category>\r
+ <category>Netbook</category>\r
+ <category>TV</category>\r
+ </categories>\r
+ </testcase>\r
+ <testcase purpose="To check if stop for audio Linear PCM format work correctly" type="functional_positive" status="approved" component="GStreamer/gst-plugins-good" execution_type="auto" priority="P1" id="gstreamer_audio_stop_lpcm">\r
+ <description>\r
+ <pre_condition />\r
+ <post_condition />\r
+ <steps>\r
+ <step order="1">\r
+ <step_desc>Check stop status for audio Linear PCM format.</step_desc>\r
+ <expected>0</expected>\r
+ </step>\r
+ </steps>\r
+ <test_script_entry timeout="90" test_script_expected_result="0">/usr/share/tests/common-multimedia-suite/tts-gstreamer-tests/gstreamer_audio_stop_lpcm.sh</test_script_entry>\r
+ </description>\r
+ <categories>\r
+ <category>IVI</category>\r
+ <category>Netbook</category>\r
+ <category>TV</category>\r
+ </categories>\r
+ </testcase>\r
+ <testcase purpose="To check if stop status for audio u-LAW format work correctly" type="functional_positive" status="approved" component="GStreamer/gst-plugins-good" execution_type="auto" priority="P1" id="gstreamer_audio_stop_ulaw">\r
+ <description>\r
+ <pre_condition />\r
+ <post_condition />\r
+ <steps>\r
+ <step order="1">\r
+ <step_desc>Check stop status for audio u-LAW format.</step_desc>\r
+ <expected>0</expected>\r
+ </step>\r
+ </steps>\r
+ <test_script_entry timeout="90" test_script_expected_result="0">/usr/share/tests/common-multimedia-suite/tts-gstreamer-tests/gstreamer_audio_stop_ulaw.sh</test_script_entry>\r
+ </description>\r
+ <categories>\r
+ <category>IVI</category>\r
+ <category>Netbook</category>\r
+ <category>TV</category>\r
+ </categories>\r
+ </testcase>\r
+\r
+ <testcase purpose="To check if gstreamer jpeg decode work correctly" type="functional_positive" status="approved" component="GStreamer/gst-plugins-good" execution_type="auto" priority="P1" id="gstreamer_image_jpegdec">\r
+ <description>\r
+ <pre_condition />\r
+ <post_condition />\r
+ <steps>\r
+ <step order="1">\r
+ <step_desc>Check gstreamer jpeg decode status</step_desc>\r
+ <expected>0</expected>\r
+ </step>\r
+ </steps>\r
+ <test_script_entry timeout="90" test_script_expected_result="0">/usr/share/tests/common-multimedia-suite/tts-gstreamer-tests/gstreamer_image_jpegdec.sh</test_script_entry>\r
+ </description>\r
+ <categories>\r
+ <category>IVI</category>\r
+ <category>Netbook</category>\r
+ <category>TV</category>\r
+ </categories>\r
+ </testcase>\r
+ <testcase purpose="To check if gstreamer jpeg encode work correctly" type="functional_positive" status="approved" component="GStreamer/gst-plugins-good" execution_type="auto" priority="P0" id="gstreamer_image_jpegenc">\r
+ <description>\r
+ <pre_condition />\r
+ <post_condition />\r
+ <steps>\r
+ <step order="1">\r
+ <step_desc>Check gstreamer jpeg encode status</step_desc>\r
+ <expected>0</expected>\r
+ </step>\r
+ </steps>\r
+ <test_script_entry timeout="90" test_script_expected_result="0">/usr/share/tests/common-multimedia-suite/tts-gstreamer-tests/gstreamer_image_jpegenc.sh</test_script_entry>\r
+ </description>\r
+ <categories>\r
+ <category>Netbook</category>\r
+ <category>TV</category>\r
+ <category>IVI_Crossville</category>\r
+ </categories>\r
+ </testcase>\r
+ <testcase purpose="To check if gstreamer png decode work correctly" type="functional_positive" status="approved" component="GStreamer/gst-plugins-good" execution_type="auto" priority="P1" id="gstreamer_image_pngdec">\r
+ <description>\r
+ <pre_condition />\r
+ <post_condition />\r
+ <steps>\r
+ <step order="1">\r
+ <step_desc>Check gstreamer png decode status</step_desc>\r
+ <expected>0</expected>\r
+ </step>\r
+ </steps>\r
+ <test_script_entry timeout="90" test_script_expected_result="0">/usr/share/tests/common-multimedia-suite/tts-gstreamer-tests/gstreamer_image_pngdec.sh</test_script_entry>\r
+ </description>\r
+ <categories>\r
+ <category>IVI</category>\r
+ <category>Netbook</category>\r
+ <category>TV</category>\r
+ </categories>\r
+ </testcase>\r
+ <testcase purpose="To check if gstreamer png encode work correctly" type="functional_positive" status="approved" component="GStreamer/gst-plugins-good" execution_type="auto" priority="P1" id="gstreamer_image_pngenc">\r
+ <description>\r
+ <pre_condition />\r
+ <post_condition />\r
+ <steps>\r
+ <step order="1">\r
+ <step_desc>Check gstreamer png encode status</step_desc>\r
+ <expected>0</expected>\r
+ </step>\r
+ </steps>\r
+ <test_script_entry timeout="90" test_script_expected_result="0">/usr/share/tests/common-multimedia-suite/tts-gstreamer-tests/gstreamer_image_pngenc.sh</test_script_entry>\r
+ </description>\r
+ <categories>\r
+ <category>Netbook</category>\r
+ <category>TV</category>\r
+ <category>IVI_Crossville</category>\r
+ </categories>\r
+ </testcase>\r
+ </set>\r
+ </suite>\r
+</test_definition>\r
+\r
--- /dev/null
+-----------------------
+ Introduction
+-----------------------
+tts-pulseaudio-tests is a test suite for pulseaudio.
+Pulseaudio is an open source audio server under Linux.
+
+The auto test cases cover the basic sink & source query,
+sink & source load/unload, setup default sink & source,
+playback sample file etc.
+
+
+
+-----------------------
+How to Run
+-----------------------
+Pre-condition:
+1. if you don't have testkit-lite, you can get it from https://github.com/testkit/testkit-lite
+
+Steps:
+1. prepare some media files and configure /usr/share/tests/common-multimedia-suite/tts-pulseaudio-tests/env.sh --- specify in env.sh
+2. launch terminal app in weston UI and play an audio by command "paplay /usr/share/sounds/alsa/Front_Center.wav" to trigger Pulseaudio daemon
+3. testkit-lite -f /usr/share/tests/common-multimedia-suite/tts-pulseaudio-tests/tests.xml --comm localhost -o ./results.xml
+
+
+----------------------
+Test Environment setup
+----------------------
+Some audio files are needed(WAVE files), you can configure /usr/share/tests/common-multimedia-suite/tts-pulseaudio-tests/env.sh to specify
+them; e.g. MF_TEST_8K="/usr/share/tests/common-multimedia-suite/tts-pulseaudio-tests/data/PCM_16bit_Mono_8KHz_128Kbps_60sec\(1Mb\).wav"
+
+
+-----------------------
+TODO
+-----------------------
--- /dev/null
+#!/bin/bash
+# Copyright (C) 2010 Intel Corporation
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# Authors:
+# Chen, Hao <hao.h.chen@intel.com>
+#
+
+# Modifications:
+# Modificator: shuang.wan@intel.com Date: 2010-07-09
+# Content of Modification
+# 1) Supplement the comments to the script file
+# 2) Move the environment variables initlization to env.sh
+
+# Modificator: cathy.li@intel.com Date: 2012-05-24
+# Update the code of check pulseaudio daemon
+#DESCR: Check PulseAudio daemon
+
+DAEMON="pulseaudio"
+
+# Setup the execution environment
+. $(cd `dirname $0`;pwd)/env.sh
+
+#pulseaudio --check
+
+if ps -ef |grep -v "grep" |grep "$DAEMON" >/dev/null 2>&1
+then
+ echo "Success: $DAEMON daemon is running"
+else
+ echo "Fail: $DAEMON daemon is not running"
+ exit 1
+fi
+
--- /dev/null
+#!/bin/bash
+# Copyright (C) 2010 Intel Corporation
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# Authors:
+# Chen, Hao <hao.h.chen@intel.com>
+#
+# Modifications:
+# Modificator: shuang.wan@intel.com Date: 2010-07-09
+# Content of Modification
+# 1) Supplement the comments to the script file
+# 2) Move the environment variables initlization to env.sh
+
+# Check default settings
+
+. $(cd `dirname $0`;pwd)/env.sh
+if [ $UID = 0 ];then
+ su - app -c "XDG_RUNTIME_DIR=/run/user/5000 pulseaudio --dump-conf"
+else
+ pulseaudio --dump-conf
+fi
+if [ $? -ne 0 ]; then
+ echo "Failed to pulseaudio --dump-conf"
+ exit 1
+fi
+if [ $UID = 0 ];then
+ su - app -c "XDG_RUNTIME_DIR=/run/user/5000 pulseaudio --dump-modules"
+else
+ pulseaudio --dump-modules
+fi
+if [ $? -ne 0 ]; then
+ echo "Failed to pulseaudio --dump-modules"
+ exit 1
+fi
+
--- /dev/null
+#!/bin/bash
+# Copyright (C) 2010 Intel Corporation
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# Authors:
+# Chen, Hao <hao.h.chen@intel.com>
+#
+# PulseAudio Statistics & all current loaded modules, available sinks, sources, streams and clients
+
+# Modifications:
+# Modificator: shuang.wan@intel.com Date: 2010-07-09
+# Content of Modification
+# 1) Supplement the comments to the script file
+# 2) Move the environment variables initlization to env.sh
+
+. $(cd `dirname $0`;pwd)/env.sh
+if [ $UID = 0 ];then
+ su - app -c 'XDG_RUNTIME_DIR=/run/user/5000 pactl stat'
+else
+ pactl stat
+fi
+
+if [ $? -ne 0 ]; then
+ echo "Failed to pactl stat"
+ exit 1
+fi
+if [ $UID = 0 ];then
+ su - app -c 'XDG_RUNTIME_DIR=/run/user/5000 pactl list'
+else
+ pactl list
+fi
+
+if [ $? -ne 0 ]; then
+ echo "Failed to pactl list"
+ exit 1
+fi
--- /dev/null
+#!/bin/bash
+# Copyright (C) 2010 Intel Corporation
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# Authors:
+# Chen, Hao <hao.h.chen@intel.com>
+#
+# load sample, play sample, unload sample
+
+# Modifications:
+# Modificator: shuang.wan@intel.com Date: 2010-07-09
+# Content of Modification
+# 1) Supplement the comments to the script file
+# 2) Move the environment variables initlization to env.sh
+
+. $(cd `dirname $0`;pwd)/env.sh
+if [ $UID = 0 ];then
+ su - app -c "XDG_RUNTIME_DIR=/run/user/5000 pactl upload-sample ${MF_TEST_WAV} test_sample"
+else
+ pactl upload-sample ${MF_TEST_WAV} test_sample
+fi
+if [ $? -ne 0 ]; then
+ echo "Failed to upload-sample"
+ exit 1
+fi
+
+if [ $UID = 0 ];then
+ su - app -c "XDG_RUNTIME_DIR=/run/user/5000 pactl play-sample test_sample"
+else
+ pactl play-sample test_sample
+fi
+if [ $? -ne 0 ]; then
+ echo "Failed to play sample"
+ exit 1
+fi
+
+if [ $UID = 0 ];then
+ su - app -c "XDG_RUNTIME_DIR=/run/user/5000 pactl remove-sample test_sample"
+else
+ pactl remove-sample test_sample
+fi
+if [ $? -ne 0 ]; then
+ echo "Failed to unload modules"
+ exit 1
+fi
+
--- /dev/null
+#!/bin/bash
+# Copyright (C) 2010 Intel Corporation
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# Authors:
+# Chen, Hao <hao.h.chen@intel.com>
+#
+# load module, unload module
+
+# Modifications:
+# Modificator: shuang.wan@intel.com Date: 2010-07-09
+# Content of Modification
+# 1) Supplement the comments to the script file
+# 2) Move the environment variables initlization to env.sh
+
+. $(cd `dirname $0`;pwd)/env.sh
+if [ $UID = 0 ];then
+ su - app -c "XDG_RUNTIME_DIR=/run/user/5000 /opt/tts-pulseaudio-tests/pa_query_control -cm load module-null-sink sink_name=pa_test_sink > /tmp/test_result"
+else
+ $UTILS_PATH/pa_query_control -cm load module-null-sink sink_name=pa_test_sink > "$TEST_RESULT"
+fi
+
+if [ $? -ne 0 ]; then
+ echo "Failed to load module"
+ exit 1
+fi
+cat "$TEST_RESULT"
+
+index=`cat "$TEST_RESULT" | awk -F= '{print $2}'`
+if [ $UID = 0 ];then
+ su - app -c "XDG_RUNTIME_DIR=/run/user/5000 /opt/tts-pulseaudio-tests/pa_query_control -qm"
+else
+ $UTILS_PATH/pa_query_control -qm
+fi
+
+if [ $? -ne 0 ]; then
+ echo "Failed to query modules"
+ exit 1
+fi
+if [ $UID = 0 ];then
+ su - app -c "XDG_RUNTIME_DIR=/run/user/5000 /opt/tts-pulseaudio-tests/pa_query_control -cm unload `cat /tmp/test_result|awk -F= '{print $2}'`"
+else
+ $UTILS_PATH/pa_query_control -cm unload $index
+fi
+
+if [ $? -ne 0 ]; then
+ echo "Failed to unload modules"
+ exit 1
+
+fi
+
+rm "$TEST_RESULT"
--- /dev/null
+#!/bin/bash
+# Copyright (C) 2011 Intel Corporation
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# Authors:
+# Zhang, Zhiqiang <zhiqiang.zhang@intel.com>
+#
+# DESCR:
+# Play a mono raw PCM audio file by paplay with default settings
+#
+# TIMEOUT: 90
+
+. $(cd `dirname $0`;pwd)/env.sh
+
+#DATA="$DATA_PATH/PCM_16bit_Mono_8KHz_128Kbps_60sec(1Mb).wav"
+#if ! [ -f $DATA ]; then
+# echo "Error: not exist the file $DATA"
+# exit 1
+#fi
+
+if [ $UID = 0 ];then
+ su - app -c "XDG_RUNTIME_DIR=/run/user/5000 paplay ${MF_TEST_8K}"
+else
+ paplay ${MF_TEST_8K}
+fi
+if [ $? -ne 0 ]; then
+ echo "Failed to play the sample"
+ exit 1
+fi
+
--- /dev/null
+#!/bin/bash
+# Copyright (C) 2011 Intel Corporation
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# Authors:
+# Zhang, Zhiqiang <zhiqiang.zhang@intel.com>
+#
+# DESCR:
+# Play a multichannel raw PCM audio file by paplay with default settings
+#
+# TIMEOUT: 70
+
+
+. $(cd `dirname $0`;pwd)/env.sh
+
+#DATA="$DATA_PATH/PCM_16bit_5.1(Discrete)_48KHz_4608Kbps_38sec(21MB).wav"
+#if ! [ -f $DATA ]; then
+# echo "Error: not exist the file $DATA"
+# exit 1
+#fi
+
+if [ $UID = 0 ];then
+ echo $MF_TEST_48K
+ su - app -c "XDG_RUNTIME_DIR=/run/user/5000 paplay ${MF_TEST_48K}"
+else
+ paplay $MF_TEST_48K
+fi
+if [ $? -ne 0 ]; then
+ echo "Failed to play the sample"
+ exit 1
+fi
+
--- /dev/null
+#!/bin/bash
+# Copyright (C) 2011 Intel Corporation
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# Authors:
+# Zhang, Zhiqiang <zhiqiang.zhang@intel.com>
+#
+# DESCR:
+# Play a stereo raw PCM audio file by paplay with default settings
+#
+# TIMEOUT: 20
+
+
+. $(cd `dirname $0`;pwd)/env.sh
+
+#DATA="$DATA_PATH/PCM_16bit_Stereo_44.1KHz_1411Kbps_10s(1.6Mb).WAV"
+#if ! [ -f $DATA ]; then
+# echo "Error: not exist the file $DATA"
+# exit 1
+#fi
+
+if [ $UID = 0 ];then
+ su - app -c "XDG_RUNTIME_DIR=/run/user/5000 paplay ${MF_TEST_44K_1}"
+else
+ paplay ${MF_TEST_44K_1}
+fi
+
+if [ $? -ne 0 ]; then
+ echo "Failed to play the sample"
+ exit 1
+fi
+
--- /dev/null
+#!/bin/bash
+# Copyright (C) 2011 Intel Corporation
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# Authors:
+# Zhang, Zhiqiang <zhiqiang.zhang@intel.com>
+#
+# DESCR:
+# Play 2 PCM audio files by paplay simultaneously with default settings
+#
+# TIMEOUT: 90
+
+
+. $(cd `dirname $0`;pwd)/env.sh
+
+#DATA1="$DATA_PATH/PCM_16bit_Stereo_44.1KHz_1411Kbps_10s(1.6Mb).WAV"
+#if ! [ -f $DATA1 ]; then
+# echo "Error: not exist the file $DATA1"
+# exit 1
+#fi
+#
+#DATA2="$DATA_PATH/PCM_16bit_Stereo_44.1KHz_1412.2Kbps_60sec(10Mb).wav"
+#if ! [ -f $DATA2 ]; then
+# echo "Error: not exist the file $DATA2"
+# exit 1
+#fi
+
+if [ $UID = 0 ];then
+ su - app -c "XDG_RUNTIME_DIR=/run/user/5000 paplay ${MF_TEST_44K_1}" & su app -c "XDG_RUNTIME_DIR=/run/user/5000 paplay ${MF_TEST_44K_2}"
+else
+ paplay ${MF_TEST_44K_1} & paplay ${MF_TEST_44K_2}
+fi
+if [ $? -ne 0 ]; then
+ echo "Failed to play the sample"
+ exit 1
+fi
+
--- /dev/null
+#!/bin/bash
+# Copyright (C) 2011 Intel Corporation
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# Authors:
+# Zhang, Zhiqiang <zhiqiang.zhang@intel.com>
+#
+# DESCR:
+# Play a raw PCM audio file by paplay repeat for 100 times with default settings
+#
+# TIMEOUT: 1500
+
+
+. $(cd `dirname $0`;pwd)/env.sh
+
+#DATA="$DATA_PATH/test.wav"
+#if ! [ -f $DATA ]; then
+# echo "Error: not exist the file $DATA"
+# exit 1
+#fi
+
+count=1
+while [ "$count" -le 100 ]
+do
+ echo "$count time(s) played."
+ if [ $UID = 0 ];then
+ su - app -c "XDG_RUNTIME_DIR=/run/user/5000 paplay ${MF_TEST_WAV}"
+ else
+ paplay ${MF_TEST_WAV}
+ fi
+ if [ $? -ne 0 ]; then
+ echo "Failed to paplay : $count"
+ exit 1
+ fi
+ let "count += 1" # increase count
+done
+
+
--- /dev/null
+#!/bin/bash
+# Copyright (C) 2010 Intel Corporation
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# Authors:
+# Chen, Hao <hao.h.chen@intel.com>
+#
+# query loaded clients
+# Modifications:
+# Modificator: shuang.wan@intel.com Date: 2010-07-09
+# Content of Modification
+# 1) Supplement the comments to the script file
+# 2) Move the environment variables initlization to env.sh
+
+. $(cd `dirname $0`;pwd)/env.sh
+if [ $UID = 0 ];then
+ su - app -c "XDG_RUNTIME_DIR=/run/user/5000 /opt/tts-pulseaudio-tests/pa_query_control -qc"
+else
+ $UTILS_PATH/pa_query_control -qc
+fi
+
+if [ $? -ne 0 ]; then
+ echo "Failed to query loaded clients"
+ exit 1
+fi
+
+
--- /dev/null
+#!/bin/bash
+# Copyright (C) 2010 Intel Corporation
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# Authors:
+# Chen, Hao <hao.h.chen@intel.com>
+#
+# query loaded sinks
+
+# Modifications:
+# Modificator: shuang.wan@intel.com Date: 2010-07-09
+# Content of Modification
+# 1) Supplement the comments to the script file
+# 2) Move the environment variables initlization to env.sh
+
+. $(cd `dirname $0`;pwd)/env.sh
+if [ $UID = 0 ];then
+ su - app -c "XDG_RUNTIME_DIR=/run/user/5000 /opt/tts-pulseaudio-tests/pa_query_control -qs"
+else
+ $UTILS_PATH/pa_query_control -qs
+fi
+if [ $? -ne 0 ]; then
+ echo "Failed to query loaded sinks"
+ exit 1
+fi
+
--- /dev/null
+#!/bin/bash
+# Copyright (C) 2010 Intel Corporation
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# Authors:
+# Chen, Hao <hao.h.chen@intel.com>
+#
+# query loaded sources
+
+# Modifications:
+# Modificator: shuang.wan@intel.com Date: 2010-07-09
+# Content of Modification
+# 1) Supplement the comments to the script file
+# 2) Move the environment variables initlization to env.sh
+
+. $(cd `dirname $0`;pwd)/env.sh
+if [ $UID = 0 ];then
+ su - app -c "XDG_RUNTIME_DIR=/run/user/5000 /opt/tts-pulseaudio-tests/pa_query_control -qo"
+else
+ $UTILS_PATH/pa_query_control -qo
+fi
+
+if [ $? -ne 0 ]; then
+ echo "Failed to query loaded sources"
+ exit 1
+fi
+
+
--- /dev/null
+#!/bin/bash
+# Copyright (C) 2010 Intel Corporation
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# Authors:
+# Chen, Hao <hao.h.chen@intel.com>
+#
+# query memory block statistics
+
+# Modifications:
+# Modificator: shuang.wan@intel.com Date: 2010-07-09
+# Content of Modification
+# 1) Supplement the comments to the script file
+# 2) Move the environment variables initlization to env.sh
+
+. $(cd `dirname $0`;pwd)/env.sh
+if [ $UID = 0 ];then
+ su - app -c "XDG_RUNTIME_DIR=/run/user/5000 pacmd stat"
+else
+ pacmd stat
+fi
+if [ $? -ne 0 ]; then
+ echo "Failed to pacmd stat"
+ exit 1
+fi
--- /dev/null
+#!/bin/bash
+# Copyright (C) 2010 Intel Corporation
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# Authors:
+# Chen, Hao <hao.h.chen@intel.com>
+#
+# query server information
+
+# Modifications:
+# Modificator: shuang.wan@intel.com Date: 2010-07-09
+# Content of Modification
+# 1) Supplement the comments to the script file
+# 2) Move the environment variables initlization to env.sh
+
+. $(cd `dirname $0`;pwd)/env.sh
+
+#$UTILS_PATH/pa_query_control -qi
+if [ $UID = 0 ];then
+ su - app -c "XDG_RUNTIME_DIR=/run/user/5000 pacmd info"
+else
+ pacmd info
+fi
+if [ $? -ne 0 ]; then
+ echo "Failed to query server information"
+ exit 1
+fi
+
--- /dev/null
+#!/bin/bash
+# Copyright (C) 2010 Intel Corporation
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# Authors:
+# Chen, Hao <hao.h.chen@intel.com>
+#
+# query sink inputs
+
+# Modifications:
+# Modificator: shuang.wan@intel.com Date: 2010-07-09
+# Content of Modification
+# 1) Supplement the comments to the script file
+# 2) Move the environment variables initlization to env.sh
+
+. $(cd `dirname $0`;pwd)/env.sh
+if [ $UID = 0 ];then
+ su - app -c "XDG_RUNTIME_DIR=/run/user/5000 /opt/tts-pulseaudio-tests/pa_query_control -qI"
+else
+ $UTILS_PATH/pa_query_control -qI
+fi
+
+if [ $? -ne 0 ]; then
+ echo "Failed to query sink inputs"
+ exit 1
+fi
+
--- /dev/null
+#!/bin/bash
+# Copyright (C) 2011 Intel Corporation
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# Authors:
+# Zhang, Zhiqiang <zhiqiang.zhang@intel.com>
+#
+# DESCR:
+# Record a raw PCM audio file by parec with default settings
+#
+# TIMEOUT: 90
+
+
+DATA=/tmp/parec.wav
+
+# Record a raw PCM audio/noise
+if [ $UID = 0 ];then
+ su - app -c "XDG_RUNTIME_DIR=/run/user/5000 parec --record /tmp/parec.wav &"
+else
+ parec --record $DATA &
+fi
+
+# Stop recording after 10 seconds
+sleep 10
+
+COUNT=0
+while [ "$COUNT" -lt 3 ] # try 3 times
+do
+ PID=`ps -eaf | grep parec | grep -v "grep" | awk '{print $2}'`
+ if [ -z "$PID" ]; then
+ break;
+ fi
+ kill $PID
+ let "COUNT += 1" # increase COUNT
+done
+
+# Check the recorded audio file
+if ! [ -s $DATA ]; then
+ echo "Error: failed to record voice by parec with default settings"
+ exit 1
+fi
+
+rm -f $DATA
+exit 0
--- /dev/null
+#!/bin/bash
+# Copyright (C) 2011 Intel Corporation
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# Authors:
+# Zhang, Zhiqiang <zhiqiang.zhang@intel.com>
+# Modification:
+# Li Cathy <cathy.li@intel.com>
+# Date: 2012-01-18
+# Update description and record time
+#
+# DESCR:
+# Record a raw PCM audio file by parec long time with default settings, and
+# play the recorded audio file by paplay
+#
+# TIMEOUT: 2000
+
+
+DATA=/tmp/parec.wav
+
+# Record a raw PCM audio/noise
+if [ $UID = 0 ];then
+ su - app -c "XDG_RUNTIME_DIR=/run/user/5000 parec --record /tmp/parec.wav &"
+else
+ parec --record $DATA &
+fi
+
+# Last for 900 seconds
+sleep 900
+
+COUNT=0
+while [ "$COUNT" -lt 3 ] # try 3 times
+do
+ PID=`ps -eaf | grep parec | grep -v "grep" | awk '{print $2}'`
+ if [ -z "$PID" ]; then
+ break;
+ fi
+ kill $PID
+ let "COUNT += 1" # increase COUNT
+done
+
+# Check the recorded audio file
+if ! [ -s $DATA ]; then
+ echo "Error: failed to record voice by parec with default settings"
+ exit 1
+fi
+
+# Play the recorded audio file
+if [ $UID = 0 ];then
+ su - app -c 'XDG_RUNTIME_DIR=/run/user/5000 paplay --raw /tmp/parec.wav'
+else
+ paplay --raw $DATA
+fi
+
+if [ $? -ne 0 ]; then
+ echo "Error: failed to play the recorded audio file"
+ exit 1
+fi
+
+rm -f $DATA
+exit 0
--- /dev/null
+#!/bin/bash
+# Copyright (C) 2011 Intel Corporation
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# Authors:
+# Zhang, Zhiqiang <zhiqiang.zhang@intel.com>
+#
+# DESCR:
+# Record a raw PCM audio file by parec with default settings, and
+# play the recorded audio file by paplay
+#
+# TIMEOUT: 120
+
+
+DATA=/tmp/parec.wav
+
+# Record a raw PCM audio/noise
+if [ $UID = 0 ];then
+ su - app -c "XDG_RUNTIME_DIR=/run/user/5000 parec --record /tmp/parec.wav &"
+else
+ parec --record $DATA &
+fi
+
+# Stop recording after 10 seconds
+sleep 10
+
+COUNT=0
+while [ "$COUNT" -lt 3 ] # try 3 times
+do
+ PID=`ps -eaf | grep parec | grep -v "grep" | awk '{print $2}'`
+ if [ -z "$PID" ]; then
+ break;
+ fi
+ kill $PID
+ let "COUNT += 1" # increase COUNT
+done
+
+# Check the recorded audio file
+if ! [ -s $DATA ]; then
+ echo "Error: failed to record voice by parec with default settings"
+ exit 1
+fi
+
+# Play the recorded audio file
+if [ $UID = 0 ];then
+ su - app -c 'XDG_RUNTIME_DIR=/run/user/5000 paplay --raw /tmp/parec.wav'
+else
+ paplay --raw $DATA
+fi
+if [ $? -ne 0 ]; then
+ echo "Error: failed to play the recorded audio file"
+ exit 1
+fi
+
+rm -f $DATA
+exit 0
--- /dev/null
+#!/bin/bash
+# Copyright (C) 2010 Intel Corporation
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# Authors:
+# Chen, Hao <hao.h.chen@intel.com>
+#
+# Set default sink
+
+# Modifications:
+# Modificator: shuang.wan@intel.com Date: 2010-07-09
+# Content of Modification
+# 1) Supplement the comments to the script file
+# 2) Move the environment variables initlization to env.sh
+
+. $(cd `dirname $0`;pwd)/env.sh
+if [ $UID = 0 ];then
+ su - app -c "XDG_RUNTIME_DIR=/run/user/5000 /opt/tts-pulseaudio-tests/pa_query_control -cm load module-null-sink sink_name=pa_test_sink > /tmp/test_result"
+else
+ $UTILS_PATH/pa_query_control -cm load module-null-sink sink_name=pa_test_sink > "$TEST_RESULT"
+fi
+
+if [ $? -ne 0 ]; then
+ echo "Failed to load module"
+ exit 1
+fi
+cat "$TEST_RESULT"
+index=`cat "$TEST_RESULT" | awk -F= '{print $2}'`
+if [ $UID = 0 ];then
+ su - app -c "XDG_RUNTIME_DIR=/run/user/5000 /opt/tts-pulseaudio-tests/pa_query_control -cd sink pa_test_sink"
+else
+ $UTILS_PATH/pa_query_control -cd sink pa_test_sink
+fi
+
+if [ $? -ne 0 ]; then
+ echo "Failed to set default sink"
+ exit 1
+fi
+
+if [ $UID = 0 ];then
+ su - app -c "XDG_RUNTIME_DIR=/run/user/5000 /opt/tts-pulseaudio-tests/pa_query_control -cm unload `cat /tmp/test_result|awk -F= '{print $2}'`"
+else
+ $UTILS_PATH/pa_query_control -cm unload $index
+fi
+
+if [ $? -ne 0 ]; then
+ echo "Failed to unload module"
+ exit 1
+fi
+
+rm -f $TEST_RESULT
+exit 0
--- /dev/null
+#!/bin/bash
+# Copyright (C) 2010 Intel Corporation
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# Authors:
+# Chen, Hao <hao.h.chen@intel.com>
+#
+# Set default source
+
+# Modifications:
+# Modificator: shuang.wan@intel.com Date: 2010-07-09
+# Content of Modification
+# 1) Supplement the comments to the script file
+# 2) Move the environment variables initlization to env.sh
+
+. $(cd `dirname $0`;pwd)/env.sh
+if [ $UID = 0 ];then
+ su - app -c "XDG_RUNTIME_DIR=/run/user/5000 /opt/tts-pulseaudio-tests/pa_query_control -cm load module-pipe-source source_name=test_source > /tmp/test_result"
+else
+ $UTILS_PATH/pa_query_control -cm load module-pipe-source source_name=test_source > "$TEST_RESULT"
+fi
+
+if [ $? -ne 0 ]; then
+ echo "Failed to load module"
+ exit 1
+fi
+cat "$TEST_RESULT"
+index=`cat "$TEST_RESULT" | awk -F= '{print $2}'`
+if [ $UID = 0 ];then
+ su - app -c "XDG_RUNTIME_DIR=/run/user/5000 /opt/tts-pulseaudio-tests/pa_query_control -cd source test_source"
+else
+ $UTILS_PATH/pa_query_control -cd source test_source
+fi
+
+if [ $? -ne 0 ]; then
+ echo "Failed to set default source"
+ exit 1
+fi
+
+if [ $UID = 0 ];then
+ su - app -c "XDG_RUNTIME_DIR=/run/user/5000 /opt/tts-pulseaudio-tests/pa_query_control -cm unload `cat /tmp/test_result|awk -F= '{print $2}'`"
+else
+ $UTILS_PATH/pa_query_control -cm unload $index
+fi
+
+if [ $? -ne 0 ]; then
+ echo "Failed to unload module"
+ exit 1
+fi
+
+rm -f "$TEST_RESULT"
--- /dev/null
+#!/bin/bash
+# Copyright (C) 2011 Intel Corporation
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# Authors:
+# Zhang, Zhiqiang <zhiqiang.zhang@intel.com>
+#
+# DESCR:
+# Set default sink mute
+# TIMEOUT: 30
+
+
+. $(cd `dirname $0`;pwd)/env.sh
+
+# Find the sink name and mute status
+if [ $UID = 0 ];then
+ SINK_NAME=`su - app -c "XDG_RUNTIME_DIR=/run/user/5000 /opt/tts-pulseaudio-tests/pa_query_control -qs"|head -n 1 | awk -F, '{print $2}' | cut -d "=" -f2`
+ MUTED=`su - app -c "XDG_RUNTIME_DIR=/run/user/5000 /opt/tts-pulseaudio-tests/pa_query_control -qs" | head -n 1 | awk -F, '{print $5}' | cut -d "=" -f2`
+else
+ SINK_NAME=`$UTILS_PATH/pa_query_control -qs | awk -F, '{print $2}' | cut -d "=" -f2`
+ MUTED=`$UTILS_PATH/pa_query_control -qs | awk -F, '{print $5}' | cut -d "=" -f2`
+fi
+
+if [ $? -ne 0 ]; then
+ echo "Error: failed to find sink mute status"
+ echo "Please check that if pulseaudio is running or if proper permission is granted"
+ exit 1
+fi
+
+# Set sink muted
+if [ $UID = 0 ];then
+ su - app -c "XDG_RUNTIME_DIR=/run/user/5000 /opt/tts-pulseaudio-tests/pa_query_control -cu sink $SINK_NAME 1"
+else
+ $UTILS_PATH/pa_query_control -cu sink $SINK_NAME 1
+fi
+
+if [ $? -ne 0 ]; then
+ echo "Error: failed to set sink <$SINK_NAME> mute"
+ exit 1
+fi
+
+# Check sink mute status
+if [ $UID = 0 ];then
+ SETED=`su - app -c "XDG_RUNTIME_DIR=/run/user/5000 /opt/tts-pulseaudio-tests/pa_query_control -qs" | head -n 1 | awk -F, '{print $5}' | cut -d "=" -f2`
+else
+ SETED=`$UTILS_PATH/pa_query_control -qs | awk -F, '{print $5}' | cut -d "=" -f2`
+fi
+if [ $SETED != "1" ]; then
+ echo "Error: not set sink mute"
+ exit 1
+fi
+
+# Post: set back the sink mute status
+if [ $UID = 0 ];then
+ su - app -c "XDG_RUNTIME_DIR=/run/user/5000 /opt/tts-pulseaudio-tests/pa_query_control -cu sink $SINK_NAME $MUTED"
+else
+ $UTILS_PATH/pa_query_control -cu sink $SINK_NAME $MUTED
+fi
+exit 0
+
--- /dev/null
+#!/bin/bash
+# Copyright (C) 2011 Intel Corporation
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# Authors:
+# Zhang, Zhiqiang <zhiqiang.zhang@intel.com>
+#
+# DESCR:
+# Set default sink unmute
+# TIMEOUT: 30
+
+
+. $(cd `dirname $0`;pwd)/env.sh
+
+# Find the sink name and mute status
+if [ $UID = 0 ];then
+ SINK_NAME=`su - app -c "XDG_RUNTIME_DIR=/run/user/5000 /opt/tts-pulseaudio-tests/pa_query_control -qs" |grep -i 'alsa_output' | awk -F, '{print $2}' | cut -d "=" -f2`
+ MUTED=`su - app -c "XDG_RUNTIME_DIR=/run/user/5000 /opt/tts-pulseaudio-tests/pa_query_control -qs" |grep -i 'alsa_output' | awk -F, '{print $5}' | cut -d "=" -f2`
+else
+ SINK_NAME=`$UTILS_PATH/pa_query_control -qs | awk -F, '{print $2}' | cut -d "=" -f2`
+ MUTED=`$UTILS_PATH/pa_query_control -qs | awk -F, '{print $5}' | cut -d "=" -f2`
+fi
+
+if [ $? -ne 0 ]; then
+ echo "Error: failed to find sink mute status"
+ echo "Please check that if pulseaudio is running or if proper permission is granted"
+ exit 1
+fi
+
+# Set sink unmute
+if [ $UID = 0 ];then
+ su - app -c "XDG_RUNTIME_DIR=/run/user/5000 /opt/tts-pulseaudio-tests/pa_query_control -cu sink $SINK_NAME 0"
+else
+ $UTILS_PATH/pa_query_control -cu sink $SINK_NAME 0
+fi
+
+if [ $? -ne 0 ]; then
+ echo "Error: failed to set sink <$SINK_NAME> unmute"
+ exit 1
+fi
+
+# Check sink mute status
+if [ $UID = 0 ];then
+ SETED=`su - app -c "XDG_RUNTIME_DIR=/run/user/5000 /opt/tts-pulseaudio-tests/pa_query_control -qs" |grep -i 'alsa_output' | awk -F, '{print $5}' | cut -d "=" -f2`
+else
+ SETED=`$UTILS_PATH/pa_query_control -qs | awk -F, '{print $5}' | head -n 1 |cut -d "=" -f2`
+fi
+
+if [ "X$SETED" != "X0" ]; then
+ echo "Error: not set sink unmute"
+ exit 1
+fi
+
+# Post: set back the sink mute status
+if [ $UID = 0 ];then
+ su - app -c "XDG_RUNTIME_DIR=/run/user/5000 /opt/tts-pulseaudio-tests/pa_query_control -cu sink $SINK_NAME $MUTED"
+else
+ $UTILS_PATH/pa_query_control -cu sink $SINK_NAME $MUTED
+fi
+exit 0
+
--- /dev/null
+#!/bin/bash
+# Copyright (C) 2011 Intel Corporation
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# Authors:
+# Zhang, Zhiqiang <zhiqiang.zhang@intel.com>
+#
+# DESCR:
+# Set default sink vloume value
+# TIMEOUT: 30
+
+
+. $(cd `dirname $0`;pwd)/env.sh
+
+# Find the sink name and volume value
+if [ $UID = 0 ];then
+ SINK_NAME=`su - app -c "XDG_RUNTIME_DIR=/run/user/5000 /opt/tts-pulseaudio-tests/pa_query_control -qs" | head -n 1 | awk -F, '{print $2}' | cut -d "=" -f2`
+ VOLUME=`su - app -c "XDG_RUNTIME_DIR=/run/user/5000 /opt/tts-pulseaudio-tests/pa_query_control -qs" | head -n 1| awk -F, '{print $4}' | cut -d "=" -f2 | awk '{print $2}'`
+else
+ SINK_NAME=`$UTILS_PATH/pa_query_control -qs | head -n 1 | awk -F, '{print $2}' | cut -d "=" -f2`
+ VOLUME=`$UTILS_PATH/pa_query_control -qs | head -n 1| awk -F, '{print $4}' | cut -d "=" -f2 | awk '{print $2}'`
+fi
+
+if [ $? -ne 0 ]; then
+ echo "Error: failed to find sink volume value"
+ echo "Please check that if pulseaudio is running or if proper permission is granted"
+ exit 1
+fi
+
+# Set sink volume value for the 1st channel
+if [ $UID = 0 ];then
+ su - app -c "XDG_RUNTIME_DIR=/run/user/5000 /opt/tts-pulseaudio-tests/pa_query_control -cv sink $SINK_NAME 1 0"
+ su - app -c "XDG_RUNTIME_DIR=/run/user/5000 /opt/tts-pulseaudio-tests/pa_query_control -cv sink $SINK_NAME 1 1000"
+ su - app -c "XDG_RUNTIME_DIR=/run/user/5000 /opt/tts-pulseaudio-tests/pa_query_control -cv sink $SINK_NAME 1 30000"
+ su - app -c "XDG_RUNTIME_DIR=/run/user/5000 /opt/tts-pulseaudio-tests/pa_query_control -cv sink $SINK_NAME 1 65536"
+else
+ $UTILS_PATH/pa_query_control -cv sink $SINK_NAME 1 0
+ $UTILS_PATH/pa_query_control -cv sink $SINK_NAME 1 1000
+ $UTILS_PATH/pa_query_control -cv sink $SINK_NAME 1 30000
+ $UTILS_PATH/pa_query_control -cv sink $SINK_NAME 1 65536
+fi
+
+if [ $? -ne 0 ]; then
+ echo "Error: failed to set sink <$SINK_NAME> volume value"
+ exit 1
+fi
+
+# Post: set back the sink volume value
+if [ $UID = 0 ];then
+ su - app -c "XDG_RUNTIME_DIR=/run/user/5000 /opt/tts-pulseaudio-tests/pa_query_control -cv sink $SINK_NAME 1 $VOLUME"
+else
+ $UTILS_PATH/pa_query_control -cv sink $SINK_NAME 1 $VOLUME
+fi
+exit 0
+
--- /dev/null
+#!/bin/bash
+# Copyright (C) 2011 Intel Corporation
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# Authors:
+# Zhang, Zhiqiang <zhiqiang.zhang@intel.com>
+#
+# DESCR:
+# Set default source vloume value
+# TIMEOUT: 30
+
+
+. $(cd `dirname $0`;pwd)/env.sh
+
+# Find the source name and volume value
+if [ $UID = 0 ];then
+ SOURCE_NAME=`su - app -c "XDG_RUNTIME_DIR=/run/user/5000 /opt/tts-pulseaudio-tests/pa_query_control -qo" | head -n 1 | awk -F, '{print $2}' | cut -d "=" -f2`
+ VOLUME=`su - app -c "XDG_RUNTIME_DIR=/run/user/5000 /opt/tts-pulseaudio-tests/pa_query_control -qo" | head -n 1 | awk -F, '{print $4}' | cut -d "=" -f2 | awk '{print $2}'`
+else
+ SOURCE_NAME=`$UTILS_PATH/pa_query_control -qo | head -n 1 | awk -F, '{print $2}' | cut -d "=" -f2`
+ VOLUME=`$UTILS_PATH/pa_query_control -qo | head -n 1 | awk -F, '{print $4}' | cut -d "=" -f2 | awk '{print $2}'`
+fi
+
+if [ $? -ne 0 ]; then
+ echo "Error: failed to find source volume value"
+ echo "Please check that if pulseaudio is running or if proper permission is granted"
+ exit 1
+fi
+
+# Set source volume value for the 1st channel
+if [ $UID = 0 ];then
+ su - app -c "XDG_RUNTIME_DIR=/run/user/5000 /opt/tts-pulseaudio-tests/pa_query_control -cv source $SOURCE_NAME 1 65536"
+ su - app -c "XDG_RUNTIME_DIR=/run/user/5000 /opt/tts-pulseaudio-tests/pa_query_control -cv source $SOURCE_NAME 1 40000"
+ su - app -c "XDG_RUNTIME_DIR=/run/user/5000 /opt/tts-pulseaudio-tests/pa_query_control -cv source $SOURCE_NAME 1 8000"
+ su - app -c "XDG_RUNTIME_DIR=/run/user/5000 /opt/tts-pulseaudio-tests/pa_query_control -cv source $SOURCE_NAME 1 0"
+else
+ $UTILS_PATH/pa_query_control -cv source $SOURCE_NAME 1 65536
+ $UTILS_PATH/pa_query_control -cv source $SOURCE_NAME 1 40000
+ $UTILS_PATH/pa_query_control -cv source $SOURCE_NAME 1 8000
+ $UTILS_PATH/pa_query_control -cv source $SOURCE_NAME 1 0
+fi
+
+if [ $? -ne 0 ]; then
+ echo "Error: failed to set source <$SOURCE_NAME> volume value"
+ exit 1
+fi
+
+# Post: set back the source volume value
+if [ $UID = 0 ];then
+ su - app -c "XDG_RUNTIME_DIR=/run/user/5000 /opt/tts-pulseaudio-tests/pa_query_control -cv source $SOURCE_NAME 1 $VOLUME"
+else
+ $UTILS_PATH/pa_query_control -cv source $SOURCE_NAME 1 $VOLUME
+fi
+exit 0
+
--- /dev/null
+#!/bin/sh
+#
+# Copyright (C) 2010 Intel Corporation
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+#
+# Authors:
+# Wan Shuang <shuang.wan@intel.com>
+# Date Created: 2010/07/08
+#
+# Modifications:
+# Modificator Date
+# Content of Modification
+#
+
+UTILS_PATH=$(cd `dirname $0`;pwd)
+DATA_PATH=$(cd `dirname $0`;pwd)/data
+TEST_RESULT="/tmp/test_result"
+
+## below media files are needed but not include in this package, prepare them before run test ##
+
+# used in script: PulseAudio_Play_PCM_16bit_Multichannel_48KHz.sh
+# wav audio: RIFF (little-endian) data, WAVE audio, 6 channels 48000 Hz
+MF_TEST_48K="/opt/tts-pulseaudio-tests/data/PCM_16bit_5.1_48KHz_4608Kbps_38sec.wav"
+
+# used in script: PulseAudio_Play_PCM_16bit_Mono_8KHz.sh
+# wav audio: RIFF (little-endian) data, WAVE audio, Microsoft PCM, 16 bit, mono 8000 Hz
+MF_TEST_8K="/opt/tts-pulseaudio-tests/data/PCM_16bit_Mono_8KHz_128Kbps_60sec.wav"
+
+# used in script: PulseAudio_Play_PCM_16bit_Stereo_44.1KHz.sh/PulseAudio_Play_PCM_2_streams.sh
+# wav audio: RIFF (little-endian) data, WAVE audio, Microsoft PCM, 16 bit, stereo 44100 Hz
+MF_TEST_44K_1="/opt/tts-pulseaudio-tests/data/PCM_16bit_Stereo_44.1KHz_1411Kbps_10s.WAV"
+
+# used in script: PulseAudio_Play_PCM_2_streams.sh
+# wav audio: RIFF (little-endian) data, WAVE audio, Microsoft PCM, 16 bit, stereo 44100 Hz
+MF_TEST_44K_2="/opt/tts-pulseaudio-tests/data/PCM_16bit_Stereo_44.1KHz_1412.2Kbps_60sec.wav"
+
+# used in script: PulseAudio_Check_sample_cache.sh/PulseAudio_Play_PCM_stress_repeat.sh
+# wav audio: RIFF (little-endian) data, WAVE audio, Microsoft PCM, 16 bit, mono 8000 Hz
+MF_TEST_WAV="/opt/tts-pulseaudio-tests/data/test.wav"
+
+## END ##
+
+export PATH=$PATH:/sbin/:/usr/sbin/
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<suite name="tts-pulseaudio-tests">
+ <set name="Play">
+ <testcase purpose="To check if play a raw PCM audio file by paplay repeat for 100 times with default settings work correctly" type="functional_positive" status="approved" requirement_ref="alsa-lib|||pulseaudio|||alsa-plugins-pulseaudio" component="Multimedia/PulseAudio" execution_type="auto" priority="P2" id="PulseAudio_Play_PCM_stress_repeat">
+ <description>
+ <pre_condition />
+ <post_condition />
+ <steps>
+ <step order="1">
+ <step_desc>Play a raw PCM audio file by paplay repeat for 100 times with default settings</step_desc>
+ <expected>0</expected>
+ </step>
+ </steps>
+ <test_script_entry timeout="1500" test_script_expected_result="0">/opt/tts-pulseaudio-tests/PulseAudio_Play_PCM_stress_repeat.sh</test_script_entry>
+ </description>
+ <categories>
+ <category>Netbook</category>
+ <category>TV</category>
+ </categories>
+ </testcase>
+ <testcase purpose="To check if play a multichannel raw PCM audio file by paplay with default settings work correctly" type="functional_positive" status="approved" requirement_ref="pulseaudio|||alsa-lib|||alsa-plugins-pulseaudio" component="Multimedia/PulseAudio" execution_type="auto" priority="P1" id="PulseAudio_Play_PCM_16bit_Multichannel_48KHz">
+ <description>
+ <pre_condition />
+ <post_condition />
+ <steps>
+ <step order="1">
+ <step_desc>Play a multichannel raw PCM audio file by paplay with default settings</step_desc>
+ <expected>0</expected>
+ </step>
+ </steps>
+ <test_script_entry timeout="90" test_script_expected_result="0">/opt/tts-pulseaudio-tests/PulseAudio_Play_PCM_16bit_Multichannel_48KHz.sh</test_script_entry>
+ </description>
+ <categories>
+ <category>Netbook</category>
+ <category>TV</category>
+ </categories>
+ </testcase>
+ <testcase purpose="To check if play a stereo raw PCM audio file by paplay with default settings work correctly" type="functional_positive" status="approved" requirement_ref="alsa-plugins-pulseaudio|||pulseaudio|||Software Audio Codecs|||alsa-lib" component="Multimedia/PulseAudio" execution_type="auto" priority="P0" id="PulseAudio_Play_PCM_16bit_Stereo_44.1KHz">
+ <description>
+ <pre_condition />
+ <post_condition />
+ <steps>
+ <step order="1">
+ <step_desc>Play a stereo raw PCM audio file by paplay with default settings</step_desc>
+ <expected>0</expected>
+ </step>
+ </steps>
+ <test_script_entry timeout="90" test_script_expected_result="0">/opt/tts-pulseaudio-tests/PulseAudio_Play_PCM_16bit_Stereo_44.1KHz.sh</test_script_entry>
+ </description>
+ <categories>
+ <category>IVI</category>
+ <category>Netbook</category>
+ <category>TV</category>
+ </categories>
+ </testcase>
+ <testcase purpose="To check if play 2 PCM audio files by paplay simultaneously with default settings work correctly" type="functional_positive" status="approved" requirement_ref="pulseaudio|||alsa-lib|||alsa-plugins-pulseaudio" component="Multimedia/PulseAudio" execution_type="auto" priority="P1" id="PulseAudio_Play_PCM_2_streams">
+ <description>
+ <pre_condition />
+ <post_condition />
+ <steps>
+ <step order="1">
+ <step_desc>Play 2 PCM audio files by paplay simultaneously with default settings</step_desc>
+ <expected>0</expected>
+ </step>
+ </steps>
+ <test_script_entry timeout="90" test_script_expected_result="0">/opt/tts-pulseaudio-tests/PulseAudio_Play_PCM_2_streams.sh</test_script_entry>
+ </description>
+ <categories>
+ <category>IVI</category>
+ <category>Netbook</category>
+ <category>TV</category>
+ </categories>
+ </testcase>
+ <testcase purpose="To check if play a mono raw PCM audio file by paplay with default settings work correctly" type="functional_positive" status="approved" requirement_ref="pulseaudio|||alsa-plugins-pulseaudio|||alsa-lib" component="Multimedia/PulseAudio" execution_type="auto" priority="P1" id="PulseAudio_Play_PCM_16bit_Mono_8KHz">
+ <description>
+ <pre_condition />
+ <post_condition />
+ <steps>
+ <step order="1">
+ <step_desc>Play a mono raw PCM audio file by paplay with default settings</step_desc>
+ <expected>0</expected>
+ </step>
+ </steps>
+ <test_script_entry timeout="90" test_script_expected_result="0">/opt/tts-pulseaudio-tests/PulseAudio_Play_PCM_16bit_Mono_8KHz.sh</test_script_entry>
+ </description>
+ <categories>
+ <category>IVI</category>
+ <category>Netbook</category>
+ <category>TV</category>
+ </categories>
+ </testcase>
+ </set>
+ <set name="Query">
+ <testcase purpose="To check if query loaded sources work correctly" type="functional_positive" status="approved" requirement_ref="pulseaudio" component="Multimedia/PulseAudio" execution_type="auto" priority="P1" id="PulseAudio_Query_loaded_sources">
+ <description>
+ <pre_condition />
+ <post_condition />
+ <steps>
+ <step order="1">
+ <step_desc>Query loaded sources</step_desc>
+ <expected>0</expected>
+ </step>
+ </steps>
+ <test_script_entry timeout="90" test_script_expected_result="0">/opt/tts-pulseaudio-tests/PulseAudio_Query_loaded_sources.sh</test_script_entry>
+ </description>
+ <categories>
+ <category>IVI</category>
+ <category>Netbook</category>
+ <category>TV</category>
+ </categories>
+ </testcase>
+ <testcase purpose="To check if query loaded sinks work correctly" type="functional_positive" status="approved" requirement_ref="pulseaudio" component="Multimedia/PulseAudio" execution_type="auto" priority="P1" id="PulseAudio_Query_loaded_sinks">
+ <description>
+ <pre_condition />
+ <post_condition />
+ <steps>
+ <step order="1">
+ <step_desc>Query loaded sinks</step_desc>
+ <expected>0</expected>
+ </step>
+ </steps>
+ <test_script_entry timeout="90" test_script_expected_result="0">/opt/tts-pulseaudio-tests/PulseAudio_Query_loaded_sinks.sh</test_script_entry>
+ </description>
+ <categories>
+ <category>IVI</category>
+ <category>Netbook</category>
+ <category>TV</category>
+ </categories>
+ </testcase>
+ <testcase purpose="To check if can query server information correctly" type="functional_positive" status="approved" requirement_ref="pulseaudio" component="Multimedia/PulseAudio" execution_type="auto" priority="P1" id="PulseAudio_Query_server_info">
+ <description>
+ <pre_condition />
+ <post_condition />
+ <steps>
+ <step order="1">
+ <step_desc>Query server information</step_desc>
+ <expected>0</expected>
+ </step>
+ </steps>
+ <test_script_entry timeout="90" test_script_expected_result="0">/opt/tts-pulseaudio-tests/PulseAudio_Query_server_info.sh</test_script_entry>
+ </description>
+ <categories>
+ <category>Netbook</category>
+ <category>TV</category>
+ </categories>
+ </testcase>
+ <testcase purpose="To check if can query sink inputs correctly" type="functional_positive" status="approved" requirement_ref="pulseaudio" component="Multimedia/PulseAudio" execution_type="auto" priority="P1" id="PulseAudio_Query_sink_inputs">
+ <description>
+ <pre_condition />
+ <post_condition />
+ <steps>
+ <step order="1">
+ <step_desc>Query sink inputs</step_desc>
+ <expected>0</expected>
+ </step>
+ </steps>
+ <test_script_entry timeout="90" test_script_expected_result="0">/opt/tts-pulseaudio-tests/PulseAudio_Query_sink_inputs.sh</test_script_entry>
+ </description>
+ <categories>
+ <category>IVI</category>
+ <category>Netbook</category>
+ <category>TV</category>
+ </categories>
+ </testcase>
+ <testcase purpose="To check if query memory block statistics work correctly" type="functional_positive" status="approved" requirement_ref="pulseaudio" component="Multimedia/PulseAudio" execution_type="auto" priority="P1" id="PulseAudio_Query_memory_statistics">
+ <description>
+ <pre_condition />
+ <post_condition />
+ <steps>
+ <step order="1">
+ <step_desc>Query memory block statistics</step_desc>
+ <expected>0</expected>
+ </step>
+ </steps>
+ <test_script_entry timeout="90" test_script_expected_result="0">/opt/tts-pulseaudio-tests/PulseAudio_Query_memory_statistics.sh</test_script_entry>
+ </description>
+ <categories>
+ <category>Netbook</category>
+ <category>TV</category>
+ </categories>
+ </testcase>
+ <testcase purpose="To check if query loaded clients work correctly" type="functional_positive" status="approved" requirement_ref="pulseaudio" component="Multimedia/PulseAudio" execution_type="auto" priority="P1" id="PulseAudio_Query_loaded_clients">
+ <description>
+ <pre_condition />
+ <post_condition />
+ <steps>
+ <step order="1">
+ <step_desc>Query loaded clients</step_desc>
+ <expected>0</expected>
+ </step>
+ </steps>
+ <test_script_entry timeout="90" test_script_expected_result="0">/opt/tts-pulseaudio-tests/PulseAudio_Query_loaded_clients.sh</test_script_entry>
+ </description>
+ <categories>
+ <category>IVI</category>
+ <category>Netbook</category>
+ <category>TV</category>
+ </categories>
+ </testcase>
+ </set>
+ <set name="Record">
+ <testcase purpose="To check if record a raw PCM audio file by parec with default settings work correctly" type="functional_positive" status="approved" requirement_ref="pulseaudio|||alsa-lib|||alsa-plugins-pulseaudio" component="Multimedia/PulseAudio" execution_type="auto" priority="P1" id="PulseAudio_Record_PCM_default">
+ <description>
+ <pre_condition />
+ <post_condition />
+ <steps>
+ <step order="1">
+ <step_desc>Record a raw PCM audio file by parec with default settings</step_desc>
+ <expected>0</expected>
+ </step>
+ </steps>
+ <test_script_entry timeout="90" test_script_expected_result="0">/opt/tts-pulseaudio-tests/PulseAudio_Record_PCM_default.sh</test_script_entry>
+ </description>
+ <categories>
+ <category>IVI</category>
+ <category>Netbook</category>
+ <category>TV</category>
+ </categories>
+ </testcase>
+ <testcase purpose="To check if record a raw PCM audio file by parec with default settings, and play the recorded audio file by paplay work correctly" type="functional_positive" status="approved" requirement_ref="alsa-lib|||alsa-plugins-pulseaudio|||pulseaudio" component="Multimedia/PulseAudio" execution_type="auto" priority="P0" id="PulseAudio_Record_play_PCM_default">
+ <description>
+ <pre_condition />
+ <post_condition />
+ <steps>
+ <step order="1">
+ <step_desc>Record a raw PCM audio file by parec with default settings, and play the recorded audio file by paplay</step_desc>
+ <expected>0</expected>
+ </step>
+ </steps>
+ <test_script_entry timeout="90" test_script_expected_result="0">/opt/tts-pulseaudio-tests/PulseAudio_Record_play_PCM_default.sh</test_script_entry>
+ </description>
+ <categories>
+ <category>IVI</category>
+ <category>Netbook</category>
+ <category>TV</category>
+ </categories>
+ </testcase>
+ <testcase purpose="To check if record a raw PCM audio file by parec long time with default settings, and play the recorded audio file by paplay work correctly" type="functional_positive" status="approved" requirement_ref="pulseaudio|||alsa-lib|||alsa-plugins-pulseaudio" component="Multimedia/PulseAudio" execution_type="auto" priority="P2" id="PulseAudio_Record_PCM_long_lasting">
+ <description>
+ <pre_condition />
+ <post_condition />
+ <steps>
+ <step order="1">
+ <step_desc>Record a raw PCM audio file by parec long time with default settings, and play the recorded audio file by paplay</step_desc>
+ <expected>0</expected>
+ </step>
+ </steps>
+ <test_script_entry timeout="2000" test_script_expected_result="0">/opt/tts-pulseaudio-tests/PulseAudio_Record_PCM_long_lasting.sh</test_script_entry>
+ </description>
+ <categories>
+ <category>IVI</category>
+ <category>Netbook</category>
+ <category>TV</category>
+ </categories>
+ </testcase>
+ </set>
+ <set name="Check">
+ <testcase purpose="To check if pulseAudio Statistics; all current loaded modules, available sinks, sources, streams and clients work correctly" type="functional_positive" status="approved" requirement_ref="pulseaudio" component="Multimedia/PulseAudio" execution_type="auto" priority="P1" id="PulseAudio_Check_loaded_statistics">
+ <description>
+ <pre_condition />
+ <post_condition />
+ <steps>
+ <step order="1">
+ <step_desc>PulseAudio Statistics; all current loaded modules, available sinks, sources, streams and clients</step_desc>
+ <expected>0</expected>
+ </step>
+ </steps>
+ <test_script_entry timeout="90" test_script_expected_result="0">/opt/tts-pulseaudio-tests/PulseAudio_Check_loaded_statistics.sh</test_script_entry>
+ </description>
+ <categories>
+ <category>IVI</category>
+ <category>Netbook</category>
+ <category>TV</category>
+ </categories>
+ </testcase>
+ <testcase purpose="To check if PulseAudio daemon status is correct" type="functional_positive" status="approved" requirement_ref="pulseaudio" component="Multimedia/PulseAudio" execution_type="auto" priority="P0" id="PulseAudio_Check_daemon_status">
+ <description>
+ <pre_condition />
+ <post_condition />
+ <steps>
+ <step order="1">
+ <step_desc>Check PulseAudio daemon status</step_desc>
+ <expected>0</expected>
+ </step>
+ </steps>
+ <test_script_entry timeout="90" test_script_expected_result="0">/opt/tts-pulseaudio-tests/PulseAudio_Check_daemon_status.sh</test_script_entry>
+ </description>
+ <categories>
+ <category>IVI</category>
+ <category>Netbook</category>
+ <category>TV</category>
+ </categories>
+ </testcase>
+ <testcase purpose="To check if default settings is set correctly" type="functional_positive" status="approved" requirement_ref="pulseaudio" component="Multimedia/PulseAudio" execution_type="auto" priority="P1" id="PulseAudio_Check_default_settings">
+ <description>
+ <pre_condition />
+ <post_condition />
+ <steps>
+ <step order="1">
+ <step_desc>Check default settings</step_desc>
+ <expected>0</expected>
+ </step>
+ </steps>
+ <test_script_entry timeout="90" test_script_expected_result="0">/opt/tts-pulseaudio-tests/PulseAudio_Check_default_settings.sh</test_script_entry>
+ </description>
+ <categories>
+ <category>IVI</category>
+ <category>Netbook</category>
+ <category>TV</category>
+ </categories>
+ </testcase>
+ <testcase purpose="To check if load sample, play sample, unload sample work correctly" type="functional_positive" status="approved" requirement_ref="pulseaudio" component="Multimedia/PulseAudio" execution_type="auto" priority="P1" id="PulseAudio_Check_sample_cache">
+ <description>
+ <pre_condition />
+ <post_condition />
+ <steps>
+ <step order="1">
+ <step_desc>Load sample, play sample, unload sample</step_desc>
+ <expected>0</expected>
+ </step>
+ </steps>
+ <test_script_entry timeout="90" test_script_expected_result="0">/opt/tts-pulseaudio-tests/PulseAudio_Check_sample_cache.sh</test_script_entry>
+ </description>
+ <categories>
+ <category>IVI</category>
+ <category>Netbook</category>
+ <category>TV</category>
+ </categories>
+ </testcase>
+ </set>
+ <set name="Set">
+ <testcase purpose="To check if set default sink work correctly" type="functional_positive" status="approved" requirement_ref="pulseaudio" component="Multimedia/PulseAudio" execution_type="auto" priority="P1" id="PulseAudio_Set_default_sink">
+ <description>
+ <pre_condition />
+ <post_condition />
+ <steps>
+ <step order="1">
+ <step_desc>Set default sink</step_desc>
+ <expected>0</expected>
+ </step>
+ </steps>
+ <test_script_entry timeout="90" test_script_expected_result="0">/opt/tts-pulseaudio-tests/PulseAudio_Set_default_sink.sh</test_script_entry>
+ </description>
+ <categories>
+ <category>IVI</category>
+ <category>Netbook</category>
+ <category>TV</category>
+ </categories>
+ </testcase>
+ <testcase purpose="To check if set default sink unmute work correctly" type="functional_positive" status="approved" requirement_ref="alsa-plugins-pulseaudio|||pulseaudio|||alsa-lib" component="Multimedia/PulseAudio" execution_type="auto" priority="P1" id="PulseAudio_Set_sink_unmute">
+ <description>
+ <pre_condition />
+ <post_condition />
+ <steps>
+ <step order="1">
+ <step_desc>Set default sink unmute</step_desc>
+ <expected>0</expected>
+ </step>
+ </steps>
+ <test_script_entry timeout="90" test_script_expected_result="0">/opt/tts-pulseaudio-tests/PulseAudio_Set_sink_unmute.sh</test_script_entry>
+ </description>
+ <categories>
+ <category>IVI</category>
+ <category>Netbook</category>
+ <category>TV</category>
+ </categories>
+ </testcase>
+ <testcase purpose="To check if set default source vloume value work correctly" type="functional_positive" status="approved" requirement_ref="alsa-plugins-pulseaudio|||pulseaudio|||alsa-lib" component="Multimedia/PulseAudio" execution_type="auto" priority="P1" id="PulseAudio_Set_source_volume">
+ <description>
+ <pre_condition />
+ <post_condition />
+ <steps>
+ <step order="1">
+ <step_desc>Set default source vloume value</step_desc>
+ <expected>0</expected>
+ </step>
+ </steps>
+ <test_script_entry timeout="90" test_script_expected_result="0">/opt/tts-pulseaudio-tests/PulseAudio_Set_source_volume.sh</test_script_entry>
+ </description>
+ <categories>
+ <category>IVI</category>
+ <category>Netbook</category>
+ <category>TV</category>
+ </categories>
+ </testcase>
+ <testcase purpose="To check if can set default source correctly" type="functional_positive" status="approved" requirement_ref="pulseaudio" component="Multimedia/PulseAudio" execution_type="auto" priority="P1" id="PulseAudio_Set_default_source">
+ <description>
+ <pre_condition />
+ <post_condition />
+ <steps>
+ <step order="1">
+ <step_desc>Set default source</step_desc>
+ <expected>0</expected>
+ </step>
+ </steps>
+ <test_script_entry timeout="90" test_script_expected_result="0">/opt/tts-pulseaudio-tests/PulseAudio_Set_default_source.sh</test_script_entry>
+ </description>
+ <categories>
+ <category>IVI</category>
+ <category>Netbook</category>
+ <category>TV</category>
+ </categories>
+ </testcase>
+ <testcase purpose="To check if set default sink mute work correctly" type="functional_positive" status="approved" requirement_ref="alsa-lib|||alsa-plugins-pulseaudio|||pulseaudio" component="Multimedia/PulseAudio" execution_type="auto" priority="P1" id="PulseAudio_Set_sink_mute">
+ <description>
+ <pre_condition />
+ <post_condition />
+ <steps>
+ <step order="1">
+ <step_desc>Set default sink mute</step_desc>
+ <expected>0</expected>
+ </step>
+ </steps>
+ <test_script_entry timeout="90" test_script_expected_result="0">/opt/tts-pulseaudio-tests/PulseAudio_Set_sink_mute.sh</test_script_entry>
+ </description>
+ <categories>
+ <category>IVI</category>
+ <category>Netbook</category>
+ <category>TV</category>
+ </categories>
+ </testcase>
+ <testcase purpose="To check if load module and unload module work correctly" type="functional_positive" status="approved" requirement_ref="pulseaudio" component="Multimedia/PulseAudio" execution_type="auto" priority="P1" id="PulseAudio_Load_unload_module">
+ <description>
+ <pre_condition />
+ <post_condition />
+ <steps>
+ <step order="1">
+ <step_desc>Load module, unload module</step_desc>
+ <expected>0</expected>
+ </step>
+ </steps>
+ <test_script_entry timeout="90" test_script_expected_result="0">/opt/tts-pulseaudio-tests/PulseAudio_Load_unload_module.sh</test_script_entry>
+ </description>
+ <categories>
+ <category>IVI</category>
+ <category>Netbook</category>
+ <category>TV</category>
+ </categories>
+ </testcase>
+ <testcase purpose="To check if set default sink vloume value work correctly" type="functional_positive" status="approved" requirement_ref="pulseaudio|||alsa-lib|||alsa-plugins-pulseaudio" component="Multimedia/PulseAudio" execution_type="auto" priority="P1" id="PulseAudio_Set_sink_volume">
+ <description>
+ <pre_condition />
+ <post_condition />
+ <steps>
+ <step order="1">
+ <step_desc>Set default sink vloume value</step_desc>
+ <expected>0</expected>
+ </step>
+ </steps>
+ <test_script_entry timeout="90" test_script_expected_result="0">/opt/tts-pulseaudio-tests/PulseAudio_Set_sink_volume.sh</test_script_entry>
+ </description>
+ <categories>
+ <category>IVI</category>
+ <category>Netbook</category>
+ <category>TV</category>
+ </categories>
+ </testcase>
+ </set>
+</suite>
+
--- /dev/null
+%define _unpackaged_files_terminate_build 0
+
+Name: common-multimedia-suite
+Summary: common-multimedia-suite
+Version: 0.1.0
+Release: 1
+License: GPLv2
+Group: Development/Testing
+Source0: %{name}-%{version}.tar.gz
+
+BuildRequires: pkgconfig(gstreamer-1.0)
+BuildRequires: pkgconfig(gstreamer-base-1.0)
+BuildRequires: pkgconfig(gthread-2.0)
+
+%description
+This package is IVI common mutlimedia test suite
+
+%package -n tts-pulseaudio-tests
+Summary: Pulseaudio test suit
+Group: Development/Testing
+
+%description -n tts-pulseaudio-tests
+%{summary}.
+
+
+%package -n tts-gstreamer-tests
+Summary: Gstreamer test suit
+Group: Development/Testing
+
+%description -n tts-gstreamer-tests
+%{summary}.
+
+
+
+%package -n gst-auto-launch
+Summary: Improved version of gst-launch
+Group: Development/Testing/Tool
+
+%description -n gst-auto-launch
+gst-auto-launch is an improved version of gst-launch that accepts commands
+
+%prep
+%setup -q
+
+%build
+./autogen.sh
+./configure --prefix=/usr
+make
+
+%install
+
+rm -rf $RPM_BUILD_ROOT
+make install DESTDIR=$RPM_BUILD_ROOT
+
+install -d %{buildroot}/%{_datadir}/tests/%{name}/tts-pulseaudio-tests
+install -m 0755 ivi/tts-pulseaudio-tests/src/* %{buildroot}/%{_datadir}/tests/%{name}/tts-pulseaudio-tests
+install -m 0755 ivi/tts-pulseaudio-tests/tests.xml %{buildroot}/%{_datadir}/tests/%{name}/tts-pulseaudio-tests
+install -m 0755 ivi/tts-pulseaudio-tests/README %{buildroot}/%{_datadir}/tests/%{name}/tts-pulseaudio-tests
+install LICENSE %{buildroot}/%{_datadir}/tests/%{name}/tts-pulseaudio-tests
+
+install -d %{buildroot}/%{_datadir}/tests/%{name}/tts-gstreamer-tests
+install -m 0755 ivi/tts-gstreamer-tests/src/* %{buildroot}/%{_datadir}/tests/%{name}/tts-gstreamer-tests
+install -m 0755 ivi/tts-gstreamer-tests/tests.xml %{buildroot}/%{_datadir}/tests/%{name}/tts-gstreamer-tests
+install -m 0755 ivi/tts-gstreamer-tests/README %{buildroot}/%{_datadir}/tests/%{name}/tts-gstreamer-tests
+install LICENSE %{buildroot}/%{_datadir}/tests/%{name}/tts-gstreamer-tests
+
+
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+
+%files -n tts-pulseaudio-tests
+%defattr(-,root,root)
+%{_datadir}/tests/%{name}/tts-pulseaudio-tests
+%license LICENSE
+
+%files -n tts-gstreamer-tests
+%defattr(-,root,root)
+%{_datadir}/tests/%{name}/tts-gstreamer-tests
+%license LICENSE
+
+%files -n gst-auto-launch
+%defattr(-,root,root)
+/usr/bin/gst-auto-launch
+%{_datadir}/gst-auto-launch
+%license LICENSE
+
+%changelog
+* Thu Nov 2 2012 Wu dawei<daweix.wu@intel.com> 0.1.0-1
+ - Initial common multimedia suite test
+