Publish Vulpes Preview 15 sources for desktop, Android and Tundra
Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
This commit is contained in:
parent
93e3a48004
commit
b38dea0597
25901 changed files with 9982925 additions and 369 deletions
|
|
@ -0,0 +1,18 @@
|
|||
;'use strict';function getVideoRotation(blob,rotationCallback){function MP4Parser(blob,handlers){BlobView.get(blob,0,Math.min(1024,blob.size),function(data,error){if(data.byteLength<=8||data.getBinaryText(4,4)!=='ftyp'){handlers.errorHandler('not an MP4 file');return;}
|
||||
parseAtom(data);});function parseAtom(data){var offset=data.sliceOffset+data.viewOffset;var size=data.readUnsignedInt();var type=data.readBinaryText(4);var contentOffset=8;if(size===0){size=blob.size-offset;}
|
||||
else if(size===1){size=data.readUnsignedInt()*4294967296+data.readUnsignedInt();contentOffset=16;}
|
||||
var handler=handlers[type]||handlers.defaultHandler;if(typeof handler==='function'){data.getMore(data.sliceOffset+data.viewOffset,size,function(atom){var rv=handler(atom);if(rv!=='done'){parseAtomAt(data,offset+size);}});}
|
||||
else if(handler==='children'){var skip=(type==='meta')?4:0;parseAtomAt(data,offset+contentOffset+skip);}
|
||||
else if(handler==='skip'||!handler){parseAtomAt(data,offset+size);}
|
||||
else if(handler==='done'){return;}}
|
||||
function parseAtomAt(data,offset){if(offset>=blob.size){if(handlers.eofHandler){handlers.eofHandler();}
|
||||
return;}
|
||||
else{data.getMore(offset,16,parseAtom);}}}
|
||||
MP4Parser(blob,{errorHandler:function(msg){rotationCallback(msg);},eofHandler:function(){rotationCallback(null);},defaultHandler:'skip',moov:'children',trak:'children',tkhd:function(data){data.advance(48);var a=data.readUnsignedInt();var b=data.readUnsignedInt();data.advance(4);var c=data.readUnsignedInt();var d=data.readUnsignedInt();if(a===0&&d===0){if(b===0x00010000&&c===0xFFFF0000){rotationCallback(90);}
|
||||
else if(b===0xFFFF0000&&c===0x00010000){rotationCallback(270);}
|
||||
else{rotationCallback('unexpected rotation matrix');}}
|
||||
else if(b===0&&c===0){if(a===0x00010000&&d===0x00010000){rotationCallback(0);}
|
||||
else if(a===0xFFFF0000&&d===0xFFFF0000){rotationCallback(180);}
|
||||
else{rotationCallback('unexpected rotation matrix');}}
|
||||
else{rotationCallback('unexpected rotation matrix');}
|
||||
return'done';}});}
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
;'use strict';var MediaUtils={formatDate:function(timestamp){if(!timestamp||timestamp===undefined||isNaN(timestamp)){return;}
|
||||
return new Date(timestamp).toLocaleString(navigator.languages,{'month':'numeric','year':'numeric','day':'numeric'});},getLocalizedSizeTokens:function(size){if(!size||size===undefined||isNaN(size)){return Promise.resolve('');}
|
||||
var units=['B','KB','MB','GB','TB','PB','EB','ZB','YB'];var i=0;while(size>=1024&&i<(units.length-1)){size/=1024;++i;}
|
||||
var sizeDecimal=i<2?Math.round(size):Math.round(size*10)/10;return document.l10n.formatValue('byteUnit-'+units[i]).then((unit)=>{return{size:sizeDecimal,unit};});},getLocalizedSize:function(size){return this.getLocalizedSizeTokens(size).then((args)=>{return document.l10n.formatValue('fileSize',args);});},formatDuration:function(duration){function padLeft(num,length){var r=String(num);while(r.length<length){r='0'+r;}
|
||||
return r;}
|
||||
duration=Math.round(duration);var minutes=Math.floor(duration/60);var seconds=duration%60;if(minutes<60){return padLeft(minutes,2)+':'+padLeft(seconds,2);}
|
||||
var hours=Math.floor(minutes/60);minutes=Math.floor(minutes%60);return hours+':'+padLeft(minutes,2)+':'+padLeft(seconds,2);},populateMediaInfo:function(data){for(var id in data){if(data.hasOwnProperty(id)){var element=document.getElementById(id);if(element){if(typeof data[id]==='string'){element.setAttribute('data-l10n-id',data[id]);}else if(data[id].hasOwnProperty('raw')){element.removeAttribute('data-l10n-id');element.textContent=data[id].raw;}else{document.l10n.setAttributes(element,data[id].id,data[id].args);}}}}},binarySearch:function(array,element,comparator,from,to){if(comparator===undefined){comparator=function(a,b){return a-b;};}
|
||||
if(from===undefined){return MediaUtils.binarySearch(array,element,comparator,0,array.length);}
|
||||
if(from===to){return from;}
|
||||
var mid=Math.floor((from+to)/2);var result=comparator(element,array[mid]);if(result<0){return MediaUtils.binarySearch(array,element,comparator,from,mid);}
|
||||
else{return MediaUtils.binarySearch(array,element,comparator,mid+1,to);}}};
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
;'use strict';var VideoStats=(function(){var startQuality;var startTime;var endQuality;var endTime;var video;function start(v){video=v;if(!video.getVideoPlaybackQuality){return;}
|
||||
startQuality=video.getVideoPlaybackQuality();startTime=video.currentTime;endQuality=null;endTime=null;}
|
||||
function stop(){if(!video){dump('Warning: no stats have been recorded. '+'Make sure start() has been called');return;}
|
||||
if(!video.getVideoPlaybackQuality){return;}
|
||||
endQuality=video.getVideoPlaybackQuality();endTime=video.currentTime;}
|
||||
function print(){if(!video){dump('Warning: no stats have been recorded. '+'Make sure start() has been called');return;}
|
||||
if(!video.getVideoPlaybackQuality){return;}
|
||||
if(!startQuality||!endQuality){dump('Warning: no stats have been recorded. '+'Make sure start() and stop() have been called');return;}
|
||||
var segmentDuration=(endQuality.creationTime-startQuality.creationTime)/1000;var startRendered=startQuality.totalVideoFrames-startQuality.droppedVideoFrames;var endRendered=endQuality.totalVideoFrames-endQuality.droppedVideoFrames;var segmentRendered=endRendered-startRendered;var fps=segmentRendered/segmentDuration;dump('Video statistics start');dump('Dimensions: '+video.videoWidth+'x'+video.videoHeight);dump('Complete duration: '+MediaUtils.formatDuration(video.duration));dump('Start time: '+MediaUtils.formatDuration(startTime));dump('End time: '+MediaUtils.formatDuration(endTime));dump('Total frames: '+endQuality.totalVideoFrames);dump('Decoded frames: '+
|
||||
(endQuality.totalVideoFrames-endQuality.corruptedVideoFrames));dump('Corrupted frames: '+endQuality.corruptedVideoFrames);dump('Rendered frames: '+
|
||||
(endQuality.totalVideoFrames-endQuality.droppedVideoFrames));dump('Dropped frames: '+endQuality.droppedVideoFrames);dump('Average rendered FPS: '+fps.toFixed(2));dump('Video statistics end');}
|
||||
return{start:start,stop:stop,dump:print};})();
|
||||
Loading…
Reference in a new issue