243 unsigned int decoded_tracks = 0;
246 foreach (
const QString &format, e->formats()) {
252 if (!decoder)
return 0;
254 QByteArray raw_data = e->data(format);
255 QBuffer src(&raw_data);
258 bool ok = decoder->
open(widget, src);
266 Q_ASSERT(decoded_length);
267 Q_ASSERT(decoded_tracks);
268 if (!decoded_length || !decoded_tracks) {
275 double dst_rate = sig.
rate();
279 if (!qFuzzyCompare(src_rate, dst_rate) && (dst_rate > 1) && sig.
tracks())
280 decoded_length *= (dst_rate / src_rate);
285 if (tracks.isEmpty()) tracks = sig.
allTracks();
290 qDebug(
"Kwave::MimeData::decode(...) -> new signal");
296 ok = (sig.
tracks() == decoded_tracks);
311 if (ok && (decoded_tracks != dst_tracks)) {
312 qDebug(
"Kwave::MimeData::decode(...) -> mixing channels: %u -> %u",
313 decoded_tracks, dst_tracks);
314 mixer =
new(std::nothrow)
317 ok &= (mixer) && mixer->
init();
324 if (ok && !qFuzzyCompare(src_rate, dst_rate)) {
326 qDebug(
"Kwave::MimeData::decode(...) -> rate conversion: "\
327 "%0.1f -> %0.1f", src_rate, dst_rate);
328 rate_converter =
new(std::nothrow)
331 Q_ASSERT(rate_converter);
334 QVariant(dst_rate / src_rate));
341 QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
343 if (ok && (rate_converter || mixer)) {
361 if (ok && rate_converter) {
367 last_output = rate_converter;
380 ok = decoder->
decode(widget, adapter);
387 ok = decoder->
decode(widget, dst);
393 if (mixer)
delete mixer;
394 if (rate_converter)
delete rate_converter;
397 QApplication::restoreOverrideCursor();
412 if (!qFuzzyCompare(src_rate, dst_rate))
430 return decoded_length;
Kwave::MetaDataList & metaData()
void newSignal(sample_index_t samples, double rate, unsigned int bits, unsigned int tracks)
virtual bool open(QWidget *widget, QIODevice &source)=0
bool connect(Kwave::StreamObject &source, const char *output, Kwave::StreamObject &sink, const char *input)
virtual Kwave::MetaDataList & metaData()
const QList< unsigned int > allTracks()
static QString metaDataType()
virtual bool decode(QWidget *widget, Kwave::MultiWriter &dst)=0
static Kwave::Decoder * decoder(const QString &mimetype_name)
const QList< unsigned int > selectedTracks()
static bool canDecode(const QString &mimetype_name)
void setAttribute(const char *attribute, const QVariant &value)