lbajardsilogic@147: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ lbajardsilogic@147: lbajardsilogic@147: /* lbajardsilogic@147: Sonic Visualiser lbajardsilogic@147: An audio file viewer and annotation editor. lbajardsilogic@147: Centre for Digital Music, Queen Mary, University of London. lbajardsilogic@147: This file copyright 2006 Chris Cannam and QMUL. lbajardsilogic@147: lbajardsilogic@147: This program is free software; you can redistribute it and/or lbajardsilogic@147: modify it under the terms of the GNU General Public License as lbajardsilogic@147: published by the Free Software Foundation; either version 2 of the lbajardsilogic@147: License, or (at your option) any later version. See the file lbajardsilogic@147: COPYING included with this distribution for more information. lbajardsilogic@147: */ lbajardsilogic@147: lbajardsilogic@192: #ifdef HAVE_VIDEO lbajardsilogic@191: lbajardsilogic@191: #include lbajardsilogic@191: #include lbajardsilogic@191: lbajardsilogic@191: #include lbajardsilogic@191: #include lbajardsilogic@147: lbajardsilogic@192: #ifdef HAVE_FFMPEG lbajardsilogic@147: #include "VideoFileReader.h" lbajardsilogic@192: #endif lbajardsilogic@147: lbajardsilogic@191: #include "VideoFileReaderFactory.h" lbajardsilogic@147: lbajardsilogic@147: QString lbajardsilogic@147: VideoFileReaderFactory::getKnownExtensions() lbajardsilogic@147: { lbajardsilogic@147: std::set extensions; lbajardsilogic@147: lbajardsilogic@192: #ifdef HAVE_FFMPEG lbajardsilogic@147: VideoFileReader::getSupportedExtensions(extensions); lbajardsilogic@192: #endif lbajardsilogic@147: lbajardsilogic@147: QString rv; lbajardsilogic@147: for (std::set::const_iterator i = extensions.begin(); lbajardsilogic@147: i != extensions.end(); ++i) { lbajardsilogic@147: if (i != extensions.begin()) rv += " "; lbajardsilogic@147: rv += "*." + *i; lbajardsilogic@147: } lbajardsilogic@147: lbajardsilogic@147: return rv; lbajardsilogic@147: } lbajardsilogic@147: lbajardsilogic@147: bool VideoFileReaderFactory::isKnownExtensions(QString &extension) lbajardsilogic@147: { lbajardsilogic@147: bool isKnown = false; lbajardsilogic@147: lbajardsilogic@147: std::set extensions; lbajardsilogic@192: #ifdef HAVE_FFMPEG lbajardsilogic@147: VideoFileReader::getSupportedExtensions(extensions); lbajardsilogic@192: #endif lbajardsilogic@147: std::set::iterator iter = extensions.find(extension); lbajardsilogic@147: lbajardsilogic@147: if (iter != extensions.end()) lbajardsilogic@147: { lbajardsilogic@147: isKnown = true; lbajardsilogic@147: } lbajardsilogic@147: lbajardsilogic@147: return isKnown; lbajardsilogic@147: } lbajardsilogic@147: lbajardsilogic@147: /*VideoFileReader * lbajardsilogic@147: VideoFileReaderFactory::createReader(QString path) lbajardsilogic@147: { lbajardsilogic@147: QString err; lbajardsilogic@147: lbajardsilogic@147: VideoFileReader *reader = 0; lbajardsilogic@147: lbajardsilogic@147: // First try to construct a preferred reader based on the lbajardsilogic@147: // extension. If we can't identify one or it fails to load the lbajardsilogic@147: // file, fall back to trying all readers in no particular order. lbajardsilogic@147: lbajardsilogic@147: QString ext = QFileInfo(path).suffix().toLower(); lbajardsilogic@147: std::set extensions; lbajardsilogic@147: lbajardsilogic@147: //Ivan Damnjanovic 09-10/2007 added video support lbajardsilogic@147: #ifdef HAVE_FFMPEG lbajardsilogic@147: if (!reader) { lbajardsilogic@147: extensions.clear(); lbajardsilogic@147: VideoFileReader::getSupportedExtensions(extensions); lbajardsilogic@147: if (extensions.find(ext) != extensions.end()) { lbajardsilogic@147: lbajardsilogic@147: reader = new VideoFileReader lbajardsilogic@147: (path, true, VideoFileReader::CacheInTemporaryFile); lbajardsilogic@147: } lbajardsilogic@147: } lbajardsilogic@147: #endif lbajardsilogic@147: // lbajardsilogic@147: if (reader) { lbajardsilogic@147: if (reader->isOK()) return reader; lbajardsilogic@147: if (reader->getError() != "") { lbajardsilogic@147: std::cerr << "VideoFileReaderFactory: Preferred reader for " lbajardsilogic@147: << "extension \"" << ext.toStdString() << "\" failed: \"" lbajardsilogic@147: << reader->getError().toStdString() << "\"" << std::endl; lbajardsilogic@147: } else { lbajardsilogic@147: std::cerr << "VideoFileReaderFactory: Preferred reader for " lbajardsilogic@147: << "extension \"" << ext.toStdString() << "\" failed" lbajardsilogic@147: << std::endl; lbajardsilogic@147: } lbajardsilogic@147: delete reader; lbajardsilogic@147: reader = 0; lbajardsilogic@147: } lbajardsilogic@147: lbajardsilogic@147: reader = new VideoFileReader(path); lbajardsilogic@147: if (reader->isOK()) return reader; lbajardsilogic@147: if (reader->getError() != "") { lbajardsilogic@147: std::cerr << "VideoFileReaderFactory: WAV file reader error: \"" lbajardsilogic@147: << reader->getError().toStdString() << "\"" << std::endl; lbajardsilogic@147: } else { lbajardsilogic@147: std::cerr << "VideoFileReaderFactory: WAV file reader failed" lbajardsilogic@147: << std::endl; lbajardsilogic@147: } lbajardsilogic@147: delete reader; lbajardsilogic@147: lbajardsilogic@147: return 0; lbajardsilogic@147: } lbajardsilogic@147: */ lbajardsilogic@191: #endif lbajardsilogic@192: