私は一種のビデオプレーヤーに取り組んでいますが、特定の時間間隔でフレームが表示される「再生」機能の実装に問題があります。
ボタンまたはスライダーを使用したフレームのスキップは正常に機能しますが、次のコードは機能しません。さらに、GUI スレッドをブロックしているようで、最後のフレームのみを表示します。
void Player::play()
{
for(int i = currentFrame_; i < replay_->getHeader().numberOfFrames; ++i)
{
setFrame(i); // load and send frame i
msleep(33); // wait 33 ms
}
}
void Player::setFrame(int frameNumber)
{
currentFrame_ = frameNumber;
replay_->setCurrentFrame(currentFrame_); // load currentFrame into buffer
updateFrame(); // send it to the GUI to be shown
}
void Player::updateFrame()
{
ReplayFrame colorFrame;
colorFrame = replay_->getColorFrame();
emit colorFrameEvent(static_cast<unsigned char *>(colorFrame.getData())); // this is connected to MainWindow::showFrame(unsigned char *)
}
次のコードは正常に機能することに注意してください。
// In main window, called upon loading a replay
QObject::connect(ui->sliderFrames, SIGNAL(valueChanged(int)), kp, SLOT(setFrame(int)));
したがって、スライダーを動かすと、実際には対応するフレームが表示されます。