25c7a118f
62bd8c317
8a6f98263
b917024aa
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
24 25
26
27
28 29 30
31 32 33 34 35 36 37
38 39 40 41 42
43 44 45 ***************************************************************************/ #ifndef LISTWIDGET_H #define LISTWIDGET_H #include <QWidget> #include <QDir> #include <QContextMenuEvent> #include <QPen> #include "listwidgetdrawer.h" class QFont; class QFontMetrics; class QMenu; class QAction; class QTimer; class PlayListModel; class Skin; class PlayListItem; class QmmpUiSettings; class PlayListHeader; class HorizontalSlider; namespace PlayListPopup{ class PopupWidget; } /** @author Ilya Kotov <forkotov02@ya.ru> */ class ListWidget : public QWidget { Q_OBJECT public: ListWidget(QWidget *parent = nullptr); ~ListWidget(); /*! * Returns count of currently visible rows. */ int visibleRows() const; /*! * Returns index of the first visible item. */ int firstVisibleIndex() const; int anchorIndex() const; void /*************************************************************************** * Based on mq3 and madplay projects * * * * Copyright (c) 2000-2001 Brad Hughes <bhughes@trolltech.com> * * Copyright (C) 2000-2004 Robert Leslie <rob@mars.org> * * Copyright (C) 2009-2018 Ilya Kotov forkotov02@ya.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., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ #ifndef DECODER_MAD_H #define DECODER_MAD_H #include <mad.h> #include <qmmp/decoder.h> #include "decodermpegfactory.h" class DecoderMAD : public Decoder { public: DecoderMAD(QIODevice *i); virtual ~DecoderMAD(); // standard decoder API bool initialize() override; qint64 totalTime() const override; int bitrate() const override; qint64 read(unsigned char *data, qint64 size) override; void seek(qint64) override; private: //LAME header struct LameHeader { unsigned char revision; unsigned char flags; mad_fixed_t peak; unsigned short start_delay; unsigned short end_padding; qint8 gain; }; // helper functions bool decodeFrame(); qint64 madOutputFloat(float *data, qint64 samples); bool fillBuffer(); void deinit(); bool findHeader(); bool findXingHeader(struct mad_bitptr, unsigned int bitlen); LameHeader *findLameHeader(struct mad_bitptr ptr, unsigned int bitlen); uint findID3v2(uchar *data, ulong size); bool m_inited, m_eof; qint64 m_totalTime; int m_channels, m_skip_frames; uint m_bitrate; long m_freq, m_len; // file input buffer char *m_input_buf; qint64 m_input_bytes; // MAD decoder //xing header struct XingHeader { int flags; unsigned long frames; unsigned long bytes; unsigned char toc[100]; long scale; LameHeader *lame; XingHeader() { flags = 0; frames = 0; bytes = 0; scale = 0; lame = nullptr; } }; XingHeader m_xing; enum { XING_FRAMES = 0x0001, XING_BYTES = 0x0002, XING_TOC = 0x0004, XING_SCALE = 0x0008 }; struct mad_stream m_stream; struct mad_frame m_frame; struct mad_synth m_synth; qint64 m_skip_bytes, m_play_bytes; }; #endif // DECODER_MAD_H