From 7242a007582b002b1d2b304dfb7359c41570089d Mon Sep 17 00:00:00 2001 From: Fred Gleason Date: Fri, 13 Oct 2023 14:47:29 -0400 Subject: [PATCH] 2023-10-13 Fred Gleason * Modified the 'Output Stream Meter Levels' [MO'] CAE command to use serial numbers rather than card/stream numbers. * Fixed a regression in rdcartslots(1) that broke audio level metering. Signed-off-by: Fred Gleason --- ChangeLog | 5 +++++ cae/cae.cpp | 6 ++++-- docs/apis/cae.xml | 17 +++-------------- lib/rdcae.cpp | 43 ++++++++++++++++++++++++++++++++++--------- lib/rdcae.h | 18 ++++++++++++++++-- lib/rdcartslot.cpp | 3 +-- lib/rdplay_deck.cpp | 6 ++++++ lib/rdplay_deck.h | 1 + 8 files changed, 70 insertions(+), 29 deletions(-) diff --git a/ChangeLog b/ChangeLog index 6d149671..5cd1f7f6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -24445,3 +24445,8 @@ * Fixed a regression in rdcartslots(1) that displayed red or green color around the edges of start buttons when the buttons were disabled. +2023-10-13 Fred Gleason + * Modified the 'Output Stream Meter Levels' [MO'] CAE command to + use serial numbers rather than card/stream numbers. + * Fixed a regression in rdcartslots(1) that broke audio level + metering. diff --git a/cae/cae.cpp b/cae/cae.cpp index 377430ab..5237a58e 100644 --- a/cae/cae.cpp +++ b/cae/cae.cpp @@ -1888,9 +1888,11 @@ void MainObject::SendStreamMeterLevelUpdate(int cardnum,int streamnum, for(QMap::const_iterator it=cae_play_sessions.begin(); it!=cae_play_sessions.end();it++) { if((it.value()->cardNumber()==cardnum)&& + (it.value()->streamNumber()==streamnum)&& (cae_server->meterPort(it.key())>0)) { - SendMeterUpdate(QString::asprintf("MO %d %d %d %d", - cardnum,streamnum,levels[0],levels[1]), + SendMeterUpdate(QString::asprintf("MO %d %d %d", + it.key().serialNumber(), + levels[0],levels[1]), it.key()); } } diff --git a/docs/apis/cae.xml b/docs/apis/cae.xml index f39cedb5..71c3d7e2 100644 --- a/docs/apis/cae.xml +++ b/docs/apis/cae.xml @@ -1331,29 +1331,18 @@ MO - card-num - port-num + serial left-lvl right-lvl! - card-num + serial - The number of the audio adapter to use. - - - - - - port-num - - - - The port number on the audio adapter. + Serial number of the originating output session. diff --git a/lib/rdcae.cpp b/lib/rdcae.cpp index e45bc3db..49b3f750 100644 --- a/lib/rdcae.cpp +++ b/lib/rdcae.cpp @@ -38,6 +38,15 @@ // // #define DEBUG_LATENCY +__RDCaeMeterPoint::__RDCaeMeterPoint() +{ + levels[0]=RD_MUTE_DEPTH; + levels[1]=RD_MUTE_DEPTH; +} + + + + RDCae::RDCae(RDStation *station,RDConfig *config,QObject *parent) : QObject(parent) { @@ -101,7 +110,7 @@ RDCae::RDCae(RDStation *station,RDConfig *config,QObject *parent) for(unsigned k=0;k<2;k++) { cae_input_levels[i][j][k]=-10000; cae_output_levels[i][j][k]=-10000; - cae_stream_output_levels[i][j][k]=-10000; + // cae_stream_output_levels[i][j][k]=-10000; } for(int k=0;klevels[0]; + levels[1]=mp->levels[1]; + } + // levels[0]=cae_stream_output_levels[card][stream][0]; + // levels[1]=cae_stream_output_levels[card][stream][1]; } @@ -582,6 +602,10 @@ void RDCae::ProcessCommand(const QString &cmd) if((f0.at(0)=="SP")&&(f0.size()==2)) { // Playback Stopped serial=f0.at(1).toInt(&ok); if(ok&&(serial>0)) { + if(cae_stream_output_levels.value(serial)!=NULL) { + delete cae_stream_output_levels.value(serial); + cae_stream_output_levels.remove(serial); + } emit playbackStopped(serial); } } @@ -759,6 +783,7 @@ void RDCae::UpdateMeters() char msg[1501]; int n; QStringList args; + __RDCaeMeterPoint *mp=NULL; while((n=cae_meter_socket->readDatagram(msg,1500))>0) { msg[n]=0; @@ -778,11 +803,11 @@ void RDCae::UpdateMeters() } } if(args[0]=="MO") { - if(args.size()==5) { - cae_stream_output_levels[args[1].toInt()][args[2].toInt()][0]= - args[3].toInt(); - cae_stream_output_levels[args[1].toInt()][args[2].toInt()][1]= - args[4].toInt(); + if(args.size()==4) { + if((mp=cae_stream_output_levels.value(args[1].toInt()))!=NULL) { + mp->levels[0]=args[2].toInt(); + mp->levels[1]=args[3].toInt(); + } } } if(args[0]=="MP") { diff --git a/lib/rdcae.h b/lib/rdcae.h index 9abd88fc..2a15eb34 100644 --- a/lib/rdcae.h +++ b/lib/rdcae.h @@ -31,6 +31,16 @@ #include #include +class __RDCaeMeterPoint +{ + public: + __RDCaeMeterPoint(); + short levels[2]; +}; + + + + class RDCae : public QObject { Q_OBJECT @@ -69,7 +79,8 @@ class RDCae : public QObject bool inputStatus(int card,int port) const; void inputMeterUpdate(int card,int port,short levels[2]); void outputMeterUpdate(int card,int port,short levels[2]); - void outputStreamMeterUpdate(int card,int stream,short levels[2]); + // void outputStreamMeterUpdate(int card,int stream,short levels[2]); + void outputStreamMeterUpdate(int serial,short levels[2]); unsigned playPosition(int handle); void requestTimescale(int card); bool playPortActive(int card,int port,int except_stream=-1); @@ -124,7 +135,10 @@ class RDCae : public QObject int cae_meter_port_range; short cae_input_levels[RD_MAX_CARDS][RD_MAX_PORTS][2]; short cae_output_levels[RD_MAX_CARDS][RD_MAX_PORTS][2]; - short cae_stream_output_levels[RD_MAX_CARDS][RD_MAX_PORTS][2]; + + // short cae_stream_output_levels[RD_MAX_CARDS][RD_MAX_PORTS][2]; + QMap cae_stream_output_levels; + unsigned cae_output_positions[RD_MAX_CARDS][RD_MAX_STREAMS]; bool cae_output_status_flags[RD_MAX_CARDS][RD_MAX_PORTS][RD_MAX_STREAMS]; std::vector delayed_cmds; diff --git a/lib/rdcartslot.cpp b/lib/rdcartslot.cpp index f31c0c12..4cf3fddc 100644 --- a/lib/rdcartslot.cpp +++ b/lib/rdcartslot.cpp @@ -379,8 +379,7 @@ void RDCartSlot::updateMeters() switch(slot_deck->state()) { case RDPlayDeck::Playing: case RDPlayDeck::Stopping: - slot_cae-> - outputStreamMeterUpdate(slot_deck->card(),slot_deck->stream(),lvls); + slot_cae->outputStreamMeterUpdate(slot_deck->serialNumber(),lvls); slot_box->updateMeters(lvls); break; diff --git a/lib/rdplay_deck.cpp b/lib/rdplay_deck.cpp index 59ff4e62..7e82b4a0 100644 --- a/lib/rdplay_deck.cpp +++ b/lib/rdplay_deck.cpp @@ -105,6 +105,12 @@ void RDPlayDeck::setId(int id) } +int RDPlayDeck::serialNumber() const +{ + return play_serial; +} + + int RDPlayDeck::owner() const { return play_owner; diff --git a/lib/rdplay_deck.h b/lib/rdplay_deck.h index 2a3f38ac..d5304a85 100644 --- a/lib/rdplay_deck.h +++ b/lib/rdplay_deck.h @@ -45,6 +45,7 @@ class RDPlayDeck : public QObject ~RDPlayDeck(); int id() const; void setId(int id); + int serialNumber() const; int owner() const; void setOwner(int owner); RDCart *cart() const;