From 5814eb3085269b8b039170f52eb320b9c2d47618 Mon Sep 17 00:00:00 2001 From: Romain Neutron Date: Wed, 4 Sep 2013 19:50:38 +0200 Subject: [PATCH] Inject Video at Frame construction --- src/FFMpeg/Media/Frame.php | 18 ++++++++++++++++-- src/FFMpeg/Media/Video.php | 2 +- tests/FFMpeg/Tests/Media/FrameTest.php | 8 ++++---- tests/FFMpeg/Tests/TestCase.php | 10 ++++++++-- 4 files changed, 29 insertions(+), 9 deletions(-) diff --git a/src/FFMpeg/Media/Frame.php b/src/FFMpeg/Media/Frame.php index bfbed8f..55d4311 100644 --- a/src/FFMpeg/Media/Frame.php +++ b/src/FFMpeg/Media/Frame.php @@ -18,16 +18,30 @@ use FFMpeg\Driver\FFMpegDriver; use FFMpeg\FFProbe; use FFMpeg\Exception\RuntimeException; use FFMpeg\Coordinate\TimeCode; +use FFMpeg\Media\Video; class Frame extends AbstractMediaType { /** @var TimeCode */ private $timecode; + /** @var Video */ + private $video; - public function __construct($pathfile, FFMpegDriver $driver, FFProbe $ffprobe, TimeCode $timecode) + public function __construct(Video $video, FFMpegDriver $driver, FFProbe $ffprobe, TimeCode $timecode) { - parent::__construct($pathfile, $driver, $ffprobe); + parent::__construct($video->getPathfile(), $driver, $ffprobe); $this->timecode = $timecode; + $this->video = $video; + } + + /** + * Returns the video related to the frame. + * + * @return Video + */ + public function getVideo() + { + return $this->video; } /** diff --git a/src/FFMpeg/Media/Video.php b/src/FFMpeg/Media/Video.php index 77da940..006e346 100644 --- a/src/FFMpeg/Media/Video.php +++ b/src/FFMpeg/Media/Video.php @@ -159,6 +159,6 @@ class Video extends Audio */ public function frame(TimeCode $at) { - return new Frame($this->pathfile, $this->driver, $this->ffprobe, $at); + return new Frame($this, $this->driver, $this->ffprobe, $at); } } diff --git a/tests/FFMpeg/Tests/Media/FrameTest.php b/tests/FFMpeg/Tests/Media/FrameTest.php index a95df2b..c98cb87 100644 --- a/tests/FFMpeg/Tests/Media/FrameTest.php +++ b/tests/FFMpeg/Tests/Media/FrameTest.php @@ -20,7 +20,7 @@ class FrameTest extends AbstractMediaTestCase $ffprobe = $this->getFFProbeMock(); $timecode = $this->getTimeCodeMock(); - $frame = new Frame(__FILE__, $driver, $ffprobe, $timecode); + $frame = new Frame($this->getVideoMock(__FILE__), $driver, $ffprobe, $timecode); $this->assertSame($timecode, $frame->getTimeCode()); } @@ -30,7 +30,7 @@ class FrameTest extends AbstractMediaTestCase $ffprobe = $this->getFFProbeMock(); $timecode = $this->getTimeCodeMock(); - $frame = new Frame(__FILE__, $driver, $ffprobe, $timecode); + $frame = new Frame($this->getVideoMock(__FILE__), $driver, $ffprobe, $timecode); $this->assertInstanceOf('FFMpeg\Filters\Frame\FrameFilters', $frame->filters()); } @@ -50,7 +50,7 @@ class FrameTest extends AbstractMediaTestCase ->method('add') ->with($filter); - $frame = new Frame(__FILE__, $driver, $ffprobe, $timecode); + $frame = new Frame($this->getVideoMock(__FILE__), $driver, $ffprobe, $timecode); $frame->setFiltersCollection($filters); $frame->addFilter($filter); } @@ -75,7 +75,7 @@ class FrameTest extends AbstractMediaTestCase ->method('command') ->with($commands); - $frame = new Frame(__FILE__, $driver, $ffprobe, $timecode); + $frame = new Frame($this->getVideoMock(__FILE__), $driver, $ffprobe, $timecode); $this->assertSame($frame, $frame->save($pathfile, $accurate)); } diff --git a/tests/FFMpeg/Tests/TestCase.php b/tests/FFMpeg/Tests/TestCase.php index d347acd..0d6f906 100644 --- a/tests/FFMpeg/Tests/TestCase.php +++ b/tests/FFMpeg/Tests/TestCase.php @@ -122,10 +122,16 @@ class TestCase extends \PHPUnit_Framework_TestCase ->getMock(); } - protected function getVideoMock() + protected function getVideoMock($filename = null) { - return $this->getMockBuilder('FFMpeg\Media\Video') + $video = $this->getMockBuilder('FFMpeg\Media\Video') ->disableOriginalConstructor() ->getMock(); + + $video->expects($this->any()) + ->method('getFilename') + ->will($this->returnValue($filename)); + + return $video; } }