Files
zoneminder/web/app/Controller/MonitorsController.php
Kyle Johnson f385db2d80 Moved the scaling of streams from JS to PHP
The Monitor model is now smart enough to change the stream's scale.
It also has the option of not scaling at all (in the case of the
single monitor view).
2013-09-24 12:54:37 -04:00

185 lines
5.5 KiB
PHP
Executable File

<?php
class MonitorsController extends AppController {
public $helpers = array('Js'=>array('Jquery'));
public function index() {
$zmBandwidth = $this->Cookie->read('zmBandwidth');
$monitoroptions = array('fields' => array('Name', 'Id', 'Function', 'Enabled', 'Sequence', 'Function', 'Width', 'StreamReplayBuffer'), 'order' => 'Sequence ASC', 'recursive' => -1);
$monitors = $this->Monitor->find('all', $monitoroptions);
foreach ($monitors as $key => $value) {
$monitors[$key]['img'] = $this->Monitor->getStreamSrc($value['Monitor']['Id'], $zmBandwidth, $value['Monitor']['StreamReplayBuffer'], $value['Monitor']['Function'], $value['Monitor']['Enabled'], $value['Monitor']['Name'], $value['Monitor']['Width']);
}
$this->set('monitors', $monitors);
}
public function view($id = null) {
if (!$id) {
throw new NotFoundException(__('Invalid monitor'));
}
$monitor = $this->Monitor->findById($id);
if (!$monitor) {
throw new NotFoundException(__('Invalid monitor'));
}
$this->set('monitor', $monitor);
$zmBandwidth = $this->Cookie->read('zmBandwidth');
$buffer = $monitor['Monitor']['StreamReplayBuffer'];
$this->set('streamSrc', $this->Monitor->getStreamSrc($id, $zmBandwidth, $buffer, $monitor['Monitor']['Function'], $monitor['Monitor']['Enabled'], $monitor['Monitor']['Name'], $monitor['Monitor']['Width'], false));
}
public function edit($id = null) {
if (!$id) {
throw new NotFoundException(__('Invalid monitor'));
}
$monitor = $this->Monitor->findById($id);
if (!$monitor) {
throw new NotFoundException(__('Invalid monitor'));
}
$this->set('monitor', $monitor['Monitor']);
$typeoptions = array(
'Local' => 'Local',
'Remote' => 'Remote',
'File' => 'File',
'Ffmpeg' => 'Ffmpeg'
);
$this->set('typeoptions', $typeoptions);
$functionoptions = array(
'Modect' => 'Modect',
'Monitor' => 'Monitor',
'Record' => 'Record',
'None' => 'None',
'Nodect' => 'Nodect',
'Mocord' => 'Mocord'
);
$this->set('functionoptions', $functionoptions);
$protocoloptions = array(
'rtsp' => 'RTSP',
'http' => 'HTTP'
);
$this->set('protocoloptions', $protocoloptions);
$methodoptions = array(
'simple' => 'Simple',
'regexp' => 'Regexp'
);
$this->set('methodoptions', $methodoptions);
$optionsColours = array(
1 => '8 bit grayscale',
3 => '24 bit color',
4 => '32 bit color'
);
$this->set('optionsColours', $optionsColours);
$channeloptions = array();
for ($i=1; $i<32; $i++) {
array_push($channeloptions, $i);
}
$this->set('channeloptions', $channeloptions);
$formatoptions = array(
255 => "PAL",
45056 => "NTSC",
1 => "PAL B",
2 => "PAL B1",
4 => "PAL G",
8 => "PAL H",
16 => "PAL I",
32 => "PAL D",
64 => "PAL D1",
128 => "PAL K",
256 => "PAL M",
512 => "PAL N",
1024 => "PAL Nc",
2048 => "PAL 60",
4096 => "NTSC M",
8192 => "NTSC M JP",
16384 => "NTSC 443",
32768 => "NTSC M KR",
65536 => "SECAM B",
131072 => "SECAM D",
262144 => "SECAM G",
524288 => "SECAM H",
1048576 => "SECAM K",
2097152 => "SECAM K1",
4194304 => "SECAM L",
8388608 => "SECAM LC",
16777216 => "ATSC 8 VSB",
33554432 => "ATSC 16 VSB"
);
$this->set('formatoptions', $formatoptions);
$optionsPalette = array(
0 => 'Auto',
1497715271 => 'Gray',
877807426 => 'BGR32',
876758866 => 'RGB32',
861030210 => 'BGR24',
859981650 => 'RGB24',
1448695129 => '*YUYV',
1195724874 => '*JPEG',
1196444237 => '*MJPEG',
875836498 => '*RGB444',
1329743698 => '*RGB555',
1346520914 => '*RGB565',
1345466932 => '*YUV422P',
1345401140 => '*YUV411P',
875836505 => '*YUV444',
961959257 => '*YUV410',
842093913 => '*YUV420'
);
$this->set('optionsPalette', $optionsPalette);
$optionsMethod = array(
'v4l2' => 'Video For Linux 2'
);
$this->set('optionsMethod', $optionsMethod);
$this->set('linkedMonitors', $this->Monitor->find('list', array('fields' => array('Id', 'Name'))));
if ($this->request->is('put') || $this->request->is('post')) {
$this->Monitor->id = $id;
if ($this->Monitor->save($this->request->data)) {
$this->Session->setFlash('Your monitor has been updated.');
$this->redirect(array('action' => 'index'));
} else {
$this->Session->setFlash('Unable to update your monitor.');
}
}
if (!$this->request->data) {
$this->request->data = $monitor;
}
}
public function add() {
if ($this->request->is('post')) {
$this->Monitor->create();
if ($this->Monitor->save($this->request->data)) {
$this->Session->setFlash('Your monitor has been created.');
$this->redirect(array('action' => 'index'));
} else {
$this->Session->setFlash('Unable to create your monitor.');
}
}
}
public function reorder() {
foreach ($this->data['Monitor'] as $key => $value) {
$this->Monitor->id = $value;
$this->Monitor->saveField('Sequence', $key+1);
}
exit();
}
}
?>