CommandBuilder   A
last analyzed

Complexity

Total Complexity 5

Size/Duplication

Total Lines 59
Duplicated Lines 0 %

Importance

Changes 2
Bugs 1 Features 0
Metric Value
eloc 19
c 2
b 1
f 0
dl 0
loc 59
rs 10
wmc 5

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 6 1
A build() 0 15 3
A getInputOptions() 0 6 1
1
<?php
2
3
/**
4
 * This file is part of the PHP-FFmpeg-video-streaming package.
5
 *
6
 * (c) Amin Yazdanpanah <[email protected]>
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
13
namespace Streaming;
14
15
16
use FFMpeg\Format\VideoInterface;
17
18
class CommandBuilder
19
{
20
    /** @var Media */
21
    private $media;
22
23
    /** @var \FFMpeg\Filters\FiltersCollection */
24
    private $filters;
25
26
    /** @var \FFMpeg\Driver\FFMpegDriver */
27
    private $driver;
28
29
    /** @var VideoInterface */
30
    private $format;
31
32
    /**
33
     * CommandBuilder constructor.
34
     * @param Media $media
35
     * @param VideoInterface $format
36
     */
37
    public function __construct(Media $media, VideoInterface $format)
38
    {
39
        $this->media = $media;
40
        $this->filters = $this->media->getFiltersCollection();
0 ignored issues
show
Bug introduced by
The method getFiltersCollection() does not exist on Streaming\Media. Since you implemented __call, consider adding a @method annotation. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

40
        /** @scrutinizer ignore-call */ 
41
        $this->filters = $this->media->getFiltersCollection();
Loading history...
Documentation Bug introduced by
It seems like $this->media->getFiltersCollection() of type FFMpeg\Media\Video or Streaming\Media is incompatible with the declared type FFMpeg\Filters\FiltersCollection of property $filters.

Our type inference engine has found an assignment to a property that is incompatible with the declared type of that property.

Either this assignment is in error or the assigned type should be added to the documentation/type hint for that property..

Loading history...
41
        $this->driver = $this->media->getFFMpegDriver();
0 ignored issues
show
Bug introduced by
The method getFFMpegDriver() does not exist on Streaming\Media. Since you implemented __call, consider adding a @method annotation. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

41
        /** @scrutinizer ignore-call */ 
42
        $this->driver = $this->media->getFFMpegDriver();
Loading history...
Documentation Bug introduced by
It seems like $this->media->getFFMpegDriver() of type FFMpeg\Media\Video or Streaming\Media is incompatible with the declared type FFMpeg\Driver\FFMpegDriver of property $driver.

Our type inference engine has found an assignment to a property that is incompatible with the declared type of that property.

Either this assignment is in error or the assigned type should be added to the documentation/type hint for that property..

Loading history...
42
        $this->format = $format;
43
    }
44
45
    /**
46
     * @param VideoInterface $format
47
     * @param string $path
48
     * @return array
49
     * @TODO: optimize this function
50
     */
51
    public function build(VideoInterface $format, string $path): array
52
    {
53
        $commands = [];
54
55
        foreach ($this->filters as $filter) {
56
            $commands = array_merge($this->getInputOptions(), $filter->apply($this->media->baseMedia(), $format));
57
        }
58
59
        if ($this->driver->getConfiguration()->has('ffmpeg.threads')) {
60
            $commands = array_merge($commands, ['-threads', $this->driver->getConfiguration()->get('ffmpeg.threads')]);
61
        }
62
63
        array_push($commands, $path);
64
65
        return $commands;
66
    }
67
68
    /**
69
     * @return array
70
     */
71
    private function getInputOptions(): array
72
    {
73
        $path = $this->media->getPathfile();
0 ignored issues
show
Bug introduced by
The method getPathfile() does not exist on Streaming\Media. Since you implemented __call, consider adding a @method annotation. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

73
        /** @scrutinizer ignore-call */ 
74
        $path = $this->media->getPathfile();
Loading history...
74
        $input_options = Utiles::arrayToFFmpegOpt($this->media->getInputOptions());
75
76
        return array_merge($input_options, $this->format->getInitialParameters() ?? [], ['-y', '-i', $path]);
77
    }
78
}