├── README.md
├── plugin.xml
├── src
├── android
│ ├── PanframePlugin.java
│ ├── SimpleStreamPlayerActivity.java
│ ├── libs
│ │ ├── android-support-v4.jar
│ │ └── panframe-1.9.jar
│ └── simple_stream_player.xml
└── ios
│ ├── CDVPanframePlugin.h
│ ├── CDVPanframePlugin.m
│ ├── PlayerStoryboard.storyboard
│ ├── SimplePlayerViewController.h
│ ├── SimplePlayerViewController.m
│ └── frameworks
│ ├── Panframe.framework
│ ├── Headers
│ │ ├── PFAsset.h
│ │ ├── PFAssetObserver.h
│ │ ├── PFObjectFactory.h
│ │ ├── PFView.h
│ │ └── Panframe.h
│ ├── Panframe
│ ├── Resources
│ │ └── Info.plist
│ └── Versions
│ │ ├── A
│ │ ├── Headers
│ │ │ ├── PFAsset.h
│ │ │ ├── PFAssetObserver.h
│ │ │ ├── PFObjectFactory.h
│ │ │ ├── PFView.h
│ │ │ └── Panframe.h
│ │ ├── Panframe
│ │ └── Resources
│ │ │ └── Info.plist
│ │ └── Current
│ │ ├── Headers
│ │ ├── PFAsset.h
│ │ ├── PFAssetObserver.h
│ │ ├── PFObjectFactory.h
│ │ ├── PFView.h
│ │ └── Panframe.h
│ │ ├── Panframe
│ │ └── Resources
│ │ └── Info.plist
│ └── Settings.bundle
│ ├── Root.plist
│ ├── en.lproj
│ └── Root.strings
│ └── panframelicense.plist
└── www
└── cdv-jb-panframe-plugin.js
/README.md:
--------------------------------------------------------------------------------
1 | # cordova-jb-plugin-panframe
2 | Integrates panframe SDK with cordova: http://www.panframe.com/
3 |
4 | This plugin defines a global `panframePlugin` object, which has panframe plugin function.
5 | Although the object is in the global scope, it is not available until after the `deviceready` event.
6 |
7 | document.addEventListener("deviceready", onDeviceReady, false);
8 | function onDeviceReady() {
9 | panframePlugin.init(videoUrl, viewMode);
10 | }
11 |
12 | ## Installation
13 |
14 | cordova plugin add https://github.com/jumpbytehq/cordova-jb-plugin-panframe.git
15 |
16 | ### Supported Platforms
17 |
18 | - Android
19 | - iOS
20 |
21 | ### Parameters
22 | videoUrl: Your videUrl - supports RTMP, and HTTP Live Streaming (HLS) e.g. - [Ultra light flight] - http://mobile.360heros.com/producers/4630608605686575/9813601418398322/video/video_31b451b7ca49710719b19d22e19d9e60.mp4
23 | viewMode:
24 | iOS:
25 | 0 for spherical,
26 | 1 for flat,
27 | 2 for cylindrical,
28 | 3 for side-by-side VR (non-stereoscopic),
29 | 4 for top-down VR formatted content (stereoscopic).
30 | Android:
31 | 0 for spherical,
32 | 1 for flat display,
33 | 2 for stereo side-by-side
34 |
35 |
36 | ### Quick Example
37 |
38 | panframePlugin.init("http://mobile.360heros.com/producers/4630608605686575/9813601418398322/video/video_31b451b7ca49710719b19d22e19d9e60.mp4", 2);
39 |
40 |
41 | ### Android Notes
42 |
43 | - If you are using any other plugin or library which internally uses Android Play Services, then gradle build will failed with Multiple Dex File error. To Fix that you can do either of the following
44 | * Remove the `play-services` dependencies from `build.gradle` file and rebuild. (_This needed to be done every time you remove & add plugin again._)
45 | * Download clone this plugin repository locally, remove the following line from `plugin.xml` -
46 | ``
47 | & now add plugin locally by `cordova plugin add PATH_TO_REPO`
48 |
49 |
--------------------------------------------------------------------------------
/plugin.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 | Panframe
8 |
9 | Cordova PanFrame(http://www.panframe.com/) Plugin
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
--------------------------------------------------------------------------------
/src/android/PanframePlugin.java:
--------------------------------------------------------------------------------
1 | package com.jb.plugin.panframe;
2 |
3 | import android.content.Context;
4 | import android.content.Intent;
5 | import android.util.Log;
6 |
7 | import org.apache.cordova.CallbackContext;
8 | import org.apache.cordova.CordovaPlugin;
9 | import org.json.JSONArray;
10 | import org.json.JSONException;
11 |
12 | public class PanframePlugin extends CordovaPlugin {
13 | public static final String ACTION_INITIALIZE = "init";
14 | private static final String TAG = PanframePlugin.class.getName();
15 |
16 | @Override
17 | public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
18 | if (action.equals(ACTION_INITIALIZE)) {
19 | this.init(callbackContext, args);
20 | return true;
21 | }
22 | return false;
23 | }
24 |
25 | private void init(final CallbackContext callbackContext, final JSONArray args) {
26 | cordova.getThreadPool().execute(new Runnable() {
27 | public void run() {
28 | try {
29 | // Getting Parameters
30 | Context context = cordova.getActivity().getApplicationContext();
31 | Intent playerIntent = new Intent(context, SimpleStreamPlayerActivity.class);
32 | String videoUrl = args.getString(0);
33 | playerIntent.putExtra("videoUrl", videoUrl);
34 |
35 | if (args.getString(1) != null && !args.getString(1).equalsIgnoreCase("null") && !args.getString(1).equalsIgnoreCase("undefined")) {
36 | int viewMode = Integer.parseInt(args.getString(1));
37 | playerIntent.putExtra("viewMode", viewMode);
38 | }
39 | if (args.getString(2) != null && !args.getString(2).equalsIgnoreCase("null") && !args.getString(2).equalsIgnoreCase("undefined")) {
40 | float aspectRatio = Float.parseFloat(args.getString(2));
41 | playerIntent.putExtra("aspectRatio", aspectRatio);
42 | }
43 | playerIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
44 |
45 | context.startActivity(playerIntent);
46 | Log.i(TAG, "Activity should get started...");
47 | callbackContext.success();
48 | } catch (Exception e) {
49 | callbackContext.error("Error while starting VR Player.");
50 | e.printStackTrace();
51 | }
52 | }
53 | });
54 | }
55 | }
--------------------------------------------------------------------------------
/src/android/SimpleStreamPlayerActivity.java:
--------------------------------------------------------------------------------
1 | /*
2 | * SimpleStreamPlayer
3 | * Android example of Panframe library
4 | * The example plays back an panoramic movie from a resource.
5 | *
6 | * (c) 2012-2013 Mindlight. All rights reserved.
7 | * Visit www.panframe.com for more information.
8 | *
9 | * MODIFIED BY JUMPBYTE
10 | */
11 |
12 | package com.jb.plugin.panframe;
13 |
14 | import android.app.ProgressDialog;
15 | import android.content.res.Resources;
16 | import android.net.Uri;
17 | import android.os.Bundle;
18 | import android.support.v4.app.FragmentActivity;
19 | import android.util.Log;
20 | import android.view.View;
21 | import android.view.View.OnClickListener;
22 | import android.view.ViewGroup;
23 | import android.view.Window;
24 | import android.view.WindowManager;
25 | import android.widget.Button;
26 | import android.widget.SeekBar;
27 |
28 | import com.panframe.android.lib.PFAsset;
29 | import com.panframe.android.lib.PFAssetObserver;
30 | import com.panframe.android.lib.PFAssetStatus;
31 | import com.panframe.android.lib.PFNavigationMode;
32 | import com.panframe.android.lib.PFObjectFactory;
33 | import com.panframe.android.lib.PFView;
34 |
35 | import java.util.Timer;
36 | import java.util.TimerTask;
37 |
38 | public class SimpleStreamPlayerActivity extends FragmentActivity implements PFAssetObserver, SeekBar.OnSeekBarChangeListener {
39 |
40 | public static final String TAG = "SimpleStream";
41 | private ProgressDialog progressDialog;
42 |
43 | PFView _pfview;
44 | PFAsset _pfasset;
45 | PFNavigationMode _currentNavigationMode = PFNavigationMode.MOTION;
46 |
47 | boolean _updateThumb = true;
48 | Timer _scrubberMonitorTimer;
49 |
50 | ViewGroup _frameContainer;
51 | Button _stopButton;
52 | Button _playButton;
53 | Button _touchButton;
54 | Button vogglzButton;
55 | SeekBar _scrubber;
56 |
57 | // Default Values
58 | int viewMode = 2;
59 | float aspectRatio = 16/9;
60 | String videoUrl = "";
61 |
62 | /**
63 | * Creation and initalization of the Activitiy.
64 | * Initializes variables, listeners, and starts request of a movie list.
65 | *
66 | * @param savedInstanceState a saved instance of the Bundle
67 | */
68 | public void onCreate(Bundle savedInstanceState) {
69 | super.onCreate(savedInstanceState);
70 |
71 | String packageName = getPackageName();
72 | Resources resources = getResources();
73 |
74 | requestWindowFeature(Window.FEATURE_NO_TITLE);
75 | getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
76 | setContentView(resources.getIdentifier("simple_stream_player", "layout", packageName));
77 |
78 | _frameContainer = (ViewGroup) findViewById(resources.getIdentifier("framecontainer", "id", packageName));
79 | _frameContainer.setBackgroundColor(0xFF000000);
80 |
81 | _playButton = (Button) findViewById(resources.getIdentifier("playbutton", "id", packageName));
82 | _stopButton = (Button) findViewById(resources.getIdentifier("stopbutton", "id", packageName));
83 | _touchButton = (Button) findViewById(resources.getIdentifier("touchbutton", "id", packageName));
84 | vogglzButton = (Button) findViewById(resources.getIdentifier("vogglzButton", "id", packageName));
85 | _scrubber = (SeekBar) findViewById(resources.getIdentifier("scrubber", "id", packageName));
86 |
87 | _playButton.setOnClickListener(playListener);
88 | _stopButton.setOnClickListener(stopListener);
89 | _touchButton.setOnClickListener(touchListener);
90 | vogglzButton.setOnClickListener(vogglezListner);
91 | _scrubber.setOnSeekBarChangeListener(this);
92 |
93 | _scrubber.setEnabled(false);
94 |
95 | videoUrl = getIntent().getStringExtra("videoUrl");
96 | viewMode = getIntent().getIntExtra("viewMode", 2);
97 | aspectRatio = getIntent().getFloatExtra("aspectRatio", 16/9);
98 | Log.i(TAG, "Getting View Mode - " + viewMode + " & Aspect Ratio - " + aspectRatio);
99 |
100 | loadVideo();
101 |
102 | showControls(true);
103 | }
104 |
105 | /**
106 | * Show/Hide the playback controls
107 | *
108 | * @param bShow Show or hide the controls. Pass either true or false.
109 | */
110 | public void showControls(boolean bShow) {
111 | int visibility = View.GONE;
112 |
113 | if (bShow)
114 | visibility = View.VISIBLE;
115 |
116 | _playButton.setVisibility(visibility);
117 | _stopButton.setVisibility(visibility);
118 | _touchButton.setVisibility(visibility);
119 | vogglzButton.setVisibility(visibility);
120 | _scrubber.setVisibility(visibility);
121 | if(viewMode <= 1) {
122 | _touchButton.setVisibility(View.GONE);
123 | vogglzButton.setVisibility(View.GONE);
124 | }
125 | if (_pfview != null) {
126 | if (!_pfview.supportsNavigationMode(PFNavigationMode.MOTION))
127 | _touchButton.setVisibility(View.GONE);
128 | }
129 | }
130 |
131 |
132 | /**
133 | * Start the video with a local file path
134 | */
135 | public void loadVideo() {
136 |
137 | progressDialog = ProgressDialog.show(this, "Initializing", "Please wait while Loading...");
138 |
139 | _pfview = PFObjectFactory.view(this);
140 | _pfasset = PFObjectFactory.assetFromUri(SimpleStreamPlayerActivity.this, Uri.parse(videoUrl), SimpleStreamPlayerActivity.this);
141 |
142 | // Setting up View Mode & Aspect Ratio : @JB
143 | // @TODO Fix if newer version of PAN FRAME releases
144 | _pfview.setMode((viewMode >= 2) ? 2 : viewMode, aspectRatio);
145 |
146 | _pfview.displayAsset(_pfasset);
147 | _pfview.setNavigationMode(_currentNavigationMode);
148 |
149 | _frameContainer.addView(_pfview.getView(), 0);
150 | }
151 |
152 | /**
153 | * Status callback from the PFAsset instance.
154 | * Based on the status this function selects the appropriate action.
155 | *
156 | * @param asset The asset who is calling the function
157 | * @param status The current status of the asset.
158 | */
159 | public void onStatusMessage(final PFAsset asset, PFAssetStatus status) {
160 | switch (status) {
161 | case LOADED:
162 | Log.d(TAG, "Loaded");
163 | /*
164 | if (progressDialog != null) {
165 | if (progressDialog.isShowing()) {
166 | progressDialog.dismiss();
167 | }
168 | }
169 | */
170 | // For Enabling AutoPlay when Starting the App
171 | _pfasset.play();
172 | break;
173 | case DOWNLOADING:
174 | Log.d(TAG, "Downloading 360� movie: " + _pfasset.getDownloadProgress() + " percent complete");
175 | break;
176 | case DOWNLOADED:
177 | Log.d(TAG, "Downloaded to " + asset.getUrl());
178 | break;
179 | case DOWNLOADCANCELLED:
180 | Log.d(TAG, "Download cancelled");
181 | break;
182 | case PLAYING:
183 | Log.d(TAG, "Playing");
184 | if (progressDialog != null) {
185 | if (progressDialog.isShowing()) {
186 | progressDialog.dismiss();
187 | }
188 | }
189 | getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
190 | _scrubber.setEnabled(true);
191 | _playButton.setText("pause");
192 | _scrubberMonitorTimer = new Timer();
193 | final TimerTask task = new TimerTask() {
194 | public void run() {
195 | if (_updateThumb) {
196 | _scrubber.setMax((int) asset.getDuration());
197 | _scrubber.setProgress((int) asset.getPlaybackTime());
198 | }
199 | }
200 | };
201 | _scrubberMonitorTimer.schedule(task, 0, 33);
202 | break;
203 | case PAUSED:
204 | Log.d(TAG, "Paused");
205 | _playButton.setText("play");
206 | break;
207 | case STOPPED:
208 | Log.d(TAG, "Stopped");
209 | _playButton.setText("play");
210 | _scrubberMonitorTimer.cancel();
211 | _scrubberMonitorTimer = null;
212 | _scrubber.setProgress(0);
213 | _scrubber.setEnabled(false);
214 | getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
215 | break;
216 | case COMPLETE:
217 | Log.d(TAG, "Complete");
218 | _playButton.setText("play");
219 | _scrubberMonitorTimer.cancel();
220 | _scrubberMonitorTimer = null;
221 | getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
222 | break;
223 | case ERROR:
224 | Log.d(TAG, "Error");
225 | break;
226 | }
227 | }
228 |
229 | /**
230 | * Click listener for the play/pause button
231 | */
232 | private OnClickListener vogglezListner = new OnClickListener() {
233 |
234 | public void onClick(View v) {
235 | // stopPlay();
236 | // progressDialog.show();
237 | changeViewingMode();
238 | }
239 | };
240 |
241 | private void changeViewingMode() {
242 | Log.i(TAG, "Changing View Mode 1 - " + viewMode);
243 | if (viewMode == 2 || viewMode == 3) {
244 | viewMode = 0;
245 | vogglzButton.setText("vogglz");
246 | } else {
247 | viewMode = 2;
248 | vogglzButton.setText("spherical");
249 | }
250 | Log.i(TAG, "Changing View Mode 2 - " + viewMode);
251 | _pfview.setMode((viewMode >= 2) ? 2 : viewMode, aspectRatio);
252 | // _pfasset.play();
253 | }
254 |
255 | /**
256 | * Click listener for the play/pause button
257 | */
258 | private OnClickListener playListener = new OnClickListener() {
259 |
260 | public void onClick(View v) {
261 | if (_pfasset.getStatus() == PFAssetStatus.PLAYING) {
262 | _pfasset.pause();
263 | } else {
264 | if (_pfasset.getStatus() == PFAssetStatus.LOADED) {
265 | progressDialog.show();
266 | }
267 | _pfasset.play();
268 | }
269 | }
270 | };
271 |
272 | /**
273 | * Click listener for the stop/back button
274 | */
275 | private OnClickListener stopListener = new OnClickListener() {
276 | public void onClick(View v) {
277 | stopPlay();
278 | }
279 | };
280 |
281 | private void stopPlay() {
282 | _pfasset.stop();
283 |
284 | // Resetting it for the next time.
285 | _pfasset = PFObjectFactory.assetFromUri(SimpleStreamPlayerActivity.this, Uri.parse(videoUrl), SimpleStreamPlayerActivity.this);
286 | _pfview.displayAsset(_pfasset);
287 | }
288 |
289 | /**
290 | * Click listener for the navigation mode (touch/motion (if available))
291 | */
292 | private OnClickListener touchListener = new OnClickListener() {
293 | public void onClick(View v) {
294 | if (_pfview != null) {
295 | Button touchButton = (Button) findViewById(getResources().getIdentifier("touchbutton", "id", getPackageName()));
296 | if (_currentNavigationMode == PFNavigationMode.TOUCH) {
297 | _currentNavigationMode = PFNavigationMode.MOTION;
298 | touchButton.setText("motion");
299 | } else {
300 | _currentNavigationMode = PFNavigationMode.TOUCH;
301 | touchButton.setText("touch");
302 | }
303 | _pfview.setNavigationMode(_currentNavigationMode);
304 | }
305 | }
306 | };
307 |
308 | // /**
309 | // * Setup the options menu
310 | // *
311 | // * @param menu The options menu
312 | // */
313 | // public boolean onCreateOptionsMenu(Menu menu) {
314 | // getMenuInflater().inflate(R.menu.activity_main, menu);
315 | // return true;
316 | // }
317 |
318 | /**
319 | * Called when pausing the app.
320 | * This function pauses the playback of the asset when it is playing.
321 | */
322 | public void onPause() {
323 | super.onPause();
324 | if (_pfasset != null) {
325 | if (_pfasset.getStatus() == PFAssetStatus.PLAYING)
326 | _pfasset.pause();
327 | }
328 |
329 | // Hide Dialog
330 | if (progressDialog != null) {
331 | if (progressDialog.isShowing()) {
332 | progressDialog.dismiss();
333 | }
334 | }
335 | }
336 |
337 | /**
338 | * Called when a previously created loader is being reset, and thus making its data unavailable.
339 | *
340 | * @param seekbar The SeekBar whose progress has changed
341 | * @param progress The current progress level.
342 | * @param fromUser True if the progress change was initiated by the user.
343 | */
344 | public void onProgressChanged(SeekBar seekbar, int progress, boolean fromUser) {
345 | }
346 |
347 | /**
348 | * Notification that the user has started a touch gesture.
349 | * In this function we signal the timer not to update the playback thumb while we are adjusting it.
350 | *
351 | * @param seekbar The SeekBar in which the touch gesture began
352 | */
353 | public void onStartTrackingTouch(SeekBar seekbar) {
354 | _updateThumb = false;
355 | }
356 |
357 | /**
358 | * Notification that the user has finished a touch gesture.
359 | * In this function we request the asset to seek until a specific time and signal the timer to resume the update of the playback thumb based on playback.
360 | *
361 | * @param seekbar The SeekBar in which the touch gesture began
362 | */
363 | public void onStopTrackingTouch(SeekBar seekbar) {
364 | _pfasset.setPLaybackTime(seekbar.getProgress());
365 | _updateThumb = false;
366 | }
367 |
368 | @Override
369 | public void onBackPressed() {
370 | _pfasset.stop();
371 | super.onBackPressed();
372 | this.finish();
373 | }
374 | }
375 |
--------------------------------------------------------------------------------
/src/android/libs/android-support-v4.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jumpbytehq/cordova-jb-plugin-panframe/03dc75f265d20cb6d2d8bd72f73fe3f1ef94c3a3/src/android/libs/android-support-v4.jar
--------------------------------------------------------------------------------
/src/android/libs/panframe-1.9.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jumpbytehq/cordova-jb-plugin-panframe/03dc75f265d20cb6d2d8bd72f73fe3f1ef94c3a3/src/android/libs/panframe-1.9.jar
--------------------------------------------------------------------------------
/src/android/simple_stream_player.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
11 |
12 |
13 |
14 |
17 |
18 |
31 |
32 |
46 |
47 |
61 |
62 |
76 |
77 |
89 |
90 |
91 |
92 |
93 |
94 |
--------------------------------------------------------------------------------
/src/ios/CDVPanframePlugin.h:
--------------------------------------------------------------------------------
1 | /*
2 | Licensed to the Apache Software Foundation (ASF) under one
3 | or more contributor license agreements. See the NOTICE file
4 | distributed with this work for additional information
5 | regarding copyright ownership. The ASF licenses this file
6 | to you under the Apache License, Version 2.0 (the
7 | "License"); you may not use this file except in compliance
8 | with the License. You may obtain a copy of the License at
9 |
10 | http://www.apache.org/licenses/LICENSE-2.0
11 |
12 | Unless required by applicable law or agreed to in writing,
13 | software distributed under the License is distributed on an
14 | "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 | KIND, either express or implied. See the License for the
16 | specific language governing permissions and limitations
17 | under the License.
18 | */
19 |
20 | #import
21 | #import
22 |
23 | @interface CDVPanframePlugin : CDVPlugin
24 |
25 | @property (nonatomic, retain) NSString* pluginCallbackId;
26 |
27 | - (void)init:(CDVInvokedUrlCommand*)command;
28 |
29 | @end
--------------------------------------------------------------------------------
/src/ios/CDVPanframePlugin.m:
--------------------------------------------------------------------------------
1 | /*
2 | Licensed to the Apache Software Foundation (ASF) under one
3 | or more contributor license agreements. See the NOTICE file
4 | distributed with this work for additional information
5 | regarding copyright ownership. The ASF licenses this file
6 | to you under the Apache License, Version 2.0 (the
7 | "License"); you may not use this file except in compliance
8 | with the License. You may obtain a copy of the License at
9 | http://www.apache.org/licenses/LICENSE-2.0
10 | Unless required by applicable law or agreed to in writing,
11 | software distributed under the License is distributed on an
12 | "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
13 | KIND, either express or implied. See the License for the
14 | specific language governing permissions and limitations
15 | under the License.
16 | */
17 |
18 | #include
19 | #include
20 |
21 | #import
22 | #import "CDVPanframePlugin.h"
23 | #import
24 | #import
25 | #import
26 | #import "SimplePlayerViewController.h"
27 |
28 | #define allTrim( object ) [object stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet] ]
29 |
30 | @implementation CDVPanframePlugin
31 | /*
32 | params:
33 | #1: video url
34 | #2: view mode: 0 for spherical,
35 | 1 for flat,
36 | 2 for cylindrical,
37 | 3 for side-by-side VR (non-stereoscopic),
38 | 4 for top-down VR formatted content (stereoscopic).
39 | */
40 | - (void)init:(CDVInvokedUrlCommand*)command
41 | {
42 | // TO Allow Playing Sound in the Credits: http://stackoverflow.com/a/16061703/934565
43 | NSError *setCategoryErr = nil;
44 | NSError *activationErr = nil;
45 | [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&setCategoryErr];
46 | [[AVAudioSession sharedInstance] setActive:YES error:&activationErr];
47 |
48 | // Continue With Plugin Functionality
49 | self.pluginCallbackId = command.callbackId;
50 | NSLog(@"player plugin init method called");
51 |
52 | NSString *videoUrl = [command.arguments objectAtIndex:0];
53 | NSString *viewMode = [command.arguments objectAtIndex:1];
54 |
55 | if(videoUrl.length == 0 || [allTrim( videoUrl ) length] == 0) {
56 | NSLog(@"video url empty!");
57 | [self sendErrorMessage:@"error: video url is empty!"];
58 | return;
59 | } else if (viewMode == nil) {
60 | NSLog(@"view mode empty!");
61 | [self sendErrorMessage:@"error: view mode is empty!"];
62 | return;
63 | }
64 |
65 | //[Parse setApplicationId:appId clientKey:clientKey];
66 | Class vcClass = NSClassFromString(@"SimplePlayerViewController");
67 | if (vcClass) {
68 | NSLog(@"player plugin videoUrl: %@, viewMode: %@", videoUrl, viewMode);
69 | UIStoryboard *MainStoryboard = [UIStoryboard storyboardWithName:@"PlayerStoryboard" bundle: nil];
70 | SimplePlayerViewController *vc = [MainStoryboard instantiateViewControllerWithIdentifier:@"SimplePlayerViewController"];
71 | [vc initParams:videoUrl mode:viewMode.intValue];
72 | UINavigationController * nc = [[UINavigationController alloc]initWithRootViewController:vc];
73 | nc.navigationBar.barStyle = UIBarStyleDefault;
74 | /* [[NSNotificationCenter defaultCenter] addObserver:self
75 | selector:@selector(didDismissPlayerController)
76 | name:@"didDismissPlayerController"
77 | object:nil];*/
78 | [self.viewController presentViewController:nc animated:YES completion:nil];
79 |
80 | } else {
81 | NSLog(@"player view controller class does not exists");
82 | [self sendErrorMessage:@"error: player view controller class does not exists"];
83 | return;
84 | }
85 |
86 | CDVPluginResult* pluginResult = nil;
87 | pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
88 | [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
89 | }
90 |
91 | -(void)didDismissPlayerController {
92 | /*NSLog(@"Dismissed player controller");
93 | [[NSNotificationCenter defaultCenter] removeObserver: self];
94 | [self sendOKMessage:@"test"];*/
95 | }
96 |
97 | -(void) sendOKMessage:(NSString*)scantarget
98 | {
99 | CDVPluginResult* result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:scantarget];
100 | [self.commandDelegate sendPluginResult:result callbackId: self.pluginCallbackId];
101 | }
102 |
103 | -(void) sendErrorMessage:(NSString*)error
104 | {
105 | CDVPluginResult* result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:error];
106 | [self.commandDelegate sendPluginResult:result callbackId: self.pluginCallbackId];
107 | }
108 |
109 | @end
110 |
--------------------------------------------------------------------------------
/src/ios/PlayerStoryboard.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
50 |
67 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
--------------------------------------------------------------------------------
/src/ios/SimplePlayerViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // SimplePlayerViewController.h
3 | // SimplePlayer
4 | //
5 | // Created by Ron Bakker on 18-06-13.
6 | // Copyright (c) 2013 Mindlight. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface SimplePlayerViewController : UIViewController
12 | - (void) initParams:(NSString*)url mode:(int)mode;
13 | @end
14 |
15 |
--------------------------------------------------------------------------------
/src/ios/SimplePlayerViewController.m:
--------------------------------------------------------------------------------
1 | //
2 | // SimplePlayerViewController.m
3 | // SimplePlayer
4 | //
5 | // Created by Ron Bakker on 18-06-13.
6 | // Copyright (c) 2013 Mindlight. All rights reserved.
7 | //
8 |
9 | #import "SimplePlayerViewController.h"
10 | #import
11 |
12 |
13 | @interface SimplePlayerViewController ()
14 | {
15 | PFView * pfView;
16 | id pfAsset;
17 | enum PFNAVIGATIONMODE currentmode;
18 | bool touchslider;
19 | bool autoplay;
20 | NSTimer *slidertimer;
21 | int currentview;
22 | NSString *videoURL;
23 | int viewMode;
24 |
25 | IBOutlet UIButton *playbutton;
26 | IBOutlet UIButton *viewbutton;
27 | IBOutlet UISlider *slider;
28 | __weak IBOutlet UIButton *toggleViewButton;
29 | IBOutlet UIActivityIndicatorView *seekindicator;
30 | __weak IBOutlet UIButton *backButton;
31 | }
32 |
33 | - (void) onStatusMessage : (PFAsset *) asset message:(enum PFASSETMESSAGE) m;
34 | - (void) onPlayerTime:(id)asset hasTime:(CMTime)time;
35 |
36 | @end
37 |
38 | @implementation SimplePlayerViewController
39 |
40 | -(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
41 | {
42 | if ((self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])) {
43 | }
44 | return self;
45 | }
46 |
47 |
48 | - (void)viewDidLoad
49 | {
50 | [super viewDidLoad];
51 | // hide navigation bar
52 | [[self navigationController] setNavigationBarHidden:YES animated:YES];
53 | //self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancelVR)];
54 | //self.title = @"VR Player";
55 | slider.value = 0;
56 | slider.enabled = false;
57 |
58 | UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
59 | [button addTarget:self
60 | action:@selector(aMethod:)
61 | forControlEvents:UIControlEventTouchUpInside];
62 | [button setTitle:@"Show View" forState:UIControlStateNormal];
63 | [button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
64 | button.frame = CGRectMake(80.0, 210.0, 160.0, 40.0);
65 | // [self.view addSubview:button];
66 |
67 | slidertimer = [NSTimer scheduledTimerWithTimeInterval: 0.1
68 | target: self
69 | selector:@selector(onPlaybackTime:)
70 | userInfo: nil repeats:YES];
71 |
72 | seekindicator.hidden = TRUE;
73 |
74 | currentmode = PF_NAVIGATION_MOTION;
75 | currentview = viewMode;
76 |
77 | if(currentview == 0) {
78 | [toggleViewButton setTitle:@"Vogglz" forState:UIControlStateNormal];
79 | } else {
80 | [toggleViewButton setTitle:@"Sphere" forState:UIControlStateNormal];
81 | }
82 | if(autoplay) {
83 | [playbutton sendActionsForControlEvents: UIControlEventTouchUpInside];
84 | }
85 | }
86 |
87 | // added for custom back
88 | - (void) cancelVR {
89 | [self stop];
90 | [self.presentingViewController dismissViewControllerAnimated:YES completion:nil];
91 | NSLog(@"Cancel VR called:");
92 | }
93 |
94 | - (void)aMethod:(UIButton*)button
95 | {
96 | NSLog(@"Button clicked.");
97 | }
98 |
99 | -(void)onPlaybackTime:(NSTimer *)timer
100 | {
101 | // retrieve the playback time from an asset and update the slider
102 |
103 | if (pfAsset == nil)
104 | return;
105 | if (!touchslider && [pfAsset getStatus] != PF_ASSET_SEEKING)
106 | {
107 | CMTime t = [pfAsset getPlaybackTime];
108 |
109 | slider.value = CMTimeGetSeconds(t);
110 | }
111 | }
112 |
113 | - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
114 | {
115 | return (interfaceOrientation == UIInterfaceOrientationLandscapeRight) || (interfaceOrientation == UIInterfaceOrientationLandscapeLeft);
116 | }
117 |
118 |
119 | - (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
120 | [self resetViewParameters];
121 | }
122 |
123 | - (void) resetViewParameters
124 | {
125 | // set default FOV
126 | [pfView setFieldOfView:75.0f];
127 | // register the interface orientation with the PFView
128 | [pfView setInterfaceOrientation:self.interfaceOrientation];
129 | switch(self.interfaceOrientation)
130 | {
131 | case UIDeviceOrientationPortrait:
132 | case UIDeviceOrientationPortraitUpsideDown:
133 | // Wider FOV which for portrait modes (matter of taste)
134 | [pfView setFieldOfView:90.0f];
135 | break;
136 | default:
137 | break;
138 | }
139 | }
140 |
141 | - (void) createHotspots
142 | {
143 | // create some sample hotspots on the view and register a callback
144 |
145 | id hp1 = [pfView createHotspot:[UIImage imageNamed:@"hotspot.png"]];
146 | id hp2 = [pfView createHotspot:[UIImage imageNamed:@"hotspot.png"]];
147 | id hp3 = [pfView createHotspot:[UIImage imageNamed:@"hotspot.png"]];
148 | id hp4 = [pfView createHotspot:[UIImage imageNamed:@"hotspot.png"]];
149 | id hp5 = [pfView createHotspot:[UIImage imageNamed:@"hotspot.png"]];
150 | id hp6 = [pfView createHotspot:[UIImage imageNamed:@"hotspot.png"]];
151 |
152 | [hp1 setCoordinates:0 andX:0 andZ:0];
153 | [hp2 setCoordinates:40 andX:5 andZ:0];
154 | [hp3 setCoordinates:80 andX:1 andZ:0];
155 | [hp4 setCoordinates:120 andX:-5 andZ:0];
156 | [hp5 setCoordinates:160 andX:-10 andZ:0];
157 | [hp6 setCoordinates:220 andX:0 andZ:0];
158 |
159 | [hp3 setSize:2];
160 | [hp3 setAlpha:0.5f];
161 |
162 | [hp1 setTag:1];
163 | [hp2 setTag:2];
164 | [hp3 setTag:3];
165 | [hp4 setTag:4];
166 | [hp5 setTag:5];
167 | [hp6 setTag:6];
168 |
169 | [hp1 addTarget:self action:@selector(onHotspot:)];
170 | [hp2 addTarget:self action:@selector(onHotspot:)];
171 | [hp3 addTarget:self action:@selector(onHotspot:)];
172 | [hp4 addTarget:self action:@selector(onHotspot:)];
173 | [hp5 addTarget:self action:@selector(onHotspot:)];
174 | [hp6 addTarget:self action:@selector(onHotspot:)];
175 | }
176 |
177 | - (void) onHotspot:(id) hotspot
178 | {
179 | // log the hotspot triggered
180 | NSLog(@"Hotspot triggered. Tag: %d", [hotspot getTag]);
181 |
182 | // animate the hotspot to show the user it was clicked
183 | [hotspot animate];
184 | }
185 |
186 | - (void) createView
187 | {
188 | // initialize an PFView
189 | pfView = [PFObjectFactory viewWithFrame:[self.view bounds]];
190 | pfView.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight);
191 |
192 | // set the appropriate navigation mode PFView
193 | [pfView setNavigationMode:currentmode];
194 |
195 | // set an optional blackspot image
196 | // [pfView setBlindSpotImage:@"blackspot.png"];
197 | //[pfView setBlindSpotLocation:PF_BLINDSPOT_BOTTOM];
198 |
199 | //Options: 0 for spherical, 1 for flat, 2 for cylindrical, 3 for side-by-side VR (non-stereoscopic), 4 for top-down VR formatted content (stereoscopic).
200 | [pfView setViewMode: viewMode andAspect:16.0/9.0];
201 | // add the view to the current stack of views
202 | [self.view addSubview:pfView];
203 | [self.view sendSubviewToBack:pfView];
204 |
205 | // Set some parameters
206 | [self resetViewParameters];
207 |
208 | // start rendering the view
209 | [pfView run];
210 | }
211 |
212 |
213 | - (void) deleteView
214 | {
215 | // stop rendering the view
216 | [pfView halt];
217 |
218 | // remove and destroy view
219 | [pfView removeFromSuperview];
220 | pfView = nil;
221 | }
222 |
223 | - (void) createAssetWithUrl:(NSURL *)url
224 | {
225 | touchslider = false;
226 |
227 | // load an PFAsset from an url
228 | pfAsset = (id)[PFObjectFactory assetFromUrl:url observer:(PFAssetObserver*)self];
229 | [pfAsset setTimeMonitor:self];
230 | // connect the asset to the view
231 | [pfView displayAsset:(PFAsset *)pfAsset];
232 | }
233 |
234 | - (void) deleteAsset
235 | {
236 | if (pfAsset == nil)
237 | return;
238 |
239 | // disconnect the asset from the view
240 | [pfAsset setTimeMonitor:nil];
241 | [pfView displayAsset:nil];
242 | // stop and destroy the asset
243 | [pfAsset stop];
244 | pfAsset = nil;
245 | }
246 |
247 | - (void) onPlayerTime:(id)asset hasTime:(CMTime)time
248 | {
249 | }
250 |
251 | - (void) onStatusMessage : (id) asset message:(enum PFASSETMESSAGE) m
252 | {
253 | switch (m) {
254 | case PF_ASSET_SEEKING:
255 | NSLog(@"Seeking");
256 | seekindicator.hidden = FALSE;
257 | break;
258 | case PF_ASSET_PLAYING:
259 | NSLog(@"Playing");
260 | seekindicator.hidden = TRUE;
261 | CMTime t = [asset getDuration];
262 | slider.maximumValue = CMTimeGetSeconds(t);
263 | slider.minimumValue = 0.0;
264 | [playbutton setTitle:@"Pause" forState:UIControlStateNormal];
265 | slider.enabled = true;
266 | break;
267 | case PF_ASSET_PAUSED:
268 | NSLog(@"Paused");
269 | [playbutton setTitle:@"Play" forState:UIControlStateNormal];
270 | break;
271 | case PF_ASSET_COMPLETE:
272 | NSLog(@"Complete");
273 | [asset setTimeRange:CMTimeMakeWithSeconds(0, 1000) duration:kCMTimePositiveInfinity onKeyFrame:NO];
274 | break;
275 | case PF_ASSET_STOPPED:
276 | NSLog(@"Stopped");
277 | [self stop];
278 | slider.value = 0;
279 | slider.enabled = false;
280 | break;
281 | default:
282 | break;
283 | }
284 | }
285 |
286 |
287 | - (void) stop
288 | {
289 | // reEnable the Idle Timer
290 | [[UIApplication sharedApplication] setIdleTimerDisabled:NO];
291 | // stop the view
292 | [pfView halt];
293 |
294 | // delete asset and view
295 | [self deleteAsset];
296 | [self deleteView];
297 |
298 | [playbutton setTitle:@"Play" forState:UIControlStateNormal];
299 | }
300 |
301 | - (void) play
302 | {
303 | // reEnable the Idle Timer
304 | [[UIApplication sharedApplication] setIdleTimerDisabled:YES];
305 | // create a Panframe view
306 | [self createView];
307 | NSLog(@"setting view mode to --- %d", viewMode);
308 | [pfView setViewMode:viewMode andAspect:16/9];
309 |
310 | // create some hotspots
311 | //[self createHotspots];
312 |
313 |
314 | // create a Panframe asset
315 | [self createAssetWithUrl:[NSURL URLWithString:videoURL]];
316 |
317 | // [self createAssetWithUrl:[NSURL URLWithString:@"http://199.217.117.12/demi_1920_960.mp4"]];
318 | //[self createAssetWithUrl:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"PANO1" ofType:@"m4v"]]];
319 |
320 | if ([pfAsset getStatus] == PF_ASSET_ERROR)
321 | [self stop];
322 | else
323 | [pfAsset play];
324 |
325 | }
326 | - (IBAction)goBack:(id)sender {
327 | [self cancelVR];
328 | }
329 |
330 | - (IBAction) stopButton:(id) sender
331 | {
332 | [self normalButton:sender];
333 | /*
334 | if (pfAsset == nil)
335 | return;
336 | */
337 | [self stop];
338 | }
339 |
340 | - (IBAction) playButton:(id) sender
341 | {
342 | [self normalButton:sender];
343 |
344 | if (pfAsset != nil)
345 | {
346 | NSLog(@"calling pause");
347 | [pfAsset pause];
348 | } else {
349 | [self play];
350 | NSLog(@"playing now.");
351 | }
352 | }
353 |
354 | - (IBAction)toggleViewMode:(id)sender {
355 | if (pfView != nil)
356 | {
357 | if (currentview == 0)
358 | {
359 | currentview = 3;
360 | [toggleViewButton setTitle:@"Sphere" forState:UIControlStateNormal];
361 | }
362 | else
363 | {
364 | currentview = 0;
365 | [toggleViewButton setTitle:@"Vogglz" forState:UIControlStateNormal];
366 | }
367 | toggleViewButton.opaque = true;
368 | [pfView setViewMode:currentview andAspect:2.0/1.0];
369 | }
370 |
371 | [self normalButton:toggleViewButton];
372 |
373 | }
374 |
375 |
376 | - (IBAction) toggleView:(id) sender
377 | {
378 | if (pfView != nil)
379 | {
380 | if (currentview == 0)
381 | {
382 | currentview = 1;
383 | [viewbutton setTitle:@"flat" forState:UIControlStateNormal];
384 | }
385 | else
386 | {
387 | currentview = 0;
388 | [viewbutton setTitle:@"sphere" forState:UIControlStateNormal];
389 | }
390 | [pfView setViewMode:currentview andAspect:2.0/1.0];
391 | }
392 |
393 | [self normalButton:viewbutton];
394 | }
395 |
396 | - (IBAction) hiliteButton:(id) sender
397 | {
398 | // UIButton *b = (UIButton *) sender;
399 | // b.backgroundColor = [UIColor colorWithRed:53.0/255.0 green:72.0/255.0 blue:160.0/255.0 alpha:1.0];
400 | }
401 |
402 | - (IBAction) normalButton:(id) sender
403 | {
404 | // UIButton *b = (UIButton *) sender;
405 | // [b setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
406 | // [b setTitleShadowColor:[UIColor whiteColor] forState:UIControlStateNormal];
407 | // CALayer *layer = b.layer;
408 | // layer.cornerRadius = 2.0f;
409 | // layer.backgroundColor = [[[UIColor darkGrayColor] colorWithAlphaComponent:0] CGColor];
410 | }
411 |
412 | - (IBAction) sliderChanged:(id) sender
413 | {
414 | }
415 |
416 | - (IBAction) sliderUp:(id) sender
417 | {
418 | if (pfAsset != nil)
419 | [pfAsset setTimeRange:CMTimeMakeWithSeconds(slider.value, 1000) duration:kCMTimePositiveInfinity onKeyFrame:NO];
420 | touchslider = false;
421 | }
422 |
423 | - (IBAction) sliderDown:(id) sender
424 | {
425 | touchslider = true;
426 | }
427 |
428 | - (void) initParams:(NSString*)url mode:(int)mode {
429 | videoURL = url;
430 | viewMode = mode;
431 | autoplay = true;
432 | [pfView setViewMode:mode andAspect:16.0/9.0];
433 | NSLog(@"view mode has been set to mode: %d & video url set to: %@", viewMode, videoURL);
434 | }
435 |
436 |
437 | @end
438 |
--------------------------------------------------------------------------------
/src/ios/frameworks/Panframe.framework/Headers/PFAsset.h:
--------------------------------------------------------------------------------
1 | //
2 | // Panframe media library
3 | //
4 | // For more information visit www.panframe.com
5 | // Subject to license agreements. May not be re-sold or re-packaged.
6 | //
7 | // Copyright © 2010-2014 Mindlight. All rights reserved.
8 | //
9 | // PFAsset
10 | // Abstract Panframe asset protocol
11 | //
12 |
13 | #import
14 |
15 | @protocol PFAsset;
16 |
17 | /** A protocol for monitoring the progress of the playback of an asset */
18 | @protocol PFAssetTimeMonitor
19 |
20 | /** The callback called when a new video frame arrives
21 | @param asset The asset where the message originated from.
22 | @param time The playback time that was monitored
23 | */
24 | - (void) onPlayerTime:(id)asset hasTime:(CMTime)time;
25 |
26 | @end
27 |
28 | @class PFAssetObserver;
29 |
30 | /** An object which implements the PFAsset protocol delivers playback control for 360 video assets. An PFAsset can be instantiated within Panframe by using the appropriate PFObjectFactory method.*/
31 | @protocol PFAsset
32 |
33 | /** Playback of the asset */
34 | - (void) play;
35 |
36 | /** Playback of the asset, starting at a specific time
37 | @param start The position from the start of the asset to begin playback.
38 | @param keyframe By specifying yes, you allow the seek operation to jump to the nearest keyframe for faster operation.
39 | */
40 | - (void) playWithSeekTo:(CMTime)start onKeyFrame:(BOOL)keyframe;
41 |
42 | /** Pause the playback of the asset */
43 | - (void) pause;
44 |
45 | /** Stops the playback of the asset */
46 | - (void) stop;
47 |
48 | /** Get the current timerange of playback
49 | @return Returns a CMTimeRange of the configured start time of playback and duration
50 | */
51 | - (CMTimeRange) getTimeRange;
52 |
53 | /** Set the current timerange of playback. Use this to skip to a specific part in the asset.
54 | @param start The position from the start of the asset to begin playback.
55 | @param duration The duration of the playback from the start
56 | @param keyframe By specifying yes, you allow the seek operation to jump to the nearest keyframe for faster operation.
57 | */
58 | - (void) setTimeRange:(CMTime)start duration:(CMTime)duration onKeyFrame:(BOOL)keyframe;
59 |
60 | /** Get the current time in playback
61 | @return Returns a CMTime of the current position in playback of the asset.
62 | */
63 | - (CMTime) getPlaybackTime;
64 |
65 | /** Get the duration of the asset
66 | @return Returns the total duration of the asset.
67 | */
68 | - (CMTime) getDuration;
69 |
70 | /** Get URL of the asset
71 | @return Returns the url of the asset.
72 | */
73 | - (NSURL *) getUrl;
74 |
75 | /** Add an observer to the asset
76 | @param observer The observer implementing the PFAssetObserver protocol to be added
77 | */
78 | - (void) addObserver: (PFAssetObserver *) observer;
79 |
80 | /** Remove an observer to the asset
81 | @param observer The observer implementing the PFAssetObserver protocol to be removed
82 | */
83 | - (void) removeObserver: (PFAssetObserver *) observer;
84 |
85 | /** Returns the status of the asset
86 | @return The status of the asset
87 | */
88 | - (enum PFASSETMESSAGE) getStatus;
89 |
90 | /** Returns the download progress of the asset
91 | @return The the download progress (when dowloading assets) in a range from 0.0 to 1.0
92 | */
93 | - (float) getDownloadProgress;
94 |
95 | /** Add a time monitor to the asset, which is fired every time a video frame arrives
96 | @param monitor Time monitor delegate to receive updates
97 | @return Return true when the monitor can be set
98 | */
99 | - (bool) setTimeMonitor:(id) monitor;
100 | /** Set the volume of the asset's audio track
101 | @param volume The volume on a scale of 0.0 to 1.0
102 | */
103 | - (void) setVolume:(float)volume;
104 |
105 | @end
106 |
107 | @class PFAsset;
--------------------------------------------------------------------------------
/src/ios/frameworks/Panframe.framework/Headers/PFAssetObserver.h:
--------------------------------------------------------------------------------
1 | //
2 | // Panframe media library
3 | //
4 | // For more information visit www.panframe.com
5 | // Subject to license agreements. May not be re-sold or re-packaged.
6 | //
7 | // Copyright © 2010-2014 Mindlight. All rights reserved.
8 | //
9 | // PFAssetObserver
10 | // Observer protocol for PFAsset objects
11 | //
12 |
13 | #ifndef PFAssetObserver_h
14 | #define PFAssetObserver_h
15 |
16 | @class PFAsset;
17 | enum PFASSETMESSAGE {
18 | PF_ASSET_LOADED = 1,
19 | PF_ASSET_PLAYING = 2,
20 | PF_ASSET_PAUSED = 3,
21 | PF_ASSET_STOPPED = 4,
22 | PF_ASSET_COMPLETE = 5,
23 | PF_ASSET_DOWNLOADING = 6, // depricated
24 | PF_ASSET_DOWNLOADED = 7, // depricated
25 | PF_ASSET_DOWNLOADCANCELLED = 8, // depricated
26 | PF_ASSET_ERROR = 9,
27 | PF_ASSET_SEEKING = 10
28 | };
29 |
30 | /** An object which implements the PFAssetObserver protocol for monitoring asset status.*/
31 | @protocol PFAssetObserver
32 | /** The callback called during PFAsset status updates
33 | @param asset The asset where the messag originated from.
34 | @param m The status change of the PFAsset
35 | */
36 | - (void) onStatusMessage : (PFAsset *) asset message:(enum PFASSETMESSAGE) m;
37 | @end
38 |
39 | #endif
--------------------------------------------------------------------------------
/src/ios/frameworks/Panframe.framework/Headers/PFObjectFactory.h:
--------------------------------------------------------------------------------
1 | //
2 | // Panframe media library
3 | //
4 | // For more information visit www.panframe.com
5 | // Subject to license agreements. May not be re-sold or re-packaged.
6 | //
7 | // Copyright © 2010-2014 Mindlight. All rights reserved.
8 | //
9 | // PFObjectFactory
10 | // Object factory for instantiating PFView and PFAsset based objects
11 | //
12 |
13 | @class PFView;
14 | @class PFAssetObserver;
15 |
16 |
17 | /** The PFObjectFactory can instantiate appropriate PFAsset instances and PFView instances */
18 | @interface PFObjectFactory : NSObject
19 | /** Instantiate an PFAsset object and load its contents from a local file URL or remote HTTP based url. Instantiation follows the 'create' rule.
20 | @param url The url The url of the asset to be loaded
21 | @param o The observer registered to observe asset status
22 | @return A PFAsset instance if the file was loaded, nil on error.
23 | */
24 | + (PFAsset *) assetFromUrl:(NSURL*)url observer:(PFAssetObserver*)o;
25 | /** Instantiate a PFView for rendering PFAsset instances. A frame rectangle is given to initialize the view with specific boundaries. Instantiation follows the 'create' rule.
26 | @param frame The frame of reference for the view instance to be created
27 | @return A PFView instance conforming to the frame requested.
28 | */
29 | + (PFView *) viewWithFrame:(CGRect)frame;
30 | @end
31 |
--------------------------------------------------------------------------------
/src/ios/frameworks/Panframe.framework/Headers/PFView.h:
--------------------------------------------------------------------------------
1 | //
2 | // Panframe media library
3 | //
4 | // For more information visit www.panframe.com
5 | // Subject to license agreements. May not be re-sold or re-packaged.
6 | //
7 | // Copyright © 2010-2014 Mindlight. All rights reserved.
8 | //
9 | // PFView
10 | // PFView interface suitable for handling PFAsset based media
11 | //
12 |
13 | #ifndef PFView_h
14 | #define PFView_h
15 |
16 | #import
17 |
18 | @class PFAsset;
19 |
20 | enum PFNAVIGATIONMODE {
21 | PF_NAVIGATION_MOTION = 0,
22 | PF_NAVIGATION_TOUCH = 1
23 | };
24 |
25 | enum PFBLINDSPOTLOCATION {
26 | PF_BLINDSPOT_NONE = 0,
27 | PF_BLINDSPOT_BOTTOM = 1,
28 | PF_BLINDSPOT_TOP = 2
29 | };
30 |
31 |
32 | /** The PFHotspot protocol for view-dependent hotspot objects.*/
33 | @protocol PFHotspot
34 |
35 | /** Set the current size of the hotspot. Defaults to 1.0
36 | @param radius Size as a radius.
37 | */
38 | - (void) setSize:(float) radius;
39 |
40 | /** Set the current size of the hitspot of the hotspot. Defaults to 1.2 times the size of the hotspot radius.
41 | @param radius Size as a radius.
42 | */
43 | - (void) setHitRadius:(float) radius;
44 |
45 | /** Set the polar coordinates of the hotspot in degrees.
46 | @param rotY rotation around the y-axis, moving the hotspot left or right on the screen (0 to 360 degrees).
47 | @param rotX rotation around the x-axis, moving the hotspot up or down on the screen (-90 to 90 degrees).
48 | @param rotZ rotation around the z-axis, not supported at the moment.
49 | */
50 | - (void) setCoordinates:(float)rotY andX:(float)rotX andZ:(float)rotZ;
51 |
52 | /** Tag the hotspot with a int.
53 | @param tag The tag for the hotspot.
54 | */
55 | - (void) setTag:(int)tag;
56 |
57 | /** Retrieve the tag for the hotspot.
58 | */
59 | - (int) getTag;
60 |
61 | /** Set the selector to trigger when the hotspot is touched. The selector should be in the form -(void)method:(id)hotspot;
62 | @param target The target class.
63 | @param action The selector to call.
64 | */
65 | - (void) addTarget:(id)target action:(SEL)action;
66 |
67 | /** Set an alpha value for the hotspot
68 | @param alpha The alpha value from 0.0f to 1.0f.
69 | */
70 | - (void) setAlpha:(float) alpha;
71 |
72 | /** Retrieve the alpha value for the hotspot.
73 | */
74 | - (float) getAlpha;
75 |
76 | /** Animate the hotspot. This is a fixed animation for now.
77 | */
78 | - (void) animate;
79 |
80 | @end
81 |
82 | /** An PFView is responsable for rendering the contents of PFAsset instances.*/
83 | @interface PFView : UIView
84 |
85 | /** Set the current user interface orientation in order to let the view track touch events properly
86 | @param orientation The current or desired UIInterfaceOrientation
87 | */
88 | - (void)setInterfaceOrientation:(UIInterfaceOrientation) orientation;
89 |
90 | /** Set the asset to be rendered upon this view. An asset can only be viewed on one PFView object at a time.
91 | @param asset The PFAsset to be rendered.
92 | */
93 | - (void) displayAsset : (PFAsset *) asset;
94 |
95 | /** Injects a panoramic image into the view to be displayed. Resolution and format depend on the specific device.
96 | @param image The UIImage to be injected.
97 | */
98 | - (void) injectImage:(UIImage*)image;
99 |
100 | /** Start rendering the view
101 | */
102 | - (void) run;
103 |
104 | /** Stop rendering the view
105 | */
106 | - (void) halt;
107 |
108 | /** Clear the current video frame (if any) being displayed
109 | */
110 | - (void) clear;
111 |
112 | /** Set view orientation input to motion or touch input.
113 | @param mode Set the navigation mode to either PF_NAVIGATION_MOTION or PF_NAVIGATION_TOUCH.
114 | */
115 | - (void) setNavigationMode: (enum PFNAVIGATIONMODE) mode;
116 |
117 | /** Set the optional image for the blindspot. Pass nil or PF_BLINDSPOT_NONE for no blindspot.
118 | @param resourceImageName The name of the PNG image file as included in the project resources
119 | */
120 | - (void) setBlindSpotImage:(NSString *)resourceImageName;
121 |
122 | /** Set the location for the blindspot image.
123 | @param location The location of the blindspot image.
124 | */
125 | - (void) setBlindSpotLocation:(enum PFBLINDSPOTLOCATION) location;
126 |
127 | /** Set the field of view in degrees
128 | @param fov Set the field of view for the 3D view. This defaults to 75.0
129 | */
130 | - (void) setFieldOfView:(float) fov;
131 |
132 | /** Returns the current relative rotation around the X-axis. This currently does not include PF_NAVIGATION_MOTION based navigation.
133 | @return The rotation in degrees
134 | */
135 | - (float) getRotationX;
136 |
137 | /** Returns the current relative rotation around the Y-axis. This currently does not include PF_NAVIGATION_MOTION based navigation.
138 | @return The rotation in degrees
139 | */
140 | - (float) getRotationY;
141 |
142 | /** Returns the current relative rotation around the Z-axis. This currently does not include PF_NAVIGATION_MOTION based navigation.
143 | @return The rotation in degrees
144 | */
145 | - (float) getRotationZ;
146 |
147 | /** Set the current relative view rotation around the X-axis.
148 | @param rx The rotation around the x-axis in degrees
149 | */
150 | - (void) setRotationX:(float)rx;
151 |
152 | /** Set the current relative view rotation around the Y-axis
153 | @param ry The rotation around the y-axis in degrees
154 | */
155 | - (void) setRotationY:(float)ry;
156 |
157 | /** Set the current relative view rotation around the Z-axis
158 | @param rz The rotation around the z-axis in degrees
159 | */
160 | - (void) setRotationZ:(float) rz;
161 |
162 | /** Set the current view mode
163 | @param mode The view mode. Options: 0 for spherical, 1 for flat, 2 for cylindrical, 3 for side-by-side VR (non-stereoscopic), 4 for top-down VR formatted content (stereoscopic).
164 | @param aspect The aspect ratio (for flat view).
165 | */
166 | - (void) setViewMode:(int)mode andAspect:(float)aspect;
167 |
168 | /** Reset the view direction (motion & touch) to default initial settings
169 | */
170 | - (void) resetView;
171 |
172 | /** Create a hotspot in the scene using an UIImage
173 | @param image The UIImage supporting transparancy (PNG)
174 | */
175 | - (id) createHotspot:(UIImage *)image;
176 |
177 | /** Remove a hotspot from the scene
178 | @param hotspot The hotspot to be removed
179 | */
180 | - (void) removeHotspot:(id) hotspot;
181 |
182 | /** Autolevel the view to its logical horizon after a number of seconds. Defaults to autoleveling within 2.5 seconds after touch end.
183 | @param autolevel Set to true (default) to auto-level the
184 | @param seconds The number of seconds after the last touch
185 | */
186 | - (void) setAutoLevel:(BOOL) autolevel afterSeconds:(float) seconds;
187 |
188 | /** Enable or disable stereo mode viewing
189 | @param bStereo Flag to indicate splitscreen stereo view display
190 | */
191 | - (void) setStereo:(BOOL)bStereo;
192 |
193 | @end
194 |
195 | @class PFView;
196 |
197 | @class PFHotspot;
198 |
199 | #endif
200 |
--------------------------------------------------------------------------------
/src/ios/frameworks/Panframe.framework/Headers/Panframe.h:
--------------------------------------------------------------------------------
1 | //
2 | // Panframe media library
3 | //
4 | // For more information visit www.panframe.com
5 | // Subject to license agreements. May not be re-sold or re-packaged.
6 | //
7 | // Copyright © 2010-2014 Mindlight. All rights reserved.
8 | //
9 | // Panframe main include/import file
10 | //
11 |
12 | #import
13 |
14 | #import "PFAsset.h"
15 | #import "PFAssetObserver.h"
16 | #import "PFView.h"
17 | #import "PFObjectFactory.h"
18 |
--------------------------------------------------------------------------------
/src/ios/frameworks/Panframe.framework/Panframe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jumpbytehq/cordova-jb-plugin-panframe/03dc75f265d20cb6d2d8bd72f73fe3f1ef94c3a3/src/ios/frameworks/Panframe.framework/Panframe
--------------------------------------------------------------------------------
/src/ios/frameworks/Panframe.framework/Resources/Info.plist:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jumpbytehq/cordova-jb-plugin-panframe/03dc75f265d20cb6d2d8bd72f73fe3f1ef94c3a3/src/ios/frameworks/Panframe.framework/Resources/Info.plist
--------------------------------------------------------------------------------
/src/ios/frameworks/Panframe.framework/Versions/A/Headers/PFAsset.h:
--------------------------------------------------------------------------------
1 | //
2 | // Panframe media library
3 | //
4 | // For more information visit www.panframe.com
5 | // Subject to license agreements. May not be re-sold or re-packaged.
6 | //
7 | // Copyright © 2010-2014 Mindlight. All rights reserved.
8 | //
9 | // PFAsset
10 | // Abstract Panframe asset protocol
11 | //
12 |
13 | #import
14 |
15 | @protocol PFAsset;
16 |
17 | /** A protocol for monitoring the progress of the playback of an asset */
18 | @protocol PFAssetTimeMonitor
19 |
20 | /** The callback called when a new video frame arrives
21 | @param asset The asset where the message originated from.
22 | @param time The playback time that was monitored
23 | */
24 | - (void) onPlayerTime:(id)asset hasTime:(CMTime)time;
25 |
26 | @end
27 |
28 | @class PFAssetObserver;
29 |
30 | /** An object which implements the PFAsset protocol delivers playback control for 360 video assets. An PFAsset can be instantiated within Panframe by using the appropriate PFObjectFactory method.*/
31 | @protocol PFAsset
32 |
33 | /** Playback of the asset */
34 | - (void) play;
35 |
36 | /** Playback of the asset, starting at a specific time
37 | @param start The position from the start of the asset to begin playback.
38 | @param keyframe By specifying yes, you allow the seek operation to jump to the nearest keyframe for faster operation.
39 | */
40 | - (void) playWithSeekTo:(CMTime)start onKeyFrame:(BOOL)keyframe;
41 |
42 | /** Pause the playback of the asset */
43 | - (void) pause;
44 |
45 | /** Stops the playback of the asset */
46 | - (void) stop;
47 |
48 | /** Get the current timerange of playback
49 | @return Returns a CMTimeRange of the configured start time of playback and duration
50 | */
51 | - (CMTimeRange) getTimeRange;
52 |
53 | /** Set the current timerange of playback. Use this to skip to a specific part in the asset.
54 | @param start The position from the start of the asset to begin playback.
55 | @param duration The duration of the playback from the start
56 | @param keyframe By specifying yes, you allow the seek operation to jump to the nearest keyframe for faster operation.
57 | */
58 | - (void) setTimeRange:(CMTime)start duration:(CMTime)duration onKeyFrame:(BOOL)keyframe;
59 |
60 | /** Get the current time in playback
61 | @return Returns a CMTime of the current position in playback of the asset.
62 | */
63 | - (CMTime) getPlaybackTime;
64 |
65 | /** Get the duration of the asset
66 | @return Returns the total duration of the asset.
67 | */
68 | - (CMTime) getDuration;
69 |
70 | /** Get URL of the asset
71 | @return Returns the url of the asset.
72 | */
73 | - (NSURL *) getUrl;
74 |
75 | /** Add an observer to the asset
76 | @param observer The observer implementing the PFAssetObserver protocol to be added
77 | */
78 | - (void) addObserver: (PFAssetObserver *) observer;
79 |
80 | /** Remove an observer to the asset
81 | @param observer The observer implementing the PFAssetObserver protocol to be removed
82 | */
83 | - (void) removeObserver: (PFAssetObserver *) observer;
84 |
85 | /** Returns the status of the asset
86 | @return The status of the asset
87 | */
88 | - (enum PFASSETMESSAGE) getStatus;
89 |
90 | /** Returns the download progress of the asset
91 | @return The the download progress (when dowloading assets) in a range from 0.0 to 1.0
92 | */
93 | - (float) getDownloadProgress;
94 |
95 | /** Add a time monitor to the asset, which is fired every time a video frame arrives
96 | @param monitor Time monitor delegate to receive updates
97 | @return Return true when the monitor can be set
98 | */
99 | - (bool) setTimeMonitor:(id) monitor;
100 | /** Set the volume of the asset's audio track
101 | @param volume The volume on a scale of 0.0 to 1.0
102 | */
103 | - (void) setVolume:(float)volume;
104 |
105 | @end
106 |
107 | @class PFAsset;
--------------------------------------------------------------------------------
/src/ios/frameworks/Panframe.framework/Versions/A/Headers/PFAssetObserver.h:
--------------------------------------------------------------------------------
1 | //
2 | // Panframe media library
3 | //
4 | // For more information visit www.panframe.com
5 | // Subject to license agreements. May not be re-sold or re-packaged.
6 | //
7 | // Copyright © 2010-2014 Mindlight. All rights reserved.
8 | //
9 | // PFAssetObserver
10 | // Observer protocol for PFAsset objects
11 | //
12 |
13 | #ifndef PFAssetObserver_h
14 | #define PFAssetObserver_h
15 |
16 | @class PFAsset;
17 | enum PFASSETMESSAGE {
18 | PF_ASSET_LOADED = 1,
19 | PF_ASSET_PLAYING = 2,
20 | PF_ASSET_PAUSED = 3,
21 | PF_ASSET_STOPPED = 4,
22 | PF_ASSET_COMPLETE = 5,
23 | PF_ASSET_DOWNLOADING = 6, // depricated
24 | PF_ASSET_DOWNLOADED = 7, // depricated
25 | PF_ASSET_DOWNLOADCANCELLED = 8, // depricated
26 | PF_ASSET_ERROR = 9,
27 | PF_ASSET_SEEKING = 10
28 | };
29 |
30 | /** An object which implements the PFAssetObserver protocol for monitoring asset status.*/
31 | @protocol PFAssetObserver
32 | /** The callback called during PFAsset status updates
33 | @param asset The asset where the messag originated from.
34 | @param m The status change of the PFAsset
35 | */
36 | - (void) onStatusMessage : (PFAsset *) asset message:(enum PFASSETMESSAGE) m;
37 | @end
38 |
39 | #endif
--------------------------------------------------------------------------------
/src/ios/frameworks/Panframe.framework/Versions/A/Headers/PFObjectFactory.h:
--------------------------------------------------------------------------------
1 | //
2 | // Panframe media library
3 | //
4 | // For more information visit www.panframe.com
5 | // Subject to license agreements. May not be re-sold or re-packaged.
6 | //
7 | // Copyright © 2010-2014 Mindlight. All rights reserved.
8 | //
9 | // PFObjectFactory
10 | // Object factory for instantiating PFView and PFAsset based objects
11 | //
12 |
13 | @class PFView;
14 | @class PFAssetObserver;
15 |
16 |
17 | /** The PFObjectFactory can instantiate appropriate PFAsset instances and PFView instances */
18 | @interface PFObjectFactory : NSObject
19 | /** Instantiate an PFAsset object and load its contents from a local file URL or remote HTTP based url. Instantiation follows the 'create' rule.
20 | @param url The url The url of the asset to be loaded
21 | @param o The observer registered to observe asset status
22 | @return A PFAsset instance if the file was loaded, nil on error.
23 | */
24 | + (PFAsset *) assetFromUrl:(NSURL*)url observer:(PFAssetObserver*)o;
25 | /** Instantiate a PFView for rendering PFAsset instances. A frame rectangle is given to initialize the view with specific boundaries. Instantiation follows the 'create' rule.
26 | @param frame The frame of reference for the view instance to be created
27 | @return A PFView instance conforming to the frame requested.
28 | */
29 | + (PFView *) viewWithFrame:(CGRect)frame;
30 | @end
31 |
--------------------------------------------------------------------------------
/src/ios/frameworks/Panframe.framework/Versions/A/Headers/PFView.h:
--------------------------------------------------------------------------------
1 | //
2 | // Panframe media library
3 | //
4 | // For more information visit www.panframe.com
5 | // Subject to license agreements. May not be re-sold or re-packaged.
6 | //
7 | // Copyright © 2010-2014 Mindlight. All rights reserved.
8 | //
9 | // PFView
10 | // PFView interface suitable for handling PFAsset based media
11 | //
12 |
13 | #ifndef PFView_h
14 | #define PFView_h
15 |
16 | #import
17 |
18 | @class PFAsset;
19 |
20 | enum PFNAVIGATIONMODE {
21 | PF_NAVIGATION_MOTION = 0,
22 | PF_NAVIGATION_TOUCH = 1
23 | };
24 |
25 | enum PFBLINDSPOTLOCATION {
26 | PF_BLINDSPOT_NONE = 0,
27 | PF_BLINDSPOT_BOTTOM = 1,
28 | PF_BLINDSPOT_TOP = 2
29 | };
30 |
31 |
32 | /** The PFHotspot protocol for view-dependent hotspot objects.*/
33 | @protocol PFHotspot
34 |
35 | /** Set the current size of the hotspot. Defaults to 1.0
36 | @param radius Size as a radius.
37 | */
38 | - (void) setSize:(float) radius;
39 |
40 | /** Set the current size of the hitspot of the hotspot. Defaults to 1.2 times the size of the hotspot radius.
41 | @param radius Size as a radius.
42 | */
43 | - (void) setHitRadius:(float) radius;
44 |
45 | /** Set the polar coordinates of the hotspot in degrees.
46 | @param rotY rotation around the y-axis, moving the hotspot left or right on the screen (0 to 360 degrees).
47 | @param rotX rotation around the x-axis, moving the hotspot up or down on the screen (-90 to 90 degrees).
48 | @param rotZ rotation around the z-axis, not supported at the moment.
49 | */
50 | - (void) setCoordinates:(float)rotY andX:(float)rotX andZ:(float)rotZ;
51 |
52 | /** Tag the hotspot with a int.
53 | @param tag The tag for the hotspot.
54 | */
55 | - (void) setTag:(int)tag;
56 |
57 | /** Retrieve the tag for the hotspot.
58 | */
59 | - (int) getTag;
60 |
61 | /** Set the selector to trigger when the hotspot is touched. The selector should be in the form -(void)method:(id)hotspot;
62 | @param target The target class.
63 | @param action The selector to call.
64 | */
65 | - (void) addTarget:(id)target action:(SEL)action;
66 |
67 | /** Set an alpha value for the hotspot
68 | @param alpha The alpha value from 0.0f to 1.0f.
69 | */
70 | - (void) setAlpha:(float) alpha;
71 |
72 | /** Retrieve the alpha value for the hotspot.
73 | */
74 | - (float) getAlpha;
75 |
76 | /** Animate the hotspot. This is a fixed animation for now.
77 | */
78 | - (void) animate;
79 |
80 | @end
81 |
82 | /** An PFView is responsable for rendering the contents of PFAsset instances.*/
83 | @interface PFView : UIView
84 |
85 | /** Set the current user interface orientation in order to let the view track touch events properly
86 | @param orientation The current or desired UIInterfaceOrientation
87 | */
88 | - (void)setInterfaceOrientation:(UIInterfaceOrientation) orientation;
89 |
90 | /** Set the asset to be rendered upon this view. An asset can only be viewed on one PFView object at a time.
91 | @param asset The PFAsset to be rendered.
92 | */
93 | - (void) displayAsset : (PFAsset *) asset;
94 |
95 | /** Injects a panoramic image into the view to be displayed. Resolution and format depend on the specific device.
96 | @param image The UIImage to be injected.
97 | */
98 | - (void) injectImage:(UIImage*)image;
99 |
100 | /** Start rendering the view
101 | */
102 | - (void) run;
103 |
104 | /** Stop rendering the view
105 | */
106 | - (void) halt;
107 |
108 | /** Clear the current video frame (if any) being displayed
109 | */
110 | - (void) clear;
111 |
112 | /** Set view orientation input to motion or touch input.
113 | @param mode Set the navigation mode to either PF_NAVIGATION_MOTION or PF_NAVIGATION_TOUCH.
114 | */
115 | - (void) setNavigationMode: (enum PFNAVIGATIONMODE) mode;
116 |
117 | /** Set the optional image for the blindspot. Pass nil or PF_BLINDSPOT_NONE for no blindspot.
118 | @param resourceImageName The name of the PNG image file as included in the project resources
119 | */
120 | - (void) setBlindSpotImage:(NSString *)resourceImageName;
121 |
122 | /** Set the location for the blindspot image.
123 | @param location The location of the blindspot image.
124 | */
125 | - (void) setBlindSpotLocation:(enum PFBLINDSPOTLOCATION) location;
126 |
127 | /** Set the field of view in degrees
128 | @param fov Set the field of view for the 3D view. This defaults to 75.0
129 | */
130 | - (void) setFieldOfView:(float) fov;
131 |
132 | /** Returns the current relative rotation around the X-axis. This currently does not include PF_NAVIGATION_MOTION based navigation.
133 | @return The rotation in degrees
134 | */
135 | - (float) getRotationX;
136 |
137 | /** Returns the current relative rotation around the Y-axis. This currently does not include PF_NAVIGATION_MOTION based navigation.
138 | @return The rotation in degrees
139 | */
140 | - (float) getRotationY;
141 |
142 | /** Returns the current relative rotation around the Z-axis. This currently does not include PF_NAVIGATION_MOTION based navigation.
143 | @return The rotation in degrees
144 | */
145 | - (float) getRotationZ;
146 |
147 | /** Set the current relative view rotation around the X-axis.
148 | @param rx The rotation around the x-axis in degrees
149 | */
150 | - (void) setRotationX:(float)rx;
151 |
152 | /** Set the current relative view rotation around the Y-axis
153 | @param ry The rotation around the y-axis in degrees
154 | */
155 | - (void) setRotationY:(float)ry;
156 |
157 | /** Set the current relative view rotation around the Z-axis
158 | @param rz The rotation around the z-axis in degrees
159 | */
160 | - (void) setRotationZ:(float) rz;
161 |
162 | /** Set the current view mode
163 | @param mode The view mode. Options: 0 for spherical, 1 for flat, 2 for cylindrical, 3 for side-by-side VR (non-stereoscopic), 4 for top-down VR formatted content (stereoscopic).
164 | @param aspect The aspect ratio (for flat view).
165 | */
166 | - (void) setViewMode:(int)mode andAspect:(float)aspect;
167 |
168 | /** Reset the view direction (motion & touch) to default initial settings
169 | */
170 | - (void) resetView;
171 |
172 | /** Create a hotspot in the scene using an UIImage
173 | @param image The UIImage supporting transparancy (PNG)
174 | */
175 | - (id) createHotspot:(UIImage *)image;
176 |
177 | /** Remove a hotspot from the scene
178 | @param hotspot The hotspot to be removed
179 | */
180 | - (void) removeHotspot:(id) hotspot;
181 |
182 | /** Autolevel the view to its logical horizon after a number of seconds. Defaults to autoleveling within 2.5 seconds after touch end.
183 | @param autolevel Set to true (default) to auto-level the
184 | @param seconds The number of seconds after the last touch
185 | */
186 | - (void) setAutoLevel:(BOOL) autolevel afterSeconds:(float) seconds;
187 |
188 | /** Enable or disable stereo mode viewing
189 | @param bStereo Flag to indicate splitscreen stereo view display
190 | */
191 | - (void) setStereo:(BOOL)bStereo;
192 |
193 | @end
194 |
195 | @class PFView;
196 |
197 | @class PFHotspot;
198 |
199 | #endif
200 |
--------------------------------------------------------------------------------
/src/ios/frameworks/Panframe.framework/Versions/A/Headers/Panframe.h:
--------------------------------------------------------------------------------
1 | //
2 | // Panframe media library
3 | //
4 | // For more information visit www.panframe.com
5 | // Subject to license agreements. May not be re-sold or re-packaged.
6 | //
7 | // Copyright © 2010-2014 Mindlight. All rights reserved.
8 | //
9 | // Panframe main include/import file
10 | //
11 |
12 | #import
13 |
14 | #import "PFAsset.h"
15 | #import "PFAssetObserver.h"
16 | #import "PFView.h"
17 | #import "PFObjectFactory.h"
18 |
--------------------------------------------------------------------------------
/src/ios/frameworks/Panframe.framework/Versions/A/Panframe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jumpbytehq/cordova-jb-plugin-panframe/03dc75f265d20cb6d2d8bd72f73fe3f1ef94c3a3/src/ios/frameworks/Panframe.framework/Versions/A/Panframe
--------------------------------------------------------------------------------
/src/ios/frameworks/Panframe.framework/Versions/A/Resources/Info.plist:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jumpbytehq/cordova-jb-plugin-panframe/03dc75f265d20cb6d2d8bd72f73fe3f1ef94c3a3/src/ios/frameworks/Panframe.framework/Versions/A/Resources/Info.plist
--------------------------------------------------------------------------------
/src/ios/frameworks/Panframe.framework/Versions/Current/Headers/PFAsset.h:
--------------------------------------------------------------------------------
1 | //
2 | // Panframe media library
3 | //
4 | // For more information visit www.panframe.com
5 | // Subject to license agreements. May not be re-sold or re-packaged.
6 | //
7 | // Copyright © 2010-2014 Mindlight. All rights reserved.
8 | //
9 | // PFAsset
10 | // Abstract Panframe asset protocol
11 | //
12 |
13 | #import
14 |
15 | @protocol PFAsset;
16 |
17 | /** A protocol for monitoring the progress of the playback of an asset */
18 | @protocol PFAssetTimeMonitor
19 |
20 | /** The callback called when a new video frame arrives
21 | @param asset The asset where the message originated from.
22 | @param time The playback time that was monitored
23 | */
24 | - (void) onPlayerTime:(id)asset hasTime:(CMTime)time;
25 |
26 | @end
27 |
28 | @class PFAssetObserver;
29 |
30 | /** An object which implements the PFAsset protocol delivers playback control for 360 video assets. An PFAsset can be instantiated within Panframe by using the appropriate PFObjectFactory method.*/
31 | @protocol PFAsset
32 |
33 | /** Playback of the asset */
34 | - (void) play;
35 |
36 | /** Playback of the asset, starting at a specific time
37 | @param start The position from the start of the asset to begin playback.
38 | @param keyframe By specifying yes, you allow the seek operation to jump to the nearest keyframe for faster operation.
39 | */
40 | - (void) playWithSeekTo:(CMTime)start onKeyFrame:(BOOL)keyframe;
41 |
42 | /** Pause the playback of the asset */
43 | - (void) pause;
44 |
45 | /** Stops the playback of the asset */
46 | - (void) stop;
47 |
48 | /** Get the current timerange of playback
49 | @return Returns a CMTimeRange of the configured start time of playback and duration
50 | */
51 | - (CMTimeRange) getTimeRange;
52 |
53 | /** Set the current timerange of playback. Use this to skip to a specific part in the asset.
54 | @param start The position from the start of the asset to begin playback.
55 | @param duration The duration of the playback from the start
56 | @param keyframe By specifying yes, you allow the seek operation to jump to the nearest keyframe for faster operation.
57 | */
58 | - (void) setTimeRange:(CMTime)start duration:(CMTime)duration onKeyFrame:(BOOL)keyframe;
59 |
60 | /** Get the current time in playback
61 | @return Returns a CMTime of the current position in playback of the asset.
62 | */
63 | - (CMTime) getPlaybackTime;
64 |
65 | /** Get the duration of the asset
66 | @return Returns the total duration of the asset.
67 | */
68 | - (CMTime) getDuration;
69 |
70 | /** Get URL of the asset
71 | @return Returns the url of the asset.
72 | */
73 | - (NSURL *) getUrl;
74 |
75 | /** Add an observer to the asset
76 | @param observer The observer implementing the PFAssetObserver protocol to be added
77 | */
78 | - (void) addObserver: (PFAssetObserver *) observer;
79 |
80 | /** Remove an observer to the asset
81 | @param observer The observer implementing the PFAssetObserver protocol to be removed
82 | */
83 | - (void) removeObserver: (PFAssetObserver *) observer;
84 |
85 | /** Returns the status of the asset
86 | @return The status of the asset
87 | */
88 | - (enum PFASSETMESSAGE) getStatus;
89 |
90 | /** Returns the download progress of the asset
91 | @return The the download progress (when dowloading assets) in a range from 0.0 to 1.0
92 | */
93 | - (float) getDownloadProgress;
94 |
95 | /** Add a time monitor to the asset, which is fired every time a video frame arrives
96 | @param monitor Time monitor delegate to receive updates
97 | @return Return true when the monitor can be set
98 | */
99 | - (bool) setTimeMonitor:(id) monitor;
100 | /** Set the volume of the asset's audio track
101 | @param volume The volume on a scale of 0.0 to 1.0
102 | */
103 | - (void) setVolume:(float)volume;
104 |
105 | @end
106 |
107 | @class PFAsset;
--------------------------------------------------------------------------------
/src/ios/frameworks/Panframe.framework/Versions/Current/Headers/PFAssetObserver.h:
--------------------------------------------------------------------------------
1 | //
2 | // Panframe media library
3 | //
4 | // For more information visit www.panframe.com
5 | // Subject to license agreements. May not be re-sold or re-packaged.
6 | //
7 | // Copyright © 2010-2014 Mindlight. All rights reserved.
8 | //
9 | // PFAssetObserver
10 | // Observer protocol for PFAsset objects
11 | //
12 |
13 | #ifndef PFAssetObserver_h
14 | #define PFAssetObserver_h
15 |
16 | @class PFAsset;
17 | enum PFASSETMESSAGE {
18 | PF_ASSET_LOADED = 1,
19 | PF_ASSET_PLAYING = 2,
20 | PF_ASSET_PAUSED = 3,
21 | PF_ASSET_STOPPED = 4,
22 | PF_ASSET_COMPLETE = 5,
23 | PF_ASSET_DOWNLOADING = 6, // depricated
24 | PF_ASSET_DOWNLOADED = 7, // depricated
25 | PF_ASSET_DOWNLOADCANCELLED = 8, // depricated
26 | PF_ASSET_ERROR = 9,
27 | PF_ASSET_SEEKING = 10
28 | };
29 |
30 | /** An object which implements the PFAssetObserver protocol for monitoring asset status.*/
31 | @protocol PFAssetObserver
32 | /** The callback called during PFAsset status updates
33 | @param asset The asset where the messag originated from.
34 | @param m The status change of the PFAsset
35 | */
36 | - (void) onStatusMessage : (PFAsset *) asset message:(enum PFASSETMESSAGE) m;
37 | @end
38 |
39 | #endif
--------------------------------------------------------------------------------
/src/ios/frameworks/Panframe.framework/Versions/Current/Headers/PFObjectFactory.h:
--------------------------------------------------------------------------------
1 | //
2 | // Panframe media library
3 | //
4 | // For more information visit www.panframe.com
5 | // Subject to license agreements. May not be re-sold or re-packaged.
6 | //
7 | // Copyright © 2010-2014 Mindlight. All rights reserved.
8 | //
9 | // PFObjectFactory
10 | // Object factory for instantiating PFView and PFAsset based objects
11 | //
12 |
13 | @class PFView;
14 | @class PFAssetObserver;
15 |
16 |
17 | /** The PFObjectFactory can instantiate appropriate PFAsset instances and PFView instances */
18 | @interface PFObjectFactory : NSObject
19 | /** Instantiate an PFAsset object and load its contents from a local file URL or remote HTTP based url. Instantiation follows the 'create' rule.
20 | @param url The url The url of the asset to be loaded
21 | @param o The observer registered to observe asset status
22 | @return A PFAsset instance if the file was loaded, nil on error.
23 | */
24 | + (PFAsset *) assetFromUrl:(NSURL*)url observer:(PFAssetObserver*)o;
25 | /** Instantiate a PFView for rendering PFAsset instances. A frame rectangle is given to initialize the view with specific boundaries. Instantiation follows the 'create' rule.
26 | @param frame The frame of reference for the view instance to be created
27 | @return A PFView instance conforming to the frame requested.
28 | */
29 | + (PFView *) viewWithFrame:(CGRect)frame;
30 | @end
31 |
--------------------------------------------------------------------------------
/src/ios/frameworks/Panframe.framework/Versions/Current/Headers/PFView.h:
--------------------------------------------------------------------------------
1 | //
2 | // Panframe media library
3 | //
4 | // For more information visit www.panframe.com
5 | // Subject to license agreements. May not be re-sold or re-packaged.
6 | //
7 | // Copyright © 2010-2014 Mindlight. All rights reserved.
8 | //
9 | // PFView
10 | // PFView interface suitable for handling PFAsset based media
11 | //
12 |
13 | #ifndef PFView_h
14 | #define PFView_h
15 |
16 | #import
17 |
18 | @class PFAsset;
19 |
20 | enum PFNAVIGATIONMODE {
21 | PF_NAVIGATION_MOTION = 0,
22 | PF_NAVIGATION_TOUCH = 1
23 | };
24 |
25 | enum PFBLINDSPOTLOCATION {
26 | PF_BLINDSPOT_NONE = 0,
27 | PF_BLINDSPOT_BOTTOM = 1,
28 | PF_BLINDSPOT_TOP = 2
29 | };
30 |
31 |
32 | /** The PFHotspot protocol for view-dependent hotspot objects.*/
33 | @protocol PFHotspot
34 |
35 | /** Set the current size of the hotspot. Defaults to 1.0
36 | @param radius Size as a radius.
37 | */
38 | - (void) setSize:(float) radius;
39 |
40 | /** Set the current size of the hitspot of the hotspot. Defaults to 1.2 times the size of the hotspot radius.
41 | @param radius Size as a radius.
42 | */
43 | - (void) setHitRadius:(float) radius;
44 |
45 | /** Set the polar coordinates of the hotspot in degrees.
46 | @param rotY rotation around the y-axis, moving the hotspot left or right on the screen (0 to 360 degrees).
47 | @param rotX rotation around the x-axis, moving the hotspot up or down on the screen (-90 to 90 degrees).
48 | @param rotZ rotation around the z-axis, not supported at the moment.
49 | */
50 | - (void) setCoordinates:(float)rotY andX:(float)rotX andZ:(float)rotZ;
51 |
52 | /** Tag the hotspot with a int.
53 | @param tag The tag for the hotspot.
54 | */
55 | - (void) setTag:(int)tag;
56 |
57 | /** Retrieve the tag for the hotspot.
58 | */
59 | - (int) getTag;
60 |
61 | /** Set the selector to trigger when the hotspot is touched. The selector should be in the form -(void)method:(id)hotspot;
62 | @param target The target class.
63 | @param action The selector to call.
64 | */
65 | - (void) addTarget:(id)target action:(SEL)action;
66 |
67 | /** Set an alpha value for the hotspot
68 | @param alpha The alpha value from 0.0f to 1.0f.
69 | */
70 | - (void) setAlpha:(float) alpha;
71 |
72 | /** Retrieve the alpha value for the hotspot.
73 | */
74 | - (float) getAlpha;
75 |
76 | /** Animate the hotspot. This is a fixed animation for now.
77 | */
78 | - (void) animate;
79 |
80 | @end
81 |
82 | /** An PFView is responsable for rendering the contents of PFAsset instances.*/
83 | @interface PFView : UIView
84 |
85 | /** Set the current user interface orientation in order to let the view track touch events properly
86 | @param orientation The current or desired UIInterfaceOrientation
87 | */
88 | - (void)setInterfaceOrientation:(UIInterfaceOrientation) orientation;
89 |
90 | /** Set the asset to be rendered upon this view. An asset can only be viewed on one PFView object at a time.
91 | @param asset The PFAsset to be rendered.
92 | */
93 | - (void) displayAsset : (PFAsset *) asset;
94 |
95 | /** Injects a panoramic image into the view to be displayed. Resolution and format depend on the specific device.
96 | @param image The UIImage to be injected.
97 | */
98 | - (void) injectImage:(UIImage*)image;
99 |
100 | /** Start rendering the view
101 | */
102 | - (void) run;
103 |
104 | /** Stop rendering the view
105 | */
106 | - (void) halt;
107 |
108 | /** Clear the current video frame (if any) being displayed
109 | */
110 | - (void) clear;
111 |
112 | /** Set view orientation input to motion or touch input.
113 | @param mode Set the navigation mode to either PF_NAVIGATION_MOTION or PF_NAVIGATION_TOUCH.
114 | */
115 | - (void) setNavigationMode: (enum PFNAVIGATIONMODE) mode;
116 |
117 | /** Set the optional image for the blindspot. Pass nil or PF_BLINDSPOT_NONE for no blindspot.
118 | @param resourceImageName The name of the PNG image file as included in the project resources
119 | */
120 | - (void) setBlindSpotImage:(NSString *)resourceImageName;
121 |
122 | /** Set the location for the blindspot image.
123 | @param location The location of the blindspot image.
124 | */
125 | - (void) setBlindSpotLocation:(enum PFBLINDSPOTLOCATION) location;
126 |
127 | /** Set the field of view in degrees
128 | @param fov Set the field of view for the 3D view. This defaults to 75.0
129 | */
130 | - (void) setFieldOfView:(float) fov;
131 |
132 | /** Returns the current relative rotation around the X-axis. This currently does not include PF_NAVIGATION_MOTION based navigation.
133 | @return The rotation in degrees
134 | */
135 | - (float) getRotationX;
136 |
137 | /** Returns the current relative rotation around the Y-axis. This currently does not include PF_NAVIGATION_MOTION based navigation.
138 | @return The rotation in degrees
139 | */
140 | - (float) getRotationY;
141 |
142 | /** Returns the current relative rotation around the Z-axis. This currently does not include PF_NAVIGATION_MOTION based navigation.
143 | @return The rotation in degrees
144 | */
145 | - (float) getRotationZ;
146 |
147 | /** Set the current relative view rotation around the X-axis.
148 | @param rx The rotation around the x-axis in degrees
149 | */
150 | - (void) setRotationX:(float)rx;
151 |
152 | /** Set the current relative view rotation around the Y-axis
153 | @param ry The rotation around the y-axis in degrees
154 | */
155 | - (void) setRotationY:(float)ry;
156 |
157 | /** Set the current relative view rotation around the Z-axis
158 | @param rz The rotation around the z-axis in degrees
159 | */
160 | - (void) setRotationZ:(float) rz;
161 |
162 | /** Set the current view mode
163 | @param mode The view mode. Options: 0 for spherical, 1 for flat, 2 for cylindrical, 3 for side-by-side VR (non-stereoscopic), 4 for top-down VR formatted content (stereoscopic).
164 | @param aspect The aspect ratio (for flat view).
165 | */
166 | - (void) setViewMode:(int)mode andAspect:(float)aspect;
167 |
168 | /** Reset the view direction (motion & touch) to default initial settings
169 | */
170 | - (void) resetView;
171 |
172 | /** Create a hotspot in the scene using an UIImage
173 | @param image The UIImage supporting transparancy (PNG)
174 | */
175 | - (id) createHotspot:(UIImage *)image;
176 |
177 | /** Remove a hotspot from the scene
178 | @param hotspot The hotspot to be removed
179 | */
180 | - (void) removeHotspot:(id) hotspot;
181 |
182 | /** Autolevel the view to its logical horizon after a number of seconds. Defaults to autoleveling within 2.5 seconds after touch end.
183 | @param autolevel Set to true (default) to auto-level the
184 | @param seconds The number of seconds after the last touch
185 | */
186 | - (void) setAutoLevel:(BOOL) autolevel afterSeconds:(float) seconds;
187 |
188 | /** Enable or disable stereo mode viewing
189 | @param bStereo Flag to indicate splitscreen stereo view display
190 | */
191 | - (void) setStereo:(BOOL)bStereo;
192 |
193 | @end
194 |
195 | @class PFView;
196 |
197 | @class PFHotspot;
198 |
199 | #endif
200 |
--------------------------------------------------------------------------------
/src/ios/frameworks/Panframe.framework/Versions/Current/Headers/Panframe.h:
--------------------------------------------------------------------------------
1 | //
2 | // Panframe media library
3 | //
4 | // For more information visit www.panframe.com
5 | // Subject to license agreements. May not be re-sold or re-packaged.
6 | //
7 | // Copyright © 2010-2014 Mindlight. All rights reserved.
8 | //
9 | // Panframe main include/import file
10 | //
11 |
12 | #import
13 |
14 | #import "PFAsset.h"
15 | #import "PFAssetObserver.h"
16 | #import "PFView.h"
17 | #import "PFObjectFactory.h"
18 |
--------------------------------------------------------------------------------
/src/ios/frameworks/Panframe.framework/Versions/Current/Panframe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jumpbytehq/cordova-jb-plugin-panframe/03dc75f265d20cb6d2d8bd72f73fe3f1ef94c3a3/src/ios/frameworks/Panframe.framework/Versions/Current/Panframe
--------------------------------------------------------------------------------
/src/ios/frameworks/Panframe.framework/Versions/Current/Resources/Info.plist:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jumpbytehq/cordova-jb-plugin-panframe/03dc75f265d20cb6d2d8bd72f73fe3f1ef94c3a3/src/ios/frameworks/Panframe.framework/Versions/Current/Resources/Info.plist
--------------------------------------------------------------------------------
/src/ios/frameworks/Settings.bundle/Root.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreferenceSpecifiers
6 |
7 |
8 | FooterText
9 | © 2014 Mindlight (www.mindlight.nl). All specifications subject to change without notice. Panframe is a trademark from Mindlight. All other commercial symbols are protected trademarks of their respective holders. All rights reserved. Made in The Netherlands.
10 | Type
11 | PSGroupSpecifier
12 | Title
13 | Licenses
14 |
15 |
16 | Type
17 | PSChildPaneSpecifier
18 | Title
19 | Panframe iOS 1.9 SDK
20 | File
21 | panframelicense
22 |
23 |
24 | StringsTable
25 | Root
26 |
27 |
28 |
--------------------------------------------------------------------------------
/src/ios/frameworks/Settings.bundle/en.lproj/Root.strings:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jumpbytehq/cordova-jb-plugin-panframe/03dc75f265d20cb6d2d8bd72f73fe3f1ef94c3a3/src/ios/frameworks/Settings.bundle/en.lproj/Root.strings
--------------------------------------------------------------------------------
/src/ios/frameworks/Settings.bundle/panframelicense.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreferenceSpecifiers
6 |
7 |
8 | Type
9 | PSGroupSpecifier
10 | Title
11 | Mindlight license agreement for the Panframe SDK.
12 |
13 | All our offers and agreements are subjected to the General Terms and Conditions of ICT~Office, registered at the Chamber of Commerce Midden-Nederland with number 30174840.
14 |
15 | On this library, Panframe SDK, the following modules of the General Terms and Conditions of ICT~Office are applicable:
16 | A. General Module
17 | B. Module 1 Software License
18 | The above modules are enclosed with your Panframe SDK distribution.
19 | The software is licensed by Mindlight to you per project or on a case by case basis. You must obtain a valid license or agreement to gain the right use the software. By using the software you accept the terms and modules referenced above.
20 |
21 | Mindlight
22 | Poolsterstraat 6
23 | 9801 VS Zuidhorn
24 | The Netherlands
25 | Chamber of Commerce 50022237
26 | info@mindlight.nl
27 | www.mindlight.nl
28 |
29 | ---------
30 |
31 | ICT~Office Terms and Conditions
32 | General Module
33 |
34 | ICT~Office Terms and Conditions
35 | The ICT~Office Terms and Conditions are filed with the Chamber of Commerce for the Central Netherlands under number 30174840.
36 | GENERAL
37 | 1. Applicability of the ICT~Office Terms and Conditions
38 | . 1.1 The ICT~Office Terms and Conditions have been drawn up by ICT~Office. The ICT~Office Terms and Conditions consist of the present General module and the following separate, specific modules:
1. Software license
2. Development of software
3. Maintenance of software
4. Application Service Provision, Software as a Service and Computer Service
5. Development and maintenance of a website
6. Webhosting
7. Secondment services
8. Courses and training programmes
9. Advice, consultancy and project management
10. Other services
11. Sale of ICT, telecommunication and office equipment and other goods
12. Renting out ICT, telecommunication and office equipment
13. Maintenance of ICT, telecommunication and office equipment
14. Internet access
15. Telecommunication services
16. Financing and leasing of ICT.
39 | . 1.2 This General module of the ICT~Office Terms and Conditions shall apply to all offers and agreements whereby the Supplier provides the Client with any goods and/or services whatsoever and however described. The specific module or modules of the ICT~Office Terms and Conditions agreed between the Supplier and the Client shall also apply. If any part of this General module of the ICT~Office Terms and Conditions conflicts or is incompatible with any of the provisions of the specific module or modules of the ICT~Office Terms and Conditions agreed between the Supplier and the Client, the provisions of the specific module or modules in question shall prevail.
40 | . 1.3 Where the ICT~Office Terms and Conditions refer to ‘general terms and conditions’, this shall be understood to mean the provisions of this General module in combination with the provisions of one or more agreed specific modules of the ICT~Office Terms and Conditions.
41 | . 1.4 Additions to or deviations from these general terms and condition shall only apply where agreed in writing between the parties.
42 | . 1.5 The applicability of any of the Client’s purchasing or other conditions is expressly rejected.
43 | . 1.6 If any provision of these general terms and conditions is null and void or is voided, the other provisions of
44 | these general terms and conditions will remain fully in effect. In this case, the Supplier and the Client will consult with one another to agree new provisions to replace the void or voided ones. In doing so, the purpose and meaning of the void or voided provision will be taken into account as far as possible.
45 | 2. Offers
46 | 2.1 All offers and other statements issued by the Supplier shall be subject to contract, except where specified otherwise in writing by the Supplier.
47 | 2.2 The Client shall guarantee the accuracy and completeness of the information that it submits to the Supplier and on which the Supplier bases its offer. The Client shall at all time exercise the greatest possible care to ensure that the requirements that the Supplier’s services must meet are accurate and comprehensive. Measurements and information stated in drawings, pictures, catalogues, websites, quotations, advertising material, standard sheets etc. shall not have a binding effect on the Supplier, except where explicitly specified otherwise by the Supplier.
48 | 3. Price and payment
49 | 3.1 All prices are exclusive of turnover tax (VAT) and other government levies that have been or are later imposed. Except where agreed otherwise, all prices are in euros in all cases and the Client must effect all payments in euros.
50 | 3.2 All cost estimates and budgets issued by the Supplier shall be merely indicative, except where specified otherwise in writing by the Supplier. The Client may under no circumstances derive any rights or expectations from any cost estimates or budgets issued by the Supplier. An available budget made known by the Client to the Supplier shall under no circumstances apply as a (fixed) price agreed between the parties for the service to be provided by the Supplier. The Supplier shall only be obliged to notify the Client that there is a risk that a cost estimate or budget issued by the Supplier will be exceeded if this has been agreed between the parties in writing.
51 | 3.3 If the Client consists of more than one natural and/or legal persons, each of these persons shall be joint and severally liable in respect of payment of the amounts due on the basis of the agreement.
52 | 3.4 The relevant documents and information from the Supplier's administration or systems shall be conclusive evidence of the service provided by the Supplier and the amounts payable by the Client in return for this service, without prejudice to the Client’s right to submit evidence to the contrary.
53 | 3.5 If the Client is subject to a periodic payment obligation, the Supplier shall be entitled to adjust the applicable
54 |
55 | prices and rates in writing subject to advance notice of at least three months. If the Client does not wish to agree to this change, the Client shall be entitled to terminate the agreement in writing with effect from the date on which the change is due to enter into force within thirty days following the date of notification. The Client shall not enjoy this right of termination, however, if the parties have agreed that the applicable prices and rates shall be adjusted subject to due observance of an index or other standard agreed between the parties.
56 | . 3.6 The parties shall set out the date or dates on which the Supplier shall invoice the fee for the agreed services to the Client in the agreement. Amounts due shall be paid by the Client in accordance with the payment terms that have been agreed or that are stated on the invoice. If no specific arrangements have been made, the Client shall effect payment within a period after the date of invoice to be determined by the Supplier. The Client shall not be entitled to suspend any payments or to offset any amounts due.
57 | . 3.7 If the Client fails to pay the amounts due or to pay the amounts due in a timely manner, statutory commercial interest shall be payable by the Client on the outstanding amount without a demand or notice of default being required. If the Client still fails to pay the amount owed after receiving a demand or notice of default, the Supplier may refer the debt for collection, in which case the Client shall also be obliged to pay all in-court and out-of-court expenses in addition to the total amount due, including all costs charged by external experts.
58 | 4. Confidentiality and taking over of personnel
59 | . 4.1 The Client and the Supplier shall ensure that all information received from the other party that is known or should reasonably be known to be of a confidential nature is kept secret. The party that receives such confidential information shall only use this information for the purpose for which it has been provided. Information shall in any event be regarded as confidential if it is designated as such by one of the parties.
60 | . 4.2 During the term of the agreement and for one year following termination of the agreement, each of the parties shall only engage or otherwise employ, directly or indirectly, members of staff of the other party who are or were previously involved in the execution of the agreement after obtaining the prior written consent of the other party. Conditions may be attached to the aforementioned consent.
61 | 5. Privacy, data processing and protection
62 | . 5.1 If the Supplier deems this to be necessary for the purpose of executing the agreement, the Client shall, upon request, notify the Supplier immediately in writing with regard to the manner in which the Client executes its obligations pursuant to legislation in respect of the protection of personal data.
63 | . 5.2 The Client shall indemnify the Supplier against any claims by individuals whose personal data is recorded or processed within the context of a register of personal data maintained by the Client or for which the
64 | Client is responsible pursuant to the law or otherwise, unless the Client is able to demonstrate that the acts that form the basis of the claim are exclusively attributable to the Supplier.
65 | 5.3 Responsibility for the data processed using the service provided by the Supplier shall rest solely with the Client. The Client shall guarantee the Supplier that the content, the use and/or the processing of the data is not unlawful and does not infringe the rights of third parties. The Client shall indemnify the Supplier against legal claims by thirds parties, of whatever nature, in relation to this data or the execution of the agreement.
66 | 5.4 If the agreement stipulates that the Supplier is obliged to provide some form of information security, this security shall meet the specifications in respect of security agreed between the parties in writing. The Supplier shall not guarantee that the information security will be effective under all circumstances. If the agreement does not include an explicit description of security measures, the security measures shall be of such a level that, having regard to the state of the art, the sensitivity of the data and the costs associated with the implementation of the security measures are not unreasonable.
67 | 5.5 If computer, data or telecommunications facilities are used during the execution of the agreement or otherwise, the Supplier shall be entitled to assign access or identification codes to the Client. The Supplier shall be entitled to change the access or identification codes assigned. The Client shall treat the access and identification codes as confidential and with due care and shall only disclose these codes to authorised members of staff. The Supplier shall under no circumstances be liable for any damage or costs arising from the use or misuse of access or identification codes, except where misuse was possible as a result of an act or omission on the part of the Supplier.
68 | 6. Retention of title and rights, creation of items and suspension
69 | 6.1 All objects delivered to the Client shall remain the property of the Supplier until such time as all amounts owed by the Client to the Supplier pursuant to the agreement concluded between the parties have been paid in full. A Client that acts as a retailer shall be entitled to sell and resell all objects that are subject to the Supplier’s retention of title in so far as this is customary within the context of the normal course of its business. If the Client creates a new item (partly) from items delivered by the Supplier, the Client shall only create this item for the benefit of the Supplier and the Client shall retain the newly created item for the Supplier until such time as the Client has paid all amounts due pursuant to the agreement; in this case the Supplier shall remain the owner of the newly created item until the Client has met its payment obligations in full.
70 | 6.2 The property law consequences of retention of title in respect of an item that is destined for export shall be governed by the law of the State of destination if this law incorporates provisions that are more favourable for the Supplier in this regard.
71 |
72 | . 6.3 Rights, including rights of use, shall be granted to the Client or transferred, where appropriate, subject to the condition that the Client has paid all of the fees due pursuant to the agreement concluded between the parties in full. If the parties have agreed that the Client shall be subject to a periodic payment obligation in respect of the granting of a right of use, the Client shall be entitled to the right of use for as long as it continues to meet its periodic payment obligation.
73 | . 6.4 The Supplier may retain any items, products, proprietary rights, data, documents, software, data files and (interim) results of the service provided by the Supplier received or created within the context of the agreement, contrary to an existing obligation to deliver or transfer these, until such time as the Client has paid all amounts due to the Supplier.
74 | 7. Risk
75 | 7.1 The risk of loss, theft, misappropriation of or damage to items, products, data, documents, software, data files or data (codes, passwords, documentation etc.) produced or used within the context of the execution of the agreement, shall pass to the Client when the Client or one of the Client’s agents comes into actual possession of them. In so far as these objects are in the actual possession of the Supplier or one of the Supplier’s agents, the Supplier shall bear the risk of loss, theft, misappropriation or damage.
76 | 8. Intellectual property rights
77 | . 8.1 If the Supplier is willing to undertake to transfer an intellectual property right, such an undertaking may only be entered into explicitly and in writing. If the parties agree in writing that an intellectual property right in respect of software, websites, data files, hardware or other material specifically developed for the Client shall be transferred to the Client, this shall not affect the Supplier’s right or option to use and/or to exploit the components, general principles, ideas, designs, algorithms, documentation, work, programming languages, protocols, standards and suchlike that form the basis of the development work for other purposes without any restrictions, on its own behalf or on behalf of a third party. The transfer of an intellectual property right shall also not affect the Supplier’s right to carry out development work, on its own behalf or on behalf of a third party, that is similar or derived from the development work that is being carried out or has been carried out on behalf of the Client.
78 | . 8.2 All intellectual property rights to the software, websites, data files, hardware or other materials such as analyses, designs, documentation, reports, quotations and related preliminary material developed or made available to the Client on the basis of the agreement shall remain exclusively vested in the Supplier, its licensors or its own suppliers. The Client shall only acquire those rights of use that are explicitly granted in these general terms and conditions and by law. Any rights of use granted to the Client shall be non- exclusive, non-transferable to third parties and non- sublicensable.
79 | 8.3 The Client shall not be permitted to remove or amend any details in relation to the confidential nature or in relation to copyrights, brand names, trade names or any other intellectual property right from the software, websites, data files, hardware or materials.
80 | 8.4 Even if the agreement does not explicitly provide for such authority, the Supplier shall be permitted to install technical provisions for the purpose of protecting the software, hardware, data files, websites and suchlike in relation to an agreed restriction on the content or the term of the right to use these objects. The Client shall under no circumstances be permitted to remove or circumvent such technical provisions or to arrange for this to be carried out.
81 | 8.5 The Supplier shall indemnify the Client against any legal claims from third parties based on the assertion that software, websites, data files, hardware or other materials developed by the Supplier itself infringe an intellectual property right of the third party in question, under the condition that the Client notifies the Supplier immediately in writing of the existence and content of the legal claim and leaves the disposal of the case, including any settlements effected, entirely to the Supplier. To this end, the Client shall provide the Supplier with the powers of attorney, information and cooperation that it requires in order to defend itself, where necessary in the name of the Client, against these legal claims. This obligation to indemnify shall not apply if the alleged infringement relates to (i) materials made available to the Supplier by the Client for the purpose of use, adaptation, processing or incorporation, or (ii) changes made by the Client, or by a third party on behalf of the Client, to the software, website, data files, hardware or other materials, without the Supplier’s prior written consent. If it is irrevocably established in court that the software, websites, data files, hardware or other materials developed by the Supplier itself constitute an infringement of any intellectual property right vested in a third party or if the Supplier believes that there is a good chance that such an infringement may occur, the Supplier shall, where possible, ensure that the Client can continue to use the software, websites, data files, hardware or materials delivered, or functionally similar alternatives. All other or further-reaching obligations to indemnify on the part of the Supplier shall be excluded.
82 | 8.6 The Client warrants that no rights of third parties preclude the provision to the Supplier of software, hardware, material intended for websites (visual material, text, music, domain names, logos, hyperlinks etc.), data files or other materials, including draft materials, for the purpose of use, adaptation, installation or incorporation (e.g. in a website). The Client shall indemnify the Supplier against all claims by third parties based on the assertion that such provision, use, adaptation, installation or incorporation constitutes an infringement of any rights of the third party in question.
83 | 9. Obligations to cooperate
84 | 9.1 The parties acknowledge that the success of activities in the field of information and communication technology generally depends on proper and timely
85 |
86 | mutual cooperation. In order to facilitate the proper execution of the agreement by the Supplier, the Client shall at all times provide the Supplier with all data or information that the Supplier deems to be useful, necessary and desirable and to give its full cooperation in a timely manner. If the Client deploys its own personnel and/or agents within the context of providing cooperation in the execution of the agreement, these personnel and agents shall have the necessary knowledge, expertise and experience.
87 | . 9.2 The Client shall bear the risk of the selection, the use, the application and the management within its organisation of the software, hardware, websites, data files and other products and materials and of the services to be provided by the Supplier. The Client itself shall arrange for the correct installation, assembly and commissioning and for the application of the correct settings to the hardware, software, websites, data files and other products and materials.
88 | . 9.3 If the Client fails to make the data, documents, hardware, software, materials or employees that the Supplier deems useful, necessary or desirable for the purpose of executing the agreement available to the Supplier, to make these available in good time or in accordance with the agreements, or if the Client fails to meet its obligations in any other way, the Supplier shall be entitled to suspend the execution of the agreement in part or in full and shall also be entitled to invoice the resulting costs in accordance with its standard rates, without prejudice to the Supplier’s right to exercise any other statutory and/or agreed right.
89 | . 9.4 If the Supplier's employees are carrying out activities on the Client’s business premises, the Client shall ensure that any facilities reasonably requested by these employees, such as a workspace containing computer, data and telecommunication facilities, are provided free of charge. The workspace and facilities shall meet all statutory and other applicable requirements in relation to working conditions. The Client shall indemnify the Supplier against any claims by third parties, including the Supplier’s employees, who suffer injury in connection with the execution of the agreement as a result of an act or omission on the part of the Client or of unsafe situations within the Client’s organisation. The Client shall notify the employees deployed by the Supplier of any applicable company rules or security rules prior to the commencement of the activities.
90 | . 9.5 If use is made of computer, data or telecommunication facilities, including the internet, during the execution of the agreement, the Client shall be responsible for selecting the correct resources required for this purpose and for ensuring that these are available in full and in a timely manner, with the exception of those facilities that fall under the direct use and management of the Supplier. The Supplier shall under no circumstances be liable for losses or costs arising as a result of transmission errors, breakdowns or the non- availability of these facilities, unless the Client is able to demonstrate that these losses or costs are the result of intentional acts or deliberate recklessness on the part of the Supplier’s management.
91 | 10. Delivery dates
92 | 10.1 All (delivery) periods and (delivery) dates agreed or specified by the Supplier shall be established to the best of the Supplier’s knowledge on the basis of the information available to it at the time of entering into the agreement. Interim (delivery) dates agreed between the parties or specified by the Supplier shall in all cases be target dates, shall not have a binding effect on the Supplier and shall in all cases be merely indicative. The Supplier shall make every reasonable effort to observe final (delivery) periods and final (delivery) dates wherever possible. The Supplier shall not be bound by a (delivery) period or (delivery) date, final or otherwise, that can no longer be achieved as a result of circumstances outside of the Supplier’s control that occurred after the date on which the agreement was concluded. The Supplier shall also not be bound by a (delivery) date or (delivery) period, final or otherwise, if the parties have agreed on a change to the content or scope of the agreement (additional work, change in specifications etc.) or a change in the approach to the execution of the agreement. If there is a risk that a time period will be exceeded, the Supplier shall consult with the Client in order to discuss the implications of the overrun for the rest of the schedule.
93 | 10.2 The mere fact that a (delivery) period or (delivery) date, final or otherwise, specified by the Supplier or agreed between the parties has been exceeded, shall not mean that the Supplier is in default. In all cases – therefore also in the event that the parties have agreed a final (delivery) period or (delivery) date explicitly in writing - the Supplier shall not be in default as a result of the fact that a delivery period or date has been exceeded until such time as the Client has given written notice of default. The notice of default must contain as comprehensive and detailed a description of the breach as possible, in order to ensure that the Supplier has the opportunity to respond adequately.
94 | 11. Termination and cancellation of the agreement
95 | 11.1 Both of the parties shall only be authorised to rescind the agreement as a result of an attributable failure to perform this agreement if the other party, in all cases following written notice of default providing as many details as possible and setting a reasonable term in which the breach can be remedied, attributably fails to meet its fundamental obligations arising from this agreement. The Client’s payment obligations and all other obligations to cooperate imposed on the Client or on a third party to be engaged by the Client shall in all cases be regarded as fundamental obligations arising from the agreement.
96 | 11.2 If the Client has already received services for the purpose of executing the agreement at the time of rescission as referred to in Article 11.1, these services and the related payment obligation cannot be revoked unless the Client is able to demonstrate that the Supplier is in default in respect of a substantial part of these services. Any amounts that the Supplier has invoiced before rescission in connection with work that it has already duly carried out or services that it has duly provided for the purpose of executing the agreement, shall remain due in full, subject to due
97 |
98 | observance of the provisions of the preceding sentence, and shall become immediately due and payable at the time of rescission.
99 | . 11.3 If an agreement that by its nature and content is not brought to a close is entered into for an indefinite period of time, this may be terminated in writing by either party following consultation and stating reasons. If the parties have not agreed a notice period, a reasonable period of time must be observed on termination. The parties shall under no circumstances be obliged to pay any compensation as a result of termination of the agreement.
100 | . 11.4 The Client shall under no circumstances be entitled to terminate an agreement regarding the provision of services that has been entered into for a fixed term before the end of the term.
101 | . 11.5 Either of the parties shall be entitled to terminate the agreement in part or in full, with immediate effect, in writing without notice of default if the other party is granted a moratorium of payments, provisionally or otherwise, if a winding-up petition is filed in respect of the other party, if the other party’s company is wound up or terminated for reasons other than reconstruction or the merger of companies, or if there is a change in the individual or board that has decisive control over the Client’s company. The Supplier shall under no circumstances be obliged to reimburse any sums of money that have already been received or to pay any compensation in the event of such termination. If the Client becomes bankrupt or is liquidated, the right of use of the software, websites and suchlike made available to the Client shall terminate by operation of law.
102 | 12. Liability of the Supplier
103 | . 12.1 The total liability of the Supplier due to an attributable failure to perform this agreement or due to any other reason, explicitly including any failure to comply with a guarantee obligation agreed with the Client, shall be limited to compensation of the direct damage or loss not exceeding the sum stipulated for this agreement (excl. VAT). This limitation of liability shall apply mutatis mutandis to the Supplier’s obligation to indemnify referred to in Article 8.5 of this General module. If the agreement is essentially a continuing performance contract with a term of more than one year, the sum stipulated for the agreement shall be set at the total fees (excl. VAT) stipulated for one year. The total liability of the Supplier for direct damage or loss, for any reason whatsoever, shall, however, under no circumstances exceed €500,000 (five hundred thousand euro).
104 | . 12.2 The liability of the Supplier for loss as a result of death, physical injury or due to material damage to items shall under no circumstances exceed €1,250,000 (one million two hundred and fifty thousand euro).
105 | . 12.3 The liability of the Supplier for indirect damage or loss, resulting loss, loss of profit, loss of savings, reduced goodwill, loss due to business interruption, loss as a result of claims from the Client’s customers, loss in connection with the use of items, materials or software provided by third parties that the Supplier is instructed to obtain by the Client and loss in connection with the
106 | engagement of secondary suppliers by the Supplier on the Client’s instructions shall be excluded. The liability of the Supplier due to the scrambling, destruction or loss of data or documents shall also be excluded.
107 | 12.4 The exclusions and restrictions to the Supplier’s liability, as described in the preceding paragraphs of Article 12, shall not affect the remaining exclusions and restrictions to the Supplier’s liability set out in this General module and the other agreed modules of these general terms and conditions in any way.
108 | 12.5 The exclusions and restrictions referred to in Article 12.1 to 12.4 shall no longer apply if and in so far as the loss is the result of intentional acts or deliberate recklessness on the part of the Supplier’s management.
109 | 12.6 Except where performance by the Supplier is permanently impossible, the Supplier shall only be liable as a result of an attributable failure to perform an agreement if the Client gives the Supplier immediate notice of default in writing, setting a reasonable term in which the breach can be remedied, and the Supplier still attributably fails to meet its obligations after this period. The notice of default must contain as comprehensive and detailed a description of the breach as possible, in order to ensure that the Supplier has the opportunity to respond adequately.
110 | 12.7 A condition for the existence of any right to compensation shall in all cases be that the Client notifies the Supplier in writing of the loss or damage as soon as possible after it occurs. Any claims for damages against the Supplier shall expire by the mere passage of twenty four months from the date on which the claim arose.
111 | 12.8 The parties acknowledge that active and constructive participation in an ICT-Mediation process is a reasonable and suitable measure for preventing or limiting the risk of damage or loss if this potential damage or loss is connected to failure by the Supplier to meet any contractual obligation or to meet such obligations properly and in good time. The Client therefore undertakes to actively, constructively and unconditionally participate in an ICT-Mediation process, at the Supplier’s first written request, in accordance with the ICT-Mediation Regulations of the Foundation for the Settlement of Automation Disputes [Stichting Geschillenoplossing Automatisering], with its registered office in The Hague (see www.sgoa.org and www.sgoa.eu).
112 | 12.9 The Client shall indemnify the Supplier against all claims by third parties due to product liability as a result of a fault in a product or system delivered by the Client to a third party and that partly consisted of hardware, software or other materials provided by the Supplier, unless and in so far as the Client is able to demonstrate that the damage or loss was caused by this hardware, software or other materials.
113 | 12.10 The provisions of this article and all other restrictions and exclusions of liability referred to in these general terms and conditions shall also apply in favour of all (legal) persons that the Supplier engages to execute the agreement.
114 |
115 | 13. Force majeure
116 | . 13.1 Neither of the parties shall be obliged to meet any obligations, including any guarantee obligation agreed between the parties, if it is prevented from doing so as a result of force majeure. Force majeure shall include: (i) a situation of force majeure encountered by the Supplier's own suppliers, (ii) failure by secondary suppliers engaged by the Supplier on the Client’s instructions to duly meet their obligations, (iii) the defectiveness of items, hardware, software or materials provided by third parties that the Supplier has been instructed to use by the Client, (iv) government measures, (v) electricity failure, (vi) faults affecting the internet, computer network or telecommunication facilities, (vii) war, (viii) workload, (ix) strike action, (x) general transport problems and (xi) the unavailability of one or more members of staff.
117 | . 13.2 If a situation of force majeure lasts for longer than ninety days, either of the parties shall be entitled to terminate the agreement in writing. The services already performed on the basis of the agreement shall in this case be settled on a pro rata basis, and the parties shall not owe one another any other amounts.
118 | 14. Changes and additional work
119 | . 14.1 If the Supplier has carried out work or performed other services that fall outside of the content or scope of the agreed work and/or services at the request or with the prior consent of the Client, such work or services shall be paid for by the Client in accordance with the agreed rates. If no rates have been agreed, the Supplier’s standard rates shall apply. The Supplier shall under no circumstances be obliged to comply with such a request, and where it does comply, it may require the Client to enter into a separate written agreement for this purpose.
120 | . 14.2 The Client accepts that work or services as referred to in this article may affect the agreed or anticipated time of completion of the services and the mutual responsibilities of the Client and the Supplier. The fact that (the demand for) additional work arises during the execution of the agreement shall under no circumstances constitute grounds for the Client to terminate or rescind the agreement.
121 | . 14.3 In so far as a fixed price has been agreed in respect of the service, the Supplier shall, upon request, notify the Client in writing regarding the financial implications of the additional work or services as referred to in this Article.
122 | 15. Transfer of rights and obligations
123 | . 15.1 The Client shall not be entitled to sell and/or transfer the rights and/or obligations arising from the agreement to a third party.
124 | . 15.2 The Supplier shall be entitled to transfer its rights to the payment of fees to a third party.
125 | 16. Applicable law and disputes
126 | . 16.1 The agreements between the Supplier and the Client shall be governed by Dutch law. The applicability of the Convention on Contracts for the International Sale of Goods 1980 is excluded.
127 | . 16.2 Any disputes that may arise between the Supplier and the Client on the basis of an agreement concluded
128 | between the Supplier and the Client or as a result of further agreements that arise from such an agreement, shall be settled through arbitration in accordance with the Arbitration Regulations of the Foundation for the Settlement of Automation Disputes, with its registered office in The Hague, without prejudice to the right of either of the parties to request an injunction in summary arbitral proceedings and without prejudice to the right of either of the parties to take precautionary legal measures (see www.sgoa.org).
129 | 16.3 Contrary to the provisions of Article 16.2, either of the parties shall be entitled, however not obliged, to bring the matter before the District Court, Subdistrict Sector, if the matter relates to a dispute that according to the statutory rules governing jurisdiction falls within the subject-matter jurisdiction of the District Court, Subdistrict Sector. This shall only be the case, however, where the Supplier and/or the Client has/have not already brought arbitral proceedings for the resolution of disputes arising on the basis of the agreement concluded between the parties or further agreements that arise from such an agreement before the Foundation for the Settlement of Automation Disputes in accordance with the Foundation’s Arbitration Regulations. If the matter is brought before the District Court, Subdistrict Sector, by one or more of the parties for processing and a decision, subject to due observance of the previous subclause, the District Court, Subdistrict Sector, shall have jurisdiction to process the matter and reach a decision.
130 | 16.4 Before instituting arbitral proceedings as referred to in Article 16.2, either of the parties shall commence ICT- Mediation proceedings in accordance with the ICT- Mediation Regulations of the Foundation for the Settlement of Automation Disputes in The Hague. ICT- Mediation proceedings in accordance with these regulations are aimed at mediation by one or more mediators. The other party shall undertake to actively participate in any ICT-Mediation proceedings that are instituted, and shall in any event be legally obliged to attend at least one joint meeting between the mediators and the parties, in order to ensure that this extrajudicial form of dispute resolution has a chance of success. Either of the parties shall be at liberty to terminate the ICT-Mediation proceedings at any time following an initial discussion between the mediators and the parties. The provisions of this subclause shall not prevent either of the parties from requesting an injunction in summary (arbitral) proceedings or from taking precautionary legal measures where they deem this to be necessary (see www.sgoa.org and www.sgoa.eu).
131 | © 2008, ICT~Office
132 |
133 |
134 |
135 | ICT~Office Terms and Conditions
136 | Module 1 Software License
137 | The ICT~Office Terms and Conditions are filed with the Chamber of Commerce for the Central Netherlands under number 30174840.
138 | 1. Applicability
139 | . 1.1 The ICT~Office Terms and Conditions consist of the General module as well as one or more specific modules per product or service. The provisions of this module shall apply in addition to the provisions of the General module in the event that the Supplier makes software available to the Client for use on the basis of a license.
140 | . 1.2 The provisions of this module are inextricably linked with the provisions of the General module. In the case of conflict between the provisions of the General module and the provisions of this module, the latter shall prevail.
141 | 2. Right of use
142 | . 2.1 The Supplier shall make the computer programs specified in the agreement and the corresponding user documentation, hereinafter referred to as ‘the software', available to the Client for use.
143 | . 2.2 Except where agreed otherwise in writing, the Supplier's obligation to provide and the Client's right of use shall solely extend to the so-called software object code. The Client’s right of use shall not extend to the software source code. The software source code and the technical documentation produced during the development of the software shall not be made available to the Client under any circumstances, even if the Client is prepared to pay financial compensation for this information.
144 | . 2.3 Except where agreed otherwise in writing, the Supplier shall not be obliged to provide any software or program or data libraries other than those agreed, even if these are required for the use and/or maintenance of the software. If, contrary to the foregoing, the Supplier is required to provide software and/or program or data libraries other than those agreed, the Supplier may require the Client to enter into a separate written agreement for this purpose.
145 | . 2.4 Except where otherwise agreed in writing, the Supplier’s performance obligations shall not include the maintenance of the software and/or the provision of support to the users of the software. If, contrary to the foregoing, the Supplier is also required to provide such maintenance and/or support, the Supplier may require the Client to enter into a separate written agreement for this purpose.
146 | 2.5 Without prejudice to the provisions of the General module, the right of use of the software shall in all cases be non-exclusive, non- transferable and non-sublicensable.
147 | 3. Restrictions on use
148 | 3.1 The Client shall strictly observe the restrictions on the right of use of the software agreed between the parties at all times. The Client is aware that the violation of an agreed restriction on use shall constitute both breach of the contract with the Supplier and an infringement of the intellectual property rights in respect of the software. The agreed restrictions on use may relate to such aspects as:
149 | - the kind or type of hardware that the software is designed for, and/or
- the maximum number of processing units that the software is designed for, and/or
150 | - specific – referred to by name or job title or otherwise – individuals who may use the software within the Client’s organisation, and/or - the maximum number of users who may use the software – simultaneously or otherwise – within the Client’s organisation, and/or
151 | - the location at which the software may be used, and/or
- specific forms and purposes of use (e.g. commercial use or use for private purposes), and/or
152 | - any other quantitative or qualitative
153 | restriction.
3.2 If the parties have agreed that the software
154 | may only be used in combination with specific hardware or a specific kind or type of hardware, the Client shall be entitled in the event of malfunction of the relevant hardware to use the software on other hardware of the same kind or type until the original hardware is restored to working order.
155 | 3.3 The Supplier may require the Client to refrain from using the software until such time as the Client has requested and obtained one or more codes (passwords, identity codes etc.), required for use, from the Supplier, its own supplier, or the software manufacturer. The Supplier shall be entitled to arrange for technical measures to be taken at any time in order to protect the software against unlawful use and/or against use in a manner or for purposes other than those agreed between the parties.
156 |
157 | . 3.4 Under no circumstances shall the Client remove or circumvent technical provisions intended to protect the software, or arrange for this to be carried out.
158 | . 3.5 Except where agreed otherwise in writing, the Client shall only be permitted to use the software within and on behalf of its own company or organisation and only for the intended use. Except where agreed otherwise in writing, the Client shall not use the software to process data on behalf of third parties, e.g. for services such as 'time-sharing', 'application service provision’, 'software as a service’ and ‘outsourcing’.
159 | . 3.6 The Client shall not be permitted to sell, rent out, transfer or grant restrictive rights to the software, the media on which the software is stored and the certificates of authenticity issued by the Supplier on provision of the software, or to make these available to third parties in any way or for any purpose. The Client shall also refrain from granting third parties access – remote or otherwise – to the software or providing the software to a third party for the purpose of hosting, even if the third party in question only uses the software on behalf of the Client.
160 | . 3.7 Upon request, the Client shall immediately lend its full cooperation to any investigations to be conducted by or on behalf of the Supplier in relation to the Client's compliance with the agreed restrictions on use. At the first request of the Supplier, the Client shall grant the Supplier access to its buildings and systems. The Supplier shall maintain the confidentiality of all company information to be regarded as confidential that the Supplier obtains from or on the premises of the Client within the context of this type of investigation, in so far as this information does not relate to the use of the software itself.
161 | 4. Delivery and installation
162 | . 4.1 The Supplier shall deliver the software to the Client on data media in the agreed format or, if no clear agreements have been made in this regard, on data media in a format to be determined by the Supplier. Alternatively, the Supplier shall deliver the software to the Client using telecommunication facilities (online). The Supplier shall determine the delivery method.
163 | . 4.2 The Supplier shall only install the software on the Client’s premises if this has been agreed between the parties in writing. If no explicit agreements have been made in this regard, the Client itself shall install, set up, parameterise and tune the software, and adapt the hardware used and operating environment where necessary. Except where agreed otherwise in writing, the Supplier shall not be obliged to carry out data conversion.
164 | 4.3 The user documentation shall be provided in paper or digital format, with the content to be determined by the Supplier. The Supplier shall decide on the format and language in which the user documentation is provided.
165 | 5. Acceptance test and acceptance
166 | 5.1 If the parties have not agreed that an acceptance test will be carried out, the Client shall accept the software in the condition that it is in at the time of delivery (‘as is’), therefore with all visible and invisible errors and defects, without prejudice to the Supplier’s obligations pursuant to the guarantee scheme in Article 9 of this module.
167 | 5.2 If the parties have agreed to an acceptance test in writing, the provisions of Article 5.3 to 5.10 inclusive of this module shall apply.
168 | 5.3 Where this module refers to ‘errors’, this shall be understood to mean the substantial failure to meet the functional or technical specifications of the software made known by the Supplier in writing and, if the software is entirely or partly custom-designed, the functional or technical specifications explicitly agreed between the parties in writing. An error shall only be deemed to exist if the Client is able to demonstrate the error and if it can be reproduced. The Client is obliged to notify the Supplier immediately of any errors.
169 | 5.4 If an acceptance test has been agreed to, the test period shall be fourteen days following delivery or, if it has been agreed in writing that the Supplier will carry out the installation, following completion of the installation. The Client is not entitled to use the software for productive or operational purposes during the test period. The Client shall carry out the agreed acceptance test on the software using appropriately qualified personnel, with an adequate scope and in sufficient depth, and will provide the Supplier with a written, clear and understandable report on the test results.
170 | 5.5 If an acceptance test has been agreed to, the Client shall be obliged to assess under its full and exclusive responsibility whether the software delivered conforms to the functional or technical specifications made known by the Supplier in writing and, if the software is entirely or partly custom-designed, the functional or technical specifications agreed between the parties in writing. Except where agreed otherwise in writing, the assistance provided by the Supplier during the performance of an acceptance test shall be entirely at the Client’s risk.
171 | 5.6 The software shall be deemed to have been accepted between the parties:
a. if the parties have not agreed to an acceptance test: on delivery or, if it has been
172 |
173 | agreed in writing that the Supplier will carry out the installation, on completion of the installation, or
b. if the parties have agreed to an acceptance test: on the first day following the test period, or
174 | c. if the Supplier receives a test report as referred to in Article 5.7 before the end of the test period: at such time as the errors described in the test report have been fixed, notwithstanding the presence of defects that do not preclude acceptance according to Article 5.8. Contrary to the above, if the Client uses the software for productive or operational purposes before the time of explicit acceptance, the software shall be deemed to have been accepted in full from the time at which such use commenced.
175 | . 5.7 If on carrying out the agreed acceptance test it emerges that the software contains errors, the Client shall notify the Supplier of the errors no later than on the last day of the test period by means of a written and detailed test report. The Supplier shall make every effort to fix the errors identified within a reasonable period of time, whereby the Supplier shall be entitled to install temporary solutions, workarounds or problem- avoiding restrictions in the software.
176 | . 5.8 Acceptance of the software may not be withheld on grounds that do not relate to the specifications explicitly agreed between the parties, nor due to the existence of minor defects, these being defects that cannot reasonably be deemed to prevent the operational or productive use of the software, without prejudice to the Supplier’s obligation to fix these minor defects within the context of the guarantee scheme in Article 9, if and in so far as applicable. Acceptance may also not be withheld on the basis of aspects of the software that can only be assessed subjectively, such as aesthetic aspects and aspects relating to the design of user interfaces.
177 | . 5.9 If the software is delivered and tested in stages and/or parts, the non-acceptance of a specific stage and/or part shall not affect the acceptance of a previous stage and/or other part, where appropriate.
178 | . 5.10 Acceptance of the software by one of the methods referred to in this Article shall mean that the Supplier is discharged in respect of compliance with its obligations in relation to the provision and delivery of the software and, if it has been agreed that the Supplier will carry out the installation, with its obligations in relation to the installation of the software. Acceptance of the software shall not affect the Client’s rights pursuant to Article 5.8 in relation to minor errors and Article 9 in relation to the guarantee scheme.
179 | 6.
180 | 6.1
181 | 6.2
182 | 7.
183 | 7.1.
184 | Term of the agreement
185 | The agreement regarding the provision of the software has been entered into for the term agreed between the parties. If no term has been agreed, a term of one year shall apply. The agreement shall commence on the day on which the Client is provided with the software. The term of the agreement shall be extended automatically by the term of the original period each time, unless the Client or the Supplier terminates the agreement in writing with due observance of a notice period of three months prior to the end of the period in question.
186 | The Client shall return all copies of the software that it has in its possession to the Supplier immediately following expiry of the right of use of the software. If the parties have agreed that the Client will destroy the relevant copies at the end of the agreement, the Client shall notify the Supplier immediately in writing that this has been carried out. The Supplier shall not be obliged to provide the Client with assistance on or after expiry of the right of use with a view to data conversion required by the Client.
187 | Right of use fee
188 | Except where agreed otherwise in writing, the right-of-use fee agreed between the parties shall be due on the dates agreed between the parties or, if no dates have been agreed:
189 | a. if the parties have not agreed that the Supplier will carry out the installation of the software: on delivery of the software or, if the right-of-use fee is due periodically, on delivery of the software and subsequently on commencement of each new right-of-use period;
190 | b. if the parties have agreed that the Supplier will carry out the installation of the software: on completion of the installation of the software or, if the right-of-use fee is due periodically, on completion of the installation of the software and subsequently on commencement of each new right-of-use period.
Except where agreed otherwise in writing, the Supplier shall not be obliged to install or adapt the software. If, contrary to the foregoing, the Supplier is also required to carry out installation activities or activities in relation to the adaptation of the software, the Supplier may require the Client to enter into a separate written agreement for this purpose. Such work shall be invoiced separately at the Supplier’s standard rates as the occasion arises.
191 | Modification of the software
192 | Except where agreed otherwise in writing and notwithstanding exceptions set out in law, the Client shall not be entitled to modify the software in part or in full without the prior written consent of the Supplier. The Supplier shall at all times be entitled to refuse its
193 | 7.2
194 | 8.
195 | 8.1
196 |
197 | consent or to attach conditions to its consent, including conditions in relation to the method and quality of implementation of the modifications required by the Client.
198 | 8.2 The Client shall bear all risks associated with modifications carried out by or on behalf of the Client by third parties with the consent of the Supplier or otherwise.
199 | 9. Guarantee
200 | . 9.1 The Supplier shall not guarantee that the software made available to the Client will be fit for the actual and/or intended use by the Client. The Supplier shall also not guarantee that the software will operate with no interruptions, errors or defects or that all errors and defects will always be fixed.
201 | . 9.2 The Supplier shall make every effort to fix errors in the software within the meaning of Article 5.3 of this module within a reasonable period of time if the Supplier receives detailed, written notification of these errors within a period of three months following delivery or, if the parties have agreed to an acceptance test, within three months of acceptance. Errors shall be fixed free of charge, unless the software was developed on behalf of the Client other than at a fixed price, in which case the Supplier shall invoice the costs associated with fixing the errors at its standard rates. The Supplier shall be entitled to invoice the costs of fixing errors at its standard rates in the event of operational errors or improper use by the Client, or other causes that are not attributable to the Supplier, or if the errors could have been discovered during the execution of the agreed acceptance test. The Supplier shall not be obliged to fix errors if the Client has made changes to the software, or has arranged for this to be carried out, without the written consent of the Supplier. Such consent shall not be withheld on unreasonable grounds.
202 | . 9.3 The fixing of errors shall take place at a location to be determined by the Supplier. The Supplier shall be entitled to install temporary solutions, workarounds or problem-avoiding restrictions in the software at any time.
203 | 9.4 Under no circumstances shall the Supplier be obliged to recover scrambled or lost data.
204 | 9.5 The Supplier shall not be obliged to fix errors that are reported following expiry of the guarantee period referred to in Article 9.2 of this module, unless the parties have entered into a separate maintenance agreement that incorporates an obligation to this effect.
205 | 10. Confidentiality
206 | 10.1 The Client acknowledges that the software is of a confidential nature and that this software contains trade secrets of the Supplier, its own suppliers and/or the software manufacturer.
207 | 11. Maintenance agreement
208 | 11.1 If the Client has not entered into a maintenance agreement with the Supplier at the same time as concluding an agreement regarding the provision of the software, the Supplier shall not be obliged to enter into a maintenance agreement in respect of the software at a later point in time.
209 | 12. Software from third party suppliers
210 | If and in so far as the Supplier provides the Client with software from third parties, the (license) terms imposed by such third parties in relation to the software shall apply, provided that the Supplier has notified the Client of such terms in writing, notwithstanding any varying provisions in these general terms and conditions. The Client accepts the abovementioned terms imposed by third parties. These terms shall be available to the Client for inspection on the Supplier’s premises and the Supplier shall provide the Client with a copy of the terms free of charge upon request. If and in so far as the abovementioned terms imposed by third parties in the relationship between the Client and the Supplier are deemed not to apply for any reason whatsoever, or are declared to be inapplicable, the provisions of these general terms and conditions shall apply in full.
211 | © 2008, ICT~Office
212 |
213 |
214 |
215 |
216 | StringsTable
217 | Root
218 |
219 |
220 |
--------------------------------------------------------------------------------
/www/cdv-jb-panframe-plugin.js:
--------------------------------------------------------------------------------
1 | var exec = require('cordova/exec');
2 |
3 | var panframePlugin = {
4 | /*
5 | params:
6 | #1: video url
7 | #2: view mode:(iOS)
8 | 0 for spherical,
9 | 1 for flat,
10 | 2 for cylindrical,
11 | 3 for side-by-side VR (non-stereoscopic),
12 | 4 for top-down VR formatted content (stereoscopic).
13 | Android:
14 | 0 for spherical,
15 | 1 for flat display,
16 | 2 for stereo side-by-side
17 | */
18 |
19 | init: function(videoUrl, viewMode, aspectRatio, successCallback, errorCallback) {
20 | exec(
21 | successCallback,
22 | errorCallback,
23 | 'PanframePlugin',
24 | 'init',
25 | [videoUrl, viewMode, aspectRatio]
26 | );
27 | }
28 | };
29 |
30 | module.exports = panframePlugin;
--------------------------------------------------------------------------------