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

(none)
author benoitrigolleau
date Fri, 31 Oct 2008 11:00:24 +0000
parents 709777a471c3
children
line wrap: on
line source
/* -*- 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.
*/

#ifdef HAVE_VIDEO

#include <iostream>
#include <set>

#include <QString>
#include <QFileInfo>

#ifdef HAVE_FFMPEG
#include "VideoFileReader.h"
#endif

#include "VideoFileReaderFactory.h"

QString
VideoFileReaderFactory::getKnownExtensions()
{
    std::set<QString> extensions;

#ifdef HAVE_FFMPEG
    VideoFileReader::getSupportedExtensions(extensions);
#endif

    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;
#ifdef HAVE_FFMPEG
    VideoFileReader::getSupportedExtensions(extensions);
#endif
	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;
}
*/
#endif