2018-06-16 Fred Gleason <fredg@paravelsystems.com>

* Added a 'TranscodingDelay=' parameter to the '[Tuning]' section
	of rd.conf(5).
This commit is contained in:
Fred Gleason
2018-06-16 13:39:03 +00:00
parent 7b40f8b945
commit 32714fb6f7
14 changed files with 42 additions and 13 deletions

View File

@@ -58,9 +58,10 @@
#define STAGE2_XFER_SIZE 2048
#define STAGE2_BUFFER_SIZE 49152
RDAudioConvert::RDAudioConvert(const QString &station_name,QObject *parent)
RDAudioConvert::RDAudioConvert(RDConfig *config,QObject *parent)
: QObject(parent)
{
conv_config=config;
conv_start_point=-1;
conv_end_point=-1;
conv_speed_ratio=1.0;
@@ -68,7 +69,7 @@ RDAudioConvert::RDAudioConvert(const QString &station_name,QObject *parent)
conv_settings=NULL;
conv_src_wavedata=new RDWaveData();
conv_dst_wavedata=NULL;
RDLibraryConf *conf=new RDLibraryConf(station_name,0);
RDLibraryConf *conf=new RDLibraryConf(config->stationName(),0);
conv_src_converter=conf->srcConverter();
delete conf;
@@ -658,7 +659,7 @@ RDAudioConvert::ErrorCode RDAudioConvert::Stage1Mpeg(const QString &dstfile,
return RDAudioConvert::ErrorFormatError;
}
memmove(buffer,mad_stream.next_frame,left_over);
usleep(conv_config->transcodingDelay());
}
memset(buffer+left_over,0,MAD_BUFFER_GUARD);
mad_stream_buffer(&mad_stream,buffer,MAD_BUFFER_GUARD+left_over);
@@ -888,6 +889,7 @@ RDAudioConvert::ErrorCode RDAudioConvert::Stage1SndFile(const QString &dstfile,
if((end-start)<buffer_size) {
buffer_size=end-start;
}
usleep(conv_config->transcodingDelay());
}
delete buffer;
sf_close(sf_dst);
@@ -1076,6 +1078,7 @@ RDAudioConvert::ErrorCode RDAudioConvert::Stage2Convert(const QString &srcfile,
sf_close(dst_sf);
return RDAudioConvert::ErrorNoSpace;
}
usleep(conv_config->transcodingDelay());
}
//
@@ -1099,6 +1102,7 @@ RDAudioConvert::ErrorCode RDAudioConvert::Stage2Convert(const QString &srcfile,
sf_close(dst_sf);
return RDAudioConvert::ErrorNoSpace;
}
usleep(conv_config->transcodingDelay());
}
delete st_conv;
}
@@ -1511,6 +1515,7 @@ RDAudioConvert::ErrorCode RDAudioConvert::Stage3Layer3(SNDFILE *src_sf,
return RDAudioConvert::ErrorNoSpace;
}
}
usleep(conv_config->transcodingDelay());
}
}
else {
@@ -1521,6 +1526,7 @@ RDAudioConvert::ErrorCode RDAudioConvert::Stage3Layer3(SNDFILE *src_sf,
::close(dst_fd);
return RDAudioConvert::ErrorNoSpace;
}
usleep(conv_config->transcodingDelay());
}
}
}
@@ -1650,6 +1656,7 @@ RDAudioConvert::ErrorCode RDAudioConvert::Stage3Layer2Wav(SNDFILE *src_sf,
else {
fprintf(stderr,"TwoLAME encode error\n");
}
usleep(conv_config->transcodingDelay());
}
if((s=twolame_encode_flush(lameopts,mpeg,2048))>=0) {
if(wave->writeWave(mpeg,s)!=s) {
@@ -1752,6 +1759,7 @@ RDAudioConvert::ErrorCode RDAudioConvert::Stage3Layer2(SNDFILE *src_sf,
else {
fprintf(stderr,"TwoLAME encode error\n");
}
usleep(conv_config->transcodingDelay());
}
if((s=twolame_encode_flush(lameopts,mpeg,2048))>=0) {
if(write(dst_fd,mpeg,s)!=s) {
@@ -1818,6 +1826,7 @@ RDAudioConvert::ErrorCode RDAudioConvert::Stage3Pcm16(SNDFILE *src_sf,
delete wave;
return RDAudioConvert::ErrorNoSpace;
}
usleep(conv_config->transcodingDelay());
}
delete sf_buffer;
wave->closeWave();
@@ -1867,6 +1876,7 @@ RDAudioConvert::ErrorCode RDAudioConvert::Stage3Pcm24(SNDFILE *src_sf,
delete wave;
return RDAudioConvert::ErrorNoSpace;
}
usleep(conv_config->transcodingDelay());
}
delete sf_buffer;
delete pcm24;

View File

@@ -36,6 +36,7 @@
#include <qobject.h>
#include "rdconfig.h"
#include "rdsettings.h"
#include "rdwavedata.h"
#include "rdwavefile.h"
@@ -48,7 +49,7 @@ class RDAudioConvert : public QObject
ErrorNoDestination=3,ErrorInvalidSource=4,ErrorInternal=5,
ErrorFormatNotSupported=6,ErrorNoDisc=7,ErrorNoTrack=8,
ErrorInvalidSpeed=9,ErrorFormatError=10,ErrorNoSpace=11};
RDAudioConvert(const QString &station_name,QObject *parent=0);
RDAudioConvert(RDConfig *config,QObject *parent=0);
~RDAudioConvert();
void setSourceFile(const QString &filename);
void setDestinationFile(const QString &filename);
@@ -117,6 +118,7 @@ class RDAudioConvert : public QObject
void *conv_mad_handle;
void *conv_lame_handle;
void *conv_twolame_handle;
RDConfig *conv_config;
#ifdef HAVE_MAD
void (*mad_stream_init)(struct mad_stream *);
void (*mad_frame_init)(struct mad_frame *);

View File

@@ -467,6 +467,12 @@ int RDConfig::realtimePriority()
return conf_realtime_priority;
}
int RDConfig::transcodingDelay() const
{
return conf_transcoding_delay;
}
// Don't use this method in application code, use RDTempDirectory()
QString RDConfig::tempDirectory()
{
@@ -633,6 +639,7 @@ void RDConfig::load()
conf_enable_mixer_logging=profile->boolValue("Caed","EnableMixerLogging");
conf_use_realtime=profile->boolValue("Tuning","UseRealtime",false);
conf_realtime_priority=profile->intValue("Tuning","RealtimePriority",9);
conf_transcoding_delay=profile->intValue("Tuning","TranscodingDelay");
conf_temp_directory=profile->stringValue("Tuning","TempDirectory","");
conf_sas_station=profile->stringValue("SASFilter","Station","");
conf_sas_matrix=profile->intValue("SASFilter","Matrix",0);
@@ -743,6 +750,7 @@ void RDConfig::clear()
conf_enable_mixer_logging=false;
conf_use_realtime=false;
conf_realtime_priority=9;
conf_transcoding_delay=0;
conf_temp_directory="";
conf_sas_station="";
conf_sas_matrix=-1;

View File

@@ -110,6 +110,7 @@ class RDConfig
#endif
bool useRealtime();
int realtimePriority();
int transcodingDelay() const;
QString tempDirectory();
QString sasStation() const;
int sasMatrix() const;
@@ -177,6 +178,7 @@ class RDConfig
QString conf_cae_logfile;
bool conf_enable_mixer_logging;
bool conf_use_realtime;
int conf_transcoding_delay;
int conf_realtime_priority;
QString conf_temp_directory;
QString conf_sas_station;

View File

@@ -660,7 +660,7 @@ unsigned RDFeed::postFile(RDStation *station,const QString &srcfile,Error *err,
// Convert Cut
//
tmpfile=GetTempFilename();
RDAudioConvert *conv=new RDAudioConvert(station->name(),this);
RDAudioConvert *conv=new RDAudioConvert(feed_config,this);
conv->setSourceFile(srcfile);
conv->setDestinationFile(tmpfile);
RDSettings *settings=new RDSettings();

View File

@@ -586,7 +586,7 @@ bool RDRenderer::ConvertAudio(const QString &srcfile,const QString &dstfile,
{
RDAudioConvert::ErrorCode err_code;
RDAudioConvert *conv=new RDAudioConvert(render_station->name(),this);
RDAudioConvert *conv=new RDAudioConvert(render_config,this);
conv->setSourceFile(srcfile);
conv->setDestinationFile(dstfile);
conv->setDestinationSettings(s);