diff options
| -rw-r--r-- | src/plugins/Input/ffmpeg/decoder_ffmpeg.cpp | 351 | ||||
| -rw-r--r-- | src/plugins/Input/ffmpeg/decoder_ffmpeg.h | 25 | ||||
| -rw-r--r-- | src/plugins/Input/ffmpeg/decoderffmpegfactory.cpp | 60 | ||||
| -rw-r--r-- | src/plugins/Input/ffmpeg/decoderffmpegfactory.h | 2 | ||||
| -rw-r--r-- | src/plugins/Input/ffmpeg/ffmpegmetadatamodel.cpp | 57 | ||||
| -rw-r--r-- | src/plugins/Input/ffmpeg/ffmpegmetadatamodel.h | 2 | ||||
| -rw-r--r-- | src/plugins/Input/ffmpeg/settingsdialog.cpp | 9 |
7 files changed, 10 insertions, 496 deletions
diff --git a/src/plugins/Input/ffmpeg/decoder_ffmpeg.cpp b/src/plugins/Input/ffmpeg/decoder_ffmpeg.cpp index 7eb39dfd5..831f2d0c5 100644 --- a/src/plugins/Input/ffmpeg/decoder_ffmpeg.cpp +++ b/src/plugins/Input/ffmpeg/decoder_ffmpeg.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2006-2012 by Ilya Kotov * + * Copyright (C) 2006-2013 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -57,9 +57,6 @@ static int64_t ffmpeg_seek(void *data, int64_t offset, int whence) } // Decoder class - -#if (LIBAVCODEC_VERSION_INT >= ((53<<16)+(34<<8)+0)) - DecoderFFmpeg::DecoderFFmpeg(const QString &path, QIODevice *i) : Decoder(i) { @@ -443,349 +440,3 @@ void DecoderFFmpeg::fillBuffer() } } } - -#else -//legacy ffmpeg support -DecoderFFmpeg::DecoderFFmpeg(const QString &path, QIODevice *i) - : Decoder(i) -{ - m_bitrate = 0; - m_skip = false; - m_totalTime = 0; - ic = 0; - m_path = path; - m_temp_pkt.size = 0; - m_pkt.size = 0; - m_pkt.data = 0; - m_output_buf = 0; - m_output_at = 0; - m_skipBytes = 0; - m_stream = 0; - av_init_packet(&m_pkt); - av_init_packet(&m_temp_pkt); -} - - -DecoderFFmpeg::~DecoderFFmpeg() -{ - m_bitrate = 0; - m_temp_pkt.size = 0; - if (ic) - av_close_input_stream(ic); - if(m_pkt.data) - av_free_packet(&m_pkt); - if(m_output_buf) - av_free(m_output_buf); - if(m_stream) - av_free(m_stream); -} - -bool DecoderFFmpeg::initialize() -{ - m_bitrate = 0; - m_skip = false; - m_totalTime = 0; - m_seekTime = -1; - av_register_all(); - - AVProbeData pd; - uint8_t buf[PROBE_BUFFER_SIZE + AVPROBE_PADDING_SIZE]; - pd.filename = m_path.toLocal8Bit().constData(); - pd.buf_size = input()->peek((char*)buf, sizeof(buf) - AVPROBE_PADDING_SIZE); - pd.buf = buf; - if(pd.buf_size < PROBE_BUFFER_SIZE) - { - qWarning("DecoderFFmpeg: too small buffer size: %d bytes", pd.buf_size); - return false; - } - AVInputFormat *fmt = av_probe_input_format(&pd, 1); - if(!fmt) - { - qWarning("DecoderFFmpeg: usupported format"); - return false; - } - qDebug("DecoderFFmpeg: detected format: %s", fmt->long_name); - qDebug("=%s=", fmt->name); - -#if (LIBAVFORMAT_VERSION_INT >= ((52<<16)+(105<<8)+0)) - m_stream = avio_alloc_context(m_input_buf, INPUT_BUFFER_SIZE, 0, this, ffmpeg_read, NULL, ffmpeg_seek); - if(!m_stream) - { - qWarning("DecoderFFmpeg: unable to initialize I/O callbacks"); - return false; - } - m_stream->seekable = !input()->isSequential(); -#else - m_stream = (ByteIOContext *)av_malloc(sizeof(ByteIOContext)); - init_put_byte(m_stream, m_input_buf, INPUT_BUFFER_SIZE, 0, this, ffmpeg_read, NULL, ffmpeg_seek); - m_stream->is_streamed = input()->isSequential(); -#endif - m_stream->max_packet_size = INPUT_BUFFER_SIZE; - - AVFormatParameters ap; - memset(&ap, 0, sizeof(ap)); - - if(av_open_input_stream(&ic, m_stream, m_path.toLocal8Bit(), fmt, &ap) != 0) - { - qDebug("DecoderFFmpeg: av_open_input_stream() failed"); - return false; - } - av_find_stream_info(ic); - if(ic->pb) - ic->pb->eof_reached = 0; - - if (input()->isSequential()) - { - QMap<Qmmp::MetaData, QString> metaData; - AVMetadataTag *album = av_metadata_get(ic->metadata,"album",0,0); - if(!album) - album = av_metadata_get(ic->metadata,"WM/AlbumTitle",0,0); - AVMetadataTag *artist = av_metadata_get(ic->metadata,"artist",0,0); - if(!artist) - artist = av_metadata_get(ic->metadata,"author",0,0); - AVMetadataTag *comment = av_metadata_get(ic->metadata,"comment",0,0); - AVMetadataTag *genre = av_metadata_get(ic->metadata,"genre",0,0); - AVMetadataTag *title = av_metadata_get(ic->metadata,"title",0,0); - AVMetadataTag *year = av_metadata_get(ic->metadata,"WM/Year",0,0); - if(!year) - year = av_metadata_get(ic->metadata,"year",0,0); - if(!year) - year = av_metadata_get(ic->metadata,"date",0,0); - AVMetadataTag *track = av_metadata_get(ic->metadata,"track",0,0); - if(!track) - track = av_metadata_get(ic->metadata,"WM/Track",0,0); - if(!track) - track = av_metadata_get(ic->metadata,"WM/TrackNumber",0,0); - - if(album) - metaData.insert(Qmmp::ALBUM, QString::fromUtf8(album->value).trimmed()); - if(artist) - metaData.insert(Qmmp::ARTIST, QString::fromUtf8(artist->value).trimmed()); - if(comment) - metaData.insert(Qmmp::COMMENT, QString::fromUtf8(comment->value).trimmed()); - if(genre) - metaData.insert(Qmmp::GENRE, QString::fromUtf8(genre->value).trimmed()); - if(title) - metaData.insert(Qmmp::TITLE, QString::fromUtf8(title->value).trimmed()); - if(year) - metaData.insert(Qmmp::YEAR, year->value); - if(track) - metaData.insert(Qmmp::TRACK, track->value); - metaData.insert(Qmmp::URL, m_path); - addMetaData(metaData); - } - - ic->flags |= AVFMT_FLAG_GENPTS; - av_read_play(ic); - for (wma_idx = 0; wma_idx < (int)ic->nb_streams; wma_idx++) - { - c = ic->streams[wma_idx]->codec; -#if LIBAVCODEC_VERSION_MAJOR < 53 - if (c->codec_type == CODEC_TYPE_AUDIO) -#else - if (c->codec_type == AVMEDIA_TYPE_AUDIO) -#endif - break; - } - - if (c->channels > 0) - c->request_channels = qMin(2, c->channels); - else - c->request_channels = 2; - -#if (LIBAVCODEC_VERSION_INT >= ((52<<16)+(101<<8)+0)) - av_dump_format(ic,0,0,0); -#else - dump_format(ic,0,0,0); -#endif - AVCodec *codec = avcodec_find_decoder(c->codec_id); - - if (!codec) - { - qWarning("DecoderFFmpeg: unsupported codec for output stream"); - return false; - } - - if (avcodec_open(c, codec) < 0) - { - qWarning("DecoderFFmpeg: error while opening codec for output stream"); - return false; - } - - m_totalTime = input()->isSequential() ? 0 : ic->duration * 1000 / AV_TIME_BASE; - m_output_buf = (uint8_t *)av_malloc(AVCODEC_MAX_AUDIO_FRAME_SIZE*2); - -#if (LIBAVCODEC_VERSION_INT >= ((52<<16)+(20<<8)+0)) - if(c->codec_id == CODEC_ID_SHORTEN) //ffmpeg bug workaround - m_totalTime = 0; -#endif - -#if (LIBAVUTIL_VERSION_INT >= ((50<<16)+(38<<8)+0)) - if(c->sample_fmt == AV_SAMPLE_FMT_S32) - configure(c->sample_rate, c->request_channels, Qmmp::PCM_S32LE); - else - configure(c->sample_rate, c->request_channels, Qmmp::PCM_S16LE); -#else - if(c->sample_fmt == SAMPLE_FMT_S32) - configure(c->sample_rate, c->request_channels, Qmmp::PCM_S32LE); - else - configure(c->sample_rate, c->request_channels, Qmmp::PCM_S16LE); -#endif - if(ic->bit_rate) - m_bitrate = ic->bit_rate/1000; - if(c->bit_rate) - m_bitrate = c->bit_rate/1000; - qDebug("DecoderFFmpeg: initialize succes"); - return true; -} - - -qint64 DecoderFFmpeg::totalTime() -{ - return m_totalTime; -} - -int DecoderFFmpeg::bitrate() -{ - return m_bitrate; -} - -qint64 DecoderFFmpeg::read(char *audio, qint64 maxSize) -{ - m_skipBytes = 0; - if (m_skip) - { - while(m_temp_pkt.size) - ffmpeg_decode(m_output_buf); - m_output_at = 0; - m_skip = false; - } - if(!m_output_at) - fillBuffer(); - if(!m_output_at) - return 0; - qint64 len = qMin(m_output_at, maxSize); - memcpy(audio, m_output_buf, len); - m_output_at -= len; - memmove(m_output_buf, m_output_buf + len, m_output_at); - return len; -} - -qint64 DecoderFFmpeg::ffmpeg_decode(uint8_t *audio) -{ - int out_size = AVCODEC_MAX_AUDIO_FRAME_SIZE * 2; - if((m_pkt.stream_index == wma_idx)) - { -#if (LIBAVCODEC_VERSION_INT >= ((52<<16)+(23<<8)+0)) - int l = avcodec_decode_audio3(c, (int16_t *)(audio), &out_size, &m_temp_pkt); -#else - int l = avcodec_decode_audio2(c, (int16_t *)(audio), &out_size, m_temp_pkt.data, m_temp_pkt.size); -#endif - if(c->bit_rate) - m_bitrate = c->bit_rate/1000; - if(l < 0) - return l; - m_temp_pkt.data += l; - m_temp_pkt.size -= l; - } - if (!m_temp_pkt.size && m_pkt.data) - av_free_packet(&m_pkt); - - return out_size; -} - -void DecoderFFmpeg::seek(qint64 pos) -{ - int64_t timestamp = int64_t(pos)*AV_TIME_BASE/1000; - if (ic->start_time != (qint64)AV_NOPTS_VALUE) - timestamp += ic->start_time; - m_seekTime = timestamp; - av_seek_frame(ic, -1, timestamp, AVSEEK_FLAG_BACKWARD); - if(m_pkt.size) - m_skip = true; -} - -void DecoderFFmpeg::fillBuffer() -{ - while(!m_output_at) - { - if(!m_temp_pkt.size) - { - if (av_read_frame(ic, &m_pkt) < 0) - { - m_temp_pkt.size = 0; - break; - } - m_temp_pkt.size = m_pkt.size; - m_temp_pkt.data = m_pkt.data; - - if(m_pkt.stream_index != wma_idx) - { - if(m_pkt.data) - av_free_packet(&m_pkt); - m_temp_pkt.size = 0; - continue; - } - if(m_seekTime && c->codec_id == CODEC_ID_APE) - { - int64_t rescaledPts = av_rescale(m_pkt.pts, - AV_TIME_BASE * (int64_t) - ic->streams[m_pkt.stream_index]->time_base.num, - ic->streams[m_pkt.stream_index]->time_base.den); - m_skipBytes = (m_seekTime - rescaledPts) * c->sample_rate * 4 / AV_TIME_BASE; - } - else - m_skipBytes = 0; - m_seekTime = 0; - } - - if(m_skipBytes > 0 && c->codec_id == CODEC_ID_APE) - { - while (m_skipBytes > 0) - { - m_output_at = ffmpeg_decode(m_output_buf); - if(m_output_at < 0) - break; - m_skipBytes -= m_output_at; - } - - if(m_skipBytes < 0) - { - qint64 size = m_output_at; - m_output_at = - m_skipBytes; - m_output_at = m_output_at/4*4; - memmove(m_output_buf, (m_output_buf + size - m_output_at), m_output_at); - m_skipBytes = 0; - } - } - else - m_output_at = ffmpeg_decode(m_output_buf); - - if(m_output_at < 0) - { - m_output_at = 0; - m_temp_pkt.size = 0; - - if(c->codec_id == CODEC_ID_SHORTEN) - { - if(m_pkt.data) - av_free_packet(&m_pkt); - m_pkt.data = 0; - break; - } - continue; - } - else if(m_output_at == 0) - { - if(c->codec_id == CODEC_ID_SHORTEN) - continue; - - if(m_pkt.data) - av_free_packet(&m_pkt); - m_pkt.data = 0; - break; - } - } -} - -#endif diff --git a/src/plugins/Input/ffmpeg/decoder_ffmpeg.h b/src/plugins/Input/ffmpeg/decoder_ffmpeg.h index 97497c22b..7ef63b5bc 100644 --- a/src/plugins/Input/ffmpeg/decoder_ffmpeg.h +++ b/src/plugins/Input/ffmpeg/decoder_ffmpeg.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2006-2012 by Ilya Kotov * + * Copyright (C) 2006-2013 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -18,16 +18,14 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ -#ifndef __decoder_ffmeg_h -#define __decoder_ffmeg_h +#ifndef DECODER_FFMPEG_H +#define DECODER_FFMPEG_H extern "C"{ #include <libavformat/avformat.h> #include <libavcodec/avcodec.h> #include <libavutil/mathematics.h> -#if (LIBAVUTIL_VERSION_INT >= ((51<<16)+(32<<8)+0)) #include <libavutil/dict.h> -#endif } @@ -68,25 +66,10 @@ private: int64_t m_seekTime; qint64 m_skipBytes; -#if (LIBAVCODEC_VERSION_INT >= ((53<<16)+(34<<8)+0)) qint64 ffmpeg_decode(); AVIOContext *m_stream; AVFrame *m_decoded_frame; - -#else - qint64 ffmpeg_decode(uint8_t *audio); - bool m_skip; - -#if (LIBAVCODEC_VERSION_INT >= ((52<<16)+(102<<8)+0)) - AVIOContext *m_stream; -#else - ByteIOContext *m_stream; -#endif - - uint8_t *m_output_buf; - -#endif }; -#endif // __decoder_ffmpeg_h +#endif // DECODER_FFMPEG_H diff --git a/src/plugins/Input/ffmpeg/decoderffmpegfactory.cpp b/src/plugins/Input/ffmpeg/decoderffmpegfactory.cpp index 1184621d5..02588a92c 100644 --- a/src/plugins/Input/ffmpeg/decoderffmpegfactory.cpp +++ b/src/plugins/Input/ffmpeg/decoderffmpegfactory.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2008-2012 by Ilya Kotov * + * Copyright (C) 2008-2013 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -24,9 +24,7 @@ extern "C"{ #include <libavformat/avformat.h> #include <libavcodec/avcodec.h> -#if (LIBAVUTIL_VERSION_INT >= ((51<<16)+(32<<8)+0)) #include <libavutil/dict.h> -#endif } #include "ffmpegmetadatamodel.h" @@ -135,7 +133,6 @@ Decoder *DecoderFFmpegFactory::create(const QString &path, QIODevice *input) QList<FileInfo *> DecoderFFmpegFactory::createPlayList(const QString &fileName, bool useMetaData) { -#if (LIBAVCODEC_VERSION_INT >= ((53<<16)+(34<<8)+0)) QList <FileInfo*> list; avcodec_register_all(); avformat_network_init(); @@ -189,61 +186,6 @@ QList<FileInfo *> DecoderFFmpegFactory::createPlayList(const QString &fileName, } info->setLength(in->duration/AV_TIME_BASE); avformat_close_input(&in); -#else - QList <FileInfo*> list; - avcodec_init(); - avcodec_register_all(); - av_register_all(); - AVFormatContext *in = 0; - - if (av_open_input_file(&in, fileName.toLocal8Bit(), 0, 0, 0) < 0) - { - qDebug("DecoderFFmpegFactory: unable to open file"); - return list; - } - FileInfo *info = new FileInfo(fileName); - av_find_stream_info(in); - - if (useMetaData) - { - AVMetadataTag *album = av_metadata_get(in->metadata,"album",0,0); - if(!album) - album = av_metadata_get(in->metadata,"WM/AlbumTitle",0,0); - AVMetadataTag *artist = av_metadata_get(in->metadata,"artist",0,0); - if(!artist) - artist = av_metadata_get(in->metadata,"author",0,0); - AVMetadataTag *comment = av_metadata_get(in->metadata,"comment",0,0); - AVMetadataTag *genre = av_metadata_get(in->metadata,"genre",0,0); - AVMetadataTag *title = av_metadata_get(in->metadata,"title",0,0); - AVMetadataTag *year = av_metadata_get(in->metadata,"WM/Year",0,0); - if(!year) - year = av_metadata_get(in->metadata,"year",0,0); - if(!year) - year = av_metadata_get(in->metadata,"date",0,0); - AVMetadataTag *track = av_metadata_get(in->metadata,"track",0,0); - if(!track) - track = av_metadata_get(in->metadata,"WM/Track",0,0); - if(!track) - track = av_metadata_get(in->metadata,"WM/TrackNumber",0,0); - - if(album) - info->setMetaData(Qmmp::ALBUM, QString::fromUtf8(album->value).trimmed()); - if(artist) - info->setMetaData(Qmmp::ARTIST, QString::fromUtf8(artist->value).trimmed()); - if(comment) - info->setMetaData(Qmmp::COMMENT, QString::fromUtf8(comment->value).trimmed()); - if(genre) - info->setMetaData(Qmmp::GENRE, QString::fromUtf8(genre->value).trimmed()); - if(title) - info->setMetaData(Qmmp::TITLE, QString::fromUtf8(title->value).trimmed()); - if(year) - info->setMetaData(Qmmp::YEAR, year->value); - if(track) - info->setMetaData(Qmmp::TRACK, track->value); - } - info->setLength(in->duration/AV_TIME_BASE); - av_close_input_file(in); -#endif list << info; return list; } diff --git a/src/plugins/Input/ffmpeg/decoderffmpegfactory.h b/src/plugins/Input/ffmpeg/decoderffmpegfactory.h index 39a4bc37b..a668c8608 100644 --- a/src/plugins/Input/ffmpeg/decoderffmpegfactory.h +++ b/src/plugins/Input/ffmpeg/decoderffmpegfactory.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2006-2008 by Ilya Kotov * + * Copyright (C) 2006-2013 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * diff --git a/src/plugins/Input/ffmpeg/ffmpegmetadatamodel.cpp b/src/plugins/Input/ffmpeg/ffmpegmetadatamodel.cpp index 0e9545595..994be83dc 100644 --- a/src/plugins/Input/ffmpeg/ffmpegmetadatamodel.cpp +++ b/src/plugins/Input/ffmpeg/ffmpegmetadatamodel.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2009-2012 by Ilya Kotov * + * Copyright (C) 2009-2013 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -20,8 +20,6 @@ #include "ffmpegmetadatamodel.h" -#if (LIBAVCODEC_VERSION_INT >= ((53<<16)+(34<<8)+0)) - FFmpegMetaDataModel::FFmpegMetaDataModel(const QString &path, QObject *parent) : MetaDataModel(parent) { m_in = 0; @@ -68,56 +66,3 @@ QHash<QString, QString> FFmpegMetaDataModel::audioProperties() } return ap; } - -#else - -FFmpegMetaDataModel::FFmpegMetaDataModel(const QString &path, QObject *parent) : MetaDataModel(parent) -{ - m_in = 0; - avcodec_init(); - avcodec_register_all(); - av_register_all(); - if (av_open_input_file(&m_in, path.toLocal8Bit(), NULL,0, NULL) < 0) - return; - av_find_stream_info(m_in); - av_read_play(m_in); -} - -FFmpegMetaDataModel::~FFmpegMetaDataModel() -{ - if(m_in) - av_close_input_file(m_in); -} - -QHash<QString, QString> FFmpegMetaDataModel::audioProperties() -{ - QHash<QString, QString> ap; - if(!m_in) - return ap; - QString text = QString("%1").arg(int(m_in->duration/AV_TIME_BASE)/60); - text +=":"+QString("%1").arg(int(m_in->duration/AV_TIME_BASE)%60,2,10,QChar('0')); - ap.insert(tr("Length"), text); - ap.insert(tr("File size"), QString("%1 ").arg(m_in->file_size/1024)+" "+tr("KB")); - ap.insert(tr("Bitrate"), QString("%1 "+tr("kbps")).arg(m_in->bit_rate/1000)); - - AVCodecContext *c = 0; - uint wma_idx; - for (wma_idx = 0; wma_idx < m_in->nb_streams; wma_idx++) - { - c = m_in->streams[wma_idx]->codec; -#if LIBAVCODEC_VERSION_MAJOR < 53 - if (c->codec_type == CODEC_TYPE_AUDIO) -#else - if (c->codec_type == AVMEDIA_TYPE_AUDIO) -#endif - break; - } - if (c) - { - ap.insert(tr("Sample rate"), QString("%1 " + tr("Hz")).arg(c->sample_rate)); - ap.insert(tr("Channels"), QString("%1").arg(c->channels)); - } - return ap; -} - -#endif diff --git a/src/plugins/Input/ffmpeg/ffmpegmetadatamodel.h b/src/plugins/Input/ffmpeg/ffmpegmetadatamodel.h index df2aa9be7..d2e3e4e87 100644 --- a/src/plugins/Input/ffmpeg/ffmpegmetadatamodel.h +++ b/src/plugins/Input/ffmpeg/ffmpegmetadatamodel.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2009-2012 by Ilya Kotov * + * Copyright (C) 2009-2013 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * diff --git a/src/plugins/Input/ffmpeg/settingsdialog.cpp b/src/plugins/Input/ffmpeg/settingsdialog.cpp index 25c9902d0..ab9c22007 100644 --- a/src/plugins/Input/ffmpeg/settingsdialog.cpp +++ b/src/plugins/Input/ffmpeg/settingsdialog.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2008-2012 by Ilya Kotov * + * Copyright (C) 2008-2013 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -20,15 +20,12 @@ #include <QSettings> #include <QStringList> - #include <qmmp/qmmp.h> extern "C"{ #include <libavformat/avformat.h> #include <libavcodec/avcodec.h> -#if (LIBAVUTIL_VERSION_INT >= ((51<<16)+(32<<8)+0)) #include <libavutil/dict.h> -#endif } #include "settingsdialog.h" @@ -67,11 +64,7 @@ SettingsDialog::SettingsDialog(QWidget *parent) ui.mkaCheckBox->setEnabled(avcodec_find_decoder(CODEC_ID_TRUEHD)); ui.mkaCheckBox->setChecked(filters.contains("*.mka") && avcodec_find_decoder(CODEC_ID_TRUEHD)); ui.vqfCheckBox->setEnabled(avcodec_find_decoder(CODEC_ID_TWINVQ)); -#if (LIBAVCODEC_VERSION_INT >= ((53<<16)+(42<<8)+4)) ui.vqfCheckBox->setChecked(filters.contains("*.vqf") && avcodec_find_decoder(CODEC_ID_TWINVQ)); -#else - ui.vqfCheckBox->hide(); -#endif } SettingsDialog::~SettingsDialog() |
