Added resolution modulus and width or height scale
Added the ability to select the resolution modulus and a scale mode based on width or height
This commit is contained in:
parent
d7c7e74c25
commit
59eb6f3541
1 changed files with 37 additions and 3 deletions
|
|
@ -24,6 +24,8 @@ abstract class DefaultVideo extends DefaultAudio implements Interactive, Resampl
|
||||||
{
|
{
|
||||||
const RESIZEMODE_FIT = 'fit';
|
const RESIZEMODE_FIT = 'fit';
|
||||||
const RESIZEMODE_INSET = 'inset';
|
const RESIZEMODE_INSET = 'inset';
|
||||||
|
const RESIZEMODE_SCALE_WIDTH = 'width';
|
||||||
|
const RESIZEMODE_SCALE_HEIGHT = 'height';
|
||||||
|
|
||||||
protected $width;
|
protected $width;
|
||||||
protected $height;
|
protected $height;
|
||||||
|
|
@ -32,6 +34,7 @@ abstract class DefaultVideo extends DefaultAudio implements Interactive, Resampl
|
||||||
protected $videoCodec;
|
protected $videoCodec;
|
||||||
protected $GOPsize = 25;
|
protected $GOPsize = 25;
|
||||||
protected $kiloBitrate = 1000;
|
protected $kiloBitrate = 1000;
|
||||||
|
protected $modulus = 16;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the width setting.
|
* Returns the width setting.
|
||||||
|
|
@ -82,9 +85,18 @@ abstract class DefaultVideo extends DefaultAudio implements Interactive, Resampl
|
||||||
*/
|
*/
|
||||||
public function getComputedDimensions($originalWidth, $originalHeight)
|
public function getComputedDimensions($originalWidth, $originalHeight)
|
||||||
{
|
{
|
||||||
|
$originalRatio = $originalWidth / $originalHeight;
|
||||||
|
|
||||||
switch ($this->getResizeMode()) {
|
switch ($this->getResizeMode()) {
|
||||||
|
case self::RESIZEMODE_SCALE_WIDTH:
|
||||||
|
$height = $this->height;
|
||||||
|
$width = round($originalRatio * $this->height);
|
||||||
|
break;
|
||||||
|
case self::RESIZEMODE_SCALE_HEIGHT:
|
||||||
|
$width = $this->width;
|
||||||
|
$height = round($this->width / $originalRatio);
|
||||||
|
break;
|
||||||
case self::RESIZEMODE_INSET:
|
case self::RESIZEMODE_INSET:
|
||||||
$originalRatio = $originalWidth / $originalHeight;
|
|
||||||
$targetRatio = $this->width / $this->height;
|
$targetRatio = $this->width / $this->height;
|
||||||
|
|
||||||
if ($targetRatio > $originalRatio) {
|
if ($targetRatio > $originalRatio) {
|
||||||
|
|
@ -119,11 +131,11 @@ abstract class DefaultVideo extends DefaultAudio implements Interactive, Resampl
|
||||||
*/
|
*/
|
||||||
public function setResizeMode($mode)
|
public function setResizeMode($mode)
|
||||||
{
|
{
|
||||||
if ( ! in_array($mode, array(self::RESIZEMODE_FIT, self::RESIZEMODE_INSET))) {
|
if ( ! in_array($mode, array(self::RESIZEMODE_FIT, self::RESIZEMODE_INSET, self::RESIZEMODE_SCALE_WIDTH, self::RESIZEMODE_SCALE_HEIGHT))) {
|
||||||
throw new InvalidArgumentException(
|
throw new InvalidArgumentException(
|
||||||
'Resize mode `%s` is not valid , avalaible values are %s',
|
'Resize mode `%s` is not valid , avalaible values are %s',
|
||||||
$mode,
|
$mode,
|
||||||
implode(', ', array(self::RESIZEMODE_FIT, self::RESIZEMODE_INSET))
|
implode(', ', array(self::RESIZEMODE_FIT, self::RESIZEMODE_INSET, self::RESIZEMODE_SCALE_WIDTH, self::RESIZEMODE_SCALE_HEIGHT))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -230,4 +242,26 @@ abstract class DefaultVideo extends DefaultAudio implements Interactive, Resampl
|
||||||
{
|
{
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used to determine what resolutions sizes are valid.
|
||||||
|
*
|
||||||
|
* @param int $value
|
||||||
|
*/
|
||||||
|
public function setModulus($value)
|
||||||
|
{
|
||||||
|
if(!in_array($value, array(2, 4, 8, 16))){
|
||||||
|
throw new InvalidArgumentException('Wrong modulus division value. Valid values are 2, 4, 8 or 16');
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->modulus = $value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
public function getModulus()
|
||||||
|
{
|
||||||
|
return $this->modulus;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue