summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXavi Artigas <xartigas@fluendo.com>2013-05-08 11:22:17 +0200
committerXavi Artigas <xartigas@fluendo.com>2013-05-08 11:22:17 +0200
commit809581ccafc7ecd169e68383efd7d5ab82b334bb (patch)
tree0fc4b97f15cda94312b1a08dc5058582644a7e05
parentb2fadd6d9050523258b57ab9987b1b5e8b1686d7 (diff)
First working version of iOS tutorial 3
-rw-r--r--gst-sdk/tutorials/xcode iOS/GStreamer iOS Tutorials.xcodeproj/project.pbxproj7
-rw-r--r--gst-sdk/tutorials/xcode iOS/Tutorial 3/EaglUIVIew.h55
-rw-r--r--gst-sdk/tutorials/xcode iOS/Tutorial 3/EaglUIVIew.m66
-rw-r--r--gst-sdk/tutorials/xcode iOS/Tutorial 3/GStreamerBackend.h5
-rw-r--r--gst-sdk/tutorials/xcode iOS/Tutorial 3/GStreamerBackend.m18
-rw-r--r--gst-sdk/tutorials/xcode iOS/Tutorial 3/ViewController.h1
-rw-r--r--gst-sdk/tutorials/xcode iOS/Tutorial 3/ViewController.m2
-rw-r--r--gst-sdk/tutorials/xcode iOS/Tutorial 3/en.lproj/MainStoryboard_iPad.storyboard12
-rw-r--r--gst-sdk/tutorials/xcode iOS/Tutorial 3/en.lproj/MainStoryboard_iPhone.storyboard25
-rw-r--r--gst-sdk/tutorials/xcode iOS/Tutorial 3/gst_ios_init.h2
10 files changed, 187 insertions, 6 deletions
diff --git a/gst-sdk/tutorials/xcode iOS/GStreamer iOS Tutorials.xcodeproj/project.pbxproj b/gst-sdk/tutorials/xcode iOS/GStreamer iOS Tutorials.xcodeproj/project.pbxproj
index 1a0f77f..9d20550 100644
--- a/gst-sdk/tutorials/xcode iOS/GStreamer iOS Tutorials.xcodeproj/project.pbxproj
+++ b/gst-sdk/tutorials/xcode iOS/GStreamer iOS Tutorials.xcodeproj/project.pbxproj
@@ -63,6 +63,7 @@
C6B6129517396231003FC410 /* appicon-3-iPad@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = C6B6129117396231003FC410 /* appicon-3-iPad@2x.png */; };
C6B6129617396231003FC410 /* appicon-3-iPhone.png in Resources */ = {isa = PBXBuildFile; fileRef = C6B6129217396231003FC410 /* appicon-3-iPhone.png */; };
C6B6129717396231003FC410 /* appicon-3-iPhone@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = C6B6129317396231003FC410 /* appicon-3-iPhone@2x.png */; };
+ C6EB857C173A4D9500C3953D /* EaglUIVIew.m in Sources */ = {isa = PBXBuildFile; fileRef = C6EB857B173A4D9500C3953D /* EaglUIVIew.m */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
@@ -138,6 +139,8 @@
C6B6129117396231003FC410 /* appicon-3-iPad@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "appicon-3-iPad@2x.png"; sourceTree = "<group>"; };
C6B6129217396231003FC410 /* appicon-3-iPhone.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "appicon-3-iPhone.png"; sourceTree = "<group>"; };
C6B6129317396231003FC410 /* appicon-3-iPhone@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "appicon-3-iPhone@2x.png"; sourceTree = "<group>"; };
+ C6EB857A173A4D9500C3953D /* EaglUIVIew.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EaglUIVIew.h; sourceTree = "<group>"; };
+ C6EB857B173A4D9500C3953D /* EaglUIVIew.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EaglUIVIew.m; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -301,6 +304,8 @@
C6B6126417395CF2003FC410 /* Tutorial 3 */ = {
isa = PBXGroup;
children = (
+ C6EB857A173A4D9500C3953D /* EaglUIVIew.h */,
+ C6EB857B173A4D9500C3953D /* EaglUIVIew.m */,
C6B6128F17396231003FC410 /* Images */,
C6B6128817395D4F003FC410 /* GStreamerBackend.h */,
C6B6128917395D4F003FC410 /* GStreamerBackend.m */,
@@ -511,6 +516,7 @@
C6B6127E17395CF2003FC410 /* ViewController.m in Sources */,
C6B6128B17395D4F003FC410 /* GStreamerBackend.m in Sources */,
C6B6128E17395EE2003FC410 /* gst_ios_init.c in Sources */,
+ C6EB857C173A4D9500C3953D /* EaglUIVIew.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -1037,6 +1043,7 @@
C6B6128717395CF2003FC410 /* Release */,
);
defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
diff --git a/gst-sdk/tutorials/xcode iOS/Tutorial 3/EaglUIVIew.h b/gst-sdk/tutorials/xcode iOS/Tutorial 3/EaglUIVIew.h
new file mode 100644
index 0000000..01700b5
--- /dev/null
+++ b/gst-sdk/tutorials/xcode iOS/Tutorial 3/EaglUIVIew.h
@@ -0,0 +1,55 @@
+/*
+ * GStreamer Player demo app for IOS
+ * Copyright (C) 2013 Collabora Ltd.
+ * @author: Thiago Santos <thiago.sousa.santos@collabora.com>
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ *
+ * Alternatively, the contents of this file may be used under the
+ * GNU Lesser General Public License Version 2.1 (the "LGPL"), in
+ * which case the following provisions apply instead of the ones
+ * mentioned above:
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#import <Foundation/Foundation.h>
+#import <QuartzCore/QuartzCore.h>
+#include <OpenGLES/ES2/gl.h>
+#include <OpenGLES/ES2/glext.h>
+
+@interface EaglUIView : UIView
+{
+}
+
+@end
+
diff --git a/gst-sdk/tutorials/xcode iOS/Tutorial 3/EaglUIVIew.m b/gst-sdk/tutorials/xcode iOS/Tutorial 3/EaglUIVIew.m
new file mode 100644
index 0000000..a21363e
--- /dev/null
+++ b/gst-sdk/tutorials/xcode iOS/Tutorial 3/EaglUIVIew.m
@@ -0,0 +1,66 @@
+/*
+ * GStreamer Player demo app for IOS
+ * Copyright (C) 2013 Collabora Ltd.
+ * @author: Thiago Santos <thiago.sousa.santos@collabora.com>
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ *
+ * Alternatively, the contents of this file may be used under the
+ * GNU Lesser General Public License Version 2.1 (the "LGPL"), in
+ * which case the following provisions apply instead of the ones
+ * mentioned above:
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#import "EaglUIVIew.h"
+
+#import <QuartzCore/QuartzCore.h>
+
+@implementation EaglUIView
+
+
++ (Class) layerClass
+{
+ return [CAEAGLLayer class];
+}
+
+- (id) initWithFrame:(CGRect)frame
+{
+ if ((self = [super initWithFrame:frame]))
+ {
+ }
+
+ return self;
+}
+
+@end
diff --git a/gst-sdk/tutorials/xcode iOS/Tutorial 3/GStreamerBackend.h b/gst-sdk/tutorials/xcode iOS/Tutorial 3/GStreamerBackend.h
index b00f758..a23c4ce 100644
--- a/gst-sdk/tutorials/xcode iOS/Tutorial 3/GStreamerBackend.h
+++ b/gst-sdk/tutorials/xcode iOS/Tutorial 3/GStreamerBackend.h
@@ -4,8 +4,9 @@
@interface GStreamerBackend : NSObject
/* Initialization method. Pass the delegate that will take care of the UI.
- * This delegate must implement the GStreamerBackendDelegate protocol */
--(id) init:(id) uiDelegate;
+ * This delegate must implement the GStreamerBackendDelegate protocol.
+ * Pass also the UIView object that will hold the video window. */
+-(id) init:(id) uiDelegate videoView:(UIView*) video_view;
/* Set the pipeline to PLAYING */
-(void) play;
diff --git a/gst-sdk/tutorials/xcode iOS/Tutorial 3/GStreamerBackend.m b/gst-sdk/tutorials/xcode iOS/Tutorial 3/GStreamerBackend.m
index 814d15a..68f6c8f 100644
--- a/gst-sdk/tutorials/xcode iOS/Tutorial 3/GStreamerBackend.m
+++ b/gst-sdk/tutorials/xcode iOS/Tutorial 3/GStreamerBackend.m
@@ -1,6 +1,7 @@
#import "GStreamerBackend.h"
#include <gst/gst.h>
+#include <gst/interfaces/xoverlay.h>
GST_DEBUG_CATEGORY_STATIC (debug_category);
#define GST_CAT_DEFAULT debug_category
@@ -14,20 +15,23 @@ GST_DEBUG_CATEGORY_STATIC (debug_category);
@implementation GStreamerBackend {
id ui_delegate; /* Class that we use to interact with the user interface */
GstElement *pipeline; /* The running pipeline */
+ GstElement *video_sink;/* The video sink element which receives XOverlay commands */
GMainContext *context; /* GLib context used to run the main loop */
GMainLoop *main_loop; /* GLib main loop */
gboolean initialized; /* To avoid informing the UI multiple times about the initialization */
+ UIView *ui_video_view; /* UIView that holds the video */
}
/*
* Interface methods
*/
--(id) init:(id) uiDelegate
+-(id) init:(id) uiDelegate videoView:(UIView *)video_view
{
if (self = [super init])
{
self->ui_delegate = uiDelegate;
+ self->ui_video_view = video_view;
GST_DEBUG_CATEGORY_INIT (debug_category, "tutorial-2", 0, "iOS tutorial 2");
gst_debug_set_threshold_for_name("tutorial-2", GST_LEVEL_DEBUG);
@@ -136,7 +140,7 @@ static void state_changed_cb (GstBus *bus, GstMessage *msg, GStreamerBackend *se
g_main_context_push_thread_default(context);
/* Build pipeline */
- pipeline = gst_parse_launch("audiotestsrc ! audioconvert ! audioresample ! autoaudiosink", &error);
+ pipeline = gst_parse_launch("videotestsrc ! warptv ! ffmpegcolorspace ! autovideosink", &error);
if (error) {
gchar *message = g_strdup_printf("Unable to build pipeline: %s", error->message);
g_clear_error (&error);
@@ -144,7 +148,17 @@ static void state_changed_cb (GstBus *bus, GstMessage *msg, GStreamerBackend *se
g_free (message);
return;
}
+
+ /* Set the pipeline to READY, so it can already accept a window handle */
+ gst_element_set_state(pipeline, GST_STATE_READY);
+ video_sink = gst_bin_get_by_interface(GST_BIN(pipeline), GST_TYPE_X_OVERLAY);
+ if (!video_sink) {
+ GST_ERROR ("Could not retrieve video sink");
+ return;
+ }
+ gst_x_overlay_set_window_handle(GST_X_OVERLAY(video_sink), (guintptr) (id) ui_video_view);
+
/* Instruct the bus to emit signals for each received message, and connect to the interesting signals */
bus = gst_element_get_bus (pipeline);
bus_source = gst_bus_create_watch (bus);
diff --git a/gst-sdk/tutorials/xcode iOS/Tutorial 3/ViewController.h b/gst-sdk/tutorials/xcode iOS/Tutorial 3/ViewController.h
index be19276..a4e434e 100644
--- a/gst-sdk/tutorials/xcode iOS/Tutorial 3/ViewController.h
+++ b/gst-sdk/tutorials/xcode iOS/Tutorial 3/ViewController.h
@@ -5,6 +5,7 @@
IBOutlet UILabel *message_label;
IBOutlet UIBarButtonItem *play_button;
IBOutlet UIBarButtonItem *pause_button;
+ IBOutlet UIView *video_view;
}
-(IBAction) play:(id)sender;
diff --git a/gst-sdk/tutorials/xcode iOS/Tutorial 3/ViewController.m b/gst-sdk/tutorials/xcode iOS/Tutorial 3/ViewController.m
index 512ede7..919bded 100644
--- a/gst-sdk/tutorials/xcode iOS/Tutorial 3/ViewController.m
+++ b/gst-sdk/tutorials/xcode iOS/Tutorial 3/ViewController.m
@@ -21,7 +21,7 @@
play_button.enabled = FALSE;
pause_button.enabled = FALSE;
- gst_backend = [[GStreamerBackend alloc] init:self];
+ gst_backend = [[GStreamerBackend alloc] init:self videoView:video_view];
}
- (void)didReceiveMemoryWarning
diff --git a/gst-sdk/tutorials/xcode iOS/Tutorial 3/en.lproj/MainStoryboard_iPad.storyboard b/gst-sdk/tutorials/xcode iOS/Tutorial 3/en.lproj/MainStoryboard_iPad.storyboard
index c96f025..1e42a1f 100644
--- a/gst-sdk/tutorials/xcode iOS/Tutorial 3/en.lproj/MainStoryboard_iPad.storyboard
+++ b/gst-sdk/tutorials/xcode iOS/Tutorial 3/en.lproj/MainStoryboard_iPad.storyboard
@@ -36,14 +36,21 @@
<barButtonItem style="plain" systemItem="flexibleSpace" id="urI-U7-ALw"/>
</items>
</toolbar>
+ <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="6tN-97-YoQ" userLabel="Video" customClass="EaglUIView">
+ <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
+ </view>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
<constraints>
+ <constraint firstAttribute="trailing" secondItem="6tN-97-YoQ" secondAttribute="trailing" constant="20" symbolic="YES" type="user" id="Ah6-li-39g"/>
+ <constraint firstItem="6tN-97-YoQ" firstAttribute="top" secondItem="CqS-Gu-I1O" secondAttribute="top" constant="20" symbolic="YES" type="user" id="Aql-a6-cst"/>
<constraint firstItem="iLX-h1-Ko5" firstAttribute="bottom" secondItem="MUi-CE-Ydy" secondAttribute="top" constant="8" symbolic="YES" type="user" id="FXP-eH-VSK"/>
<constraint firstItem="MUi-CE-Ydy" firstAttribute="leading" secondItem="CqS-Gu-I1O" secondAttribute="leading" constant="20" symbolic="YES" type="user" id="OM9-gE-OVP"/>
<constraint firstAttribute="trailing" secondItem="iLX-h1-Ko5" secondAttribute="trailing" constant="20" symbolic="YES" type="user" id="Xdr-12-E1r"/>
<constraint firstItem="iLX-h1-Ko5" firstAttribute="leading" secondItem="CqS-Gu-I1O" secondAttribute="leading" constant="20" symbolic="YES" type="user" id="bT2-TE-X7Q"/>
<constraint firstItem="MUi-CE-Ydy" firstAttribute="trailing" secondItem="CqS-Gu-I1O" secondAttribute="trailing" constant="20" symbolic="YES" type="user" id="iRT-XF-W0f"/>
+ <constraint firstItem="6tN-97-YoQ" firstAttribute="leading" secondItem="CqS-Gu-I1O" secondAttribute="leading" constant="20" symbolic="YES" type="user" id="mV8-P0-4eW"/>
+ <constraint firstItem="iLX-h1-Ko5" firstAttribute="top" secondItem="6tN-97-YoQ" secondAttribute="bottom" constant="8" symbolic="YES" type="default" id="rJy-I3-pX7"/>
<constraint firstItem="MUi-CE-Ydy" firstAttribute="bottom" secondItem="CqS-Gu-I1O" secondAttribute="bottom" constant="20" symbolic="YES" type="user" id="w6K-xy-EJe"/>
</constraints>
</view>
@@ -52,6 +59,7 @@
<outlet property="message_label" destination="iLX-h1-Ko5" id="Q0Y-3J-zis"/>
<outlet property="pause_button" destination="J3O-8j-Tkt" id="Dls-sg-FPm"/>
<outlet property="play_button" destination="UlF-Ga-2VX" id="243-yq-GEe"/>
+ <outlet property="video_view" destination="6tN-97-YoQ" id="Q0n-dR-hqv"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="iRS-GG-bR6" sceneMemberID="firstResponder"/>
@@ -59,6 +67,9 @@
</scene>
</scenes>
<classes>
+ <class className="EaglUIView" superclassName="UIView">
+ <source key="sourceIdentifier" type="project" relativePath="./Classes/EaglUIView.h"/>
+ </class>
<class className="ViewController" superclassName="UIViewController">
<source key="sourceIdentifier" type="project" relativePath="./Classes/ViewController.h"/>
<relationships>
@@ -68,6 +79,7 @@
<relationship kind="outlet" name="message_label" candidateClass="UILabel"/>
<relationship kind="outlet" name="pause_button" candidateClass="UIBarButtonItem"/>
<relationship kind="outlet" name="play_button" candidateClass="UIBarButtonItem"/>
+ <relationship kind="outlet" name="video_view" candidateClass="UIView"/>
</relationships>
</class>
</classes>
diff --git a/gst-sdk/tutorials/xcode iOS/Tutorial 3/en.lproj/MainStoryboard_iPhone.storyboard b/gst-sdk/tutorials/xcode iOS/Tutorial 3/en.lproj/MainStoryboard_iPhone.storyboard
index 0d14c30..6652bd0 100644
--- a/gst-sdk/tutorials/xcode iOS/Tutorial 3/en.lproj/MainStoryboard_iPhone.storyboard
+++ b/gst-sdk/tutorials/xcode iOS/Tutorial 3/en.lproj/MainStoryboard_iPhone.storyboard
@@ -36,15 +36,22 @@
<barButtonItem style="plain" systemItem="flexibleSpace" id="hSc-4x-myS"/>
</items>
</toolbar>
+ <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="EZT-e2-iX7" userLabel="Video" customClass="EaglUIView">
+ <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
+ </view>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
<constraints>
+ <constraint firstItem="EZT-e2-iX7" firstAttribute="top" secondItem="JOS-rK-Hts" secondAttribute="top" constant="20" symbolic="YES" type="user" id="3UH-b4-lHN"/>
<constraint firstItem="8wd-E5-Owx" firstAttribute="bottom" secondItem="o22-1p-nvT" secondAttribute="top" constant="8" symbolic="YES" type="user" id="CHF-CI-6CL"/>
+ <constraint firstItem="8wd-E5-Owx" firstAttribute="top" secondItem="EZT-e2-iX7" secondAttribute="bottom" constant="8" symbolic="YES" type="user" id="V6c-5k-eSb"/>
<constraint firstAttribute="trailing" secondItem="8wd-E5-Owx" secondAttribute="trailing" constant="20" symbolic="YES" type="user" id="WDw-jT-tbz"/>
<constraint firstItem="o22-1p-nvT" firstAttribute="leading" secondItem="JOS-rK-Hts" secondAttribute="leading" constant="20" symbolic="YES" type="user" id="Zvb-2h-v7A"/>
<constraint firstItem="o22-1p-nvT" firstAttribute="bottom" secondItem="JOS-rK-Hts" secondAttribute="bottom" constant="20" symbolic="YES" type="user" id="l3D-e3-Z7R"/>
<constraint firstItem="8wd-E5-Owx" firstAttribute="leading" secondItem="JOS-rK-Hts" secondAttribute="leading" constant="20" symbolic="YES" type="user" id="lwj-ty-IXl"/>
<constraint firstItem="o22-1p-nvT" firstAttribute="trailing" secondItem="JOS-rK-Hts" secondAttribute="trailing" constant="20" symbolic="YES" type="user" id="mL0-QH-ra6"/>
+ <constraint firstItem="EZT-e2-iX7" firstAttribute="leading" secondItem="JOS-rK-Hts" secondAttribute="leading" constant="20" symbolic="YES" type="user" id="onN-nz-NjL"/>
+ <constraint firstAttribute="trailing" secondItem="EZT-e2-iX7" secondAttribute="trailing" constant="20" symbolic="YES" type="user" id="sLo-Ka-Lf5"/>
</constraints>
</view>
<simulatedStatusBarMetrics key="simulatedStatusBarMetrics"/>
@@ -52,12 +59,30 @@
<outlet property="message_label" destination="8wd-E5-Owx" id="7Xw-cg-3hH"/>
<outlet property="pause_button" destination="bfY-YY-jiu" id="GBf-vm-mbR"/>
<outlet property="play_button" destination="6LZ-7a-xKf" id="Tk2-4w-9Px"/>
+ <outlet property="video_view" destination="EZT-e2-iX7" id="Ep9-eG-Grh"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="25z-hu-OZW" sceneMemberID="firstResponder"/>
</objects>
</scene>
</scenes>
+ <classes>
+ <class className="EaglUIView" superclassName="UIView">
+ <source key="sourceIdentifier" type="project" relativePath="./Classes/EaglUIView.h"/>
+ </class>
+ <class className="ViewController" superclassName="UIViewController">
+ <source key="sourceIdentifier" type="project" relativePath="./Classes/ViewController.h"/>
+ <relationships>
+ <relationship kind="action" name="pause:"/>
+ <relationship kind="action" name="play:"/>
+ <relationship kind="outlet" name="label" candidateClass="UILabel"/>
+ <relationship kind="outlet" name="message_label" candidateClass="UILabel"/>
+ <relationship kind="outlet" name="pause_button" candidateClass="UIBarButtonItem"/>
+ <relationship kind="outlet" name="play_button" candidateClass="UIBarButtonItem"/>
+ <relationship kind="outlet" name="video_view" candidateClass="UIView"/>
+ </relationships>
+ </class>
+ </classes>
<simulatedMetricsContainer key="defaultSimulatedMetrics">
<simulatedStatusBarMetrics key="statusBar"/>
<simulatedOrientationMetrics key="orientation"/>
diff --git a/gst-sdk/tutorials/xcode iOS/Tutorial 3/gst_ios_init.h b/gst-sdk/tutorials/xcode iOS/Tutorial 3/gst_ios_init.h
index 7b8e013..d60c337 100644
--- a/gst-sdk/tutorials/xcode iOS/Tutorial 3/gst_ios_init.h
+++ b/gst-sdk/tutorials/xcode iOS/Tutorial 3/gst_ios_init.h
@@ -16,7 +16,7 @@
#define GST_IOS_PLUGINS_SYS
//#define GST_IOS_PLUGINS_VIS
#define GST_IOS_PLUGINS_PLAYBACK
-//#define GST_IOS_PLUGINS_EFFECTS
+#define GST_IOS_PLUGINS_EFFECTS
//#define GST_IOS_PLUGINS_CODECS
//#define GST_IOS_PLUGINS_NET