blob: 19bd9c96597ff85ec54879572310500c7bed43a7 [file] [log] [blame]
/*jslint vars: true , plusplus: true, devel: true, nomen: true, regexp: true, indent: 4, maxerr: 50 */
/*global bm_eventDispatcher, bm_renderManager, bm_timeremapHelper, bm_shapeHelper, bm_generalUtils, CompItem, PlaceholderSource, AVLayer, CameraLayer, LightLayer, ShapeLayer, TextLayer, TrackMatteType, bm_sourceHelper, bm_transformHelper, bm_maskHelper*/
var bm_layerElement = (function () {
'use strict';
var ob = {};
ob.layerTypes = {
precomp : 'PreCompLayer',
audio : 'AudioLayer',
pholderVideo : 'PlaceholderVideoLayer',
imageSeq : 'ImageSequenceLayer',
video : 'VideoLayer',
pholderStill : 'PlaceholderStillLayer',
solid : 'SolidLayer',
still : 'StillLayer',
guide : 'GuideLayer',
adjustment : 'AdjustmentLayer',
nullLayer : 'NullLayer',
camera : 'CameraLayer',
light : 'LightLayer',
shape : 'ShapeLayer',
text : 'TextLayer'
};
var getLayerType = (function () {
function avLayerType(lObj) {
var lSource = lObj.source;
if (lSource instanceof CompItem) {
return ob.layerTypes.precomp;
}
var lMainSource = lSource.mainSource;
var lFile = lMainSource.file;
if (!lObj.hasVideo) {
return ob.layerTypes.audio;
} else if (lSource instanceof CompItem) {
return ob.layerTypes.precomp;
} else if (lSource.frameDuration < 1) {
if (lMainSource instanceof PlaceholderSource) {
return ob.layerTypes.pholderVideo;
} else if (lSource.name.toString().indexOf("].") !== -1) {
return ob.layerTypes.imageSeq;
} else {
return ob.layerTypes.video;
}
} else if (lSource.frameDuration === 1) {
if (lMainSource instanceof PlaceholderSource) {
return ob.layerTypes.pholderStill;
} else if (lMainSource.color) {
return ob.layerTypes.solid;
} else {
return ob.layerTypes.still;
}
}
}
return function (layerOb) {
try {
var curLayer, instanceOfArray, instanceOfArrayLength, result;
curLayer = layerOb;
instanceOfArray = [AVLayer, CameraLayer, LightLayer, ShapeLayer, TextLayer];
instanceOfArrayLength = instanceOfArray.length;
if (curLayer.guideLayer) {
return ob.layerTypes.guide;
} else if (curLayer.adjustmentLayer) {
return ob.layerTypes.adjustment;
} else if (curLayer.nullLayer) {
return ob.layerTypes.nullLayer;
}
var i;
for (i = 0; i < instanceOfArrayLength; i++) {
if (curLayer instanceof instanceOfArray[i]) {
result = instanceOfArray[i].name;
break;
}
}
if (result === "AVLayer") {
result = avLayerType(curLayer);
} else if (result === "CameraLayer") {
result = ob.layerTypes.camera;
} else if (result === "LightLayer") {
result = ob.layerTypes.light;
} else if (result === "ShapeLayer") {
result = ob.layerTypes.shape;
} else if (result === "TextLayer") {
result = ob.layerTypes.text;
}
return result;
} catch (err) {alert(err.line.toString + " " + err.toString()); }
};
}());
function prepareLayer(layerInfo, ind) {
var layerData = {};
var layerType = getLayerType(layerInfo);
if (layerType === ob.layerTypes.audio || layerType === ob.layerTypes.camera || layerType === ob.layerTypes.guide || layerType === ob.layerTypes.light || layerType === ob.layerTypes.adjustment || layerType === ob.layerTypes.pholderStill || layerType === ob.layerTypes.pholderVideo) {
layerData.isValid = false;
layerData.render = false;
}
if (layerInfo.enabled === false) {
layerData.enabled = false;
layerData.render = false;
}
layerData.ind = ind;
layerData.ty = layerType;
if (layerInfo.parent !== null) {
layerData.parent = layerInfo.parent.index - 1;
}
if (layerInfo.hasTrackMatte) {
switch (layerInfo.trackMatteType) {
case TrackMatteType.ALPHA:
layerData.tt = 1;
break;
case TrackMatteType.ALPHA_INVERTED:
layerData.tt = 2;
break;
case TrackMatteType.LUMA:
layerData.tt = 3;
break;
case TrackMatteType.LUMA_INVERTED:
layerData.tt = 4;
break;
}
} else if (layerInfo.isTrackMatte) {
if (layerInfo.isValid !== false) {
layerData.render = true;
layerData.td = 1;
}
}
return layerData;
}
function checkLayerSource(layerInfo, layerData) {
if (layerData.render === false) {
return;
}
var layerType = layerData.ty;
var sourceId;
if (layerType === ob.layerTypes.precomp) {
sourceId = bm_sourceHelper.checkCompSource(layerInfo, layerType);
if (sourceId !== false) {
layerData.refId = sourceId;
} else {
layerData.compId = bm_generalUtils.random(7);
bm_sourceHelper.setCompSourceId(layerInfo.source, layerData.compId);
}
} else if (layerType === ob.layerTypes.still) {
layerData.id = bm_sourceHelper.checkImageSource(layerInfo);
}
}
function renderLayer(layerOb) {
var layerInfo = layerOb.layer;
var layerData = layerOb.data;
var frameRate = layerOb.framerate;
if (layerData.render === false) {
bm_renderManager.renderLayerComplete();
return;
}
var lType = layerData.ty;
bm_transformHelper.exportTransform(layerInfo, layerData, frameRate);
bm_maskHelper.exportMasks(layerInfo, layerData, frameRate);
bm_timeremapHelper.exportTimeremap(layerInfo, layerData, frameRate);
if (lType === ob.layerTypes.shape) {
bm_shapeHelper.exportShape(layerInfo, layerData, frameRate);
//layerData.rectData = {l: 0, t: 0, b: 0, r: 0, w: 0, h: 0};
} else if (lType === ob.layerTypes.solid) {
layerData.width = layerInfo.source.width;
layerData.height = layerInfo.source.height;
layerData.color = bm_generalUtils.arrayRgbToHex(layerInfo.source.mainSource.color);
}
layerData.inPoint = layerInfo.inPoint * frameRate;
layerData.outPoint = layerInfo.outPoint * frameRate;
layerData.startTime = layerInfo.startTime * frameRate;
bm_renderManager.renderLayerComplete();
}
ob.prepareLayer = prepareLayer;
ob.checkLayerSource = checkLayerSource;
ob.renderLayer = renderLayer;
ob.getLayerType = getLayerType;
return ob;
}());