22 QThread *m_affinityThread =
nullptr;
23 std::mutex m_workerLock;
27 explicit Demuxer(QObject *parent) : QObject(nullptr) {
28 m_affinityThread =
new QThread;
30 this->moveToThread(m_affinityThread);
31 m_affinityThread->start();
35 qDebug() <<
"Destroy Demuxer";
36 m_affinityThread->quit();
42 std::unique_lock lock(m_workerLock);
49 std::unique_lock lock(m_workerLock);
53 PONY_THREAD_SAFE
int skipPicture(
const std::function<
bool(qreal)> &predicate) {
54 std::unique_lock lock(m_workerLock);
61 std::unique_lock lock(m_workerLock);
69 std::unique_lock lock(m_workerLock);
73 PONY_THREAD_SAFE
int skipSample(
const std::function<
bool(qreal)> &predicate) {
74 std::unique_lock lock(m_workerLock);
82 std::unique_lock lock(m_workerLock);
89 std::unique_lock lock(m_workerLock);
96 std::unique_lock lock(m_workerLock);
100 return {u
"没有打开的文件"_qs};
109 std::unique_lock lock(m_workerLock);
115 std::unique_lock lock(m_workerLock);
116 return m_forward && m_forward->
hasVideo();
127 std::unique_lock lock(m_workerLock);
132 std::unique_lock lock(m_workerLock);
133 return m_worker !=
nullptr;
141 std::unique_lock lock(m_workerLock);
149 std::unique_lock lock(m_workerLock);
150 qDebug() <<
"Start Decoder";
159 std::unique_lock lock(m_workerLock);
173 std::unique_lock lock(m_workerLock);
194 m_worker->
seek(secs);
211 qDebug() <<
"Demuxer Open file" << QString::fromUtf8(fn);
213 std::unique_lock lock(m_workerLock);
215 qWarning() <<
"Already open file:" << m_worker->
filename.c_str();
223 m_worker = m_forward;
224 }
catch (std::runtime_error &ex) {
225 qWarning() <<
"Error opening file:" << ex.what();
227 m_backward =
nullptr;
235 qDebug() <<
"Open file success.";
247 std::unique_lock lock(m_workerLock);
248 m_worker = m_backward;
260 std::unique_lock lock(m_workerLock);
261 m_worker = m_forward;
266 std::unique_lock lock(m_workerLock);
268 qDebug() <<
"Close file" << m_worker->
filename.c_str();
272 m_forward->deleteLater();
277 m_backward->deleteLater();
278 m_backward =
nullptr;
281 qWarning() <<
"Try to close file while no file has been opened.";
286 std::unique_lock lock(m_workerLock);
Definition: frame.hpp:145
解码器调度器, 将Packet分配给解码器进一步解码成Frame 这个类是RAII的
Definition: dispatcher.hpp:151
qreal getAudionLength() const
Definition: dispatcher.hpp:292
QStringList getTracks()
Definition: dispatcher.hpp:309
void setAudioIndex(StreamIndex i)
Definition: dispatcher.hpp:320
bool hasVideo() override
Definition: dispatcher.hpp:329
void setAudioOutputFormat(PonyAudioFormat format) override
Definition: dispatcher.hpp:343
qreal getVideoLength() const
Definition: dispatcher.hpp:296
void statePause() override
Definition: dispatcher.hpp:234
void flush() override
Definition: dispatcher.hpp:240
Definition: dispatcher.hpp:81
virtual PONY_THREAD_SAFE qreal frontSample()
Definition: dispatcher.hpp:130
virtual void statePause()
Definition: dispatcher.hpp:108
const std::string filename
Definition: dispatcher.hpp:84
virtual void setTrack(int i)
Definition: dispatcher.hpp:134
virtual PONY_THREAD_SAFE VideoFrameRef getPicture()
Definition: dispatcher.hpp:122
virtual void seek(qreal secs)
Definition: dispatcher.hpp:120
virtual int skipPicture(const std::function< bool(qreal)> &function)
Definition: dispatcher.hpp:126
virtual void test_onWork()=0
virtual void stateResume()
Definition: dispatcher.hpp:116
virtual PonyAudioFormat getAudioInputFormat()=0
virtual void flush()
Definition: dispatcher.hpp:112
virtual int skipSample(const std::function< bool(qreal)> &function)
Definition: dispatcher.hpp:132
virtual PONY_THREAD_SAFE qreal frontPicture()
Definition: dispatcher.hpp:124
virtual void setEnableAudio(bool enable)
Definition: dispatcher.hpp:138
virtual PONY_THREAD_SAFE AudioFrame getSample()
Definition: dispatcher.hpp:128
Definition: demuxer.hpp:14
PONY_THREAD_SAFE int skipSample(const std::function< bool(qreal)> &predicate)
Definition: demuxer.hpp:73
PONY_GUARD_BY(FRAME) void flush()
Definition: demuxer.hpp:140
PONY_THREAD_SAFE int skipPicture(const std::function< bool(qreal)> &predicate)
Definition: demuxer.hpp:53
qreal frontPicture()
Definition: demuxer.hpp:48
void setAudioIndex(StreamIndex index)
Definition: demuxer.hpp:202
void close()
Definition: demuxer.hpp:265
PONY_THREAD_SAFE void start()
Definition: demuxer.hpp:148
qreal frontSample()
Definition: demuxer.hpp:68
void forward()
Definition: demuxer.hpp:259
~Demuxer() override
Definition: demuxer.hpp:34
qreal videoDuration()
Definition: demuxer.hpp:88
AudioFrame getSample()
Definition: demuxer.hpp:60
void test_onWork()
Definition: demuxer.hpp:291
Demuxer(QObject *parent)
Definition: demuxer.hpp:27
PonyAudioFormat getInputFormat()
Definition: demuxer.hpp:158
void seek(qreal secs)
Definition: demuxer.hpp:193
void openFileResult(PonyPlayer::OpenFileResultType result, QPrivateSignal)
PONY_THREAD_SAFE bool isFileOpen()
Definition: demuxer.hpp:131
PONY_THREAD_SAFE bool isBackward()
Definition: demuxer.hpp:108
void setTrack(int i)
Definition: demuxer.hpp:285
void openFile(const std::string &fn)
Definition: demuxer.hpp:210
QStringList getTracks()
Definition: demuxer.hpp:95
void backward()
Definition: demuxer.hpp:246
VideoFrameRef getPicture()
Definition: demuxer.hpp:41
void setOutputFormat(PonyAudioFormat format)
Definition: demuxer.hpp:172
PONY_THREAD_SAFE void pause()
Definition: demuxer.hpp:126
void setEnableAudio(bool enable)
Definition: demuxer.hpp:154
PONY_THREAD_SAFE bool hasVideo()
Definition: demuxer.hpp:114
qreal audioDuration()
Definition: demuxer.hpp:81
反向解码器调度器
Definition: dispatcher.hpp:386
void setAudioOutputFormat(PonyAudioFormat format) override
Definition: dispatcher.hpp:543
PONY_THREAD_SAFE void statePause() override
Definition: dispatcher.hpp:479
PONY_THREAD_SAFE void flush() override
Definition: dispatcher.hpp:485
constexpr const StreamIndex DEFAULT_STREAM_INDEX
Definition: dispatcher.hpp:76
unsigned int StreamIndex
Definition: dispatcher.hpp:75
OpenFileResultType
Definition: dispatcher.hpp:32
@ FAILED
打开文件失败
Definition: dispatcher.hpp:33
constexpr PonyThread MAIN
Definition: ponyplayer.h:47
constexpr PonyThread DECODER
Definition: ponyplayer.h:46
const PonyAudioFormat DEFAULT_AUDIO_FORMAT
Definition: audioformat.hpp:164
constexpr PonyThread FRAME
Definition: ponyplayer.h:50
#define PONY_CONDITION(description)
Definition: ponyplayer.h:94
#define PONY_THREAD_AFFINITY(thread)
Definition: ponyplayer.h:95