1
0
This repository has been archived on 2021-04-26. You can view files and clone it, but cannot push or open issues or pull requests.
gallery3-contrib/3.0/modules/transcode/controllers/admin_transcode.php
2010-11-22 21:33:50 +00:00

167 lines
7.0 KiB
PHP

<?php defined("SYSPATH") or die("No direct script access.") ?><?php
class Admin_Transcode_Controller extends Admin_Controller {
public function verify() {
$data = array();
$data['success'] = false;
if (($val = transcode::verify_path($_REQUEST['ffmpeg_path'])) > 0) {
module::set_var("transcode", "ffmpeg_path", $_REQUEST['ffmpeg_path']);
$data['success'] = true;
$data['codecs'] = self::_get_supported_audio_codecs($_REQUEST['ffmpeg_path']);
}
else {
$error = "";
switch ($val) {
case 0: $error = "Empty file path provided"; break;
case -1: $error = "File does not exist"; break;
case -2: $error = "Path is a directory"; break;
default: $error = "Unspecified error";
}
$data['error'] = $error;
}
echo json_encode($data);
}
public function index() {
$form = $this->_get_form();
if (request::method() == "post") {
access::verify_csrf();
if ($form->validate()) {
module::set_var("transcode", "ffmpeg_path", $_POST['ffmpeg_path']);
module::set_var("transcode", "ffmpeg_flags", $_POST['ffmpeg_flags']);
module::set_var("transcode", "audio_codec", $_POST['audio_codec']);
module::set_var("transcode", "ffmpeg_audio_kbits", (isset($_POST['ffmpeg_audio_kbits']) ? $_POST['ffmpeg_audio_kbits'] : false));
module::set_var("transcode", "resolution_240p", (isset($_POST['resolution_240p']) ? $_POST['resolution_240p'] : false));
module::set_var("transcode", "resolution_360p", (isset($_POST['resolution_360p']) ? $_POST['resolution_360p'] : false));
module::set_var("transcode", "resolution_480p", (isset($_POST['resolution_480p']) ? $_POST['resolution_480p'] : false));
module::set_var("transcode", "resolution_576p", (isset($_POST['resolution_576p']) ? $_POST['resolution_576p'] : false));
module::set_var("transcode", "resolution_720p", (isset($_POST['resolution_720p']) ? $_POST['resolution_720p'] : false));
module::set_var("transcode", "resolution_1080p", (isset($_POST['resolution_1080p']) ? $_POST['resolution_1080p'] : false));
message::success(t("Settings have been saved"));
url::redirect("admin/transcode");
}
else {
message::error(t("There was a problem with the submitted form. Please check your values and try again."));
}
}
print $this->_get_view();
}
private function _get_view($form = null) {
$v = new Admin_View("admin.html");
$v->page_title = t("Gallery 3 :: Manage Transcoding Settings");
$v->content = new View("admin_transcode.html");
$v->content->form = empty($form) ? $this->_get_form() : $form;
return $v;
}
private function _get_supported_audio_codecs($given_path = null) {
$flv_compatible_codecs = array("aac" => "aac", "adpcm_swf" => "adpcm_swf", "mp3" => "libmp3lame");
if ($given_path)
$ffmpegPath = $given_path;
else
$ffmpegPath = module::get_var("transcode", "ffmpeg_path", transcode::whereis("ffmpeg"));
$legacy = false;
exec($ffmpegPath . " -codecs", $codecs);
if (count($codecs) == 0) {
$legacy = true;
exec($ffmpegPath . " -formats 2>&1", $codecs);
}
$search = true;
if ($legacy) $search = false;
$found = array();
foreach ($codecs as $line) {
if ($search) {
if (strpos($line, "DEA")) {
$bits = preg_split("/[\s]+/", $line);
if (in_array($bits[2], $flv_compatible_codecs)) {
$key = array_search($bits[2], $flv_compatible_codecs);
$found[$key] = $flv_compatible_codecs[$key];
}
}
}
if ($legacy && strpos($line, "Codecs:") !== false) {
$search = true;
continue;
}
if ($legacy && $search && strpos($line, "Bitstream filters:")) {
$search = false;
continue;
}
}
return $found;
}
private function _get_form() {
$form = new Forge("admin/transcode", "", "post", array("id" => "g-admin-transcode-form"));
$group = $form->group("system")->label(t("System"));
$ffmpegPath = transcode::whereis("ffmpeg");
$codecs = $this->_get_supported_audio_codecs();
$group ->input("ffmpeg_path")
->id("ffmpeg_path")
->label(t("Path to ffmpeg binary:"))
->value(module::get_var("transcode", "ffmpeg_path", $ffmpegPath))
->callback("transcode::verify_ffmpeg_path")
->error_messages("required", t("You must enter the path to ffmpeg"))
->error_messages("invalid", t("File does not exist"))
->error_messages("is_dir", t("File is a directory"))
->message("Auto detected ffmpeg here: " . $ffmpegPath . "<br />Click <a href='javascript:verifyffmpeg();'>here</a> to verify ffmpeg path and continue.");
$group ->input("ffmpeg_flags")
->id("ffmpeg_flags")
->label(t("Extra ffmpeg flags:"))
->value(module::get_var("transcode", "ffmpeg_flags"));
$group ->dropdown("audio_codec")
->id("audio_codec")
->label(t("Audio codec to use:"))
->options($codecs)
->selected(module::get_var("transcode", "audio_codec"));
$group ->checkbox("ffmpeg_audio_kbits")
->label(t("Send audio bitrate as kbits instead of bits/s"))
->checked(module::get_var("transcode", "ffmpeg_audio_kbits"));
$group = $form->group("resolutions")->label(t("Resolutions"));
$group ->checkbox("resolution_240p")
->label("240p")
->checked(module::get_var("transcode", "resolution_240p"));
$group ->checkbox("resolution_360p")
->label("360p")
->checked(module::get_var("transcode", "resolution_360p"));
$group ->checkbox("resolution_480p")
->label("480p")
->checked(module::get_var("transcode", "resolution_480p"));
$group ->checkbox("resolution_576p")
->label("576p")
->checked(module::get_var("transcode", "resolution_576p"));
$group ->checkbox("resolution_720p")
->label("720p")
->checked(module::get_var("transcode", "resolution_720p"));
$group ->checkbox("resolution_1080p")
->label("1080p")
->checked(module::get_var("transcode", "resolution_1080p"));
$form->submit("submit")->value(t("Save"));
return $form;
}
}