mirror of
https://github.com/ElvishArtisan/rivendell.git
synced 2025-10-11 09:03:40 +02:00
2020-10-13 Fred Gleason <fredg@paravelsystems.com>
* Added an 'ENCODER_PRESETS' table to the database. * Incremented the database verssion to 343. * Added an 'Encoder Profiles' dialog to rdadmin(1). * Removed static content dependencies from the WebGet service. * Refactored the WebGet service to use Encoder Profiles. Signed-off-by: Fred Gleason <fredg@paravelsystems.com>
This commit is contained in:
@@ -27,16 +27,10 @@ moc_%.cpp: %.h
|
||||
|
||||
install-exec-local:
|
||||
mkdir -p $(DESTDIR)@libexecdir@
|
||||
cp webget.html $(DESTDIR)@libexecdir@/
|
||||
cp webget.js $(DESTDIR)@libexecdir@/
|
||||
|
||||
install-exec-hook:
|
||||
if test -z $(DESTDIR) ; then chown root $(DESTDIR)$(libexecdir)/webget.cgi ; chmod 4755 $(DESTDIR)$(libexecdir)/webget.cgi ; fi
|
||||
|
||||
uninstall-local:
|
||||
rm -f $(DESTDIR)@libexecdir@/webget.html
|
||||
rm -f $(DESTDIR)@libexecdir@/webget.js
|
||||
|
||||
libexec_PROGRAMS = webget.cgi
|
||||
|
||||
dist_webget_cgi_SOURCES = webget.cpp webget.h
|
||||
@@ -45,9 +39,6 @@ nodist_webget_cgi_SOURCES = moc_webget.cpp
|
||||
|
||||
webget_cgi_LDADD = @LIB_RDLIBS@ -lsndfile @LIBVORBIS@ @QT4_LIBS@ @MUSICBRAINZ_LIBS@ -lQt3Support
|
||||
|
||||
EXTRA_DIST = webget.html\
|
||||
webget.js
|
||||
|
||||
CLEANFILES = *~\
|
||||
moc_*
|
||||
MAINTAINERCLEANFILES = *~\
|
||||
|
@@ -2,7 +2,7 @@
|
||||
//
|
||||
// Rivendell download utility
|
||||
//
|
||||
// (C) Copyright 2018 Fred Gleason <fredg@paravelsystems.com>
|
||||
// (C) Copyright 2018-2020 Fred Gleason <fredg@paravelsystems.com>
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License version 2 as
|
||||
@@ -40,6 +40,7 @@ MainObject::MainObject(QObject *parent)
|
||||
:QObject(parent)
|
||||
{
|
||||
QString err_msg;
|
||||
webget_post=NULL;
|
||||
|
||||
//
|
||||
// Open the Database
|
||||
@@ -78,8 +79,12 @@ MainObject::MainObject(QObject *parent)
|
||||
if(getenv("REQUEST_METHOD")==NULL) {
|
||||
XmlExit("missing REQUEST_METHOD",500,"webget.cpp",LINE_NUMBER);
|
||||
}
|
||||
if(QString(getenv("REQUEST_METHOD")).lower()=="get") {
|
||||
ServeForm();
|
||||
Exit(0);
|
||||
}
|
||||
if(QString(getenv("REQUEST_METHOD")).lower()!="post") {
|
||||
XmlExit("invalid web method",500,"webget.cpp",LINE_NUMBER);
|
||||
XmlExit("invalid web method",400,"webget.cpp",LINE_NUMBER);
|
||||
}
|
||||
if(getenv("REMOTE_ADDR")!=NULL) {
|
||||
webget_remote_address.setAddress(getenv("REMOTE_ADDR"));
|
||||
@@ -124,6 +129,8 @@ MainObject::MainObject(QObject *parent)
|
||||
|
||||
void MainObject::ripcConnectedData(bool state)
|
||||
{
|
||||
bool ok=false;
|
||||
|
||||
if(!state) {
|
||||
XmlExit("unable to connect to ripc service",500,"webget.cpp",LINE_NUMBER);
|
||||
Exit(0);
|
||||
@@ -134,33 +141,12 @@ void MainObject::ripcConnectedData(bool state)
|
||||
XmlExit("missing \"title\"",400,"webget.cpp",LINE_NUMBER);
|
||||
}
|
||||
|
||||
int channels;
|
||||
if(!webget_post->getValue("channels",&channels)) {
|
||||
XmlExit("missing \"channels\"",400,"webget.cpp",LINE_NUMBER);
|
||||
unsigned preset;
|
||||
if(!webget_post->getValue("preset",&preset,&ok)) {
|
||||
XmlExit("missing \"preset\"",400,"webget.cpp",LINE_NUMBER);
|
||||
}
|
||||
|
||||
int samprate;
|
||||
if(!webget_post->getValue("samprate",&samprate)) {
|
||||
XmlExit("missing \"samprate\"",400,"webget.cpp",LINE_NUMBER);
|
||||
}
|
||||
|
||||
int format;
|
||||
if(!webget_post->getValue("format",&format)) {
|
||||
XmlExit("missing \"format\"",400,"webget.cpp",LINE_NUMBER);
|
||||
}
|
||||
|
||||
int bitrate=0;
|
||||
if((format==RDSettings::MpegL2)||(format==RDSettings::MpegL3)) {
|
||||
if(!webget_post->getValue("bitrate",&bitrate)) {
|
||||
XmlExit("missing \"bitrate\"",400,"webget.cpp",LINE_NUMBER);
|
||||
}
|
||||
}
|
||||
|
||||
int quality=0;
|
||||
if(format==RDSettings::OggVorbis) {
|
||||
if(!webget_post->getValue("quality",&quality)) {
|
||||
XmlExit("missing \"quality\"",400,"webget.cpp",LINE_NUMBER);
|
||||
}
|
||||
if(!ok) {
|
||||
XmlExit("invalid \"preset\" value",400,"webget.cpp",LINE_NUMBER);
|
||||
}
|
||||
|
||||
unsigned cartnum=0;
|
||||
@@ -189,12 +175,13 @@ void MainObject::ripcConnectedData(bool state)
|
||||
// Audio Settings
|
||||
//
|
||||
RDSettings *settings=new RDSettings();
|
||||
settings->setFormat((RDSettings::Format)format);
|
||||
settings->setChannels(channels);
|
||||
settings->setSampleRate(samprate);
|
||||
settings->setBitRate(bitrate);
|
||||
settings->setQuality(quality);
|
||||
settings->setNormalizationLevel(-1);
|
||||
if(!settings->loadPreset(preset)) {
|
||||
printf("Content-type: text/html\n");
|
||||
printf("Status: 400\n");
|
||||
printf("\n");
|
||||
printf("no such preset!\n");
|
||||
Exit(0);
|
||||
}
|
||||
|
||||
//
|
||||
// Generate Metadata
|
||||
@@ -303,12 +290,75 @@ void MainObject::ripcConnectedData(bool state)
|
||||
Exit(200);
|
||||
}
|
||||
else {
|
||||
XmlExit(RDAudioConvert::errorText(conv_err),resp_code,"export.cpp",
|
||||
XmlExit(RDAudioConvert::errorText(conv_err),resp_code,"webget.cpp",
|
||||
LINE_NUMBER,conv_err);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void MainObject::ServeForm()
|
||||
{
|
||||
QString sql;
|
||||
RDSqlQuery *q=NULL;
|
||||
|
||||
printf("Content-type: text/html\n\n");
|
||||
|
||||
printf("<html>\n");
|
||||
printf(" <head>\n");
|
||||
printf(" <title>Rivendell Webget</title>\n");
|
||||
printf(" </head>\n");
|
||||
printf(" <body>\n");
|
||||
printf(" <form method=\"post\" action=\"webget.cgi\" enctype=\"application/x-www-form-urlencoded\">\n");
|
||||
printf(" <table style=\"margin: auto;padding: 10px 0\" cellpadding=\"0\" cellspacing=\"5\" border=\"0\">\n");
|
||||
printf(" <tr>\n");
|
||||
printf(" <td colspan=\"2\"><img src=\"logos/webget_logo.png\" border=\"0\"></td>\n");
|
||||
printf(" </tr>\n");
|
||||
printf(" <tr>\n");
|
||||
printf(" <td colspan=\"2\"><strong>Get audio from Rivendell</strong></td>\n");
|
||||
printf(" </tr>\n");
|
||||
printf(" <tr><td colspan=\"2\"><hr></td></tr>\n");
|
||||
printf(" <tr>\n");
|
||||
printf(" <td style=\"text-align: right\">Cart Title:</td>\n");
|
||||
printf(" <td><input type=\"text\" name=\"title\" size=\"40\" maxlength=\"255\"></td>\n");
|
||||
printf(" </tr>\n");
|
||||
printf(" <tr><td cellspan=\"2\"> </td></tr>\n");
|
||||
|
||||
printf(" <tr>\n");
|
||||
printf(" <td style=\"text-align: right\">Format:</td>\n");
|
||||
printf(" <td>\n");
|
||||
printf(" <select name=\"preset\" id=\"preset\">\n");
|
||||
sql=QString("select ")+
|
||||
"ID,"+ // 00
|
||||
"NAME "+ // 01
|
||||
"from ENCODER_PRESETS order by NAME";
|
||||
q=new RDSqlQuery(sql);
|
||||
while(q->next()) {
|
||||
printf(" <option value=\"%u\">%s</option>\n",
|
||||
q->value(0).toUInt(),q->value(1).toString().toUtf8().constData());
|
||||
}
|
||||
delete q;
|
||||
printf(" </select>\n");
|
||||
printf(" </td>\n");
|
||||
printf(" </tr>\n");
|
||||
printf(" <tr><td cellspan=\"2\"> </td></tr>\n");
|
||||
printf(" <td style=\"text-align: right\">User Name:</td>\n");
|
||||
printf(" <td><input type=\"text\" size=\"32\" maxsize=\"255\" name=\"LOGIN_NAME\"></td>\n");
|
||||
printf(" </tr>\n");
|
||||
printf(" <tr>\n");
|
||||
printf(" <td style=\"text-align: right\">Password:</td>\n");
|
||||
printf(" <td><input type=\"password\" size=\"32\" maxsize=\"32\" name=\"PASSWORD\"></td>\n");
|
||||
printf(" <tr><td cellspan=\"2\"> </td></tr>\n");
|
||||
printf(" <tr>\n");
|
||||
printf(" <td> </td>\n");
|
||||
printf(" <td><input type=\"submit\" value=\"OK\"></td>\n");
|
||||
printf(" </tr>\n");
|
||||
printf(" </table>\n");
|
||||
printf(" </form>\n");
|
||||
printf(" </body>\n");
|
||||
printf("</html>\n");
|
||||
}
|
||||
|
||||
|
||||
bool MainObject::Authenticate()
|
||||
{
|
||||
QString name;
|
||||
@@ -346,6 +396,7 @@ void MainObject::XmlExit(const QString &str,int code,const QString &srcfile,
|
||||
if(webget_post!=NULL) {
|
||||
delete webget_post;
|
||||
}
|
||||
|
||||
#ifdef RDXPORT_DEBUG
|
||||
if(srcline>0) {
|
||||
RDXMLResult(str+" \""+srcfile+"\" "+QString().sprintf("line %d",srcline),
|
||||
|
@@ -41,6 +41,7 @@ class MainObject : public QObject
|
||||
void ripcConnectedData(bool state);
|
||||
|
||||
private:
|
||||
void ServeForm();
|
||||
bool Authenticate();
|
||||
void Exit(int code);
|
||||
void XmlExit(const QString &msg,int code,
|
||||
|
@@ -1,106 +0,0 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>Rivendell Webget</title>
|
||||
<script src="webget.js" type="application/javascript"></script>
|
||||
</head>
|
||||
<body>
|
||||
<form method="post" action="webget.cgi" enctype="application/x-www-form-urlencoded">
|
||||
<table style="margin: auto;padding: 10px 0" cellpadding="0" cellspacing="5" border="0">
|
||||
<tr>
|
||||
<td colspan="2"><img src="logos/webget_logo.png" border="0"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2"><strong>Get audio from Rivendell</strong></td>
|
||||
</tr>
|
||||
<tr><td colspan="2"><hr></td></tr>
|
||||
<tr>
|
||||
<td style="text-align: right">Cart Title:</td>
|
||||
<td><input type="text" name="title" size="40" maxlength="255"></td>
|
||||
</tr>
|
||||
<tr><td cellspan="2"> </td></tr>
|
||||
<tr>
|
||||
<td style="text-align: right">Channels:</td>
|
||||
<td>
|
||||
<select name="channels" id="channels" value="1" onclick="formatChanged()">
|
||||
<option value="1">Monaural</option>
|
||||
<option value="2">Stereo</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: right">Sample Rate:</td>
|
||||
<td>
|
||||
<select name="samprate" id="samprate" onclick="samplerateChanged()">
|
||||
<option value="8000">8000 samples/sec</option>
|
||||
<option value="11025">11025 samples/sec</option>
|
||||
<option value="12000">12000 samples/sec</option>
|
||||
<option value="16000" selected>16000 samples/sec</option>
|
||||
<option value="22050">22050 samples/sec</option>
|
||||
<option value="24000">24000 samples/sec</option>
|
||||
<option value="32000">32000 samples/sec</option>
|
||||
<option value="44100">44100 samples/sec</option>
|
||||
<option value="48000">48000 samples/sec</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: right">Format:</td>
|
||||
<td>
|
||||
<select name="format" id="format" onclick="formatChanged()">
|
||||
<option value="4">FLAC</option>
|
||||
<option value="5">OggVorbis</option>
|
||||
<option value="2">MP2</option>
|
||||
<option value="3" selected>MP3</option>
|
||||
<option value="0">PCM16 [wav]</option>
|
||||
<option value="7">PCM24 [wav]</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: right">Bit Rate:</td>
|
||||
<td>
|
||||
<select name="bitrate" id="bitrate">
|
||||
<option value="16000" selected>16 kbit/sec</option>
|
||||
<option value="32000">32 kbit/sec</option>
|
||||
<option value="64000">64 kbit/sec</option>
|
||||
<option value="128000">128 kbit/sec</option>
|
||||
<option value="256000">256 kbit/sec</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: right">Quality:</td>
|
||||
<td>
|
||||
<select name="quality" id="quality" disabled>
|
||||
<option value="0">0 (lowest)</option>
|
||||
<option value="1">1</option>
|
||||
<option value="2" selected>2 (default)</option>
|
||||
<option value="3">3</option>
|
||||
<option value="4">4</option>
|
||||
<option value="5">5</option>
|
||||
<option value="6">6</option>
|
||||
<option value="7">7</option>
|
||||
<option value="8">8</option>
|
||||
<option value="9">9</option>
|
||||
<option value="10">0 (highest)</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr><td cellspan="2"> </td></tr>
|
||||
<td style="text-align: right">User Name:</td>
|
||||
<td><input type="text" size="32" maxsize="255" name="LOGIN_NAME"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: right">Password:</td>
|
||||
<td><input type="password" size="32" maxsize="32" name="PASSWORD"></td>
|
||||
<tr><td cellspan="2"> </td></tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td><input type="submit" value="OK"></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
@@ -1,187 +0,0 @@
|
||||
// webget.js
|
||||
//
|
||||
// (C) Copyright 2018 Fred Gleason <fredg@paravelsystems.com>
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License version 2 as
|
||||
// published by the Free Software Foundation.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public
|
||||
// License along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
//
|
||||
|
||||
function Id(id)
|
||||
{
|
||||
return document.getElementById(id);
|
||||
}
|
||||
|
||||
|
||||
function GetMpegVersion(samprate)
|
||||
{
|
||||
mpeg_ver=1.0;
|
||||
|
||||
switch(samprate) {
|
||||
case 32000:
|
||||
case 44100:
|
||||
case 48000:
|
||||
mpeg_ver=1.0;
|
||||
break;
|
||||
|
||||
case 16000:
|
||||
case 22050:
|
||||
case 24000:
|
||||
mpeg_ver=2.0;
|
||||
break;
|
||||
|
||||
case 8000:
|
||||
case 11025:
|
||||
case 12000:
|
||||
mpeg_ver=2.5;
|
||||
break;
|
||||
}
|
||||
return mpeg_ver;
|
||||
}
|
||||
|
||||
|
||||
function SetLayerII()
|
||||
{
|
||||
mpeg_ver=GetMpegVersion(parseInt(Id('samprate').value));
|
||||
if(mpeg_ver==1.0) {
|
||||
if(Id('channels').value=='1') {
|
||||
Id('bitrate').innerHTML=
|
||||
'<option value="32000">32 kbit/sec</option>\n'+
|
||||
'<option value="48000" selected>48 kbit/sec</option>\n'+
|
||||
'<option value="56000">56 kbit/sec</option>\n'+
|
||||
'<option value="64000">64 kbit/sec</option>\n'+
|
||||
'<option value="80000">80 kbit/sec</option>\n'+
|
||||
'<option value="96000">96 kbit/sec</option>\n'+
|
||||
'<option value="112000">112 kbit/sec</option>\n'+
|
||||
'<option value="128000">128 kbit/sec</option>\n'+
|
||||
'<option value="160000">160 kbit/sec</option>\n'+
|
||||
'<option value="192000">192 kbit/sec</option>\n';
|
||||
}
|
||||
else {
|
||||
Id('bitrate').innerHTML=
|
||||
'<option value="32000">32 kbit/sec</option>\n'+
|
||||
'<option value="48000" selected>48 kbit/sec</option>\n'+
|
||||
'<option value="56000">56 kbit/sec</option>\n'+
|
||||
'<option value="64000">64 kbit/sec</option>\n'+
|
||||
'<option value="80000">80 kbit/sec</option>\n'+
|
||||
'<option value="96000">96 kbit/sec</option>\n'+
|
||||
'<option value="112000">112 kbit/sec</option>\n'+
|
||||
'<option value="128000">128 kbit/sec</option>\n'+
|
||||
'<option value="160000">160 kbit/sec</option>\n'+
|
||||
'<option value="192000">192 kbit/sec</option>\n'+
|
||||
'<option value="224000">224 kbit/sec</option>\n'+
|
||||
'<option value="256000">256 kbit/sec</option>\n'+
|
||||
'<option value="320000">320 kbit/sec</option>\n'+
|
||||
'<option value="384000">384 kbit/sec</option>\n';
|
||||
}
|
||||
}
|
||||
if(mpeg_ver==2.0) {
|
||||
Id('bitrate').innerHTML=
|
||||
'<option value="8000">8 kbit/sec</option>\n'+
|
||||
'<option value="16000" selected>16 kbit/sec</option>\n'+
|
||||
'<option value="24000">24 kbit/sec</option>\n'+
|
||||
'<option value="32000">32 kbit/sec</option>\n'+
|
||||
'<option value="40000">40 kbit/sec</option>\n'+
|
||||
'<option value="48000">48 kbit/sec</option>\n'+
|
||||
'<option value="56000">56 kbit/sec</option>\n'+
|
||||
'<option value="64000">64 kbit/sec</option>\n'+
|
||||
'<option value="80000">80 kbit/sec</option>\n'+
|
||||
'<option value="96000">96 kbit/sec</option>\n'+
|
||||
'<option value="112000">112 kbit/sec</option>\n'+
|
||||
'<option value="128000">128 kbit/sec</option>\n'+
|
||||
'<option value="144000">144 kbit/sec</option>\n'+
|
||||
'<option value="160000">160 kbit/sec</option>\n';
|
||||
}
|
||||
if(mpeg_ver==2.5) {
|
||||
Id('bitrate').innerHTML=
|
||||
'<option value="8000">8 kbit/sec</option>\n'+
|
||||
'<option value="16000" selected>16 kbit/sec</option>\n'+
|
||||
'<option value="24000">24 kbit/sec</option>\n'+
|
||||
'<option value="32000">32 kbit/sec</option>\n'+
|
||||
'<option value="40000">40 kbit/sec</option>\n'+
|
||||
'<option value="48000">48 kbit/sec</option>\n'+
|
||||
'<option value="56000">56 kbit/sec</option>\n'+
|
||||
'<option value="64000">64 kbit/sec</option>\n';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function SetLayerIII()
|
||||
{
|
||||
mpeg_ver=GetMpegVersion(parseInt(Id('samprate').value));
|
||||
if(mpeg_ver==1.0) {
|
||||
Id('bitrate').innerHTML=
|
||||
'<option value="32000">32 kbit/sec</option>\n'+
|
||||
'<option value="40000" selected>40 kbit/sec</option>\n'+
|
||||
'<option value="48000">48 kbit/sec</option>\n'+
|
||||
'<option value="56000">56 kbit/sec</option>\n'+
|
||||
'<option value="64000">64 kbit/sec</option>\n'+
|
||||
'<option value="80000">80 kbit/sec</option>\n'+
|
||||
'<option value="96000">96 kbit/sec</option>\n'+
|
||||
'<option value="112000">112 kbit/sec</option>\n'+
|
||||
'<option value="128000">128 kbit/sec</option>\n'+
|
||||
'<option value="160000">160 kbit/sec</option>\n'+
|
||||
'<option value="192000">192 kbit/sec</option>\n'+
|
||||
'<option value="224000">224 kbit/sec</option>\n'+
|
||||
'<option value="256000">256 kbit/sec</option>\n'+
|
||||
'<option value="320000">320 kbit/sec</option>\n';
|
||||
}
|
||||
if(mpeg_ver==2.0) {
|
||||
Id('bitrate').innerHTML=
|
||||
'<option value="8000">8 kbit/sec</option>\n'+
|
||||
'<option value="16000" selected>16 kbit/sec</option>\n'+
|
||||
'<option value="24000">24 kbit/sec</option>\n'+
|
||||
'<option value="32000">32 kbit/sec</option>\n'+
|
||||
'<option value="40000">40 kbit/sec</option>\n'+
|
||||
'<option value="48000">48 kbit/sec</option>\n'+
|
||||
'<option value="56000">56 kbit/sec</option>\n'+
|
||||
'<option value="64000">64 kbit/sec</option>\n'+
|
||||
'<option value="80000">80 kbit/sec</option>\n'+
|
||||
'<option value="96000">96 kbit/sec</option>\n'+
|
||||
'<option value="112000">112 kbit/sec</option>\n'+
|
||||
'<option value="128000">128 kbit/sec</option>\n'+
|
||||
'<option value="144000">144 kbit/sec</option>\n'+
|
||||
'<option value="160000">160 kbit/sec</option>\n';
|
||||
}
|
||||
if(mpeg_ver==2.5) {
|
||||
Id('bitrate').innerHTML=
|
||||
'<option value="8000">8 kbit/sec</option>\n'+
|
||||
'<option value="16000" selected>16 kbit/sec</option>\n'+
|
||||
'<option value="24000">24 kbit/sec</option>\n'+
|
||||
'<option value="32000">32 kbit/sec</option>\n'+
|
||||
'<option value="40000">40 kbit/sec</option>\n'+
|
||||
'<option value="48000">48 kbit/sec</option>\n'+
|
||||
'<option value="56000">56 kbit/sec</option>\n'+
|
||||
'<option value="64000">64 kbit/sec</option>\n';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function samplerateChanged()
|
||||
{
|
||||
if(Id('format').value=='2') {
|
||||
SetLayerII();
|
||||
}
|
||||
if(Id('format').value=='3') {
|
||||
SetLayerIII();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function formatChanged()
|
||||
{
|
||||
Id('bitrate').disabled=
|
||||
!((Id('format').value=="2")||
|
||||
(Id('format').value=="3"));
|
||||
Id('quality').disabled=Id('format').value!="5";
|
||||
samplerateChanged();
|
||||
}
|
Reference in New Issue
Block a user