From 1de948faba5aba5267f8dec3bbdd7f36e0237698 Mon Sep 17 00:00:00 2001 From: Romain Neutron Date: Thu, 5 Sep 2013 11:05:14 +0200 Subject: [PATCH] Add DisplayRatioFixer Frame filter --- CHANGELOG.md | 1 + .../Filters/Frame/DisplayRatioFixerFilter.php | 58 +++++++++++++++++++ .../Frame/DisplayRatioFixerFilterTest.php | 28 +++++++++ 3 files changed, 87 insertions(+) create mode 100644 src/FFMpeg/Filters/Frame/DisplayRatioFixerFilter.php create mode 100644 tests/FFMpeg/Tests/Filters/Frame/DisplayRatioFixerFilterTest.php diff --git a/CHANGELOG.md b/CHANGELOG.md index e519f4d..95840c8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ CHANGELOG * 0.3.3 (xx-xx-2013) * Add convenient Stream::getDimensions method to extract video dimension. + * Add DisplayRatioFixer Frame filter. * 0.3.2 (08-08-2013) diff --git a/src/FFMpeg/Filters/Frame/DisplayRatioFixerFilter.php b/src/FFMpeg/Filters/Frame/DisplayRatioFixerFilter.php new file mode 100644 index 0000000..0cc3cea --- /dev/null +++ b/src/FFMpeg/Filters/Frame/DisplayRatioFixerFilter.php @@ -0,0 +1,58 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace FFMpeg\Filters\Frame; + +use FFMpeg\Exception\RuntimeException; +use FFMpeg\Media\Frame; + +class DisplayRatioFixerFilter implements FrameFilterInterface +{ + /** @var integer */ + private $priority; + + public function __construct($priority = 0) + { + $this->priority = $priority; + } + + /** + * {@inheritdoc} + */ + public function getPriority() + { + return $this->priority; + } + + /** + * {@inheritdoc} + */ + public function apply(Frame $frame) + { + $dimensions = null; + $commands = array(); + + foreach ($frame->getVideo()->getStreams() as $stream) { + if ($stream->isVideo()) { + try { + $dimensions = $stream->getDimensions(); + $commands[] = '-s'; + $commands[] = $dimensions->getWidth() . 'x' . $dimensions->getHeight(); + break; + } catch (RuntimeException $e) { + + } + } + } + + return $commands; + } +} diff --git a/tests/FFMpeg/Tests/Filters/Frame/DisplayRatioFixerFilterTest.php b/tests/FFMpeg/Tests/Filters/Frame/DisplayRatioFixerFilterTest.php new file mode 100644 index 0000000..bb642b4 --- /dev/null +++ b/tests/FFMpeg/Tests/Filters/Frame/DisplayRatioFixerFilterTest.php @@ -0,0 +1,28 @@ + 'video', 'width' => 960, 'height' => 720)); + $streams = new StreamCollection(array($stream)); + + $video = $this->getVideoMock(__FILE__); + $video->expects($this->once()) + ->method('getStreams') + ->will($this->returnValue($streams)); + + $frame = new Frame($video, $this->getFFMpegDriverMock(), $this->getFFProbeMock(), new TimeCode(0, 0, 0, 0)); + $filter = new DisplayRatioFixerFilter(); + $this->assertEquals(array('-s', '960x720'), $filter->apply($frame)); + } +}