--- a
+++ b/sc2src/songcastreceiver.h
@@ -0,0 +1,83 @@
+/* Copyright (C) 2018 J.F.Dockes
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * 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.,
+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef WITH_OHBUILD
+#include "Debug.h"
+#include "OhmReceiver.h"
+#else
+#include <OpenHome/OhmReceiver.h>
+#include <OpenHome/OhSongcast/Debug.h>
+#endif
+
+#include "audiodecoder.h"
+#include "chrono.h"
+#include "rcvqueue.h"
+
+using namespace OpenHome;
+using namespace OpenHome::Av;
+
+class SongcastReceiver : public IOhmReceiverDriver, public IOhmMsgProcessor {
+public:
+ SongcastReceiver(AudioEater* eater, AudioEater::Context *ctxt);
+ ~SongcastReceiver();
+
+ virtual TBool IsConnected();
+private:
+ // IOhmReceiverDriver
+ virtual void Add(OhmMsg& aMsg);
+ virtual void Timestamp(OhmMsg& aMsg);
+ virtual void Started();
+ virtual void Connected();
+ virtual void Playing();
+ virtual void Disconnected();
+ virtual void Stopped();
+
+ // IOhmMsgProcessor
+ virtual void Process(OhmMsgAudio& aMsg);
+ virtual void Process(OhmMsgTrack& aMsg);
+ virtual void Process(OhmMsgMetatext& aMsg);
+
+private:
+ // Debug, stats, etc while we get to understand the Songcast streams
+ class Observer {
+ public:
+ TBool iReset;
+ TUint iCount;
+ TUint iFrame;
+ int dumpfd;
+ Chrono chron;
+ Observer() : iReset(true), iCount(0), iFrame(0), dumpfd(-1) {
+#if 0
+ dumpfd =
+ open("/y/av/tmp/sc2dump", O_WRONLY|O_CREAT|O_TRUNC, 0666);
+ if (dumpfd < 0) {
+ LOGERR("SongcastReceiver::Open dump file failed\n");
+ }
+#endif
+ }
+
+ void reset() {
+ iReset = true;
+ }
+
+ void process(OhmMsgAudio& aMsg);
+ };
+ Observer m_obs;
+ AudioDecoder *m_decoder{nullptr};
+ AudioEater *m_eater;
+ TBool iConnected;
+};