|
|
|
'use strict'; |
|
|
|
var utils = require('../utils'); |
|
|
|
|
|
|
|
|
|
|
|
module.exports = function(proto) { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
proto.mergeAdd = |
|
proto.addInput = |
|
proto.input = function(source) { |
|
var isFile = false; |
|
var isStream = false; |
|
|
|
if (typeof source !== 'string') { |
|
if (!('readable' in source) || !(source.readable)) { |
|
throw new Error('Invalid input'); |
|
} |
|
|
|
var hasInputStream = this._inputs.some(function(input) { |
|
return input.isStream; |
|
}); |
|
|
|
if (hasInputStream) { |
|
throw new Error('Only one input stream is supported'); |
|
} |
|
|
|
isStream = true; |
|
source.pause(); |
|
} else { |
|
var protocol = source.match(/^([a-z]{2,}):/i); |
|
isFile = !protocol || protocol[0] === 'file'; |
|
} |
|
|
|
this._inputs.push(this._currentInput = { |
|
source: source, |
|
isFile: isFile, |
|
isStream: isStream, |
|
options: utils.args() |
|
}); |
|
|
|
return this; |
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
proto.withInputFormat = |
|
proto.inputFormat = |
|
proto.fromFormat = function(format) { |
|
if (!this._currentInput) { |
|
throw new Error('No input specified'); |
|
} |
|
|
|
this._currentInput.options('-f', format); |
|
return this; |
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
proto.withInputFps = |
|
proto.withInputFPS = |
|
proto.withFpsInput = |
|
proto.withFPSInput = |
|
proto.inputFPS = |
|
proto.inputFps = |
|
proto.fpsInput = |
|
proto.FPSInput = function(fps) { |
|
if (!this._currentInput) { |
|
throw new Error('No input specified'); |
|
} |
|
|
|
this._currentInput.options('-r', fps); |
|
return this; |
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
proto.nativeFramerate = |
|
proto.withNativeFramerate = |
|
proto.native = function() { |
|
if (!this._currentInput) { |
|
throw new Error('No input specified'); |
|
} |
|
|
|
this._currentInput.options('-re'); |
|
return this; |
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
proto.setStartTime = |
|
proto.seekInput = function(seek) { |
|
if (!this._currentInput) { |
|
throw new Error('No input specified'); |
|
} |
|
|
|
this._currentInput.options('-ss', seek); |
|
|
|
return this; |
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
proto.loop = function(duration) { |
|
if (!this._currentInput) { |
|
throw new Error('No input specified'); |
|
} |
|
|
|
this._currentInput.options('-loop', '1'); |
|
|
|
if (typeof duration !== 'undefined') { |
|
this.duration(duration); |
|
} |
|
|
|
return this; |
|
}; |
|
}; |
|
|