annotate data/fileio/VideoFileReaderFactory.cpp @ 282:d9319859a4cf tip

(none)
author benoitrigolleau
date Fri, 31 Oct 2008 11:00:24 +0000
parents 709777a471c3
children
rev   line source
lbajardsilogic@147 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
lbajardsilogic@147 2
lbajardsilogic@147 3 /*
lbajardsilogic@147 4 Sonic Visualiser
lbajardsilogic@147 5 An audio file viewer and annotation editor.
lbajardsilogic@147 6 Centre for Digital Music, Queen Mary, University of London.
lbajardsilogic@147 7 This file copyright 2006 Chris Cannam and QMUL.
lbajardsilogic@147 8
lbajardsilogic@147 9 This program is free software; you can redistribute it and/or
lbajardsilogic@147 10 modify it under the terms of the GNU General Public License as
lbajardsilogic@147 11 published by the Free Software Foundation; either version 2 of the
lbajardsilogic@147 12 License, or (at your option) any later version. See the file
lbajardsilogic@147 13 COPYING included with this distribution for more information.
lbajardsilogic@147 14 */
lbajardsilogic@147 15
lbajardsilogic@192 16 #ifdef HAVE_VIDEO
lbajardsilogic@191 17
lbajardsilogic@191 18 #include <iostream>
lbajardsilogic@191 19 #include <set>
lbajardsilogic@191 20
lbajardsilogic@191 21 #include <QString>
lbajardsilogic@191 22 #include <QFileInfo>
lbajardsilogic@147 23
lbajardsilogic@192 24 #ifdef HAVE_FFMPEG
lbajardsilogic@147 25 #include "VideoFileReader.h"
lbajardsilogic@192 26 #endif
lbajardsilogic@147 27
lbajardsilogic@191 28 #include "VideoFileReaderFactory.h"
lbajardsilogic@147 29
lbajardsilogic@147 30 QString
lbajardsilogic@147 31 VideoFileReaderFactory::getKnownExtensions()
lbajardsilogic@147 32 {
lbajardsilogic@147 33 std::set<QString> extensions;
lbajardsilogic@147 34
lbajardsilogic@192 35 #ifdef HAVE_FFMPEG
lbajardsilogic@147 36 VideoFileReader::getSupportedExtensions(extensions);
lbajardsilogic@192 37 #endif
lbajardsilogic@147 38
lbajardsilogic@147 39 QString rv;
lbajardsilogic@147 40 for (std::set<QString>::const_iterator i = extensions.begin();
lbajardsilogic@147 41 i != extensions.end(); ++i) {
lbajardsilogic@147 42 if (i != extensions.begin()) rv += " ";
lbajardsilogic@147 43 rv += "*." + *i;
lbajardsilogic@147 44 }
lbajardsilogic@147 45
lbajardsilogic@147 46 return rv;
lbajardsilogic@147 47 }
lbajardsilogic@147 48
lbajardsilogic@147 49 bool VideoFileReaderFactory::isKnownExtensions(QString &extension)
lbajardsilogic@147 50 {
lbajardsilogic@147 51 bool isKnown = false;
lbajardsilogic@147 52
lbajardsilogic@147 53 std::set<QString> extensions;
lbajardsilogic@192 54 #ifdef HAVE_FFMPEG
lbajardsilogic@147 55 VideoFileReader::getSupportedExtensions(extensions);
lbajardsilogic@192 56 #endif
lbajardsilogic@147 57 std::set<QString>::iterator iter = extensions.find(extension);
lbajardsilogic@147 58
lbajardsilogic@147 59 if (iter != extensions.end())
lbajardsilogic@147 60 {
lbajardsilogic@147 61 isKnown = true;
lbajardsilogic@147 62 }
lbajardsilogic@147 63
lbajardsilogic@147 64 return isKnown;
lbajardsilogic@147 65 }
lbajardsilogic@147 66
lbajardsilogic@147 67 /*VideoFileReader *
lbajardsilogic@147 68 VideoFileReaderFactory::createReader(QString path)
lbajardsilogic@147 69 {
lbajardsilogic@147 70 QString err;
lbajardsilogic@147 71
lbajardsilogic@147 72 VideoFileReader *reader = 0;
lbajardsilogic@147 73
lbajardsilogic@147 74 // First try to construct a preferred reader based on the
lbajardsilogic@147 75 // extension. If we can't identify one or it fails to load the
lbajardsilogic@147 76 // file, fall back to trying all readers in no particular order.
lbajardsilogic@147 77
lbajardsilogic@147 78 QString ext = QFileInfo(path).suffix().toLower();
lbajardsilogic@147 79 std::set<QString> extensions;
lbajardsilogic@147 80
lbajardsilogic@147 81 //Ivan Damnjanovic 09-10/2007 added video support
lbajardsilogic@147 82 #ifdef HAVE_FFMPEG
lbajardsilogic@147 83 if (!reader) {
lbajardsilogic@147 84 extensions.clear();
lbajardsilogic@147 85 VideoFileReader::getSupportedExtensions(extensions);
lbajardsilogic@147 86 if (extensions.find(ext) != extensions.end()) {
lbajardsilogic@147 87
lbajardsilogic@147 88 reader = new VideoFileReader
lbajardsilogic@147 89 (path, true, VideoFileReader::CacheInTemporaryFile);
lbajardsilogic@147 90 }
lbajardsilogic@147 91 }
lbajardsilogic@147 92 #endif
lbajardsilogic@147 93 //
lbajardsilogic@147 94 if (reader) {
lbajardsilogic@147 95 if (reader->isOK()) return reader;
lbajardsilogic@147 96 if (reader->getError() != "") {
lbajardsilogic@147 97 std::cerr << "VideoFileReaderFactory: Preferred reader for "
lbajardsilogic@147 98 << "extension \"" << ext.toStdString() << "\" failed: \""
lbajardsilogic@147 99 << reader->getError().toStdString() << "\"" << std::endl;
lbajardsilogic@147 100 } else {
lbajardsilogic@147 101 std::cerr << "VideoFileReaderFactory: Preferred reader for "
lbajardsilogic@147 102 << "extension \"" << ext.toStdString() << "\" failed"
lbajardsilogic@147 103 << std::endl;
lbajardsilogic@147 104 }
lbajardsilogic@147 105 delete reader;
lbajardsilogic@147 106 reader = 0;
lbajardsilogic@147 107 }
lbajardsilogic@147 108
lbajardsilogic@147 109 reader = new VideoFileReader(path);
lbajardsilogic@147 110 if (reader->isOK()) return reader;
lbajardsilogic@147 111 if (reader->getError() != "") {
lbajardsilogic@147 112 std::cerr << "VideoFileReaderFactory: WAV file reader error: \""
lbajardsilogic@147 113 << reader->getError().toStdString() << "\"" << std::endl;
lbajardsilogic@147 114 } else {
lbajardsilogic@147 115 std::cerr << "VideoFileReaderFactory: WAV file reader failed"
lbajardsilogic@147 116 << std::endl;
lbajardsilogic@147 117 }
lbajardsilogic@147 118 delete reader;
lbajardsilogic@147 119
lbajardsilogic@147 120 return 0;
lbajardsilogic@147 121 }
lbajardsilogic@147 122 */
lbajardsilogic@191 123 #endif
lbajardsilogic@192 124