From e8d99698c23b1d8ac4a396635e9af60d52a12229 Mon Sep 17 00:00:00 2001 From: trialuser02 Date: Fri, 19 Dec 2008 17:30:41 +0000 Subject: more ffmpeg formats support (including ape); ffmpeg plugin settings git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@692 90c681e8-e032-0410-971d-27865f9a5e38 --- src/plugins/Input/cue/settingsdialog.h | 2 - src/plugins/Input/ffmpeg/CMakeLists.txt | 6 +- src/plugins/Input/ffmpeg/decoder_ffmpeg.cpp | 7 +- src/plugins/Input/ffmpeg/decoderffmpegfactory.cpp | 36 ++++-- src/plugins/Input/ffmpeg/detailsdialog.ui | 126 +++++++------------- src/plugins/Input/ffmpeg/ffmpeg.pro | 15 ++- src/plugins/Input/ffmpeg/settingsdialog.cpp | 95 +++++++++++++++ src/plugins/Input/ffmpeg/settingsdialog.h | 46 ++++++++ src/plugins/Input/ffmpeg/settingsdialog.ui | 137 ++++++++++++++++++++++ 9 files changed, 363 insertions(+), 107 deletions(-) create mode 100644 src/plugins/Input/ffmpeg/settingsdialog.cpp create mode 100644 src/plugins/Input/ffmpeg/settingsdialog.h create mode 100644 src/plugins/Input/ffmpeg/settingsdialog.ui (limited to 'src/plugins/Input') diff --git a/src/plugins/Input/cue/settingsdialog.h b/src/plugins/Input/cue/settingsdialog.h index 0f5535905..0f3ae1f87 100644 --- a/src/plugins/Input/cue/settingsdialog.h +++ b/src/plugins/Input/cue/settingsdialog.h @@ -22,7 +22,6 @@ #include - #include "ui_settingsdialog.h" /** @@ -42,7 +41,6 @@ public slots: private: void findCodecs(); - Ui::SettingsDialog ui; QList codecs; diff --git a/src/plugins/Input/ffmpeg/CMakeLists.txt b/src/plugins/Input/ffmpeg/CMakeLists.txt index 1ae7b4172..7bdcdc0c0 100644 --- a/src/plugins/Input/ffmpeg/CMakeLists.txt +++ b/src/plugins/Input/ffmpeg/CMakeLists.txt @@ -5,7 +5,6 @@ cmake_minimum_required(VERSION 2.4.7) if(COMMAND cmake_policy) cmake_policy(SET CMP0003 NEW) endif(COMMAND cmake_policy) - # qt plugin ADD_DEFINITIONS( -Wall ) @@ -71,12 +70,14 @@ SET(libffmpeg_SRCS decoder_ffmpeg.cpp decoderffmpegfactory.cpp detailsdialog.cpp + settingsdialog.cpp ) SET(libffmpeg_MOC_HDRS decoderffmpegfactory.h decoder_ffmpeg.h detailsdialog.h + settingsdialog.h ) SET(libffmpeg_RCCS translations/translations.qrc) @@ -89,7 +90,8 @@ QT4_WRAP_CPP(libffmpeg_MOC_SRCS ${libffmpeg_MOC_HDRS}) SET(libffmpeg_UIS - detailsdialog.ui + detailsdialog.ui + settingsdialog.ui ) QT4_WRAP_UI(libffmpeg_UIS_H ${libffmpeg_UIS}) diff --git a/src/plugins/Input/ffmpeg/decoder_ffmpeg.cpp b/src/plugins/Input/ffmpeg/decoder_ffmpeg.cpp index c1b5ac2e2..49c13da9f 100644 --- a/src/plugins/Input/ffmpeg/decoder_ffmpeg.cpp +++ b/src/plugins/Input/ffmpeg/decoder_ffmpeg.cpp @@ -87,9 +87,7 @@ void DecoderFFmpeg::flush(bool final) while ((! done && ! m_finish) && output()->recycler()->full()) { mutex()->unlock(); - output()->recycler()->cond()->wait(output()->recycler()->mutex()); - mutex()->lock (); done = user_stop; } @@ -193,18 +191,15 @@ void DecoderFFmpeg::deinit() void DecoderFFmpeg::run() { -// mpc_uint32_t vbrAcc = 0; -// mpc_uint32_t vbrUpd = 0; uint8_t *inbuf_ptr; int out_size, size; AVPacket pkt; mutex()->lock (); - if (! inited) + if (!inited) { mutex()->unlock(); - return; } mutex()->unlock(); diff --git a/src/plugins/Input/ffmpeg/decoderffmpegfactory.cpp b/src/plugins/Input/ffmpeg/decoderffmpegfactory.cpp index 22f16799e..7ed9d4b78 100644 --- a/src/plugins/Input/ffmpeg/decoderffmpegfactory.cpp +++ b/src/plugins/Input/ffmpeg/decoderffmpegfactory.cpp @@ -19,6 +19,7 @@ ***************************************************************************/ #include +#include extern "C" { @@ -41,6 +42,7 @@ extern "C" } #include "detailsdialog.h" +#include "settingsdialog.h" #include "decoder_ffmpeg.h" #include "decoderffmpegfactory.h" @@ -49,8 +51,15 @@ extern "C" bool DecoderFFmpegFactory::supports(const QString &source) const { - - return (source.right(4).toLower() == ".wma"); + QSettings settings(QDir::homePath()+"/.qmmp/qmmprc", QSettings::IniFormat); + QStringList filters = settings.value("FFMPEG/filters","*.wma").toStringList(); + foreach(QString filter, filters) + { + QRegExp regexp(filter, Qt::CaseInsensitive, QRegExp::Wildcard); + if (regexp.exactMatch(source)) + return TRUE; + } + return FALSE; } bool DecoderFFmpegFactory::canDecode(QIODevice *) const @@ -60,13 +69,15 @@ bool DecoderFFmpegFactory::canDecode(QIODevice *) const const DecoderProperties DecoderFFmpegFactory::properties() const { + QSettings settings(QDir::homePath()+"/.qmmp/qmmprc", QSettings::IniFormat); + QStringList filters = settings.value("FFMPEG/filters","*.wma").toStringList(); DecoderProperties properties; properties.name = tr("FFMPEG Plugin"); - properties.filter = "*.wma"; - properties.description = tr("WMA Files"); + properties.filter = filters.join(" "); + properties.description = tr("FFMPEG Formats"); //properties.contentType = ""; properties.hasAbout = TRUE; - properties.hasSettings = FALSE; + properties.hasSettings = TRUE; properties.noInput = TRUE; properties.protocols = "file"; return properties; @@ -114,14 +125,23 @@ QObject* DecoderFFmpegFactory::showDetails(QWidget *parent, const QString &path) return d; } -void DecoderFFmpegFactory::showSettings(QWidget *) -{} +void DecoderFFmpegFactory::showSettings(QWidget *parent) +{ + SettingsDialog *s = new SettingsDialog(parent); + s->show(); +} void DecoderFFmpegFactory::showAbout(QWidget *parent) { QMessageBox::about (parent, tr("About FFmpeg Audio Plugin"), tr("Qmmp FFmpeg Audio Plugin")+"\n"+ - tr("Suppored formats: WMA")+"\n"+ + QString(tr("Compiled against libavformat-%1.%2.%3 and libavcodec-%4.%5.%6")) + .arg(LIBAVFORMAT_VERSION_MAJOR) + .arg(LIBAVFORMAT_VERSION_MINOR) + .arg(LIBAVFORMAT_VERSION_MICRO) + .arg(LIBAVCODEC_VERSION_MAJOR) + .arg(LIBAVCODEC_VERSION_MINOR) + .arg(LIBAVCODEC_VERSION_MICRO)+"\n"+ tr("Writen by: Ilya Kotov ")); } diff --git a/src/plugins/Input/ffmpeg/detailsdialog.ui b/src/plugins/Input/ffmpeg/detailsdialog.ui index 0dd6741cb..d74cdde01 100644 --- a/src/plugins/Input/ffmpeg/detailsdialog.ui +++ b/src/plugins/Input/ffmpeg/detailsdialog.ui @@ -6,7 +6,7 @@ 0 0 545 - 374 + 343 @@ -39,25 +39,13 @@ - ASF Info + Audio Info - + 9 - - 9 - - - 9 - - - 9 - - - 6 - - + 6 @@ -159,7 +147,7 @@ Qt::Vertical - + 74 151 @@ -179,73 +167,48 @@ - WMA Tag + Metadata - - - 8 - - - 8 - - - 8 - - - 8 - - - 6 - - - 6 - - - - - false - - - Save - - - - - - - - + + + - Track number: + Title: Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - + + - - + + - Year: + Artist: Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - + + + + + - Genre: + Album: Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + @@ -256,48 +219,45 @@ - - + + + + + - Album: + Year: Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - + + + + + - Artist: + Track number: Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - + + + + + - Title: + Genre: Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - - - - - - - - - - @@ -309,7 +269,7 @@ Qt::Horizontal - + 111 20 diff --git a/src/plugins/Input/ffmpeg/ffmpeg.pro b/src/plugins/Input/ffmpeg/ffmpeg.pro index 6763c2cf3..5580d32e1 100644 --- a/src/plugins/Input/ffmpeg/ffmpeg.pro +++ b/src/plugins/Input/ffmpeg/ffmpeg.pro @@ -1,17 +1,20 @@ include(../../plugins.pri) -FORMS += detailsdialog.ui +FORMS += detailsdialog.ui \ + settingsdialog.ui HEADERS += decoderffmpegfactory.h \ detailsdialog.h \ - decoder_ffmpeg.h + decoder_ffmpeg.h \ + settingsdialog.h SOURCES += detailsdialog.cpp \ decoder_ffmpeg.cpp \ - decoderffmpegfactory.cpp + decoderffmpegfactory.cpp \ + settingsdialog.cpp QMAKE_CLEAN = ../libffmpeg.so -TARGET=$$PLUGINS_PREFIX/Input/ffmpeg +TARGET =$$PLUGINS_PREFIX/Input/ffmpeg QMAKE_CLEAN =$$PLUGINS_PREFIX/Input/libffmpeg.so @@ -41,8 +44,8 @@ TRANSLATIONS = translations/ffmpeg_plugin_ru.ts \ RESOURCES = translations/translations.qrc -isEmpty (LIB_DIR){ -LIB_DIR = /lib +isEmpty(LIB_DIR){ + LIB_DIR = /lib } target.path = $$LIB_DIR/qmmp/Input INSTALLS += target diff --git a/src/plugins/Input/ffmpeg/settingsdialog.cpp b/src/plugins/Input/ffmpeg/settingsdialog.cpp new file mode 100644 index 000000000..58e11b54a --- /dev/null +++ b/src/plugins/Input/ffmpeg/settingsdialog.cpp @@ -0,0 +1,95 @@ +/*************************************************************************** + * Copyright (C) 2008 by Ilya Kotov * + * forkotov02@hotmail.ru * + * * + * 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. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ + +#include +#include +#include + +extern "C" +{ +#if defined HAVE_FFMPEG_AVFORMAT_H +#include +#elif defined HAVE_LIBAVFORMAT_AVFORMAT_H +#include +#else +#include +#endif + + +#if defined HAVE_FFMPEG_AVCODEC_H +#include +#elif defined HAVE_LIBAVCODEC_AVCODEC_H +#include +#else +#include +#endif +} + +#include "settingsdialog.h" + +SettingsDialog::SettingsDialog(QWidget *parent) + : QDialog(parent) +{ + ui.setupUi(this); + setAttribute(Qt::WA_DeleteOnClose); + QSettings settings(QDir::homePath()+"/.qmmp/qmmprc", QSettings::IniFormat); + QStringList filters; + filters << "*.wma" << "*.ape"; + filters = settings.value("FFMPEG/filters", filters).toStringList(); + avcodec_init(); + avcodec_register_all(); + av_register_all(); + ui.wmaCheckBox->setEnabled(avcodec_find_decoder(CODEC_ID_WMAV1)); + ui.wmaCheckBox->setChecked(filters.contains("*.wma") && avcodec_find_decoder(CODEC_ID_WMAV1)); + ui.apeCheckBox->setEnabled(avcodec_find_decoder(CODEC_ID_APE)); + ui.apeCheckBox->setChecked(filters.contains("*.ape") && avcodec_find_decoder(CODEC_ID_APE)); + ui.ttaCheckBox->setEnabled(avcodec_find_decoder(CODEC_ID_TTA)); + ui.ttaCheckBox->setChecked(filters.contains("*.tta") && avcodec_find_decoder(CODEC_ID_TTA)); + ui.alacCheckBox->setEnabled(avcodec_find_decoder(CODEC_ID_ALAC)); + ui.alacCheckBox->setChecked(filters.contains("*.alac") && avcodec_find_decoder(CODEC_ID_ALAC)); + ui.aacCheckBox->setEnabled(avcodec_find_decoder(CODEC_ID_AAC)); + ui.aacCheckBox->setChecked(filters.contains("*.aac") && avcodec_find_decoder(CODEC_ID_AAC)); + ui.mp4CheckBox->setEnabled(avcodec_find_decoder(CODEC_ID_AAC)); + ui.mp4CheckBox->setChecked(filters.contains("*.m4a") && avcodec_find_decoder(CODEC_ID_AAC)); + ui.raCheckBox->setEnabled(avcodec_find_decoder(CODEC_ID_RA_288)); + ui.raCheckBox->setChecked(filters.contains("*.ra") && avcodec_find_decoder(CODEC_ID_RA_288)); + +} + + +SettingsDialog::~SettingsDialog() +{ +} + +void SettingsDialog::accept() +{ + QStringList filters; + if (ui.wmaCheckBox->isChecked()) + filters << "*.wma"; + if (ui.apeCheckBox->isChecked()) + filters << "*.ape"; + if (ui.ttaCheckBox->isChecked()) + filters << "*.tta"; + if (ui.alacCheckBox->isChecked()) + filters << "*.alac"; + QSettings settings(QDir::homePath()+"/.qmmp/qmmprc", QSettings::IniFormat); + settings.setValue("FFMPEG/filters", filters); + QDialog::accept(); +} diff --git a/src/plugins/Input/ffmpeg/settingsdialog.h b/src/plugins/Input/ffmpeg/settingsdialog.h new file mode 100644 index 000000000..5617642ac --- /dev/null +++ b/src/plugins/Input/ffmpeg/settingsdialog.h @@ -0,0 +1,46 @@ +/*************************************************************************** + * Copyright (C) 2008 by Ilya Kotov * + * forkotov02@hotmail.ru * + * * + * 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. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ +#ifndef SETTINGSDIALOG_H +#define SETTINGSDIALOG_H + +#include + +#include "ui_settingsdialog.h" + +/** + @author Ilya Kotov +*/ +class SettingsDialog : public QDialog +{ + Q_OBJECT +public: + SettingsDialog(QWidget *parent = 0); + + ~SettingsDialog(); + +public slots: + virtual void accept(); + +private: + Ui::SettingsDialog ui; + +}; + +#endif diff --git a/src/plugins/Input/ffmpeg/settingsdialog.ui b/src/plugins/Input/ffmpeg/settingsdialog.ui new file mode 100644 index 000000000..5f182fcce --- /dev/null +++ b/src/plugins/Input/ffmpeg/settingsdialog.ui @@ -0,0 +1,137 @@ + + SettingsDialog + + + + 0 + 0 + 302 + 286 + + + + FFMPEG Plugin Settings + + + + + + Qt::Horizontal + + + + 178 + 20 + + + + + + + + + 0 + 0 + + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + Formats + + + + + + Windows Media Audio + + + + + + + Monkey's Audio + + + + + + + True Audio + + + + + + + ALAC (Apple Lossless Audio Codec) + + + + + + + ADTS AAC + + + + + + + MPEG-4 AAC + + + + + + + RealAudio 1.0/2.0 + + + + + + + + + + + + buttonBox + accepted() + SettingsDialog + accept() + + + 214 + 167 + + + 103 + 160 + + + + + buttonBox + rejected() + SettingsDialog + reject() + + + 269 + 174 + + + 148 + 169 + + + + + -- cgit v1.2.3-13-gbd6f