1 /*
  2  * This is system cordova_plugin (TV specific API).
  3  * Apache License (2004). See http://www.apache.org/licenses/LICENSE-2.0
  4  *
  5  * Copyright (c) 2014, LG Electronics, Inc.
  6  */
  7 
  8 
  9 /**
 10  * This represents the video API itself, and provides a global namespace for operating video service.
 11  * @class
 12  */
 13 cordova.define('cordova/plugin/video', function (require, exports, module) { // jshint ignore:line
 14 
 15     function log(msg) {
 16     //    //console.log//will be removed // jshint ignore:line
 17     }
 18 
 19     var service;
 20     if (window.PalmSystem) { // jshint ignore:line
 21         log("Window.PalmSystem Available");
 22         service = require('cordova/plugin/webos/service');
 23     } else {
 24         service = {
 25             Request : function(uri, params) {
 26                log(uri + " invoked. But I am a dummy because PalmSystem is not available");
 27 
 28                if (typeof params.onFailure === 'function') {
 29                   params.onFailure({
 30                       returnValue:false,
 31                       errorText:"PalmSystem Not Available. Cordova is not installed?"
 32                     });
 33                }
 34         }};
 35     }
 36 
 37     /**
 38      * video interface
 39      */
 40     var Video = function () {
 41     };
 42 
 43 
 44     function checkErrorCodeNText(result, errorCode, errorText) {
 45 
 46         if (result.errorCode === undefined || result.errorCode === null ) {
 47             result.errorCode = errorCode;
 48         }
 49         if (result.errorText ===undefined || result.errorText === null) {
 50             result.errorText = errorText;
 51         }
 52     }
 53 
 54     var platformInfoObj = {
 55         webOSVer : -1,
 56         chipset : 'undefined'
 57     };
 58     function checkPlatformVersion(cb) {
 59 
 60         if (platformInfoObj.webOSVer === -1) {  // Not defined yet
 61 
 62             service.Request('luna://com.webos.service.tv.systemproperty', {
 63                 method: 'getSystemInfo',
 64                 parameters: {
 65                     keys: ["sdkVersion", "boardType"]
 66                 },
 67                 onSuccess: function(result) {
 68                     var temp = result.sdkVersion.split('.');
 69                     if (temp.length >= 1 && temp[0] === '1') {
 70                         platformInfoObj = {
 71                             webOSVer : 1,
 72                             chipset : result.boardType.split("_")[0]
 73                         };
 74                     } else if (temp.length >= 1 && temp[0] === '2') {
 75                         platformInfoObj = {
 76                             webOSVer : 2,
 77                             chipset : result.boardType.split("_")[0]
 78                         };
 79                     } else if (temp.length >= 1 && temp[0] === '3') {
 80                         platformInfoObj = {
 81                             webOSVer : 3,
 82                             chipset : result.boardType.split("_")[0]
 83                         };
 84                     } else {
 85                         platformInfoObj = {
 86                             webOSVer : 0,
 87                             chipset : ""
 88                         };
 89                     }
 90                     cb(platformInfoObj);
 91                 },
 92                 onFailure: function(error) {
 93                     platformInfoObj = {
 94                         webOSVer : 0,
 95                         chipset : ""
 96                     }
 97                     cb(platformInfoObj);
 98                 }
 99             });
100 
101         } else {
102             cb(platformInfoObj);
103         }
104     }
105 
106     /**
107      * Gets video position and size.
108      * @class Video
109      * @param {Function} successCallback success callback function.
110      * @param {Function} errorCallback failure callback function.
111      * @return {Object}
112      * <div align=left>
113      * <table class="hcap_spec" width=400>
114      *   <thead><tr><th>Property</th><th>Type</th><th>Description</th></tr></thead>
115      *   <tbody>
116      *       <tr><th>source</th><th>Object</th><th>source rectangle of video. </th></tr>
117      *       <tr><th>source.x</th><th>Number</th><th>The x coordinate of the upper-left corner of the rectangle. </th></tr>
118      *       <tr class="odd"><th>source.y</th><th>Number</th><th>The y coordinate of the upper-left corner of the rectangle. </th></tr>
119      *       <tr><th>source.width</th><th>Number</th><th>The width of the rectangle. </th></tr>
120      *       <tr class="odd"><th>source.height</th><th>Number</th><th>The height of the rectangle. </th></tr>
121      *   </tbody>
122      * </table>
123      *
124      * @example
125      * // Javascript code
126      * function getVideoStatus () {
127      *   function successCb(cbObject) {
128      *      console.log("cbObject : " + JSON.stringify(cbObject.source));
129      *
130      *      console.log("source.x : " + cbObject.source.x);
131      *      console.log("source.y : " + cbObject.source.y);
132      *      console.log("source.width : " + cbObject.source.width);
133      *      console.log("source.height : " + cbObject.source.height);
134      *
135      *      // Do something
136      *         ...
137      *   }
138      *
139      *   function failureCb(cbObject) {
140      *      var errorCode = cbObject.errorCode;
141      *      var errorText = cbObject.errorText;
142      *      console.log ("Error Code [" + errorCode + "]: " + errorText);
143      *   }
144      *
145      *   var video = new Video();
146      *   video.getVideoStatus(successCb, failureCb);
147      * }
148      * @since 1.0
149      * @see
150      * <a href="Video%23setVideoSize.html">Video.setVideoSize()</a><br>
151      */
152     Video.prototype.getVideoStatus = function (successCallback, errorCallback) {
153 
154         log("getVideoStatus: ");
155 
156         service.Request("luna://com.webos.service.tv.signage/", {
157             method : "getVideoSize",
158             onSuccess : function(result) {
159                 log("getVideoStatus: On Success");
160 
161                 if (result.returnValue === true) {
162                     if (typeof successCallback === 'function') {
163                         var cbObj = {};
164                         cbObj.source = result.videoSize.source;
165                         successCallback(cbObj);
166                     }
167                 }
168             },
169             onFailure : function(result) {
170                 log("getVideoStatus: On Failure");
171                 delete result.returnValue;
172                 if (typeof errorCallback === 'function') {
173                     checkErrorCodeNText(result, "VGVS", "Video.getVideoStatus returns failure.");
174                     errorCallback(result);
175                 }
176             }
177         });
178 
179         log("Video.getVideoStatus Done");
180 
181     };
182 
183     Video.currentVideo = {
184         uri : null,
185         source : null,
186         tagId : null
187     };
188 
189     /**
190      * Sets video size.<br>
191      * Original video(source rectangle) will be adjusted to the full screen size. It can be resized or a zoom effect can be applied to the video.
192      * <br>
193      * Note : Using more than one video tag in an html page may not be supported due to hardware limitation.
194      *
195      * @class Video
196      * @param {Function} successCallback success callback function.
197      * @param {Function} errorCallback failure callback function.
198      * @param {Object} options source object vary depending on video resolution.
199      *                  And rectangle object has boundary value as : <br>
200      *                  source.x + source.width <= width of video resolution , source.y + source.height <= height of video resolution <br>
201      *                  x and y value of rectangle are upper than zero.
202      * <br><image src="./image/setVideoSize.png"><br>
203      * <div align=left>
204      * <table class="hcap_spec" width=400>
205      *   <thead><tr><th>Property</th><th>Type</th><th>Description</th><th>Required</th></tr></thead>
206      *   <tbody>
207      *       <tr><th>source</th><th>Object</th><th>source rectangle of video. </th><th>required</th></tr>
208      *       <tr><th>source.x</th><th>Number</th><th>The x coordinate of the upper-left corner of the rectangle. </th><th>required</th></tr>
209      *       <tr class="odd"><th>source.y</th><th>Number</th><th>The y coordinate of the upper-left corner of the rectangle. </th><th>required</th></tr>
210      *       <tr><th>source.width</th><th>Number</th><th>The width of the rectangle. </th><th>required</th></tr>
211      *       <tr class="odd"><th>source.height</th><th>Number</th><th>The height of the rectangle. </th><th>required</th></tr>
212      *   </tbody>
213      * </table>
214      *
215      * @return <p>If the method is successfully executed, success callback function is called without a parameter.</br>
216      * If an error occurs, failure callback function is called with a failure callback object as a parameter.</p>
217      * @example
218      * // Javascript code
219      * function setVideoSize () {
220      *   var options = {source: {x:0, y:0, width:100, height:100}};
221      *
222      *   function successCb() {
223      *      // Do something
224      *   }
225      *
226      *   function failureCb(cbObject) {
227      *      var errorCode = cbObject.errorCode;
228      *      var errorText = cbObject.errorText;
229      *      console.log ("Error Code [" + errorCode + "]: " + errorText);
230      *   }
231      *
232      *   var video = new Video();
233      *   video.setVideoSize(successCb, failureCb, options);
234      * }
235      * @since 1.0
236      * @see
237      * <a href="Video%23getVideoStatus.html">Video.getVideoStatus()</a><br>
238      * <a href="InputSource%23initialize.html#constructor">InputSource.initialize()</a><br>
239      */
240     Video.prototype.setVideoSize = function (successCallback, errorCallback, options) {
241 
242         log("setVideoSize: " + JSON.stringify(options));
243 
244         if (options.source === undefined ||
245             typeof options.source.x !== 'number' || typeof options.source.y !== 'number' ||
246             typeof options.source.width !== 'number' || typeof options.source.height !== 'number' ||
247             isNaN(options.source.x) || isNaN(options.source.y) || isNaN(options.source.width) || isNaN(options.source.height) ||
248             options.source.x < 0 || options.source.y < 0 || options.source.width <= 0 || options.source.height <= 0 ||
249             options.source.width < 16 || options.source.height < 16) {
250 
251             if (typeof errorCallback === 'function') {
252                 var result = {};
253                 checkErrorCodeNText(result, "VSVS", "Video.setVideoSize returns failure. out of range or type error.");
254                 errorCallback(result);
255             }
256 
257             return;
258         }
259 
260         service.Request("luna://com.webos.service.tv.signage/", {
261             method : "getVideoSize",
262             onSuccess : function(result) {
263                 log("setVideoSize: On Success");
264 
265                 if (result.returnValue === true) {
266 
267                     var cbObj = {};
268                     cbObj.x = result.videoSize.destination.x;
269                     cbObj.y = result.videoSize.destination.y;
270                     cbObj.width = result.videoSize.destination.width;
271                     cbObj.height = result.videoSize.destination.height;
272 
273                     //console.log("current video size : " + JSON.stringify(result.videoSize.source));
274                     //console.log("saved video : " + JSON.stringify(Video.currentVideo));
275 
276                     var videoTags = document.getElementsByTagName("video"); // jshint ignore:line
277                     var findVideoTags = false;
278                     for (var i=0; i<videoTags.length; i++) {
279                         //console.log("video tag: " + videoTags[i]);
280                         //console.log("video tag:id " + videoTags[i].id);
281                         // video tag
282                         if (videoTags[i].currentTime > 0) {
283                             //console.log("video tag is working");
284                             findVideoTags = true;
285                             if (Video.currentVideo.uri !== videoTags[i].src ||
286                                 (videoTags[i].id !== null &&
287                                  videoTags[i].id !== undefined &&
288                                  Video.currentVideo.tagId !== null &&
289                                  Video.currentVideo.tagId !== undefined &&
290                                  Video.currentVideo.tagId !== videoTags[i].id) ) {
291                                 Video.currentVideo.uri = videoTags[i].src;
292                                 Video.currentVideo.source = result.videoSize.source;
293                                 Video.currentVideo.tagId = videoTags[i].id;
294                                 //console.log("saved new video : " + JSON.stringify(Video.currentVideo));
295                             }
296                             break;
297                         }
298                     }
299                     if(findVideoTags === false) {
300                         // external input
301                         service.Request("luna://com.webos.service.eim/", {
302                             method : "getCurrentInput",
303                             parameters : {},
304                             onSuccess : function(resultw) {
305                                 //console.log("current input " + JSON.stringify(resultw));
306 
307                                 if (resultw.returnValue === true && Video.currentVideo.uri !== resultw.mainInputSourceId ||
308                                     (videoTags[0].id !== null &&
309                                      videoTags[0].id !== undefined
310                                      && Video.currentVideo.tagId !== null
311                                      && Video.currentVideo.tagId !== undefined
312                                      && Video.currentVideo.tagId !== videoTags[0].id) ) {
313                                     Video.currentVideo.uri = resultw.mainInputSourceId;
314                                     Video.currentVideo.tagId = (videoTags[0] !== null && videoTags[0].id !== null && videoTags[0].id !== undefined ? videoTags[0].id : null);
315                                     service.Request("luna://com.webos.service.tv.signage/", {
316                                         method : "getVideoSize",
317                                         onSuccess : function(resultx) {
318                                             log("setVideoSize: On Success 1");
319 
320                                             if (resultx.returnValue === true) {
321 
322                                                 Video.currentVideo.source = resultx.videoSize.source;
323                                                 //console.log("saved new video : " + JSON.stringify(Video.currentVideo));
324 
325                                                 if (resultx.videoSize.source.width === 0 && resultx.videoSize.source.height === 0) {
326 
327                                                     Video.currentVideo = {
328                                                         uri : null,
329                                                         source : null,
330                                                         tagId : null
331                                                     };
332 
333                                                     var resultCallBack = {};
334                                                     checkErrorCodeNText(resultCallBack, "VSVS", "Video.setVideoSize returns failure. Not ready to setVideoSize." );
335                                                     errorCallback(resultCallBack);
336                                                     return;
337                                                 } else if ( Video.currentVideo.uri === null || Video.currentVideo.source === null ||
338                                                         (options.source.width + options.source.x) > (Video.currentVideo.source.x + Video.currentVideo.source.width) ||
339                                                         (options.source.height + options.source.y) > (Video.currentVideo.source.y + Video.currentVideo.source.height) ) {
340 
341                                                     var resultCallBack2 = {};
342                                                     checkErrorCodeNText(resultCallBack2, "VSVS", "Video.setVideoSize returns failure. out of range or type error."
343                                                                                        + "(" + Video.currentVideo.source.width + " : " + Video.currentVideo.source.height + ")");
344                                                     errorCallback(resultCallBack2);
345                                                     return;
346 
347                                                 }
348 
349                                                 service.Request("luna://com.webos.service.tv.signage/", {
350                                                     method : "setVideoSize",
351                                                     parameters : {
352                                                         videoSize : {
353                                                             "source": {
354                                                                 "x": options.source.x,
355                                                                 "y": options.source.y,
356                                                                 "width": options.source.width,
357                                                                 "height": options.source.height
358                                                             },
359                                                             "destination": {
360                                                                 "x": cbObj.x,
361                                                                 "y": cbObj.y,
362                                                                 "width": cbObj.width,
363                                                                 "height": cbObj.height
364                                                             }
365                                                         }
366                                                     },
367                                                     onSuccess : function(result) {
368                                                         log("setVideoSize: On Success 2");
369 
370                                                         if (result.returnValue === true && typeof successCallback === 'function') {
371                                                             successCallback();
372                                                             return;
373                                                         }
374                                                     },
375                                                     onFailure : function(result) {
376                                                         log("setVideoSize: On Failure 2");
377                                                         delete result.returnValue;
378                                                         if (typeof errorCallback === 'function') {
379                                                             checkErrorCodeNText(result, "VSVS", "Video.setVideoSize returns failure. Can't current video source size.");
380                                                             errorCallback(result);
381                                                             return;
382                                                         }
383                                                     }
384                                                 });
385 
386                                             }
387                                         }
388                                     });
389                                 } else {
390                                     if ( Video.currentVideo.uri === null || Video.currentVideo.source === null ||
391                                         (options.source.width + options.source.x) > (Video.currentVideo.source.x + Video.currentVideo.source.width) ||
392                                         (options.source.height + options.source.y) > (Video.currentVideo.source.y + Video.currentVideo.source.height) ){
393 
394                                         var resultCallBack = {};
395                                         checkErrorCodeNText(resultCallBack, "VSVS", "Video.setVideoSize returns failure. out of range or type error."
396                                                                           + "(" + Video.currentVideo.source.width + " : " + Video.currentVideo.source.height + ")");
397                                         errorCallback(resultCallBack);
398                                         return;
399                                     }
400 
401                                     service.Request("luna://com.webos.service.tv.signage/", {
402                                         method : "setVideoSize",
403                                         parameters : {
404                                             videoSize : {
405                                                 "source": {
406                                                     "x": options.source.x,
407                                                     "y": options.source.y,
408                                                     "width": options.source.width,
409                                                     "height": options.source.height
410                                                 },
411                                                 "destination": {
412                                                     "x": cbObj.x,
413                                                     "y": cbObj.y,
414                                                     "width": cbObj.width,
415                                                     "height": cbObj.height
416                                                 }
417                                             }
418                                         },
419                                         onSuccess : function(result) {
420                                             log("setVideoSize: On Success 3");
421 
422                                             if (result.returnValue === true && typeof successCallback === 'function') {
423                                                 successCallback();
424                                                 return;
425                                             }
426                                         },
427                                         onFailure : function(result) {
428                                             log("setVideoSize: On Failure 3");
429                                             delete result.returnValue;
430                                             if (typeof errorCallback === 'function') {
431                                                 checkErrorCodeNText(result, "VSVS", "Video.setVideoSize returns failure. Can't current video source size.");
432                                                 errorCallback(result);
433                                                 return;
434                                             }
435                                         }
436                                     });
437                                 }
438                             },
439                             onFailure : function(result) {
440                                 log("setVideoSize: On Failure 3");
441                                 delete result.returnValue;
442                                 if (typeof errorCallback === 'function') {
443                                     checkErrorCodeNText(result, "VSVS", "Video.setVideoSize returns failure. Can't set current video source size.");
444                                     errorCallback(result);
445                                     return;
446                                 }
447                             }
448                         });
449                     } else {
450 
451                         if ( Video.currentVideo.uri === null || Video.currentVideo.source === null ||
452                                 (options.source.width + options.source.x) > (Video.currentVideo.source.x + Video.currentVideo.source.width) ||
453                                 (options.source.height + options.source.y) > (Video.currentVideo.source.y + Video.currentVideo.source.height) ) {
454 
455                             var resultCallBack = {};
456                             checkErrorCodeNText(resultCallBack, "VSVS", "Video.setVideoSize returns failure. out of range or type error."
457                                                               + "(" + Video.currentVideo.source.width + " : " + Video.currentVideo.source.height + ")");
458                             errorCallback(resultCallBack);
459                             return;
460                         }
461 
462                         service.Request("luna://com.webos.service.tv.signage/", {
463                             method : "setVideoSize",
464                             parameters : {
465                                 videoSize : {
466                                     "source": {
467                                         "x": options.source.x,
468                                         "y": options.source.y,
469                                         "width": options.source.width,
470                                         "height": options.source.height
471                                     },
472                                     "destination": {
473                                         "x": cbObj.x,
474                                         "y": cbObj.y,
475                                         "width": cbObj.width,
476                                         "height": cbObj.height
477                                     }
478                                 }
479                             },
480                             onSuccess : function(result) {
481                                 log("setVideoSize: On Success 4");
482 
483                                 if (result.returnValue === true && typeof successCallback === 'function') {
484                                     successCallback();
485                                     return;
486                                 }
487                             },
488                             onFailure : function(result) {
489                                 log("setVideoSize: On Failure 4");
490                                 delete result.returnValue;
491                                 if (typeof errorCallback === 'function') {
492                                     checkErrorCodeNText(result, "VSVS", "Video.setVideoSize returns failure. Can't current video source size.");
493                                     errorCallback(result);
494                                     return;
495                                 }
496                             }
497                         });
498                     }
499 
500 
501                 }
502             },
503             onFailure : function(result) {
504                 log("setVideoSize: On Failure");
505                 delete result.returnValue;
506                 if (typeof errorCallback === 'function') {
507                     checkErrorCodeNText(result, "VSVS", "Video.setVideoSize returns failure.");
508                     errorCallback(result);
509                     return;
510                 }
511             }
512         });
513 
514         log("Video.setVideoSize Done");
515     };
516 
517     /**
518      * Sets content rotation.
519      * Note : Only full screen video rotation is supported. <br>
520      * @class Video
521      * @param {Function} successCallback success callback function.
522      * @param {Function} errorCallback failure callback function.
523      * @param {Object} options
524      *
525      * <div align=left>
526      * <table class="hcap_spec" width=400>
527      *   <thead><tr><th>Property</th><th>Type</th><th>Description</th><th>Required</th></tr></thead>
528      *   <tbody>
529      *       <tr><th>degree</th><th>String</th><th>"off", "90", or "270"</th><th>required</th></tr>
530      *       <tr class="odd"><tr><th>aspectRatio</th><th>String</th><th>"full" or "original" </th><th>required</th></tr>
531      *   </tbody>
532      * </table>
533      *
534      * @return <p>If the method is successfully executed, success callback function is called without a parameter.</br>
535      * If an error occurs, failure callback function is called with a failure callback object as a parameter.</p>
536      * @example
537      * // Javascript code
538      * function setContentRotation () {
539      *   var options = {degree : "90", aspectRatio : "full"};
540      *
541      *   function successCb() {
542      *      // Do something
543      *   }
544      *
545      *   function failureCb(cbObject) {
546      *      var errorCode = cbObject.errorCode;
547      *      var errorText = cbObject.errorText;
548      *      console.log ("Error Code [" + errorCode + "]: " + errorText);
549      *   }
550      *
551      *   var video = new Video();
552      *   video.setContentRotation(successCb, failureCb, options);
553      * }
554      * @deprecated
555      * <p>This function is removed since 1.4. Use transform properties of CSS instead.</p>
556      * @since 1.3
557      * @see
558      * <a href="Video%23getContentRotation.html">Video.getContentRotation()</a><br>
559      */
560     Video.prototype.setContentRotation = function(successCallback, errorCallback, options) {
561         var ret = {};
562 
563         checkErrorCodeNText(ret, "ERROR", "This function is not supported by this version");
564         if (typeof errorCallback === 'function')
565             errorCallback(ret);
566 
567         return;
568     };
569 
570     /**
571      * Gets content rotation status.
572      * @class Video
573      * @param {Function} successCallback success callback function.
574      * @param {Function} errorCallback failure callback function.
575      * @return {Object}
576      * <div align=left>
577      * <table class="hcap_spec" width=400>
578      *   <thead><tr><th>Property</th><th>Type</th><th>Description</th><th>Required</th></tr></thead>
579      *   <tbody>
580      *       <tr><th>degree</th><th>String</th><th>"off", "90", or "270"</th><th>required</th></tr>
581      *       <tr class="odd"><tr><th>aspectRatio</th><th>String</th><th>"full" or "original" </th><th>required</th></tr>
582      *   </tbody>
583      * </table>
584      *
585      * @example
586      * // Javascript code
587      * function getContentRotation () {
588      *   function successCb(cbObject) {
589      *      console.log("cbObject : " + JSON.stringify(cbObject.source));
590      *
591      *      console.log("degree : " + cbObject.degree);
592      *      console.log("aspectRatio : " + cbObject.aspectRatio);
593      *
594      *      // Do something
595      *   }
596      *
597      *   function failureCb(cbObject) {
598      *      var errorCode = cbObject.errorCode;
599      *      var errorText = cbObject.errorText;
600      *      console.log ("Error Code [" + errorCode + "]: " + errorText);
601      *   }
602      *
603      *   var video = new Video();
604      *   video.getContentRotation(successCb, failureCb);
605      * }
606      * @deprecated
607      * <p>This function is removed since 1.4. Use transform properties of CSS instead.</p>
608      * @since 1.3
609      * @see
610      * <a href="Video%23setContentRotation.html">Video.setContentRotation()</a><br>
611      */
612     Video.prototype.getContentRotation = function(successCallback, errorCallback) {
613         var ret = {};
614 
615         checkErrorCodeNText(ret, "ERROR", "This function is not supported by this version");
616         if (typeof errorCallback === 'function')
617             errorCallback(ret);
618 
619         return;
620     };
621 
622     /**
623      * Sets output size and position
624      * @class Video
625      * @param {Function} successCallback success callback function.
626      * @param {Function} errorCallback failure callback function.
627      * @param {Object} options
628      *
629      * <div align=left>
630      * <table class="hcap_spec" width=400>
631      *   <thead><tr><th>Property</th><th>Type</th><th>Description</th><th>Required</th></tr></thead>
632      *   <tbody>
633      *       <tr><th>x</th><th>String</th><th>Postion of x-axis in video</th><th>required</th></tr>
634      *       <tr class="odd"><tr><th>y</th><th>String</th><th>Postion of y-axis in video</th><th>required</th></tr>
635      *       <tr><th>width</th><th>String</th><th>Width of size in video</th><th>required</th></tr>
636      *       <tr class="odd"><tr><th>height</th><th>String</th><th>Height of size in video</th><th>required</th></tr>
637      *   </tbody>
638      * </table>
639      *
640      * @return <p>If the method is successfully executed, success callback function is called without a parameter.</br>
641      * If an error occurs, failure callback function is called with a failure callback object as a parameter.</p>
642      * @example
643      * // Javascript code
644      * function setVideoViewTransform() {
645      *
646      *     var successCb = function (){
647      *         // Do Something
648      *     }
649      *
650      *     var failureCb = function(){
651      *         var errorCode = cbObject.errorCode;
652      *         var errorText = cbObject.errorText;
653      *         console.log ("Error Code [" + errorCode + "]: " + errorText);
654      *     }
655      *
656      *     var video = new Video();
657 
658      *     video.setVideoViewTransform(successCb, failureCb, {
659      *         //Portrait Standard
660      *         x: 0,
661      *         y: 0,
662      *         width: 1920,
663      *         height: 600
664      *     });
665      * }
666      * @deprecated
667      * <p>This function is removed since 1.4. Use object-fit properties of CSS instead.</p>
668      * @since 1.3
669      * @see
670      * <a href="Video%23setContentRotation.html">Video.setContentRotation()</a><br>
671      */
672     Video.prototype.setVideoViewTransform = function(successCallback, failureCallback, options) {
673         var ret = {};
674 
675         checkErrorCodeNText(ret, "ERROR", "This function is not supported by this version");
676         if (typeof failureCallback === 'function')
677             failureCallback(ret);
678 
679         return;
680     };
681 
682     /**
683      * Sets position and size of rotated video.<br>
684      * Note : This feature is supported after setting of rotated video by setContentRotation.<br>
685      *
686      * @class Video
687      * @param {Function} successCallback success callback function.
688      * @param {Function} errorCallback failure callback function.
689      * @param {Object} options
690      * <div align=left>
691      * <table class="hcap_spec" width=400>
692      *   <thead><tr><th>Property</th><th>Type</th><th>Description</th><th>Required</th></tr></thead>
693      *   <tbody>
694      *       <tr><th>x</th><th>String</th><th>Postion of x-axis in video</th><th>required</th></tr>
695      *       <tr class="odd"><tr><th>y</th><th>String</th><th>Postion of y-axis in video</th><th>required</th></tr>
696      *       <tr><th>width</th><th>String</th><th>Width of size in video</th><th>required</th></tr>
697      *       <tr class="odd"><tr><th>height</th><th>String</th><th>Height of size in video</th><th>required</th></tr>
698      *   </tbody>
699      * </table>
700      *
701      * @return <p>If the method is successfully executed, success callback function is called without a parameter.</br>
702      * If an error occurs, failure callback function is called with a failure callback object as a parameter.</p>
703      * @example
704      * // Javascript code
705      * function setRotatedVideoTransform() {
706      *     var successCb = function (){
707      *     // Do Something
708      *     }
709      *
710      *     var failureCb = function(cbObject){
711      *         var errorCode = cbObject.errorCode;
712      *         var errorText = cbObject.errorText;
713      *         console.log ("Error Code [" + errorCode + "]: " + errorText);
714      *     }
715      *
716      *     var video = new Video();
717      *
718      *     video.setRotatedVideoTransform(successCb, failureCb, {
719      *         //Portrait Standard
720      *         x: 100,
721      *         y: 120,
722      *         width: 900,
723      *         height: 600
724      *     });
725      * }
726      * @deprecated
727      * <p>This function is removed since 1.4. Use object-fit properties of CSS instead.</p>
728      * @since 1.3
729      * @see
730      * <a href="Video%23setContentRotation.html">Video.setContentRotation()</a><br>
731      */
732     Video.prototype.setRotatedVideoTransform = function(successCallback, failureCallback, options) {
733         var ret = {};
734 
735         checkErrorCodeNText(ret, "ERROR", "This function is not supported by this version");
736         if (typeof failureCallback === 'function')
737             failureCallback(ret);
738 
739         return;
740     };
741 
742     module.exports = Video;
743 });
744 
745 Video = cordova.require('cordova/plugin/video'); // jshint ignore:line
746 
747