changeset 147:13b5b9af0484

enable to load video file from the server
author lbajardsilogic
date Tue, 13 Nov 2007 17:47:02 +0000
parents 69061754408f
children 9f16a77107bd
files data/data.pro data/fileio/VideoFileReaderFactory.cpp data/fileio/VideoFileReaderFactory.h
diffstat 3 files changed, 163 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/data/data.pro	Tue Nov 13 17:45:11 2007 +0000
+++ b/data/data.pro	Tue Nov 13 17:47:02 2007 +0000
@@ -42,6 +42,8 @@
            fileio/QueryConfigReader.h \
            fileio/SparqlResultsReader.h \
            fileio/SparqlRelatedMediaReader.h \
+           fileio/VideoFileReaderFactory.h \
+           fileio/VideoFileReader.h \
            model/DenseThreeDimensionalModel.h \
            model/DenseTimeValueModel.h \
            model/EditableDenseThreeDimensionalModel.h \
@@ -88,6 +90,8 @@
            fileio/QueryConfigReader.cpp \
            fileio/SparqlResultsReader.cpp \
            fileio/SparqlRelatedMediaReader.cpp \
+           fileio/VideoFileReaderFactory.cpp \
+           fileio/VideoFileReader.cpp \
            model/DenseTimeValueModel.cpp \
            model/EditableDenseThreeDimensionalModel.cpp \
            model/FFTModel.cpp \
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/data/fileio/VideoFileReaderFactory.cpp	Tue Nov 13 17:47:02 2007 +0000
@@ -0,0 +1,114 @@
+/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*-  vi:set ts=8 sts=4 sw=4: */
+
+/*
+    Sonic Visualiser
+    An audio file viewer and annotation editor.
+    Centre for Digital Music, Queen Mary, University of London.
+    This file copyright 2006 Chris Cannam and QMUL.
+    
+    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.  See the file
+    COPYING included with this distribution for more information.
+*/
+
+#include "VideoFileReaderFactory.h"
+
+#include "VideoFileReader.h"
+
+#include <QString>
+#include <QFileInfo>
+#include <iostream>
+
+QString
+VideoFileReaderFactory::getKnownExtensions()
+{
+    std::set<QString> extensions;
+
+    VideoFileReader::getSupportedExtensions(extensions);
+
+    QString rv;
+    for (std::set<QString>::const_iterator i = extensions.begin();
+         i != extensions.end(); ++i) {
+        if (i != extensions.begin()) rv += " ";
+        rv += "*." + *i;
+    }
+
+    return rv;
+}
+
+bool VideoFileReaderFactory::isKnownExtensions(QString &extension)
+{
+    bool isKnown = false;
+
+	std::set<QString> extensions;
+
+    VideoFileReader::getSupportedExtensions(extensions);
+
+	std::set<QString>::iterator iter = extensions.find(extension);
+
+	if (iter != extensions.end())
+	{
+		isKnown = true;
+	}
+
+    return isKnown;
+}
+
+/*VideoFileReader *
+VideoFileReaderFactory::createReader(QString path)
+{
+    QString err;
+
+    VideoFileReader *reader = 0;
+
+    // First try to construct a preferred reader based on the
+    // extension.  If we can't identify one or it fails to load the
+    // file, fall back to trying all readers in no particular order.
+
+    QString ext = QFileInfo(path).suffix().toLower();
+    std::set<QString> extensions;
+
+//Ivan Damnjanovic 09-10/2007 added video support
+#ifdef HAVE_FFMPEG
+    if (!reader) {
+        extensions.clear();
+        VideoFileReader::getSupportedExtensions(extensions);
+        if (extensions.find(ext) != extensions.end()) {
+            
+			reader = new VideoFileReader
+                (path, true, VideoFileReader::CacheInTemporaryFile);
+        }
+    }
+#endif
+//
+    if (reader) {
+        if (reader->isOK()) return reader;
+        if (reader->getError() != "") {
+            std::cerr << "VideoFileReaderFactory: Preferred reader for "
+                      << "extension \"" << ext.toStdString() << "\" failed: \""
+                      << reader->getError().toStdString() << "\"" << std::endl;
+        } else {
+            std::cerr << "VideoFileReaderFactory: Preferred reader for "
+                      << "extension \"" << ext.toStdString() << "\" failed"
+                      << std::endl;
+        }            
+        delete reader;
+        reader = 0;
+    }
+
+    reader = new VideoFileReader(path);
+    if (reader->isOK()) return reader;
+    if (reader->getError() != "") {
+	std::cerr << "VideoFileReaderFactory: WAV file reader error: \""
+                  << reader->getError().toStdString() << "\"" << std::endl;
+    } else {
+	std::cerr << "VideoFileReaderFactory: WAV file reader failed"
+                  << std::endl;
+    }        
+    delete reader;
+
+    return 0;
+}
+*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/data/fileio/VideoFileReaderFactory.h	Tue Nov 13 17:47:02 2007 +0000
@@ -0,0 +1,45 @@
+/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*-  vi:set ts=8 sts=4 sw=4: */
+
+/*
+    Sonic Visualiser
+    An audio file viewer and annotation editor.
+    Centre for Digital Music, Queen Mary, University of London.
+    This file copyright 2006 Chris Cannam.
+    
+    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.  See the file
+    COPYING included with this distribution for more information.
+*/
+
+#ifndef _VIDEO_FILE_READER_FACTORY_H_
+#define _VIDEO_FILE_READER_FACTORY_H_
+
+#include <QString>
+
+class VideoFileReader;
+
+class VideoFileReaderFactory
+{
+public:
+    /**
+     * Return the file extensions that we have video file readers for,
+     * in a format suitable for use with QFileDialog.  For example,
+     * "*.avi *.mpg ".
+     */
+    static QString getKnownExtensions();
+
+	static bool isKnownExtensions(QString &extension);
+
+    /**
+     * Return an video file reader initialised to the file at the
+     * given path, or NULL if no suitable reader for this path is
+     * available or the file cannot be opened.
+     * Caller owns the returned object and must delete it after use.
+     */
+   // static AudioFileReader *createReader(QString path);
+};
+
+#endif
+