2023-12-15 Fred Gleason <fredg@paravelsystems.com>

* Modified the call parameters of the 'Output Stream Meter Levels'
	['MO'] CAE command to use play session serial numbers rather than
	card and stream numbers.
	* Fixed a regression in rdcartslots(1) that broke audio meters.

Signed-off-by: Fred Gleason <fredg@paravelsystems.com>
This commit is contained in:
Fred Gleason
2023-12-15 11:41:33 -05:00
parent 81c6ad8d1e
commit 35299494a4
7 changed files with 81 additions and 49 deletions

View File

@@ -1142,6 +1142,10 @@ void MainObject::updateMeters()
Driver *dvr=GetDriver(i);
if(dvr!=NULL) {
for(int j=0;j<RD_MAX_PORTS;j++) {
//
// Input Port Statuses
//
if(dvr->getInputStatus(i,j)!=port_status[i][j]) {
port_status[i][j]=dvr->getInputStatus(i,j);
if(port_status[i][j]) {
@@ -1151,6 +1155,10 @@ void MainObject::updateMeters()
cae_server->sendCommand(QString::asprintf("IS %d %d 1!",i,j));
}
}
//
// Port Meters
//
if(dvr->getInputMeters(i,j,levels)) {
SendMeterLevelUpdate("I",i,j,levels);
}
@@ -1158,12 +1166,25 @@ void MainObject::updateMeters()
SendMeterLevelUpdate("O",i,j,levels);
}
}
//
// Output Positions
//
dvr->getOutputPosition(i,positions);
SendMeterPositionUpdate(i,positions);
for(int j=0;j<RD_MAX_STREAMS;j++) {
if(dvr->getStreamOutputMeters(i,j,levels)) {
SendStreamMeterLevelUpdate(i,j,levels);
}
//
// Output Stream Meters
//
for(QMap<uint64_t,PlaySession *>::const_iterator it=play_sessions.begin();
it!=play_sessions.end();it++) {
if((int)it.value()->cardNumber()==i) {
if(dvr->getStreamOutputMeters(it.value()->cardNumber(),
it.value()->streamNumber(),
levels)) {
SendStreamMeterLevelUpdate(it.value(),levels);
}
}
}
}
}
@@ -1587,18 +1608,15 @@ void MainObject::SendMeterLevelUpdate(const QString &type,int cardnum,
}
void MainObject::SendStreamMeterLevelUpdate(int cardnum,int streamnum,
short levels[])
void MainObject::SendStreamMeterLevelUpdate(PlaySession *psess,short levels[])
{
QList<int> ids=cae_server->connectionIds();
for(int l=0;l<ids.size();l++) {
if((cae_server->meterPort(ids.at(l))>0)&&
cae_server->metersEnabled(ids.at(l),cardnum)) {
SendMeterUpdate(QString::asprintf("MO %d %d %d %d",
cardnum,streamnum,levels[0],levels[1]),ids.at(l));
}
if((cae_server->meterPort(psess->socketDescriptor())>0)&&
cae_server->metersEnabled(psess->socketDescriptor(),psess->cardNumber())) {
SendMeterUpdate(QString::asprintf("MO %u %d %d",psess->serialNumber(),
levels[0],levels[1]),
psess->socketDescriptor());
}
}

View File

@@ -122,7 +122,7 @@ class MainObject : public QObject
void ClearDriverEntries() const;
void SendMeterLevelUpdate(const QString &type,int cardnum,int portnum,
short levels[]);
void SendStreamMeterLevelUpdate(int cardnum,int streamnum,short levels[]);
void SendStreamMeterLevelUpdate(PlaySession *psess,short levels[]);
void SendMeterPositionUpdate(int cardnum,unsigned pos[]);
void SendMeterOutputStatusUpdate();
void SendMeterOutputStatusUpdate(int card,int port,int stream);