kwave  18.07.70
Connect.cpp
Go to the documentation of this file.
1 /*************************************************************************
2  KwaveConnect.cpp - function for connecting Kwave streaming objects
3  -------------------
4  begin : Sat Oct 27 2007
5  copyright : (C) 2007 by Thomas Eschenbacher
6  email : Thomas.Eschenbacher@gmx.de
7  ***************************************************************************/
8 
9 /***************************************************************************
10  * *
11  * This program is free software; you can redistribute it and/or modify *
12  * it under the terms of the GNU General Public License as published by *
13  * the Free Software Foundation; either version 2 of the License, or *
14  * (at your option) any later version. *
15  * *
16  ***************************************************************************/
17 
18 #include "config.h"
19 
20 #include <QObject>
21 
22 #include "libkwave/Connect.h"
23 #include "libkwave/SampleSink.h"
24 #include "libkwave/SampleSource.h"
25 
26 //***************************************************************************
27 namespace Kwave {
28 
29  //***********************************************************************
30  static bool _connect_one_by_one(
31  Kwave::StreamObject &src, const char *output, unsigned int src_idx,
32  Kwave::StreamObject &dst, const char *input, unsigned int dst_idx)
33  {
34  Kwave::StreamObject *s = src.port(output, src_idx);
35  Kwave::StreamObject *d = dst.port(input, dst_idx);
36  Q_ASSERT(s);
37  Q_ASSERT(d);
38  Q_ASSERT(input);
39  Q_ASSERT(output);
40  if (!s || !d || !input || !output) return false;
41 
42  QObject::connect(s, output, d, input, Qt::DirectConnection);
43 
44  return true;
45  }
46 
47  //***********************************************************************
48  bool connect(Kwave::StreamObject &source, const char *output,
49  Kwave::StreamObject &sink, const char *input)
50  {
51  unsigned int src_tracks = source.tracksOfPort(output);
52  unsigned int dst_tracks = sink.tracksOfPort(input);
53 
54  Q_ASSERT(output);
55  Q_ASSERT(input);
56  if (!src_tracks || !dst_tracks || !output || !input)
57  return false;
58 
59  if ((src_tracks == 1) && (dst_tracks > 1)) {
60  // 1 output -> N inputs
61  for (unsigned int track = 0; track < dst_tracks; track++) {
63  source, output, 0,
64  sink, input, track)) return false;
65  }
66  } else if (src_tracks == dst_tracks) {
67  // N outputs -> N inputs
68  for (unsigned int track=0; track < dst_tracks; track++) {
70  source, output, track,
71  sink, input, track)) return false;
72  }
73  } else {
74  qWarning("invalid source/sink combination, %d:%d tracks",
75  src_tracks, dst_tracks);
76  return false;
77  }
78  return true;
79  }
80 }
81 
82 //***************************************************************************
83 //***************************************************************************
virtual unsigned int tracksOfPort(const char *port) const
Definition: StreamObject.h:72
Definition: App.h:33
bool connect(Kwave::StreamObject &source, const char *output, Kwave::StreamObject &sink, const char *input)
Definition: Connect.cpp:48
virtual Kwave::StreamObject * port(const char *port, unsigned int track)
Definition: StreamObject.h:84
static bool _connect_one_by_one(Kwave::StreamObject &src, const char *output, unsigned int src_idx, Kwave::StreamObject &dst, const char *input, unsigned int dst_idx)
Definition: Connect.cpp:30